{"version":3,"file":"js/9.a8305ab2.js","mappings":"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","sources":["webpack://MailMonitor/./src/views/Account/Login/Login.vue","webpack://MailMonitor/./src/views/Account/Login/MicrosoftLogin.vue","webpack://MailMonitor/../src/telemetry/performance/PerformanceEvent.ts","webpack://MailMonitor/../src/utils/Constants.ts","webpack://MailMonitor/../src/authority/AuthorityType.ts","webpack://MailMonitor/../src/authority/ProtocolMode.ts","webpack://MailMonitor/../src/error/AuthError.ts","webpack://MailMonitor/../src/error/ServerError.ts","webpack://MailMonitor/../src/error/InteractionRequiredAuthError.ts","webpack://MailMonitor/../src/error/ClientAuthError.ts","webpack://MailMonitor/../src/utils/StringUtils.ts","webpack://MailMonitor/../src/account/ClientInfo.ts","webpack://MailMonitor/../src/cache/entities/AccountEntity.ts","webpack://MailMonitor/../src/utils/BrowserConstants.ts","webpack://MailMonitor/../src/cache/CryptoKeyStore.ts","webpack://MailMonitor/../src/error/JoseHeaderError.ts","webpack://MailMonitor/../src/crypto/JoseHeader.ts","webpack://MailMonitor/../src/utils/MathUtils.ts","webpack://MailMonitor/../src/crypto/GuidGenerator.ts","webpack://MailMonitor/../src/utils/BrowserStringUtils.ts","webpack://MailMonitor/../src/encode/Base64Encode.ts","webpack://MailMonitor/../src/encode/Base64Decode.ts","webpack://MailMonitor/../src/error/BrowserAuthError.ts","webpack://MailMonitor/../src/crypto/PkceGenerator.ts","webpack://MailMonitor/../src/crypto/ModernBrowserCrypto.ts","webpack://MailMonitor/../src/crypto/MsrBrowserCrypto.ts","webpack://MailMonitor/../src/crypto/MsBrowserCrypto.ts","webpack://MailMonitor/../src/error/BrowserConfigurationAuthError.ts","webpack://MailMonitor/../src/crypto/BrowserCrypto.ts","webpack://MailMonitor/../src/cache/DatabaseStorage.ts","webpack://MailMonitor/../src/cache/MemoryStorage.ts","webpack://MailMonitor/../src/cache/AsyncMemoryStorage.ts","webpack://MailMonitor/../src/logger/Logger.ts","webpack://MailMonitor/../src/crypto/CryptoOps.ts","webpack://MailMonitor/../src/account/CcsCredential.ts","webpack://MailMonitor/../src/telemetry/performance/PerformanceClient.ts","webpack://MailMonitor/../src/telemetry/performance/StubPerformanceClient.ts","webpack://MailMonitor/../src/crypto/ICrypto.ts","webpack://MailMonitor/../src/cache/entities/CredentialEntity.ts","webpack://MailMonitor/../src/cache/entities/IdTokenEntity.ts","webpack://MailMonitor/../src/error/ClientConfigurationError.ts","webpack://MailMonitor/../src/request/ScopeSet.ts","webpack://MailMonitor/../src/account/AuthToken.ts","webpack://MailMonitor/../src/packageMetadata.ts","webpack://MailMonitor/../src/cache/CacheManager.ts","webpack://MailMonitor/../src/utils/TimeUtils.ts","webpack://MailMonitor/../src/cache/entities/AccessTokenEntity.ts","webpack://MailMonitor/../src/cache/entities/RefreshTokenEntity.ts","webpack://MailMonitor/../src/cache/entities/AppMetadataEntity.ts","webpack://MailMonitor/../src/cache/entities/ServerTelemetryEntity.ts","webpack://MailMonitor/../src/cache/entities/AuthorityMetadataEntity.ts","webpack://MailMonitor/../src/cache/entities/ThrottlingEntity.ts","webpack://MailMonitor/../src/utils/ProtocolUtils.ts","webpack://MailMonitor/../src/cache/entities/CacheRecord.ts","webpack://MailMonitor/../src/authority/AuthorityOptions.ts","webpack://MailMonitor/../src/cache/BrowserStorage.ts","webpack://MailMonitor/../src/url/UrlString.ts","webpack://MailMonitor/../src/utils/BrowserProtocolUtils.ts","webpack://MailMonitor/../src/cache/BrowserCacheManager.ts","webpack://MailMonitor/../src/config/ClientConfiguration.ts","webpack://MailMonitor/../src/network/INetworkModule.ts","webpack://MailMonitor/../src/network/FetchClient.ts","webpack://MailMonitor/../src/network/XhrClient.ts","webpack://MailMonitor/../src/utils/BrowserUtils.ts","webpack://MailMonitor/../src/navigation/NavigationClient.ts","webpack://MailMonitor/../src/config/Configuration.ts","webpack://MailMonitor/../src/event/EventType.ts","webpack://MailMonitor/../src/event/EventHandler.ts","webpack://MailMonitor/../src/crypto/PopTokenGenerator.ts","webpack://MailMonitor/../src/network/ThrottlingUtils.ts","webpack://MailMonitor/../src/network/NetworkManager.ts","webpack://MailMonitor/../src/request/RequestValidator.ts","webpack://MailMonitor/../src/request/RequestParameterBuilder.ts","webpack://MailMonitor/../src/client/BaseClient.ts","webpack://MailMonitor/../src/cache/persistence/TokenCacheContext.ts","webpack://MailMonitor/../src/response/ResponseHandler.ts","webpack://MailMonitor/../src/client/AuthorizationCodeClient.ts","webpack://MailMonitor/../src/authority/OpenIdConfigResponse.ts","webpack://MailMonitor/../src/authority/AuthorityMetadata.ts","webpack://MailMonitor/../src/authority/CloudInstanceDiscoveryResponse.ts","webpack://MailMonitor/../src/authority/CloudInstanceDiscoveryErrorResponse.ts","webpack://MailMonitor/../src/authority/RegionDiscovery.ts","webpack://MailMonitor/../src/error/NativeAuthError.ts","webpack://MailMonitor/../src/authority/Authority.ts","webpack://MailMonitor/../src/authority/AuthorityFactory.ts","webpack://MailMonitor/../src/telemetry/server/ServerTelemetryManager.ts","webpack://MailMonitor/../src/interaction_client/BaseInteractionClient.ts","webpack://MailMonitor/../src/interaction_client/StandardInteractionClient.ts","webpack://MailMonitor/../src/client/RefreshTokenClient.ts","webpack://MailMonitor/../src/client/SilentFlowClient.ts","webpack://MailMonitor/../src/interaction_client/SilentCacheClient.ts","webpack://MailMonitor/../src/interaction_client/NativeInteractionClient.ts","webpack://MailMonitor/../src/broker/nativeBroker/NativeMessageHandler.ts","webpack://MailMonitor/../src/interaction_handler/InteractionHandler.ts","webpack://MailMonitor/../src/interaction_client/PopupClient.ts","webpack://MailMonitor/../src/interaction_handler/RedirectHandler.ts","webpack://MailMonitor/../src/interaction_client/RedirectClient.ts","webpack://MailMonitor/../src/interaction_handler/SilentHandler.ts","webpack://MailMonitor/../src/interaction_client/SilentIframeClient.ts","webpack://MailMonitor/../src/interaction_client/SilentRefreshClient.ts","webpack://MailMonitor/../src/cache/TokenCache.ts","webpack://MailMonitor/../src/interaction_client/HybridSpaAuthorizationCodeClient.ts","webpack://MailMonitor/../src/interaction_client/SilentAuthCodeClient.ts","webpack://MailMonitor/../src/telemetry/BrowserPerformanceMeasurement.ts","webpack://MailMonitor/../src/telemetry/BrowserPerformanceClient.ts","webpack://MailMonitor/../src/app/ClientApplication.ts","webpack://MailMonitor/../src/app/PublicClientApplication.ts","webpack://MailMonitor/./src/views/Account/Login/msalconfig.js","webpack://MailMonitor/./src/views/Account/Login/MicrosoftLogin.vue?14b9","webpack://MailMonitor/./src/views/Account/Login/Login.vue?b57f","webpack://MailMonitor/./src/views/Account/Login/index.js"],"sourcesContent":["\n Login\n \n \n \n \n \n \n \n \n \n \n Login\n \n \n \n \n \n \n \n \n \n \n Forgot password?\n \n \n \n \n Need an account?\n \n \n Sign Up!\n \n \n \n \n\n\n\n","/* eslint-disable */\n\n \n \n \n \n Sign in with Microsoft\n \n \n\n\n\n\n\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Enumeration of operations that are instrumented by have their performance measured by the PerformanceClient.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum PerformanceEvents {\r\n\r\n /**\r\n * acquireTokenByCode API (msal-browser and msal-node).\r\n * Used to acquire tokens by trading an authorization code against the token endpoint.\r\n */\r\n AcquireTokenByCode = \"acquireTokenByCode\",\r\n\r\n /**\r\n * acquireTokenByRefreshToken API (msal-browser and msal-node).\r\n * Used to renew an access token using a refresh token against the token endpoint.\r\n */\r\n AcquireTokenByRefreshToken = \"acquireTokenByRefreshToken\",\r\n\r\n /**\r\n * acquireTokenSilent API (msal-browser and msal-node).\r\n * Used to silently acquire a new access token (from the cache or the network).\r\n */\r\n AcquireTokenSilent = \"acquireTokenSilent\",\r\n\r\n /**\r\n * acquireTokenSilentAsync (msal-browser).\r\n * Internal API for acquireTokenSilent.\r\n */\r\n AcquireTokenSilentAsync = \"acquireTokenSilentAsync\",\r\n\r\n /**\r\n * acquireTokenPopup (msal-browser).\r\n * Used to acquire a new access token interactively through pop ups\r\n */\r\n AcquireTokenPopup = \"acquireTokenPopup\",\r\n\r\n /**\r\n * getPublicKeyThumbprint API in CryptoOpts class (msal-browser).\r\n * Used to generate a public/private keypair and generate a public key thumbprint for pop requests.\r\n */\r\n CryptoOptsGetPublicKeyThumbprint = \"cryptoOptsGetPublicKeyThumbprint\",\r\n\r\n /**\r\n * signJwt API in CryptoOpts class (msal-browser).\r\n * Used to signed a pop token.\r\n */\r\n CryptoOptsSignJwt = \"cryptoOptsSignJwt\",\r\n\r\n /**\r\n * acquireToken API in the SilentCacheClient class (msal-browser).\r\n * Used to read access tokens from the cache.\r\n */\r\n SilentCacheClientAcquireToken = \"silentCacheClientAcquireToken\",\r\n\r\n /**\r\n * acquireToken API in the SilentIframeClient class (msal-browser).\r\n * Used to acquire a new set of tokens from the authorize endpoint in a hidden iframe.\r\n */\r\n SilentIframeClientAcquireToken = \"silentIframeClientAcquireToken\",\r\n\r\n /**\r\n * acquireToken API in SilentRereshClient (msal-browser).\r\n * Used to acquire a new set of tokens from the token endpoint using a refresh token.\r\n */\r\n SilentRefreshClientAcquireToken = \"silentRefreshClientAcquireToken\",\r\n\r\n /**\r\n * ssoSilent API (msal-browser).\r\n * Used to silently acquire an authorization code and set of tokens using a hidden iframe.\r\n */\r\n SsoSilent = \"ssoSilent\",\r\n\r\n /**\r\n * getDiscoveredAuthority API in StandardInteractionClient class (msal-browser).\r\n * Used to load authority metadata for a request.\r\n */\r\n StandardInteractionClientGetDiscoveredAuthority = \"standardInteractionClientGetDiscoveredAuthority\",\r\n\r\n /**\r\n * acquireToken APIs in msal-browser.\r\n * Used to make an /authorize endpoint call with native brokering enabled.\r\n */\r\n FetchAccountIdWithNativeBroker = \"fetchAccountIdWithNativeBroker\",\r\n\r\n /**\r\n * acquireToken API in NativeInteractionClient class (msal-browser).\r\n * Used to acquire a token from Native component when native brokering is enabled.\r\n */\r\n NativeInteractionClientAcquireToken = \"nativeInteractionClientAcquireToken\",\r\n /**\r\n * Time spent creating default headers for requests to token endpoint\r\n */\r\n BaseClientCreateTokenRequestHeaders = \"baseClientCreateTokenRequestHeaders\",\r\n /**\r\n * Used to measure the time taken for completing embedded-broker handshake (PW-Broker).\r\n */\r\n BrokerHandhshake = \"brokerHandshake\",\r\n /**\r\n * acquireTokenByRefreshToken API in BrokerClientApplication (PW-Broker) .\r\n */\r\n AcquireTokenByRefreshTokenInBroker = \"acquireTokenByRefreshTokenInBroker\",\r\n /**\r\n * Time taken for token acquisition by broker\r\n */\r\n AcquireTokenByBroker = \"acquireTokenByBroker\",\r\n\r\n /**\r\n * Time spent on the network for refresh token acquisition\r\n */\r\n RefreshTokenClientExecuteTokenRequest = \"refreshTokenClientExecuteTokenRequest\",\r\n\r\n /**\r\n * Time taken for acquiring refresh token , records RT size\r\n */\r\n RefreshTokenClientAcquireToken = \"refreshTokenClientAcquireToken\",\r\n\r\n /**\r\n * Time taken for acquiring cached refresh token\r\n */\r\n RefreshTokenClientAcquireTokenWithCachedRefreshToken = \"refreshTokenClientAcquireTokenWithCachedRefreshToken\",\r\n\r\n /**\r\n * acquireTokenByRefreshToken API in RefreshTokenClient (msal-common).\r\n */\r\n RefreshTokenClientAcquireTokenByRefreshToken = \"refreshTokenClientAcquireTokenByRefreshToken\",\r\n\r\n /**\r\n * Helper function to create token request body in RefreshTokenClient (msal-common).\r\n */\r\n RefreshTokenClientCreateTokenRequestBody = \"refreshTokenClientCreateTokenRequestBody\",\r\n\r\n /**\r\n * acquireTokenFromCache (msal-browser).\r\n * Internal API for acquiring token from cache\r\n */\r\n AcquireTokenFromCache = \"acquireTokenFromCache\",\r\n\r\n /**\r\n * acquireTokenBySilentIframe (msal-browser).\r\n * Internal API for acquiring token by silent Iframe\r\n */\r\n AcquireTokenBySilentIframe = \"acquireTokenBySilentIframe\",\r\n\r\n /**\r\n * Internal API for initializing base request in BaseInteractionClient (msal-browser)\r\n */\r\n InitializeBaseRequest = \"initializeBaseRequest\",\r\n\r\n /**\r\n * Internal API for initializing silent request in SilentCacheClient (msal-browser)\r\n */\r\n InitializeSilentRequest = \"initializeSilentRequest\",\r\n\r\n InitializeClientApplication = \"initializeClientApplication\",\r\n\r\n /**\r\n * Helper function in SilentIframeClient class (msal-browser).\r\n */\r\n SilentIframeClientTokenHelper = \"silentIframeClientTokenHelper\",\r\n\r\n /**\r\n * SilentHandler\r\n */\r\n SilentHandlerInitiateAuthRequest = \"silentHandlerInitiateAuthRequest\",\r\n SilentHandlerMonitorIframeForHash = \"silentHandlerMonitorIframeForHash\",\r\n SilentHandlerLoadFrame = \"silentHandlerLoadFrame\",\r\n\r\n /**\r\n * Helper functions in StandardInteractionClient class (msal-browser)\r\n */\r\n StandardInteractionClientCreateAuthCodeClient = \"standardInteractionClientCreateAuthCodeClient\",\r\n StandardInteractionClientGetClientConfiguration = \"standardInteractionClientGetClientConfiguration\",\r\n StandardInteractionClientInitializeAuthorizationRequest = \"standardInteractionClientInitializeAuthorizationRequest\",\r\n StandardInteractionClientInitializeAuthorizationCodeRequest = \"standardInteractionClientInitializeAuthorizationCodeRequest\",\r\n\r\n /**\r\n * getAuthCodeUrl API (msal-browser and msal-node).\r\n */\r\n GetAuthCodeUrl = \"getAuthCodeUrl\",\r\n\r\n /**\r\n * Functions from InteractionHandler (msal-browser)\r\n */\r\n HandleCodeResponseFromServer = \"handleCodeResponseFromServer\",\r\n HandleCodeResponseFromHash = \"handleCodeResponseFromHash\",\r\n UpdateTokenEndpointAuthority = \"updateTokenEndpointAuthority\",\r\n\r\n /**\r\n * APIs in Authorization Code Client (msal-common)\r\n */\r\n AuthClientAcquireToken = \"authClientAcquireToken\",\r\n AuthClientExecuteTokenRequest = \"authClientExecuteTokenRequest\",\r\n AuthClientCreateTokenRequestBody = \"authClientCreateTokenRequestBody\",\r\n AuthClientCreateQueryString = \"authClientCreateQueryString\",\r\n\r\n /**\r\n * Generate functions in PopTokenGenerator (msal-common)\r\n */\r\n PopTokenGenerateCnf = \"popTokenGenerateCnf\",\r\n PopTokenGenerateKid = \"popTokenGenerateKid\",\r\n\r\n /**\r\n * handleServerTokenResponse API in ResponseHandler (msal-common)\r\n */\r\n HandleServerTokenResponse = \"handleServerTokenResponse\",\r\n\r\n /**\r\n * Authority functions\r\n */\r\n AuthorityFactoryCreateDiscoveredInstance = \"authorityFactoryCreateDiscoveredInstance\",\r\n AuthorityResolveEndpointsAsync = \"authorityResolveEndpointsAsync\",\r\n AuthorityGetCloudDiscoveryMetadataFromNetwork = \"authorityGetCloudDiscoveryMetadataFromNetwork\",\r\n AuthorityUpdateCloudDiscoveryMetadata = \"authorityUpdateCloudDiscoveryMetadata\",\r\n AuthorityGetEndpointMetadataFromNetwork = \"authorityGetEndpointMetadataFromNetwork\",\r\n AuthorityUpdateEndpointMetadata = \"authorityUpdateEndpointMetadata\",\r\n AuthorityUpdateMetadataWithRegionalInformation = \"authorityUpdateMetadataWithRegionalInformation\",\r\n\r\n /**\r\n * Region Discovery functions\r\n */\r\n RegionDiscoveryDetectRegion = \"regionDiscoveryDetectRegion\",\r\n RegionDiscoveryGetRegionFromIMDS = \"regionDiscoveryGetRegionFromIMDS\",\r\n RegionDiscoveryGetCurrentVersion = \"regionDiscoveryGetCurrentVersion\",\r\n\r\n AcquireTokenByCodeAsync = \"acquireTokenByCodeAsync\",\r\n\r\n GetEndpointMetadataFromNetwork = \"getEndpointMetadataFromNetwork\",\r\n GetCloudDiscoveryMetadataFromNetworkMeasurement = \"getCloudDiscoveryMetadataFromNetworkMeasurement\",\r\n\r\n HandleRedirectPromiseMeasurement= \"handleRedirectPromiseMeasurement\",\r\n\r\n UpdateCloudDiscoveryMetadataMeasurement = \"updateCloudDiscoveryMetadataMeasurement\",\r\n\r\n UsernamePasswordClientAcquireToken = \"usernamePasswordClientAcquireToken\",\r\n\r\n NativeMessageHandlerHandshake = \"nativeMessageHandlerHandshake\",\r\n\r\n /**\r\n * Cache operations\r\n */\r\n ClearTokensAndKeysWithClaims = \"clearTokensAndKeysWithClaims\",\r\n}\r\n\r\n/**\r\n * State of the performance event.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum PerformanceEventStatus {\r\n NotStarted,\r\n InProgress,\r\n Completed\r\n}\r\n\r\n/**\r\n * Fields whose value will not change throughout a request\r\n */\r\nexport type StaticFields = {\r\n /**\r\n * The Silent Token Cache Lookup Policy\r\n *\r\n * @type {?(number | undefined)}\r\n */\r\n cacheLookupPolicy?: number | undefined,\r\n\r\n /**\r\n * Size of the id token\r\n *\r\n * @type {number}\r\n */\r\n idTokenSize?: number,\r\n\r\n /**\r\n *\r\n * Size of the access token\r\n *\r\n * @type {number}\r\n */\r\n\r\n accessTokenSize?: number,\r\n\r\n /**\r\n *\r\n * Size of the refresh token\r\n *\r\n * @type {number}\r\n */\r\n\r\n refreshTokenSize?: number | undefined,\r\n\r\n /**\r\n * Application name as specified by the app.\r\n *\r\n * @type {?string}\r\n */\r\n appName?: string,\r\n\r\n /**\r\n * Application version as specified by the app.\r\n *\r\n * @type {?string}\r\n */\r\n appVersion?: string,\r\n\r\n /**\r\n * The following are fields that may be emitted in native broker scenarios\r\n */\r\n extensionId?: string,\r\n extensionVersion?: string\r\n matsBrokerVersion?: string;\r\n matsAccountJoinOnStart?: string;\r\n matsAccountJoinOnEnd?: string;\r\n matsDeviceJoin?: string;\r\n matsPromptBehavior?: string;\r\n matsApiErrorCode?: number;\r\n matsUiVisible?: boolean;\r\n matsSilentCode?: number;\r\n matsSilentBiSubCode?: number;\r\n matsSilentMessage?: string;\r\n matsSilentStatus?: number;\r\n matsHttpStatus?: number\r\n matsHttpEventCount?: number;\r\n httpVerToken?: string;\r\n httpVerAuthority?: string;\r\n\r\n /**\r\n * Native broker fields\r\n */\r\n allowNativeBroker?: boolean;\r\n extensionInstalled?: boolean;\r\n extensionHandshakeTimeoutMs?: number;\r\n extensionHandshakeTimedOut?: boolean;\r\n};\r\n\r\n/**\r\n * Fields whose value may change throughout a request\r\n */\r\nexport type Counters = {\r\n visibilityChangeCount?: number;\r\n incompleteSubsCount?: number;\r\n /**\r\n * Amount of times queued in the JS event queue.\r\n *\r\n * @type {?number}\r\n */\r\n queuedCount?: number\r\n /**\r\n * Amount of manually completed queue events.\r\n *\r\n * @type {?number}\r\n */\r\n queuedManuallyCompletedCount?: number;\r\n};\r\n\r\nexport type SubMeasurement = {\r\n name: PerformanceEvents,\r\n startTimeMs: number\r\n};\r\n\r\n/**\r\n * Performance measurement taken by the library, including metadata about the request and application.\r\n *\r\n * @export\r\n * @typedef {PerformanceEvent}\r\n */\r\nexport type PerformanceEvent = StaticFields & Counters & {\r\n /**\r\n * Unique id for the event\r\n *\r\n * @type {string}\r\n */\r\n eventId: string,\r\n\r\n /**\r\n * State of the perforance measure.\r\n *\r\n * @type {PerformanceEventStatus}\r\n */\r\n status: PerformanceEventStatus,\r\n\r\n /**\r\n * Login authority used for the request\r\n *\r\n * @type {string}\r\n */\r\n authority: string,\r\n\r\n /**\r\n * Client id for the application\r\n *\r\n * @type {string}\r\n */\r\n clientId: string\r\n\r\n /**\r\n * Correlation ID used for the request\r\n *\r\n * @type {string}\r\n */\r\n correlationId: string,\r\n\r\n /**\r\n * End-to-end duration in milliseconds.\r\n * @date 3/22/2022 - 3:40:05 PM\r\n *\r\n * @type {number}\r\n */\r\n durationMs?: number,\r\n\r\n /**\r\n * Visibility of the page when the event completed.\r\n * Read from: https://developer.mozilla.org/docs/Web/API/Page_Visibility_API\r\n *\r\n * @type {?(string | null)}\r\n */\r\n endPageVisibility?: string | null,\r\n\r\n /**\r\n * Whether the result was retrieved from the cache.\r\n *\r\n * @type {(boolean | null)}\r\n */\r\n fromCache?: boolean | null,\r\n\r\n /**\r\n * Event name (usually in the form of classNameFunctionName)\r\n *\r\n * @type {PerformanceEvents}\r\n */\r\n name: PerformanceEvents,\r\n\r\n /**\r\n * Visibility of the page when the event completed.\r\n * Read from: https://developer.mozilla.org/docs/Web/API/Page_Visibility_API\r\n *\r\n * @type {?(string | null)}\r\n */\r\n startPageVisibility?: string | null,\r\n\r\n /**\r\n * Unix millisecond timestamp when the event was initiated.\r\n *\r\n * @type {number}\r\n */\r\n startTimeMs: number,\r\n\r\n /**\r\n * Whether or the operation completed successfully.\r\n *\r\n * @type {(boolean | null)}\r\n */\r\n success?: boolean | null,\r\n\r\n /**\r\n * Add specific error code in case of failure\r\n *\r\n * @type {string}\r\n */\r\n errorCode?: string,\r\n\r\n /**\r\n * Add specific sub error code in case of failure\r\n *\r\n * @type {string}\r\n */\r\n subErrorCode?: string,\r\n\r\n /**\r\n * Name of the library used for the operation.\r\n *\r\n * @type {string}\r\n */\r\n libraryName: string,\r\n\r\n /**\r\n * Version of the library used for the operation.\r\n *\r\n * @type {string}\r\n */\r\n libraryVersion: string,\r\n\r\n /**\r\n * Whether the response is from a native component (e.g., WAM)\r\n *\r\n * @type {?boolean}\r\n */\r\n isNativeBroker?: boolean,\r\n\r\n /**\r\n * Request ID returned from the response\r\n *\r\n * @type {?string}\r\n */\r\n requestId?: string\r\n\r\n /**\r\n * Cache lookup policy\r\n *\r\n * @type {?number}\r\n */\r\n cacheLookupPolicy?: number | undefined,\r\n\r\n /**\r\n * Amount of time spent in the JS queue in milliseconds.\r\n *\r\n * @type {?number}\r\n */\r\n queuedTimeMs?: number,\r\n\r\n /**\r\n * Sub-measurements for internal use. To be deleted before flushing.\r\n */\r\n incompleteSubMeasurements?: Map\r\n};\r\n\r\nexport const IntFields: ReadonlySet = new Set([\r\n \"accessTokenSize\",\r\n \"durationMs\",\r\n \"idTokenSize\",\r\n \"matsSilentStatus\",\r\n \"matsHttpStatus\",\r\n \"refreshTokenSize\",\r\n \"queuedTimeMs\",\r\n \"startTimeMs\",\r\n \"status\",\r\n]);\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nexport const Constants = {\r\n LIBRARY_NAME: \"MSAL.JS\",\r\n SKU: \"msal.js.common\",\r\n // Prefix for all library cache entries\r\n CACHE_PREFIX: \"msal\",\r\n // default authority\r\n DEFAULT_AUTHORITY: \"https://login.microsoftonline.com/common/\",\r\n DEFAULT_AUTHORITY_HOST: \"login.microsoftonline.com\",\r\n DEFAULT_COMMON_TENANT: \"common\",\r\n // ADFS String\r\n ADFS: \"adfs\",\r\n DSTS: \"dstsv2\",\r\n // Default AAD Instance Discovery Endpoint\r\n AAD_INSTANCE_DISCOVERY_ENDPT: \"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=\",\r\n // CIAM URL\r\n CIAM_AUTH_URL: \".ciamlogin.com\",\r\n AAD_TENANT_DOMAIN_SUFFIX: \".onmicrosoft.com\",\r\n // Resource delimiter - used for certain cache entries\r\n RESOURCE_DELIM: \"|\",\r\n // Placeholder for non-existent account ids/objects\r\n NO_ACCOUNT: \"NO_ACCOUNT\",\r\n // Claims\r\n CLAIMS: \"claims\",\r\n // Consumer UTID\r\n CONSUMER_UTID: \"9188040d-6c67-4c5b-b112-36a304b66dad\",\r\n // Default scopes\r\n OPENID_SCOPE: \"openid\",\r\n PROFILE_SCOPE: \"profile\",\r\n OFFLINE_ACCESS_SCOPE: \"offline_access\",\r\n EMAIL_SCOPE: \"email\",\r\n // Default response type for authorization code flow\r\n CODE_RESPONSE_TYPE: \"code\",\r\n CODE_GRANT_TYPE: \"authorization_code\",\r\n RT_GRANT_TYPE: \"refresh_token\",\r\n FRAGMENT_RESPONSE_MODE: \"fragment\",\r\n S256_CODE_CHALLENGE_METHOD: \"S256\",\r\n URL_FORM_CONTENT_TYPE: \"application/x-www-form-urlencoded;charset=utf-8\",\r\n AUTHORIZATION_PENDING: \"authorization_pending\",\r\n NOT_DEFINED: \"not_defined\",\r\n EMPTY_STRING: \"\",\r\n NOT_APPLICABLE: \"N/A\",\r\n FORWARD_SLASH: \"/\",\r\n IMDS_ENDPOINT: \"http://169.254.169.254/metadata/instance/compute/location\",\r\n IMDS_VERSION: \"2020-06-01\",\r\n IMDS_TIMEOUT: 2000,\r\n AZURE_REGION_AUTO_DISCOVER_FLAG: \"TryAutoDetect\",\r\n REGIONAL_AUTH_PUBLIC_CLOUD_SUFFIX: \"login.microsoft.com\",\r\n REGIONAL_AUTH_NON_MSI_QUERY_STRING: \"allowestsrnonmsi=true\",\r\n KNOWN_PUBLIC_CLOUDS: [\"login.microsoftonline.com\", \"login.windows.net\", \"login.microsoft.com\", \"sts.windows.net\"],\r\n TOKEN_RESPONSE_TYPE: \"token\",\r\n ID_TOKEN_RESPONSE_TYPE: \"id_token\",\r\n SHR_NONCE_VALIDITY: 240,\r\n INVALID_INSTANCE: \"invalid_instance\",\r\n};\r\n\r\nexport const OIDC_DEFAULT_SCOPES = [\r\n Constants.OPENID_SCOPE,\r\n Constants.PROFILE_SCOPE,\r\n Constants.OFFLINE_ACCESS_SCOPE\r\n];\r\n\r\nexport const OIDC_SCOPES = [\r\n ...OIDC_DEFAULT_SCOPES,\r\n Constants.EMAIL_SCOPE\r\n];\r\n\r\n/**\r\n * Request header names\r\n */\r\nexport enum HeaderNames {\r\n CONTENT_TYPE = \"Content-Type\",\r\n RETRY_AFTER = \"Retry-After\",\r\n CCS_HEADER = \"X-AnchorMailbox\",\r\n WWWAuthenticate = \"WWW-Authenticate\",\r\n AuthenticationInfo = \"Authentication-Info\",\r\n X_MS_REQUEST_ID = \"x-ms-request-id\",\r\n X_MS_HTTP_VERSION= \"x-ms-httpver\"\r\n}\r\n\r\n/**\r\n * Persistent cache keys MSAL which stay while user is logged in.\r\n */\r\nexport enum PersistentCacheKeys {\r\n ID_TOKEN = \"idtoken\",\r\n CLIENT_INFO = \"client.info\",\r\n ADAL_ID_TOKEN = \"adal.idtoken\",\r\n ERROR = \"error\",\r\n ERROR_DESC = \"error.description\",\r\n ACTIVE_ACCOUNT = \"active-account\", // Legacy active-account cache key, use new key instead\r\n ACTIVE_ACCOUNT_FILTERS = \"active-account-filters\" // new cache entry for active_account for a more robust version for browser\r\n}\r\n\r\n/**\r\n * String constants related to AAD Authority\r\n */\r\nexport enum AADAuthorityConstants {\r\n COMMON = \"common\",\r\n ORGANIZATIONS = \"organizations\",\r\n CONSUMERS = \"consumers\"\r\n}\r\n\r\n/**\r\n * Keys in the hashParams sent by AAD Server\r\n */\r\nexport enum AADServerParamKeys {\r\n CLIENT_ID = \"client_id\",\r\n REDIRECT_URI = \"redirect_uri\",\r\n RESPONSE_TYPE = \"response_type\",\r\n RESPONSE_MODE = \"response_mode\",\r\n GRANT_TYPE = \"grant_type\",\r\n CLAIMS = \"claims\",\r\n SCOPE = \"scope\",\r\n ERROR = \"error\",\r\n ERROR_DESCRIPTION = \"error_description\",\r\n ACCESS_TOKEN = \"access_token\",\r\n ID_TOKEN = \"id_token\",\r\n REFRESH_TOKEN = \"refresh_token\",\r\n EXPIRES_IN = \"expires_in\",\r\n STATE = \"state\",\r\n NONCE = \"nonce\",\r\n PROMPT = \"prompt\",\r\n SESSION_STATE = \"session_state\",\r\n CLIENT_INFO = \"client_info\",\r\n CODE = \"code\",\r\n CODE_CHALLENGE = \"code_challenge\",\r\n CODE_CHALLENGE_METHOD = \"code_challenge_method\",\r\n CODE_VERIFIER = \"code_verifier\",\r\n CLIENT_REQUEST_ID = \"client-request-id\",\r\n X_CLIENT_SKU = \"x-client-SKU\",\r\n X_CLIENT_VER = \"x-client-VER\",\r\n X_CLIENT_OS = \"x-client-OS\",\r\n X_CLIENT_CPU = \"x-client-CPU\",\r\n X_CLIENT_CURR_TELEM = \"x-client-current-telemetry\",\r\n X_CLIENT_LAST_TELEM = \"x-client-last-telemetry\",\r\n X_MS_LIB_CAPABILITY = \"x-ms-lib-capability\",\r\n X_APP_NAME = \"x-app-name\",\r\n X_APP_VER = \"x-app-ver\",\r\n POST_LOGOUT_URI = \"post_logout_redirect_uri\",\r\n ID_TOKEN_HINT = \"id_token_hint\",\r\n DEVICE_CODE = \"device_code\",\r\n CLIENT_SECRET = \"client_secret\",\r\n CLIENT_ASSERTION = \"client_assertion\",\r\n CLIENT_ASSERTION_TYPE = \"client_assertion_type\",\r\n TOKEN_TYPE = \"token_type\",\r\n REQ_CNF = \"req_cnf\",\r\n OBO_ASSERTION = \"assertion\",\r\n REQUESTED_TOKEN_USE = \"requested_token_use\",\r\n ON_BEHALF_OF = \"on_behalf_of\",\r\n FOCI = \"foci\",\r\n CCS_HEADER = \"X-AnchorMailbox\",\r\n RETURN_SPA_CODE = \"return_spa_code\",\r\n NATIVE_BROKER = \"nativebroker\",\r\n LOGOUT_HINT = \"logout_hint\"\r\n}\r\n\r\n/**\r\n * Claims request keys\r\n */\r\nexport enum ClaimsRequestKeys {\r\n ACCESS_TOKEN = \"access_token\",\r\n XMS_CC = \"xms_cc\"\r\n}\r\n\r\n/**\r\n * we considered making this \"enum\" in the request instead of string, however it looks like the allowed list of\r\n * prompt values kept changing over past couple of years. There are some undocumented prompt values for some\r\n * internal partners too, hence the choice of generic \"string\" type instead of the \"enum\"\r\n */\r\nexport const PromptValue = {\r\n LOGIN: \"login\",\r\n SELECT_ACCOUNT: \"select_account\",\r\n CONSENT: \"consent\",\r\n NONE: \"none\",\r\n CREATE: \"create\",\r\n NO_SESSION: \"no_session\"\r\n};\r\n\r\n/**\r\n * SSO Types - generated to populate hints\r\n */\r\nexport enum SSOTypes {\r\n ACCOUNT = \"account\",\r\n SID = \"sid\",\r\n LOGIN_HINT = \"login_hint\",\r\n ID_TOKEN = \"id_token\",\r\n DOMAIN_HINT = \"domain_hint\",\r\n ORGANIZATIONS = \"organizations\",\r\n CONSUMERS = \"consumers\",\r\n ACCOUNT_ID = \"accountIdentifier\",\r\n HOMEACCOUNT_ID = \"homeAccountIdentifier\"\r\n}\r\n\r\n/**\r\n * allowed values for codeVerifier\r\n */\r\nexport const CodeChallengeMethodValues = {\r\n PLAIN: \"plain\",\r\n S256: \"S256\"\r\n};\r\n\r\n/**\r\n * The method used to encode the code verifier for the code challenge parameter. can be one\r\n * of plain or s256. if excluded, code challenge is assumed to be plaintext. for more\r\n * information, see the pkce rcf: https://tools.ietf.org/html/rfc7636\r\n */\r\nexport const CodeChallengeMethodValuesArray: string[] = [\r\n CodeChallengeMethodValues.PLAIN,\r\n CodeChallengeMethodValues.S256\r\n];\r\n\r\n/**\r\n * allowed values for response_mode\r\n */\r\nexport enum ResponseMode {\r\n QUERY = \"query\",\r\n FRAGMENT = \"fragment\",\r\n FORM_POST = \"form_post\"\r\n}\r\n\r\n/**\r\n * allowed grant_type\r\n */\r\nexport enum GrantType {\r\n IMPLICIT_GRANT = \"implicit\",\r\n AUTHORIZATION_CODE_GRANT = \"authorization_code\",\r\n CLIENT_CREDENTIALS_GRANT = \"client_credentials\",\r\n RESOURCE_OWNER_PASSWORD_GRANT = \"password\",\r\n REFRESH_TOKEN_GRANT = \"refresh_token\",\r\n DEVICE_CODE_GRANT = \"device_code\",\r\n JWT_BEARER = \"urn:ietf:params:oauth:grant-type:jwt-bearer\"\r\n}\r\n\r\n/**\r\n * Account types in Cache\r\n */\r\nexport enum CacheAccountType {\r\n MSSTS_ACCOUNT_TYPE = \"MSSTS\",\r\n ADFS_ACCOUNT_TYPE = \"ADFS\",\r\n MSAV1_ACCOUNT_TYPE = \"MSA\",\r\n GENERIC_ACCOUNT_TYPE = \"Generic\" // NTLM, Kerberos, FBA, Basic etc\r\n}\r\n\r\n/**\r\n * Separators used in cache\r\n */\r\nexport enum Separators {\r\n CACHE_KEY_SEPARATOR = \"-\",\r\n CLIENT_INFO_SEPARATOR = \".\"\r\n}\r\n\r\n/**\r\n * Credential Type stored in the cache\r\n */\r\nexport enum CredentialType {\r\n ID_TOKEN = \"IdToken\",\r\n ACCESS_TOKEN = \"AccessToken\",\r\n ACCESS_TOKEN_WITH_AUTH_SCHEME = \"AccessToken_With_AuthScheme\",\r\n REFRESH_TOKEN = \"RefreshToken\",\r\n}\r\n\r\n/**\r\n * Combine all cache types\r\n */\r\nexport enum CacheType {\r\n ADFS = 1001,\r\n MSA = 1002,\r\n MSSTS = 1003,\r\n GENERIC = 1004,\r\n ACCESS_TOKEN = 2001,\r\n REFRESH_TOKEN = 2002,\r\n ID_TOKEN = 2003,\r\n APP_METADATA = 3001,\r\n UNDEFINED = 9999\r\n}\r\n\r\n/**\r\n * More Cache related constants\r\n */\r\nexport const APP_METADATA = \"appmetadata\";\r\nexport const CLIENT_INFO = \"client_info\";\r\nexport const THE_FAMILY_ID = \"1\";\r\n\r\nexport const AUTHORITY_METADATA_CONSTANTS = {\r\n CACHE_KEY: \"authority-metadata\",\r\n REFRESH_TIME_SECONDS: 3600 * 24 // 24 Hours\r\n};\r\n\r\nexport enum AuthorityMetadataSource {\r\n CONFIG = \"config\",\r\n CACHE = \"cache\",\r\n NETWORK = \"network\",\r\n HARDCODED_VALUES= \"hardcoded_values\",\r\n}\r\n\r\nexport const SERVER_TELEM_CONSTANTS = {\r\n SCHEMA_VERSION: 5,\r\n MAX_CUR_HEADER_BYTES: 80, // ESTS limit is 100B, set to 80 to provide a 20B buffer\r\n MAX_LAST_HEADER_BYTES: 330, // ESTS limit is 350B, set to 330 to provide a 20B buffer,\r\n MAX_CACHED_ERRORS: 50, // Limit the number of errors that can be stored to prevent uncontrolled size gains\r\n CACHE_KEY: \"server-telemetry\",\r\n CATEGORY_SEPARATOR: \"|\",\r\n VALUE_SEPARATOR: \",\",\r\n OVERFLOW_TRUE: \"1\",\r\n OVERFLOW_FALSE: \"0\",\r\n UNKNOWN_ERROR: \"unknown_error\"\r\n};\r\n\r\n/**\r\n * Type of the authentication request\r\n */\r\nexport enum AuthenticationScheme {\r\n BEARER = \"Bearer\",\r\n POP = \"pop\",\r\n SSH = \"ssh-cert\"\r\n}\r\n\r\n/**\r\n * Constants related to throttling\r\n */\r\nexport const ThrottlingConstants = {\r\n // Default time to throttle RequestThumbprint in seconds\r\n DEFAULT_THROTTLE_TIME_SECONDS: 60,\r\n // Default maximum time to throttle in seconds, overrides what the server sends back\r\n DEFAULT_MAX_THROTTLE_TIME_SECONDS: 3600,\r\n // Prefix for storing throttling entries\r\n THROTTLING_PREFIX: \"throttling\",\r\n // Value assigned to the x-ms-lib-capability header to indicate to the server the library supports throttling\r\n X_MS_LIB_CAPABILITY_VALUE: \"retry-after, h429\"\r\n};\r\n\r\nexport const Errors = {\r\n INVALID_GRANT_ERROR: \"invalid_grant\",\r\n CLIENT_MISMATCH_ERROR: \"client_mismatch\",\r\n};\r\n\r\n/**\r\n * Password grant parameters\r\n */\r\nexport enum PasswordGrantConstants {\r\n username = \"username\",\r\n password = \"password\"\r\n}\r\n\r\n/**\r\n * Response codes\r\n */\r\nexport enum ResponseCodes {\r\n httpSuccess = 200,\r\n httpBadRequest = 400\r\n}\r\n\r\n/**\r\n * Region Discovery Sources\r\n */\r\nexport enum RegionDiscoverySources {\r\n FAILED_AUTO_DETECTION = \"1\",\r\n INTERNAL_CACHE = \"2\",\r\n ENVIRONMENT_VARIABLE = \"3\",\r\n IMDS = \"4\",\r\n}\r\n\r\n/**\r\n * Region Discovery Outcomes\r\n */\r\nexport enum RegionDiscoveryOutcomes {\r\n CONFIGURED_MATCHES_DETECTED = \"1\",\r\n CONFIGURED_NO_AUTO_DETECTION = \"2\",\r\n CONFIGURED_NOT_DETECTED = \"3\",\r\n AUTO_DETECTION_REQUESTED_SUCCESSFUL = \"4\",\r\n AUTO_DETECTION_REQUESTED_FAILED = \"5\"\r\n}\r\n\r\nexport enum CacheOutcome {\r\n NO_CACHE_HIT = \"0\",\r\n FORCE_REFRESH = \"1\",\r\n NO_CACHED_ACCESS_TOKEN = \"2\",\r\n CACHED_ACCESS_TOKEN_EXPIRED = \"3\",\r\n REFRESH_CACHED_ACCESS_TOKEN = \"4\",\r\n CLAIMS_REQUESTED_CACHE_SKIPPED = \"5\"\r\n}\r\n\r\nexport enum JsonTypes {\r\n Jwt = \"JWT\",\r\n Jwk = \"JWK\",\r\n Pop = \"pop\"\r\n}\r\n\r\nexport const ONE_DAY_IN_MS = 86400000;\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Authority types supported by MSAL.\r\n */\r\nexport enum AuthorityType {\r\n Default,\r\n Adfs,\r\n Dsts,\r\n Ciam\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Protocol modes supported by MSAL.\r\n */\r\nexport enum ProtocolMode {\r\n AAD = \"AAD\",\r\n OIDC = \"OIDC\"\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const AuthErrorMessage = {\r\n unexpectedError: {\r\n code: \"unexpected_error\",\r\n desc: \"Unexpected error in authentication.\"\r\n },\r\n postRequestFailed: {\r\n code: \"post_request_failed\",\r\n desc: \"Post request failed from the network, could be a 4xx/5xx or a network unavailability. Please check the exact error code for details.\"\r\n }\r\n};\r\n\r\n/**\r\n * General error class thrown by the MSAL.js library.\r\n */\r\nexport class AuthError extends Error {\r\n\r\n /**\r\n * Short string denoting error\r\n */\r\n errorCode: string;\r\n\r\n /**\r\n * Detailed description of error\r\n */\r\n errorMessage: string;\r\n\r\n /**\r\n * Describes the subclass of an error\r\n */\r\n subError: string;\r\n\r\n /**\r\n * CorrelationId associated with the error\r\n */\r\n correlationId: string;\r\n\r\n constructor(errorCode?: string, errorMessage?: string, suberror?: string) {\r\n const errorString = errorMessage ? `${errorCode}: ${errorMessage}` : errorCode;\r\n super(errorString);\r\n Object.setPrototypeOf(this, AuthError.prototype);\r\n\r\n this.errorCode = errorCode || Constants.EMPTY_STRING;\r\n this.errorMessage = errorMessage || Constants.EMPTY_STRING;\r\n this.subError = suberror || Constants.EMPTY_STRING;\r\n this.name = \"AuthError\";\r\n }\r\n\r\n setCorrelationId(correlationId: string): void {\r\n this.correlationId = correlationId;\r\n }\r\n\r\n /**\r\n * Creates an error that is thrown when something unexpected happens in the library.\r\n * @param errDesc\r\n */\r\n static createUnexpectedError(errDesc: string): AuthError {\r\n return new AuthError(AuthErrorMessage.unexpectedError.code, `${AuthErrorMessage.unexpectedError.desc}: ${errDesc}`);\r\n }\r\n\r\n /**\r\n * Creates an error for post request failures.\r\n * @param errDesc \r\n * @returns \r\n */\r\n static createPostRequestFailed(errDesc: string): AuthError {\r\n return new AuthError(AuthErrorMessage.postRequestFailed.code, `${AuthErrorMessage.postRequestFailed.desc}: ${errDesc}`);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * Error thrown when there is an error with the server code, for example, unavailability.\r\n */\r\nexport class ServerError extends AuthError {\r\n\r\n constructor(errorCode?: string, errorMessage?: string, subError?: string) {\r\n super(errorCode, errorMessage, subError);\r\n this.name = \"ServerError\";\r\n\r\n Object.setPrototypeOf(this, ServerError.prototype);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"../utils/Constants\";\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * InteractionRequiredServerErrorMessage contains string constants used by error codes and messages returned by the server indicating interaction is required\r\n */\r\nexport const InteractionRequiredServerErrorMessage = [\r\n \"interaction_required\",\r\n \"consent_required\",\r\n \"login_required\"\r\n];\r\n\r\nexport const InteractionRequiredAuthSubErrorMessage = [\r\n \"message_only\",\r\n \"additional_action\",\r\n \"basic_action\",\r\n \"user_password_expired\",\r\n \"consent_required\"\r\n];\r\n\r\n/**\r\n * Interaction required errors defined by the SDK\r\n */\r\nexport const InteractionRequiredAuthErrorMessage = {\r\n noTokensFoundError: {\r\n code: \"no_tokens_found\",\r\n desc: \"No refresh token found in the cache. Please sign-in.\"\r\n },\r\n native_account_unavailable: {\r\n code: \"native_account_unavailable\",\r\n desc: \"The requested account is not available in the native broker. It may have been deleted or logged out. Please sign-in again using an interactive API.\"\r\n }\r\n};\r\n\r\n/**\r\n * Error thrown when user interaction is required.\r\n */\r\nexport class InteractionRequiredAuthError extends AuthError {\r\n /**\r\n * The time the error occured at\r\n */\r\n timestamp: string;\r\n\r\n /**\r\n * TraceId associated with the error\r\n */\r\n traceId: string;\r\n\r\n /**\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-common/docs/claims-challenge.md\r\n * \r\n * A string with extra claims needed for the token request to succeed\r\n * web site: redirect the user to the authorization page and set the extra claims\r\n * web api: include the claims in the WWW-Authenticate header that are sent back to the client so that it knows to request a token with the extra claims\r\n * desktop application or browser context: include the claims when acquiring the token interactively\r\n * app to app context (client_credentials): include the claims in the AcquireTokenByClientCredential request\r\n */\r\n claims: string;\r\n\r\n constructor(errorCode?: string, errorMessage?: string, subError?: string, timestamp?: string, traceId?: string, correlationId?: string, claims?: string) {\r\n super(errorCode, errorMessage, subError);\r\n Object.setPrototypeOf(this, InteractionRequiredAuthError.prototype);\r\n \r\n this.timestamp = timestamp || Constants.EMPTY_STRING;\r\n this.traceId = traceId || Constants.EMPTY_STRING;\r\n this.correlationId = correlationId || Constants.EMPTY_STRING;\r\n this.claims = claims || Constants.EMPTY_STRING;\r\n this.name = \"InteractionRequiredAuthError\";\r\n }\r\n\r\n /**\r\n * Helper function used to determine if an error thrown by the server requires interaction to resolve\r\n * @param errorCode \r\n * @param errorString \r\n * @param subError \r\n */\r\n static isInteractionRequiredError(errorCode?: string, errorString?: string, subError?: string): boolean {\r\n const isInteractionRequiredErrorCode = !!errorCode && InteractionRequiredServerErrorMessage.indexOf(errorCode) > -1;\r\n const isInteractionRequiredSubError = !!subError && InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1;\r\n const isInteractionRequiredErrorDesc = !!errorString && InteractionRequiredServerErrorMessage.some((irErrorCode) => {\r\n return errorString.indexOf(irErrorCode) > -1;\r\n });\r\n\r\n return isInteractionRequiredErrorCode || isInteractionRequiredErrorDesc || isInteractionRequiredSubError;\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the authorization code required for a token request is null or empty.\r\n */\r\n static createNoTokensFoundError(): InteractionRequiredAuthError {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.noTokensFoundError.code, InteractionRequiredAuthErrorMessage.noTokensFoundError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the native broker returns ACCOUNT_UNAVAILABLE status, indicating that the account was removed and interactive sign-in is required\r\n * @returns \r\n */\r\n static createNativeAccountUnavailableError(): InteractionRequiredAuthError {\r\n return new InteractionRequiredAuthError(InteractionRequiredAuthErrorMessage.native_account_unavailable.code, InteractionRequiredAuthErrorMessage.native_account_unavailable.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const ClientAuthErrorMessage = {\r\n clientInfoDecodingError: {\r\n code: \"client_info_decoding_error\",\r\n desc: \"The client info could not be parsed/decoded correctly. Please review the trace to determine the root cause.\"\r\n },\r\n clientInfoEmptyError: {\r\n code: \"client_info_empty_error\",\r\n desc: \"The client info was empty. Please review the trace to determine the root cause.\"\r\n },\r\n tokenParsingError: {\r\n code: \"token_parsing_error\",\r\n desc: \"Token cannot be parsed. Please review stack trace to determine root cause.\"\r\n },\r\n nullOrEmptyToken: {\r\n code: \"null_or_empty_token\",\r\n desc: \"The token is null or empty. Please review the trace to determine the root cause.\"\r\n },\r\n endpointResolutionError: {\r\n code: \"endpoints_resolution_error\",\r\n desc: \"Error: could not resolve endpoints. Please check network and try again.\"\r\n },\r\n networkError: {\r\n code: \"network_error\",\r\n desc: \"Network request failed. Please check network trace to determine root cause.\"\r\n },\r\n unableToGetOpenidConfigError: {\r\n code: \"openid_config_error\",\r\n desc: \"Could not retrieve endpoints. Check your authority and verify the .well-known/openid-configuration endpoint returns the required endpoints.\"\r\n },\r\n hashNotDeserialized: {\r\n code: \"hash_not_deserialized\",\r\n desc: \"The hash parameters could not be deserialized. Please review the trace to determine the root cause.\"\r\n },\r\n blankGuidGenerated: {\r\n code: \"blank_guid_generated\",\r\n desc: \"The guid generated was blank. Please review the trace to determine the root cause.\"\r\n },\r\n invalidStateError: {\r\n code: \"invalid_state\",\r\n desc: \"State was not the expected format. Please check the logs to determine whether the request was sent using ProtocolUtils.setRequestState().\"\r\n },\r\n stateMismatchError: {\r\n code: \"state_mismatch\",\r\n desc: \"State mismatch error. Please check your network. Continued requests may cause cache overflow.\"\r\n },\r\n stateNotFoundError: {\r\n code: \"state_not_found\",\r\n desc: \"State not found\"\r\n },\r\n nonceMismatchError: {\r\n code: \"nonce_mismatch\",\r\n desc: \"Nonce mismatch error. This may be caused by a race condition in concurrent requests.\"\r\n },\r\n nonceNotFoundError: {\r\n code: \"nonce_not_found\",\r\n desc: \"nonce not found\"\r\n },\r\n authTimeNotFoundError: {\r\n code: \"auth_time_not_found\",\r\n desc: \"Max Age was requested and the ID token is missing the auth_time variable.\" +\r\n \" auth_time is an optional claim and is not enabled by default - it must be enabled.\" +\r\n \" See https://aka.ms/msaljs/optional-claims for more information.\"\r\n },\r\n maxAgeTranspiredError: {\r\n code: \"max_age_transpired\",\r\n desc: \"Max Age is set to 0, or too much time has elapsed since the last end-user authentication.\"\r\n },\r\n noTokensFoundError: {\r\n code: \"no_tokens_found\",\r\n desc: \"No tokens were found for the given scopes, and no authorization code was passed to acquireToken. You must retrieve an authorization code before making a call to acquireToken().\"\r\n },\r\n multipleMatchingTokens: {\r\n code: \"multiple_matching_tokens\",\r\n desc: \"The cache contains multiple tokens satisfying the requirements. \" +\r\n \"Call AcquireToken again providing more requirements such as authority or account.\"\r\n },\r\n multipleMatchingAccounts: {\r\n code: \"multiple_matching_accounts\",\r\n desc: \"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account\"\r\n },\r\n multipleMatchingAppMetadata: {\r\n code: \"multiple_matching_appMetadata\",\r\n desc: \"The cache contains multiple appMetadata satisfying the given parameters. Please pass more info to obtain the correct appMetadata\"\r\n },\r\n tokenRequestCannotBeMade: {\r\n code: \"request_cannot_be_made\",\r\n desc: \"Token request cannot be made without authorization code or refresh token.\"\r\n },\r\n appendEmptyScopeError: {\r\n code: \"cannot_append_empty_scope\",\r\n desc: \"Cannot append null or empty scope to ScopeSet. Please check the stack trace for more info.\"\r\n },\r\n removeEmptyScopeError: {\r\n code: \"cannot_remove_empty_scope\",\r\n desc: \"Cannot remove null or empty scope from ScopeSet. Please check the stack trace for more info.\"\r\n },\r\n appendScopeSetError: {\r\n code: \"cannot_append_scopeset\",\r\n desc: \"Cannot append ScopeSet due to error.\"\r\n },\r\n emptyInputScopeSetError: {\r\n code: \"empty_input_scopeset\",\r\n desc: \"Empty input ScopeSet cannot be processed.\"\r\n },\r\n DeviceCodePollingCancelled: {\r\n code: \"device_code_polling_cancelled\",\r\n desc: \"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.\"\r\n },\r\n DeviceCodeExpired: {\r\n code: \"device_code_expired\",\r\n desc: \"Device code is expired.\"\r\n },\r\n DeviceCodeUnknownError: {\r\n code: \"device_code_unknown_error\",\r\n desc: \"Device code stopped polling for unknown reasons.\"\r\n },\r\n NoAccountInSilentRequest: {\r\n code: \"no_account_in_silent_request\",\r\n desc: \"Please pass an account object, silent flow is not supported without account information\"\r\n },\r\n invalidCacheRecord: {\r\n code: \"invalid_cache_record\",\r\n desc: \"Cache record object was null or undefined.\"\r\n },\r\n invalidCacheEnvironment: {\r\n code: \"invalid_cache_environment\",\r\n desc: \"Invalid environment when attempting to create cache entry\"\r\n },\r\n noAccountFound: {\r\n code: \"no_account_found\",\r\n desc: \"No account found in cache for given key.\"\r\n },\r\n CachePluginError: {\r\n code: \"no cache plugin set on CacheManager\",\r\n desc: \"ICachePlugin needs to be set before using readFromStorage or writeFromStorage\"\r\n },\r\n noCryptoObj: {\r\n code: \"no_crypto_object\",\r\n desc: \"No crypto object detected. This is required for the following operation: \"\r\n },\r\n invalidCacheType: {\r\n code: \"invalid_cache_type\",\r\n desc: \"Invalid cache type\"\r\n },\r\n unexpectedAccountType: {\r\n code: \"unexpected_account_type\",\r\n desc: \"Unexpected account type.\"\r\n },\r\n unexpectedCredentialType: {\r\n code: \"unexpected_credential_type\",\r\n desc: \"Unexpected credential type.\"\r\n },\r\n invalidAssertion: {\r\n code: \"invalid_assertion\",\r\n desc: \"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515\"\r\n },\r\n invalidClientCredential: {\r\n code: \"invalid_client_credential\",\r\n desc: \"Client credential (secret, certificate, or assertion) must not be empty when creating a confidential client. An application should at most have one credential\"\r\n },\r\n tokenRefreshRequired: {\r\n code: \"token_refresh_required\",\r\n desc: \"Cannot return token from cache because it must be refreshed. This may be due to one of the following reasons: forceRefresh parameter is set to true, claims have been requested, there is no cached access token or it is expired.\"\r\n },\r\n userTimeoutReached: {\r\n code: \"user_timeout_reached\",\r\n desc: \"User defined timeout for device code polling reached\",\r\n },\r\n tokenClaimsRequired: {\r\n code: \"token_claims_cnf_required_for_signedjwt\",\r\n desc: \"Cannot generate a POP jwt if the token_claims are not populated\"\r\n },\r\n noAuthorizationCodeFromServer: {\r\n code: \"authorization_code_missing_from_server_response\",\r\n desc: \"Server response does not contain an authorization code to proceed\"\r\n },\r\n noAzureRegionDetected: {\r\n code: \"no_azure_region_detected\",\r\n desc: \"No azure region was detected and no fallback was made available\"\r\n },\r\n accessTokenEntityNullError: {\r\n code: \"access_token_entity_null\",\r\n desc: \"Access token entity is null, please check logs and cache to ensure a valid access token is present.\"\r\n },\r\n bindingKeyNotRemovedError: {\r\n code: \"binding_key_not_removed\",\r\n desc: \"Could not remove the credential's binding key from storage.\"\r\n },\r\n logoutNotSupported: {\r\n code: \"end_session_endpoint_not_supported\",\r\n desc: \"Provided authority does not support logout.\"\r\n },\r\n keyIdMissing: {\r\n code: \"key_id_missing\",\r\n desc: \"A keyId value is missing from the requested bound token's cache record and is required to match the token to it's stored binding key.\"\r\n },\r\n noNetworkConnectivity: {\r\n code: \"no_network_connectivity\",\r\n desc: \"No network connectivity. Check your internet connection.\"\r\n },\r\n userCanceledError: {\r\n code: \"user_canceled\",\r\n desc: \"User canceled the flow.\"\r\n }\r\n};\r\n\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nexport class ClientAuthError extends AuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"ClientAuthError\";\r\n\r\n Object.setPrototypeOf(this, ClientAuthError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when client info object doesn't decode correctly.\r\n * @param caughtError\r\n */\r\n static createClientInfoDecodingError(caughtError: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoDecodingError.code,\r\n `${ClientAuthErrorMessage.clientInfoDecodingError.desc} Failed with error: ${caughtError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if the client info is empty.\r\n * @param rawClientInfo\r\n */\r\n static createClientInfoEmptyError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoEmptyError.code,\r\n `${ClientAuthErrorMessage.clientInfoEmptyError.desc}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the id token extraction errors out.\r\n * @param err\r\n */\r\n static createTokenParsingError(caughtExtractionError: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenParsingError.code,\r\n `${ClientAuthErrorMessage.tokenParsingError.desc} Failed with error: ${caughtExtractionError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the id token string is null or empty.\r\n * @param invalidRawTokenString\r\n */\r\n static createTokenNullOrEmptyError(invalidRawTokenString: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.nullOrEmptyToken.code,\r\n `${ClientAuthErrorMessage.nullOrEmptyToken.desc} Raw Token Value: ${invalidRawTokenString}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the endpoint discovery doesn't complete correctly.\r\n */\r\n static createEndpointDiscoveryIncompleteError(errDetail: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.endpointResolutionError.code,\r\n `${ClientAuthErrorMessage.endpointResolutionError.desc} Detail: ${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the fetch client throws\r\n */\r\n static createNetworkError(endpoint: string, errDetail: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.networkError.code,\r\n `${ClientAuthErrorMessage.networkError.desc} | Fetch client threw: ${errDetail} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the openid-configuration endpoint cannot be reached or does not contain the required data\r\n */\r\n static createUnableToGetOpenidConfigError(errDetail: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.unableToGetOpenidConfigError.code,\r\n `${ClientAuthErrorMessage.unableToGetOpenidConfigError.desc} Attempted to retrieve endpoints from: ${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash cannot be deserialized.\r\n * @param hashParamObj\r\n */\r\n static createHashNotDeserializedError(hashParamObj: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.hashNotDeserialized.code,\r\n `${ClientAuthErrorMessage.hashNotDeserialized.desc} Given Object: ${hashParamObj}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the state cannot be parsed.\r\n * @param invalidState\r\n */\r\n static createInvalidStateError(invalidState: string, errorString?: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidStateError.code,\r\n `${ClientAuthErrorMessage.invalidStateError.desc} Invalid State: ${invalidState}, Root Err: ${errorString}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when two states do not match.\r\n */\r\n static createStateMismatchError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.stateMismatchError.code,\r\n ClientAuthErrorMessage.stateMismatchError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the state is not present\r\n * @param missingState\r\n */\r\n static createStateNotFoundError(missingState: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.stateNotFoundError.code,\r\n `${ClientAuthErrorMessage.stateNotFoundError.desc}: ${missingState}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the nonce does not match.\r\n */\r\n static createNonceMismatchError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.nonceMismatchError.code,\r\n ClientAuthErrorMessage.nonceMismatchError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when max_age was provided in the request, but auth_time is not in the token claims\r\n * @param missingNonce\r\n */\r\n static createAuthTimeNotFoundError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.authTimeNotFoundError.code,\r\n ClientAuthErrorMessage.authTimeNotFoundError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when too much time has elapsed since the last end-user authentication\r\n */\r\n static createMaxAgeTranspiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.maxAgeTranspiredError.code,\r\n ClientAuthErrorMessage.maxAgeTranspiredError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the mnonce is not present\r\n * @param missingNonce\r\n */\r\n static createNonceNotFoundError(missingNonce: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.nonceNotFoundError.code,\r\n `${ClientAuthErrorMessage.nonceNotFoundError.desc}: ${missingNonce}`);\r\n }\r\n\r\n /**\r\n * Throws error when multiple tokens are in cache.\r\n */\r\n static createMultipleMatchingTokensInCacheError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingTokens.code,\r\n `${ClientAuthErrorMessage.multipleMatchingTokens.desc}.`);\r\n }\r\n\r\n /**\r\n * Throws error when multiple accounts are in cache for the given params\r\n */\r\n static createMultipleMatchingAccountsInCacheError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingAccounts.code,\r\n ClientAuthErrorMessage.multipleMatchingAccounts.desc);\r\n }\r\n\r\n /**\r\n * Throws error when multiple appMetada are in cache for the given clientId.\r\n */\r\n static createMultipleMatchingAppMetadataInCacheError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingAppMetadata.code,\r\n ClientAuthErrorMessage.multipleMatchingAppMetadata.desc);\r\n }\r\n\r\n /**\r\n * Throws error when no auth code or refresh token is given to ServerTokenRequestParameters.\r\n */\r\n static createTokenRequestCannotBeMadeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenRequestCannotBeMade.code, ClientAuthErrorMessage.tokenRequestCannotBeMade.desc);\r\n }\r\n\r\n /**\r\n * Throws error when attempting to append a null, undefined or empty scope to a set\r\n * @param givenScope\r\n */\r\n static createAppendEmptyScopeToSetError(givenScope: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.appendEmptyScopeError.code, `${ClientAuthErrorMessage.appendEmptyScopeError.desc} Given Scope: ${givenScope}`);\r\n }\r\n\r\n /**\r\n * Throws error when attempting to append a null, undefined or empty scope to a set\r\n * @param givenScope\r\n */\r\n static createRemoveEmptyScopeFromSetError(givenScope: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.removeEmptyScopeError.code, `${ClientAuthErrorMessage.removeEmptyScopeError.desc} Given Scope: ${givenScope}`);\r\n }\r\n\r\n /**\r\n * Throws error when attempting to append null or empty ScopeSet.\r\n * @param appendError\r\n */\r\n static createAppendScopeSetError(appendError: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.appendScopeSetError.code, `${ClientAuthErrorMessage.appendScopeSetError.desc} Detail Error: ${appendError}`);\r\n }\r\n\r\n /**\r\n * Throws error if ScopeSet is null or undefined.\r\n * @param givenScopeSet\r\n */\r\n static createEmptyInputScopeSetError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.emptyInputScopeSetError.code, `${ClientAuthErrorMessage.emptyInputScopeSetError.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if user sets CancellationToken.cancel = true during polling of token endpoint during device code flow\r\n */\r\n static createDeviceCodeCancelledError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodePollingCancelled.code, `${ClientAuthErrorMessage.DeviceCodePollingCancelled.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if device code is expired\r\n */\r\n static createDeviceCodeExpiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodeExpired.code, `${ClientAuthErrorMessage.DeviceCodeExpired.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if device code is expired\r\n */\r\n static createDeviceCodeUnknownError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodeUnknownError.code, `${ClientAuthErrorMessage.DeviceCodeUnknownError.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error when silent requests are made without an account object\r\n */\r\n static createNoAccountInSilentRequestError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.NoAccountInSilentRequest.code, `${ClientAuthErrorMessage.NoAccountInSilentRequest.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error when cache record is null or undefined.\r\n */\r\n static createNullOrUndefinedCacheRecord(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheRecord.code, ClientAuthErrorMessage.invalidCacheRecord.desc);\r\n }\r\n\r\n /**\r\n * Throws error when provided environment is not part of the CloudDiscoveryMetadata object\r\n */\r\n static createInvalidCacheEnvironmentError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheEnvironment.code, ClientAuthErrorMessage.invalidCacheEnvironment.desc);\r\n }\r\n\r\n /**\r\n * Throws error when account is not found in cache.\r\n */\r\n static createNoAccountFoundError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noAccountFound.code, ClientAuthErrorMessage.noAccountFound.desc);\r\n }\r\n\r\n /**\r\n * Throws error if ICachePlugin not set on CacheManager.\r\n */\r\n static createCachePluginError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.CachePluginError.code, `${ClientAuthErrorMessage.CachePluginError.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if crypto object not found.\r\n * @param operationName\r\n */\r\n static createNoCryptoObjectError(operationName: string): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noCryptoObj.code, `${ClientAuthErrorMessage.noCryptoObj.desc}${operationName}`);\r\n }\r\n\r\n /**\r\n * Throws error if cache type is invalid.\r\n */\r\n static createInvalidCacheTypeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheType.code, `${ClientAuthErrorMessage.invalidCacheType.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if unexpected account type.\r\n */\r\n static createUnexpectedAccountTypeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.unexpectedAccountType.code, `${ClientAuthErrorMessage.unexpectedAccountType.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if unexpected credential type.\r\n */\r\n static createUnexpectedCredentialTypeError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.unexpectedCredentialType.code, `${ClientAuthErrorMessage.unexpectedCredentialType.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if client assertion is not valid.\r\n */\r\n static createInvalidAssertionError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidAssertion.code, `${ClientAuthErrorMessage.invalidAssertion.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if client assertion is not valid.\r\n */\r\n static createInvalidCredentialError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.invalidClientCredential.code, `${ClientAuthErrorMessage.invalidClientCredential.desc}`);\r\n }\r\n\r\n /**\r\n * Throws error if token cannot be retrieved from cache due to refresh being required.\r\n */\r\n static createRefreshRequiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenRefreshRequired.code, ClientAuthErrorMessage.tokenRefreshRequired.desc);\r\n }\r\n\r\n /**\r\n * Throws error if the user defined timeout is reached.\r\n */\r\n static createUserTimeoutReachedError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.userTimeoutReached.code, ClientAuthErrorMessage.userTimeoutReached.desc);\r\n }\r\n\r\n /*\r\n * Throws error if token claims are not populated for a signed jwt generation\r\n */\r\n static createTokenClaimsRequiredError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.tokenClaimsRequired.code, ClientAuthErrorMessage.tokenClaimsRequired.desc);\r\n }\r\n\r\n /**\r\n * Throws error when the authorization code is missing from the server response\r\n */\r\n static createNoAuthCodeInServerResponseError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noAuthorizationCodeFromServer.code, ClientAuthErrorMessage.noAuthorizationCodeFromServer.desc);\r\n }\r\n\r\n static createBindingKeyNotRemovedError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.bindingKeyNotRemovedError.code, ClientAuthErrorMessage.bindingKeyNotRemovedError.desc);\r\n }\r\n\r\n /**\r\n * Thrown when logout is attempted for an authority that doesnt have an end_session_endpoint\r\n */\r\n static createLogoutNotSupportedError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.logoutNotSupported.code, ClientAuthErrorMessage.logoutNotSupported.desc);\r\n }\r\n\r\n /**\r\n * Create an error when kid attribute is missing from a PoP token's cache record\r\n */\r\n static createKeyIdMissingError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.keyIdMissing.code, ClientAuthErrorMessage.keyIdMissing.desc);\r\n }\r\n\r\n /**\r\n * Create an error when the client does not have network connectivity\r\n */\r\n static createNoNetworkConnectivityError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.noNetworkConnectivity.code, ClientAuthErrorMessage.noNetworkConnectivity.desc);\r\n }\r\n\r\n /**\r\n * Create an error when the user cancels the flow\r\n */\r\n static createUserCanceledError(): ClientAuthError {\r\n return new ClientAuthError(ClientAuthErrorMessage.userCanceledError.code, ClientAuthErrorMessage.userCanceledError.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { DecodedAuthToken } from \"../account/DecodedAuthToken\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\n\r\n/**\r\n * @hidden\r\n */\r\nexport class StringUtils {\r\n\r\n /**\r\n * decode a JWT\r\n *\r\n * @param authToken\r\n */\r\n static decodeAuthToken(authToken: string): DecodedAuthToken {\r\n if (StringUtils.isEmpty(authToken)) {\r\n throw ClientAuthError.createTokenNullOrEmptyError(authToken);\r\n }\r\n const tokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\r\n const matches = tokenPartsRegex.exec(authToken);\r\n if (!matches || matches.length < 4) {\r\n throw ClientAuthError.createTokenParsingError(`Given token is malformed: ${JSON.stringify(authToken)}`);\r\n }\r\n const crackedToken: DecodedAuthToken = {\r\n header: matches[1],\r\n JWSPayload: matches[2],\r\n JWSSig: matches[3]\r\n };\r\n return crackedToken;\r\n }\r\n\r\n /**\r\n * Check if a string is empty.\r\n *\r\n * @param str\r\n */\r\n static isEmpty(str?: string): boolean {\r\n return (typeof str === \"undefined\" || !str || 0 === str.length);\r\n }\r\n\r\n /**\r\n * Check if stringified object is empty\r\n * @param strObj \r\n */\r\n static isEmptyObj(strObj?: string): boolean {\r\n if (strObj && !StringUtils.isEmpty(strObj)) {\r\n try {\r\n const obj = JSON.parse(strObj);\r\n return Object.keys(obj).length === 0;\r\n } catch (e) {}\r\n }\r\n return true;\r\n }\r\n\r\n static startsWith(str: string, search: string): boolean {\r\n return str.indexOf(search) === 0;\r\n }\r\n\r\n static endsWith(str: string, search: string): boolean {\r\n return (str.length >= search.length) && (str.lastIndexOf(search) === (str.length - search.length));\r\n }\r\n\r\n /**\r\n * Parses string into an object.\r\n *\r\n * @param query\r\n */\r\n static queryStringToObject(query: string): T {\r\n const obj: {} = {};\r\n const params = query.split(\"&\");\r\n const decode = (s: string) => decodeURIComponent(s.replace(/\\+/g, \" \"));\r\n params.forEach((pair) => {\r\n if (pair.trim()) {\r\n const [key, value] = pair.split(/=(.+)/g, 2); // Split on the first occurence of the '=' character\r\n if (key && value) {\r\n obj[decode(key)] = decode(value);\r\n }\r\n }\r\n });\r\n return obj as T;\r\n }\r\n\r\n /**\r\n * Trims entries in an array.\r\n *\r\n * @param arr\r\n */\r\n static trimArrayEntries(arr: Array): Array {\r\n return arr.map(entry => entry.trim());\r\n }\r\n\r\n /**\r\n * Removes empty strings from array\r\n * @param arr\r\n */\r\n static removeEmptyStringsFromArray(arr: Array): Array {\r\n return arr.filter(entry => {\r\n return !StringUtils.isEmpty(entry);\r\n });\r\n }\r\n\r\n /**\r\n * Attempts to parse a string into JSON\r\n * @param str\r\n */\r\n static jsonParseHelper(str: string): T | null {\r\n try {\r\n return JSON.parse(str) as T;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Tests if a given string matches a given pattern, with support for wildcards and queries.\r\n * @param pattern Wildcard pattern to string match. Supports \"*\" for wildcards and \"?\" for queries\r\n * @param input String to match against\r\n */\r\n static matchPattern(pattern: string, input: string): boolean {\r\n /**\r\n * Wildcard support: https://stackoverflow.com/a/3117248/4888559\r\n * Queries: replaces \"?\" in string with escaped \"\\?\" for regex test\r\n */\r\n const regex: RegExp = new RegExp(pattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\*/g, \"[^ ]*\").replace(/\\?/g, \"\\\\\\?\")); // eslint-disable-line security/detect-non-literal-regexp\r\n\r\n return regex.test(input);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { Separators, Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * Client info object which consists of two IDs. Need to add more info here.\r\n */\r\nexport type ClientInfo = {\r\n uid: string,\r\n utid: string\r\n};\r\n\r\n/**\r\n * Function to build a client info object from server clientInfo string\r\n * @param rawClientInfo\r\n * @param crypto\r\n */\r\nexport function buildClientInfo(rawClientInfo: string, crypto: ICrypto): ClientInfo {\r\n if (StringUtils.isEmpty(rawClientInfo)) {\r\n throw ClientAuthError.createClientInfoEmptyError();\r\n }\r\n\r\n try {\r\n const decodedClientInfo: string = crypto.base64Decode(rawClientInfo);\r\n return JSON.parse(decodedClientInfo) as ClientInfo;\r\n } catch (e) {\r\n throw ClientAuthError.createClientInfoDecodingError((e as ClientAuthError).message);\r\n }\r\n}\r\n\r\n/**\r\n * Function to build a client info object from cached homeAccountId string\r\n * @param homeAccountId \r\n */\r\nexport function buildClientInfoFromHomeAccountId(homeAccountId: string): ClientInfo {\r\n if (StringUtils.isEmpty(homeAccountId)) {\r\n throw ClientAuthError.createClientInfoDecodingError(\"Home account ID was empty.\");\r\n }\r\n const clientInfoParts: string[] = homeAccountId.split(Separators.CLIENT_INFO_SEPARATOR, 2);\r\n return {\r\n uid: clientInfoParts[0],\r\n utid: clientInfoParts.length < 2 ? Constants.EMPTY_STRING : clientInfoParts[1]\r\n };\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport {\r\n Separators,\r\n CacheAccountType,\r\n Constants,\r\n} from \"../../utils/Constants\";\r\nimport { Authority } from \"../../authority/Authority\";\r\nimport { ICrypto } from \"../../crypto/ICrypto\";\r\nimport { buildClientInfo } from \"../../account/ClientInfo\";\r\nimport { StringUtils } from \"../../utils/StringUtils\";\r\nimport { AccountInfo } from \"../../account/AccountInfo\";\r\nimport { ClientAuthError } from \"../../error/ClientAuthError\";\r\nimport { AuthorityType } from \"../../authority/AuthorityType\";\r\nimport { Logger } from \"../../logger/Logger\";\r\nimport { TokenClaims } from \"../../account/TokenClaims\";\r\nimport { ProtocolMode } from \"../../authority/ProtocolMode\";\r\n\r\n/**\r\n * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).\r\n *\r\n * Key : Value Schema\r\n *\r\n * Key: --\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * localAccountId: Original tenant-specific accountID, usually used for legacy cases\r\n * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt\r\n * authorityType: Accounts authority type as a string\r\n * clientInfo: Full base64 encoded client info received from ESTS\r\n * name: Full name for the account, including given name and family name\r\n * lastModificationTime: last time this entity was modified in the cache\r\n * lastModificationApp:\r\n * idTokenClaims: Object containing claims parsed from ID token\r\n * nativeAccountId: Account identifier on the native device\r\n * }\r\n */\r\nexport class AccountEntity {\r\n homeAccountId: string;\r\n environment: string;\r\n realm: string;\r\n localAccountId: string;\r\n username: string;\r\n authorityType: string;\r\n clientInfo?: string;\r\n name?: string;\r\n lastModificationTime?: string;\r\n lastModificationApp?: string;\r\n cloudGraphHostName?: string;\r\n msGraphHost?: string;\r\n idTokenClaims?: TokenClaims;\r\n nativeAccountId?: string;\r\n\r\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\r\n generateAccountId(): string {\r\n const accountId: Array = [this.homeAccountId, this.environment];\r\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate Account Cache Key as per the schema: --\r\n */\r\n generateAccountKey(): string {\r\n return AccountEntity.generateAccountCacheKey({\r\n homeAccountId: this.homeAccountId,\r\n environment: this.environment,\r\n tenantId: this.realm,\r\n username: this.username,\r\n localAccountId: this.localAccountId\r\n });\r\n }\r\n\r\n /**\r\n * Returns the AccountInfo interface for this account.\r\n */\r\n getAccountInfo(): AccountInfo {\r\n return {\r\n homeAccountId: this.homeAccountId,\r\n environment: this.environment,\r\n tenantId: this.realm,\r\n username: this.username,\r\n localAccountId: this.localAccountId,\r\n name: this.name,\r\n idTokenClaims: this.idTokenClaims,\r\n nativeAccountId: this.nativeAccountId,\r\n authorityType: this.authorityType\r\n };\r\n }\r\n\r\n /**\r\n * Generates account key from interface\r\n * @param accountInterface\r\n */\r\n static generateAccountCacheKey(accountInterface: AccountInfo): string {\r\n const accountKey = [\r\n accountInterface.homeAccountId,\r\n accountInterface.environment || Constants.EMPTY_STRING,\r\n accountInterface.tenantId || Constants.EMPTY_STRING,\r\n ];\r\n\r\n return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Build Account cache from account properties.\r\n * @param accountDetails\r\n * @param authority\r\n */\r\n static createAccount(\r\n accountDetails: {\r\n homeAccountId: string,\r\n idTokenClaims: TokenClaims,\r\n clientInfo?: string,\r\n cloudGraphHostName?: string,\r\n msGraphHost?: string,\r\n environment?: string,\r\n nativeAccountId?: string\r\n },\r\n authority: Authority\r\n ): AccountEntity {\r\n const account: AccountEntity = new AccountEntity();\r\n\r\n if (authority.authorityType === AuthorityType.Adfs) {\r\n account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;\r\n } else if (authority.protocolMode === ProtocolMode.AAD) {\r\n account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;\r\n } else {\r\n account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n }\r\n\r\n account.clientInfo = accountDetails.clientInfo;\r\n account.homeAccountId = accountDetails.homeAccountId;\r\n account.nativeAccountId = accountDetails.nativeAccountId;\r\n\r\n const env = accountDetails.environment || (authority && authority.getPreferredCache());\r\n\r\n if (!env) {\r\n throw ClientAuthError.createInvalidCacheEnvironmentError();\r\n }\r\n\r\n account.environment = env;\r\n // non AAD scenarios can have empty realm\r\n account.realm = accountDetails.idTokenClaims.tid || Constants.EMPTY_STRING;\r\n\r\n account.idTokenClaims = accountDetails.idTokenClaims;\r\n\r\n // How do you account for MSA CID here?\r\n account.localAccountId = accountDetails.idTokenClaims.oid || accountDetails.idTokenClaims.sub || Constants.EMPTY_STRING;\r\n\r\n /*\r\n * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.\r\n * In most cases it will contain a single email. This field should not be relied upon if a custom \r\n * policy is configured to return more than 1 email.\r\n */\r\n if (account.authorityType === CacheAccountType.MSSTS_ACCOUNT_TYPE) {\r\n const preferredUsername = accountDetails.idTokenClaims.preferred_username;\r\n const email = (accountDetails.idTokenClaims.emails) ? accountDetails.idTokenClaims.emails[0] : null;\r\n \r\n account.username = preferredUsername || email || \"\";\r\n } else {\r\n account.username = accountDetails.idTokenClaims.upn || \"\";\r\n }\r\n account.name = accountDetails.idTokenClaims.name;\r\n\r\n account.cloudGraphHostName = accountDetails.cloudGraphHostName;\r\n account.msGraphHost = accountDetails.msGraphHost;\r\n\r\n return account;\r\n }\r\n\r\n /**\r\n * Creates an account object from AccountInfo\r\n * @param accountInfo\r\n * @param cloudGraphHostName\r\n * @param msGraphHost\r\n * @returns AccountEntity\r\n */\r\n static createFromAccountInfo(\r\n accountInfo: AccountInfo,\r\n cloudGraphHostName?: string,\r\n msGraphHost?: string\r\n ): AccountEntity {\r\n const account: AccountEntity = new AccountEntity();\r\n\r\n account.authorityType =\r\n accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;\r\n account.homeAccountId = accountInfo.homeAccountId;\r\n account.localAccountId = accountInfo.localAccountId;\r\n account.nativeAccountId = accountInfo.nativeAccountId;\r\n \r\n account.realm = accountInfo.tenantId;\r\n account.environment = accountInfo.environment;\r\n\r\n account.username = accountInfo.username;\r\n account.name = accountInfo.name;\r\n account.idTokenClaims = accountInfo.idTokenClaims;\r\n\r\n account.cloudGraphHostName = cloudGraphHostName;\r\n account.msGraphHost = msGraphHost;\r\n\r\n return account;\r\n }\r\n\r\n /**\r\n * Generate HomeAccountId from server response\r\n * @param serverClientInfo\r\n * @param authType\r\n */\r\n static generateHomeAccountId(\r\n serverClientInfo: string,\r\n authType: AuthorityType,\r\n logger: Logger,\r\n cryptoObj: ICrypto,\r\n idTokenClaims?: TokenClaims\r\n ): string {\r\n\r\n const accountId = idTokenClaims?.sub ? idTokenClaims.sub : Constants.EMPTY_STRING;\r\n\r\n // since ADFS does not have tid and does not set client_info\r\n if (authType === AuthorityType.Adfs || authType === AuthorityType.Dsts) {\r\n return accountId;\r\n }\r\n\r\n // for cases where there is clientInfo\r\n if (serverClientInfo) {\r\n try {\r\n const clientInfo = buildClientInfo(serverClientInfo, cryptoObj);\r\n if (!StringUtils.isEmpty(clientInfo.uid) && !StringUtils.isEmpty(clientInfo.utid)) {\r\n return `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`;\r\n }\r\n } catch (e) {}\r\n }\r\n\r\n // default to \"sub\" claim\r\n logger.verbose(\"No client info in response\");\r\n return accountId;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAccountEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"realm\") &&\r\n entity.hasOwnProperty(\"localAccountId\") &&\r\n entity.hasOwnProperty(\"username\") &&\r\n entity.hasOwnProperty(\"authorityType\")\r\n );\r\n }\r\n\r\n /**\r\n * Helper function to determine whether 2 accountInfo objects represent the same account\r\n * @param accountA\r\n * @param accountB\r\n * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality\r\n */\r\n static accountInfoIsEqual(accountA: AccountInfo | null, accountB: AccountInfo | null, compareClaims?: boolean): boolean {\r\n if (!accountA || !accountB) {\r\n return false;\r\n }\r\n\r\n let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false\r\n if (compareClaims) {\r\n const accountAClaims = (accountA.idTokenClaims || {}) as TokenClaims;\r\n const accountBClaims = (accountB.idTokenClaims || {}) as TokenClaims;\r\n\r\n // issued at timestamp and nonce are expected to change each time a new id token is acquired\r\n claimsMatch = (accountAClaims.iat === accountBClaims.iat) &&\r\n (accountAClaims.nonce === accountBClaims.nonce);\r\n }\r\n\r\n return (accountA.homeAccountId === accountB.homeAccountId) &&\r\n (accountA.localAccountId === accountB.localAccountId) &&\r\n (accountA.username === accountB.username) &&\r\n (accountA.tenantId === accountB.tenantId) &&\r\n (accountA.environment === accountB.environment) &&\r\n (accountA.nativeAccountId === accountB.nativeAccountId) &&\r\n claimsMatch;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { OIDC_DEFAULT_SCOPES } from \"@azure/msal-common\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\n\r\n/**\r\n * Constants\r\n */\r\nexport const BrowserConstants = {\r\n /**\r\n * Interaction in progress cache value\r\n */\r\n INTERACTION_IN_PROGRESS_VALUE: \"interaction_in_progress\",\r\n /**\r\n * Invalid grant error code\r\n */\r\n INVALID_GRANT_ERROR: \"invalid_grant\",\r\n /**\r\n * Default popup window width\r\n */\r\n POPUP_WIDTH: 483,\r\n /**\r\n * Default popup window height\r\n */\r\n POPUP_HEIGHT: 600,\r\n /**\r\n * Name of the popup window starts with\r\n */\r\n POPUP_NAME_PREFIX: \"msal\",\r\n /**\r\n * Default popup monitor poll interval in milliseconds\r\n */\r\n DEFAULT_POLL_INTERVAL_MS: 30,\r\n /**\r\n * Msal-browser SKU\r\n */\r\n MSAL_SKU: \"msal.js.browser\",\r\n};\r\n\r\nexport const NativeConstants = {\r\n CHANNEL_ID: \"53ee284d-920a-4b59-9d30-a60315b26836\",\r\n PREFERRED_EXTENSION_ID: \"ppnbnpeolgkicgegkbkbjmhlideopiji\",\r\n MATS_TELEMETRY: \"MATS\"\r\n};\r\n\r\nexport enum NativeExtensionMethod {\r\n HandshakeRequest = \"Handshake\",\r\n HandshakeResponse = \"HandshakeResponse\",\r\n GetToken = \"GetToken\",\r\n Response = \"Response\"\r\n}\r\n\r\nexport enum BrowserCacheLocation {\r\n LocalStorage = \"localStorage\",\r\n SessionStorage = \"sessionStorage\",\r\n MemoryStorage = \"memoryStorage\"\r\n}\r\n\r\n/**\r\n * HTTP Request types supported by MSAL.\r\n */\r\nexport enum HTTP_REQUEST_TYPE {\r\n GET = \"GET\",\r\n POST = \"POST\"\r\n}\r\n\r\n/**\r\n * Temporary cache keys for MSAL, deleted after any request.\r\n */\r\nexport enum TemporaryCacheKeys {\r\n AUTHORITY = \"authority\",\r\n ACQUIRE_TOKEN_ACCOUNT = \"acquireToken.account\",\r\n SESSION_STATE = \"session.state\",\r\n REQUEST_STATE = \"request.state\",\r\n NONCE_IDTOKEN = \"nonce.id_token\",\r\n ORIGIN_URI = \"request.origin\",\r\n RENEW_STATUS = \"token.renew.status\",\r\n URL_HASH = \"urlHash\",\r\n REQUEST_PARAMS = \"request.params\",\r\n SCOPES = \"scopes\",\r\n INTERACTION_STATUS_KEY = \"interaction.status\",\r\n CCS_CREDENTIAL = \"ccs.credential\",\r\n CORRELATION_ID = \"request.correlationId\",\r\n NATIVE_REQUEST = \"request.native\",\r\n REDIRECT_CONTEXT = \"request.redirect.context\"\r\n}\r\n\r\nexport enum StaticCacheKeys {\r\n ACCOUNT_KEYS = \"msal.account.keys\",\r\n TOKEN_KEYS = \"msal.token.keys\"\r\n}\r\n\r\n/**\r\n * Cache keys stored in-memory\r\n */\r\nexport enum InMemoryCacheKeys {\r\n WRAPPER_SKU = \"wrapper.sku\",\r\n WRAPPER_VER = \"wrapper.version\"\r\n}\r\n\r\n/**\r\n * API Codes for Telemetry purposes. \r\n * Before adding a new code you must claim it in the MSAL Telemetry tracker as these number spaces are shared across all MSALs\r\n * 0-99 Silent Flow\r\n * 800-899 Auth Code Flow\r\n */\r\nexport enum ApiId {\r\n acquireTokenRedirect = 861,\r\n acquireTokenPopup = 862,\r\n ssoSilent = 863,\r\n acquireTokenSilent_authCode = 864,\r\n handleRedirectPromise = 865,\r\n acquireTokenByCode = 866,\r\n acquireTokenSilent_silentFlow = 61,\r\n logout = 961,\r\n logoutPopup = 962\r\n}\r\n\r\n/*\r\n * Interaction type of the API - used for state and telemetry\r\n */\r\nexport enum InteractionType {\r\n Redirect = \"redirect\",\r\n Popup = \"popup\",\r\n Silent = \"silent\",\r\n None = \"none\"\r\n}\r\n\r\n/**\r\n * Types of interaction currently in progress.\r\n * Used in events in wrapper libraries to invoke functions when certain interaction is in progress or all interactions are complete.\r\n */\r\nexport enum InteractionStatus {\r\n /**\r\n * Initial status before interaction occurs\r\n */\r\n Startup = \"startup\",\r\n /**\r\n * Status set when all login calls occuring\r\n */\r\n Login = \"login\",\r\n /**\r\n * Status set when logout call occuring\r\n */ \r\n Logout = \"logout\",\r\n /**\r\n * Status set for acquireToken calls\r\n */\r\n AcquireToken = \"acquireToken\",\r\n /**\r\n * Status set for ssoSilent calls\r\n */\r\n SsoSilent = \"ssoSilent\",\r\n /**\r\n * Status set when handleRedirect in progress\r\n */\r\n HandleRedirect = \"handleRedirect\",\r\n /**\r\n * Status set when interaction is complete\r\n */\r\n None = \"none\"\r\n}\r\n\r\nexport const DEFAULT_REQUEST: RedirectRequest|PopupRequest = {\r\n scopes: OIDC_DEFAULT_SCOPES\r\n};\r\n\r\n/**\r\n * JWK Key Format string (Type MUST be defined for window crypto APIs)\r\n */\r\nexport const KEY_FORMAT_JWK = \"jwk\";\r\n\r\n// Supported wrapper SKUs\r\nexport enum WrapperSKU {\r\n React = \"@azure/msal-react\",\r\n Angular = \"@azure/msal-angular\"\r\n}\r\n\r\n// DatabaseStorage Constants\r\nexport const DB_NAME = \"msal.db\";\r\nexport const DB_VERSION = 1;\r\nexport const DB_TABLE_NAME = `${DB_NAME}.keys`;\r\n\r\nexport enum CacheLookupPolicy {\r\n /*\r\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired\r\n * or cannot be found the refresh token will be used to acquire a new one. Finally, if the refresh token\r\n * is expired acquireTokenSilent will attempt to acquire new access and refresh tokens.\r\n */\r\n Default = 0, // 0 is falsy, is equivalent to not passing in a CacheLookupPolicy\r\n /*\r\n * acquireTokenSilent will only look for access tokens in the cache. It will not attempt to renew access or\r\n * refresh tokens.\r\n */\r\n AccessToken = 1,\r\n /*\r\n * acquireTokenSilent will attempt to retrieve an access token from the cache. If the access token is expired or\r\n * cannot be found, the refresh token will be used to acquire a new one. If the refresh token is expired, it\r\n * will not be renewed and acquireTokenSilent will fail.\r\n */\r\n AccessTokenAndRefreshToken = 2,\r\n /*\r\n * acquireTokenSilent will not attempt to retrieve access tokens from the cache and will instead attempt to\r\n * exchange the cached refresh token for a new access token. If the refresh token is expired, it will not be\r\n * renewed and acquireTokenSilent will fail.\r\n */\r\n RefreshToken = 3,\r\n /*\r\n * acquireTokenSilent will not look in the cache for the access token. It will go directly to network with the\r\n * cached refresh token. If the refresh token is expired an attempt will be made to renew it. This is equivalent to\r\n * setting \"forceRefresh: true\".\r\n */\r\n RefreshTokenAndNetwork = 4,\r\n /*\r\n * acquireTokenSilent will attempt to renew both access and refresh tokens. It will not look in the cache. This will\r\n * always fail if 3rd party cookies are blocked by the browser.\r\n */\r\n Skip = 5,\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Logger } from \"@azure/msal-common\";\r\nimport { CachedKeyPair } from \"../crypto/CryptoOps\";\r\nimport { AsyncMemoryStorage } from \"./AsyncMemoryStorage\";\r\n\r\nexport enum CryptoKeyStoreNames {\r\n asymmetricKeys = \"asymmetricKeys\",\r\n symmetricKeys = \"symmetricKeys\"\r\n}\r\n/**\r\n * MSAL CryptoKeyStore DB Version 2\r\n */\r\nexport class CryptoKeyStore {\r\n public asymmetricKeys: AsyncMemoryStorage;\r\n public symmetricKeys: AsyncMemoryStorage;\r\n public logger: Logger;\r\n\r\n constructor(logger: Logger){\r\n this.logger = logger;\r\n this.asymmetricKeys = new AsyncMemoryStorage(this.logger, CryptoKeyStoreNames.asymmetricKeys);\r\n this.symmetricKeys = new AsyncMemoryStorage(this.logger, CryptoKeyStoreNames.symmetricKeys);\r\n }\r\n\r\n async clear(): Promise {\r\n // Delete in-memory keystores\r\n this.asymmetricKeys.clearInMemory();\r\n\t this.symmetricKeys.clearInMemory();\r\n\t\t\r\n /**\r\n * There is only one database, so calling clearPersistent on asymmetric keystore takes care of\r\n * every persistent keystore\r\n */\r\n try {\r\n await this.asymmetricKeys.clearPersistent();\r\n return true;\r\n } catch (e) {\r\n if (e instanceof Error) {\r\n this.logger.error(`Clearing keystore failed with error: ${e.message}`);\r\n } else {\r\n this.logger.error(\"Clearing keystore failed with unknown error\");\r\n }\r\n \r\n return false;\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"./AuthError\";\r\n\r\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const JoseHeaderErrorMessage = {\r\n missingKidError: {\r\n code: \"missing_kid_error\",\r\n desc: \"The JOSE Header for the requested JWT, JWS or JWK object requires a keyId to be configured as the 'kid' header claim. No 'kid' value was provided.\"\r\n },\r\n missingAlgError: {\r\n code: \"missing_alg_error\",\r\n desc: \"The JOSE Header for the requested JWT, JWS or JWK object requires an algorithm to be specified as the 'alg' header claim. No 'alg' value was provided.\"\r\n },\r\n};\r\n\r\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\r\nexport class JoseHeaderError extends AuthError {\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"JoseHeaderError\";\r\n\r\n Object.setPrototypeOf(this, JoseHeaderError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when keyId isn't set on JOSE header.\r\n */\r\n static createMissingKidError(): JoseHeaderError {\r\n return new JoseHeaderError(JoseHeaderErrorMessage.missingKidError.code, JoseHeaderErrorMessage.missingKidError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when algorithm isn't set on JOSE header.\r\n */\r\n static createMissingAlgError(): JoseHeaderError {\r\n return new JoseHeaderError(JoseHeaderErrorMessage.missingAlgError.code, JoseHeaderErrorMessage.missingAlgError.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { JoseHeaderError } from \"../error/JoseHeaderError\";\r\nimport { JsonTypes } from \"../utils/Constants\";\r\n\r\nexport type JoseHeaderOptions = {\r\n typ?: JsonTypes,\r\n alg?: string,\r\n kid?: string\r\n};\r\n\r\nexport class JoseHeader {\r\n public typ?: JsonTypes;\r\n public alg?: string;\r\n public kid?: string;\r\n\r\n constructor (options: JoseHeaderOptions) {\r\n this.typ = options.typ;\r\n this.alg = options.alg;\r\n this.kid = options.kid;\r\n }\r\n\r\n /**\r\n * Builds SignedHttpRequest formatted JOSE Header from the\r\n * JOSE Header options provided or previously set on the object and returns\r\n * the stringified header object.\r\n * Throws if keyId or algorithm aren't provided since they are required for Access Token Binding.\r\n * @param shrHeaderOptions \r\n * @returns \r\n */\r\n static getShrHeaderString(shrHeaderOptions: JoseHeaderOptions): string {\r\n // KeyID is required on the SHR header\r\n if (!shrHeaderOptions.kid) {\r\n throw JoseHeaderError.createMissingKidError();\r\n }\r\n\r\n // Alg is required on the SHR header\r\n if (!shrHeaderOptions.alg) {\r\n throw JoseHeaderError.createMissingAlgError();\r\n }\r\n\r\n const shrHeader = new JoseHeader({\r\n // Access Token PoP headers must have type pop, but the type header can be overriden for special cases\r\n typ: shrHeaderOptions.typ || JsonTypes.Pop,\r\n kid: shrHeaderOptions.kid,\r\n alg: shrHeaderOptions.alg\r\n });\r\n\r\n return JSON.stringify(shrHeader);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Utility class for math specific functions in browser.\r\n */\r\nexport class MathUtils {\r\n\r\n /**\r\n * Decimal to Hex\r\n *\r\n * @param num\r\n */\r\n static decimalToHex(num: number): string {\r\n let hex: string = num.toString(16);\r\n while (hex.length < 2) {\r\n hex = \"0\" + hex;\r\n }\r\n return hex;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants , IGuidGenerator } from \"@azure/msal-common\";\r\nimport { MathUtils } from \"../utils/MathUtils\";\r\nimport { BrowserCrypto } from \"./BrowserCrypto\";\r\nexport class GuidGenerator implements IGuidGenerator {\r\n\r\n // browser crypto object used to generate random values\r\n private cryptoObj: BrowserCrypto;\r\n\r\n constructor(cryptoObj: BrowserCrypto) {\r\n this.cryptoObj = cryptoObj;\r\n }\r\n\r\n /*\r\n * RFC4122: The version 4 UUID is meant for generating UUIDs from truly-random or\r\n * pseudo-random numbers.\r\n * The algorithm is as follows:\r\n * Set the two most significant bits (bits 6 and 7) of the\r\n * clock_seq_hi_and_reserved to zero and one, respectively.\r\n * Set the four most significant bits (bits 12 through 15) of the\r\n * time_hi_and_version field to the 4-bit version number from\r\n * Section 4.1.3. Version4\r\n * Set all the other bits to randomly (or pseudo-randomly) chosen\r\n * values.\r\n * UUID = time-low \"-\" time-mid \"-\"time-high-and-version \"-\"clock-seq-reserved and low(2hexOctet)\"-\" node\r\n * time-low = 4hexOctet\r\n * time-mid = 2hexOctet\r\n * time-high-and-version = 2hexOctet\r\n * clock-seq-and-reserved = hexOctet:\r\n * clock-seq-low = hexOctet\r\n * node = 6hexOctet\r\n * Format: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\r\n * y could be 1000, 1001, 1010, 1011 since most significant two bits needs to be 10\r\n * y values are 8, 9, A, B\r\n */\r\n generateGuid(): string {\r\n try {\r\n const buffer: Uint8Array = new Uint8Array(16);\r\n this.cryptoObj.getRandomValues(buffer);\r\n\r\n // buffer[6] and buffer[7] represents the time_hi_and_version field. We will set the four most significant bits (4 through 7) of buffer[6] to represent decimal number 4 (UUID version number).\r\n buffer[6] |= 0x40; // buffer[6] | 01000000 will set the 6 bit to 1.\r\n buffer[6] &= 0x4f; // buffer[6] & 01001111 will set the 4, 5, and 7 bit to 0 such that bits 4-7 == 0100 = \"4\".\r\n\r\n // buffer[8] represents the clock_seq_hi_and_reserved field. We will set the two most significant bits (6 and 7) of the clock_seq_hi_and_reserved to zero and one, respectively.\r\n buffer[8] |= 0x80; // buffer[8] | 10000000 will set the 7 bit to 1.\r\n buffer[8] &= 0xbf; // buffer[8] & 10111111 will set the 6 bit to 0.\r\n\r\n return MathUtils.decimalToHex(buffer[0]) + MathUtils.decimalToHex(buffer[1])\r\n + MathUtils.decimalToHex(buffer[2]) + MathUtils.decimalToHex(buffer[3])\r\n + \"-\" + MathUtils.decimalToHex(buffer[4]) + MathUtils.decimalToHex(buffer[5])\r\n + \"-\" + MathUtils.decimalToHex(buffer[6]) + MathUtils.decimalToHex(buffer[7])\r\n + \"-\" + MathUtils.decimalToHex(buffer[8]) + MathUtils.decimalToHex(buffer[9])\r\n + \"-\" + MathUtils.decimalToHex(buffer[10]) + MathUtils.decimalToHex(buffer[11])\r\n + MathUtils.decimalToHex(buffer[12]) + MathUtils.decimalToHex(buffer[13])\r\n + MathUtils.decimalToHex(buffer[14]) + MathUtils.decimalToHex(buffer[15]);\r\n }\r\n catch (err) {\r\n const guidHolder: string = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\r\n const hex: string = \"0123456789abcdef\";\r\n let r: number = 0;\r\n let guidResponse: string = Constants.EMPTY_STRING;\r\n for (let i: number = 0; i < 36; i++) {\r\n if (guidHolder[i] !== \"-\" && guidHolder[i] !== \"4\") {\r\n // each x and y needs to be random\r\n r = Math.random() * 16 | 0;\r\n }\r\n if (guidHolder[i] === \"x\") {\r\n guidResponse += hex[r];\r\n } else if (guidHolder[i] === \"y\") {\r\n // clock-seq-and-reserved first hex is filtered and remaining hex values are random\r\n r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\r\n r |= 0x8; // set pos 3 to 1 as 1???\r\n guidResponse += hex[r];\r\n } else {\r\n guidResponse += guidHolder[i];\r\n }\r\n }\r\n return guidResponse;\r\n }\r\n }\r\n\r\n /**\r\n * verifies if a string is GUID\r\n * @param guid\r\n */\r\n isGuid(guid: string): boolean {\r\n const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\r\n return regexGuid.test(guid);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\n\r\n/**\r\n * Utility functions for strings in a browser. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\nexport class BrowserStringUtils {\r\n\r\n /**\r\n * Converts string to Uint8Array\r\n * @param sDOMStr \r\n */\r\n static stringToUtf8Arr (sDOMStr: string): Uint8Array {\r\n let nChr;\r\n let nArrLen = 0;\r\n const nStrLen = sDOMStr.length;\r\n /* mapping... */\r\n for (let nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) {\r\n nChr = sDOMStr.charCodeAt(nMapIdx);\r\n nArrLen += nChr < 0x80 ? 1 : nChr < 0x800 ? 2 : nChr < 0x10000 ? 3 : nChr < 0x200000 ? 4 : nChr < 0x4000000 ? 5 : 6;\r\n }\r\n\r\n const aBytes = new Uint8Array(nArrLen);\r\n\r\n /* transcription... */\r\n\r\n for (let nIdx = 0, nChrIdx = 0; nIdx < nArrLen; nChrIdx++) {\r\n nChr = sDOMStr.charCodeAt(nChrIdx);\r\n if (nChr < 128) {\r\n /* one byte */\r\n aBytes[nIdx++] = nChr;\r\n } else if (nChr < 0x800) {\r\n /* two bytes */\r\n aBytes[nIdx++] = 192 + (nChr >>> 6);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else if (nChr < 0x10000) {\r\n /* three bytes */\r\n aBytes[nIdx++] = 224 + (nChr >>> 12);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else if (nChr < 0x200000) {\r\n /* four bytes */\r\n aBytes[nIdx++] = 240 + (nChr >>> 18);\r\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else if (nChr < 0x4000000) {\r\n /* five bytes */\r\n aBytes[nIdx++] = 248 + (nChr >>> 24);\r\n aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n } else /* if (nChr <= 0x7fffffff) */ {\r\n /* six bytes */\r\n aBytes[nIdx++] = 252 + (nChr >>> 30);\r\n aBytes[nIdx++] = 128 + (nChr >>> 24 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\r\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\r\n aBytes[nIdx++] = 128 + (nChr & 63);\r\n }\r\n }\r\n\r\n return aBytes; \r\n }\r\n\r\n /**\r\n * Converst string to ArrayBuffer\r\n * @param dataString \r\n */\r\n static stringToArrayBuffer(dataString: string): ArrayBuffer {\r\n const data = new ArrayBuffer(dataString.length);\r\n const dataView = new Uint8Array(data);\r\n for (let i: number = 0; i < dataString.length; i++) {\r\n dataView[i] = dataString.charCodeAt(i);\r\n }\r\n return data;\r\n }\r\n\r\n /**\r\n * Converts Uint8Array to a string\r\n * @param aBytes \r\n */\r\n static utf8ArrToString (aBytes: Uint8Array): string {\r\n let sView = Constants.EMPTY_STRING;\r\n for (let nPart, nLen = aBytes.length, nIdx = 0; nIdx < nLen; nIdx++) {\r\n nPart = aBytes[nIdx];\r\n sView += String.fromCharCode(\r\n nPart > 251 && nPart < 254 && nIdx + 5 < nLen ? /* six bytes */\r\n /* (nPart - 252 << 30) may be not so safe in ECMAScript! So...: */\r\n (nPart - 252) * 1073741824 + (aBytes[++nIdx] - 128 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 247 && nPart < 252 && nIdx + 4 < nLen ? /* five bytes */\r\n (nPart - 248 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 239 && nPart < 248 && nIdx + 3 < nLen ? /* four bytes */\r\n (nPart - 240 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 223 && nPart < 240 && nIdx + 2 < nLen ? /* three bytes */\r\n (nPart - 224 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128\r\n : nPart > 191 && nPart < 224 && nIdx + 1 < nLen ? /* two bytes */\r\n (nPart - 192 << 6) + aBytes[++nIdx] - 128\r\n : /* nPart < 127 ? */ /* one byte */\r\n nPart\r\n );\r\n }\r\n return sView;\r\n }\r\n\r\n /**\r\n * Returns stringified jwk.\r\n * @param jwk \r\n */\r\n static getSortedObjectString(obj: object): string {\r\n return JSON.stringify(obj, Object.keys(obj).sort());\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\n\r\n/**\r\n * Class which exposes APIs to encode plaintext to base64 encoded string. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\nexport class Base64Encode {\r\n \r\n /**\r\n * Returns URL Safe b64 encoded string from a plaintext string.\r\n * @param input \r\n */\r\n urlEncode(input: string): string {\r\n return encodeURIComponent(this.encode(input)\r\n .replace(/=/g, Constants.EMPTY_STRING)\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\"));\r\n }\r\n\r\n /**\r\n * Returns URL Safe b64 encoded string from an int8Array.\r\n * @param inputArr \r\n */\r\n urlEncodeArr(inputArr: Uint8Array): string {\r\n return this.base64EncArr(inputArr)\r\n .replace(/=/g, Constants.EMPTY_STRING)\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\");\r\n }\r\n\r\n /**\r\n * Returns b64 encoded string from plaintext string.\r\n * @param input \r\n */\r\n encode(input: string): string {\r\n const inputUtf8Arr = BrowserStringUtils.stringToUtf8Arr(input);\r\n return this.base64EncArr(inputUtf8Arr);\r\n }\r\n\r\n /**\r\n * Base64 encode byte array\r\n * @param aBytes \r\n */\r\n private base64EncArr(aBytes: Uint8Array): string { \r\n const eqLen = (3 - (aBytes.length % 3)) % 3;\r\n let sB64Enc = Constants.EMPTY_STRING;\r\n \r\n for (let nMod3, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\r\n nMod3 = nIdx % 3;\r\n /* Uncomment the following line in order to split the output in lines 76-character long: */\r\n /*\r\n *if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) { sB64Enc += \"\\r\\n\"; }\r\n */\r\n nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);\r\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\r\n sB64Enc += String.fromCharCode(\r\n this.uint6ToB64(nUint24 >>> 18 & 63), \r\n this.uint6ToB64(nUint24 >>> 12 & 63), \r\n this.uint6ToB64(nUint24 >>> 6 & 63), \r\n this.uint6ToB64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return eqLen === 0 ? sB64Enc : sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? \"=\" : \"==\");\r\n }\r\n\r\n /**\r\n * Base64 string to array encoding helper\r\n * @param nUint6 \r\n */\r\n private uint6ToB64 (nUint6: number): number {\r\n return nUint6 < 26 ?\r\n nUint6 + 65\r\n : nUint6 < 52 ?\r\n nUint6 + 71\r\n : nUint6 < 62 ?\r\n nUint6 - 4\r\n : nUint6 === 62 ?\r\n 43\r\n : nUint6 === 63 ?\r\n 47\r\n :\r\n 65;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\n\r\n/**\r\n * Class which exposes APIs to decode base64 strings to plaintext. See here for implementation details:\r\n * https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#Solution_2_%E2%80%93_JavaScript's_UTF-16_%3E_UTF-8_%3E_base64\r\n */\r\nexport class Base64Decode {\r\n\r\n /**\r\n * Returns a URL-safe plaintext decoded string from b64 encoded input.\r\n * @param input \r\n */\r\n decode(input: string): string {\r\n let encodedString = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\r\n switch (encodedString.length % 4) {\r\n case 0:\r\n break;\r\n case 2:\r\n encodedString += \"==\";\r\n break;\r\n case 3:\r\n encodedString += \"=\";\r\n break;\r\n default:\r\n throw new Error(\"Invalid base64 string\");\r\n }\r\n\r\n const inputUtf8Arr = this.base64DecToArr(encodedString);\r\n return BrowserStringUtils.utf8ArrToString(inputUtf8Arr);\r\n }\r\n\r\n /**\r\n * Decodes base64 into Uint8Array\r\n * @param base64String \r\n * @param nBlockSize \r\n */\r\n private base64DecToArr(base64String: string, nBlockSize?: number): Uint8Array {\r\n const sB64Enc = base64String.replace(/[^A-Za-z0-9\\+\\/]/g, Constants.EMPTY_STRING);\r\n const nInLen = sB64Enc.length;\r\n const nOutLen = nBlockSize ? Math.ceil((nInLen * 3 + 1 >>> 2) / nBlockSize) * nBlockSize : nInLen * 3 + 1 >>> 2;\r\n const aBytes = new Uint8Array(nOutLen);\r\n\r\n for (let nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {\r\n nMod4 = nInIdx & 3;\r\n nUint24 |= this.b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;\r\n if (nMod4 === 3 || nInLen - nInIdx === 1) {\r\n for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {\r\n aBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;\r\n }\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return aBytes;\r\n }\r\n\r\n /**\r\n * Base64 string to array decoding helper\r\n * @param charNum \r\n */\r\n private b64ToUint6(charNum: number): number {\r\n return charNum > 64 && charNum < 91 ?\r\n charNum - 65\r\n : charNum > 96 && charNum < 123 ? \r\n charNum - 71\r\n : charNum > 47 && charNum < 58 ?\r\n charNum + 4\r\n : charNum === 43 ?\r\n 62\r\n : charNum === 47 ?\r\n 63\r\n :\r\n 0;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError, StringUtils } from \"@azure/msal-common\";\r\n\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const BrowserAuthErrorMessage = {\r\n pkceNotGenerated: {\r\n code: \"pkce_not_created\",\r\n desc: \"The PKCE code challenge and verifier could not be generated.\"\r\n },\r\n cryptoDoesNotExist: {\r\n code: \"crypto_nonexistent\",\r\n desc: \"The crypto object or function is not available.\"\r\n },\r\n httpMethodNotImplementedError: {\r\n code: \"http_method_not_implemented\",\r\n desc: \"The HTTP method given has not been implemented in this library.\"\r\n },\r\n emptyNavigateUriError: {\r\n code: \"empty_navigate_uri\",\r\n desc: \"Navigation URI is empty. Please check stack trace for more info.\"\r\n },\r\n hashEmptyError: {\r\n code: \"hash_empty_error\",\r\n desc: \"Hash value cannot be processed because it is empty. Please verify that your redirectUri is not clearing the hash. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n hashDoesNotContainStateError: {\r\n code: \"no_state_in_hash\",\r\n desc: \"Hash does not contain state. Please verify that the request originated from msal.\"\r\n },\r\n hashDoesNotContainKnownPropertiesError: {\r\n code: \"hash_does_not_contain_known_properties\",\r\n desc: \"Hash does not contain known properites. Please verify that your redirectUri is not changing the hash. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n unableToParseStateError: {\r\n code: \"unable_to_parse_state\",\r\n desc: \"Unable to parse state. Please verify that the request originated from msal.\"\r\n },\r\n stateInteractionTypeMismatchError: {\r\n code: \"state_interaction_type_mismatch\",\r\n desc: \"Hash contains state but the interaction type does not match the caller.\"\r\n },\r\n interactionInProgress: {\r\n code: \"interaction_in_progress\",\r\n desc: \"Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n popupWindowError: {\r\n code: \"popup_window_error\",\r\n desc: \"Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.\"\r\n },\r\n emptyWindowError: {\r\n code: \"empty_window_error\",\r\n desc: \"window.open returned null or undefined window object.\"\r\n },\r\n userCancelledError: {\r\n code: \"user_cancelled\",\r\n desc: \"User cancelled the flow.\"\r\n },\r\n monitorPopupTimeoutError: {\r\n code: \"monitor_window_timeout\",\r\n desc: \"Token acquisition in popup failed due to timeout. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n monitorIframeTimeoutError: {\r\n code: \"monitor_window_timeout\",\r\n desc: \"Token acquisition in iframe failed due to timeout. For more visit: aka.ms/msaljs/browser-errors.\"\r\n },\r\n redirectInIframeError: {\r\n code: \"redirect_in_iframe\",\r\n desc: \"Redirects are not supported for iframed or brokered applications. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.\"\r\n },\r\n blockTokenRequestsInHiddenIframeError: {\r\n code: \"block_iframe_reload\",\r\n desc: \"Request was blocked inside an iframe because MSAL detected an authentication response. For more visit: aka.ms/msaljs/browser-errors\"\r\n },\r\n blockAcquireTokenInPopupsError: {\r\n code: \"block_nested_popups\",\r\n desc: \"Request was blocked inside a popup because MSAL detected it was running in a popup.\"\r\n },\r\n iframeClosedPrematurelyError: {\r\n code: \"iframe_closed_prematurely\",\r\n desc: \"The iframe being monitored was closed prematurely.\"\r\n },\r\n silentLogoutUnsupportedError: {\r\n code: \"silent_logout_unsupported\",\r\n desc: \"Silent logout not supported. Please call logoutRedirect or logoutPopup instead.\"\r\n },\r\n noAccountError: {\r\n code: \"no_account_error\",\r\n desc: \"No account object provided to acquireTokenSilent and no active account has been set. Please call setActiveAccount or provide an account on the request.\"\r\n },\r\n silentPromptValueError: {\r\n code: \"silent_prompt_value_error\",\r\n desc: \"The value given for the prompt value is not valid for silent requests - must be set to 'none' or 'no_session'.\"\r\n },\r\n noTokenRequestCacheError: {\r\n code: \"no_token_request_cache_error\",\r\n desc: \"No token request found in cache.\"\r\n },\r\n unableToParseTokenRequestCacheError: {\r\n code: \"unable_to_parse_token_request_cache_error\",\r\n desc: \"The cached token request could not be parsed.\"\r\n },\r\n noCachedAuthorityError: {\r\n code: \"no_cached_authority_error\",\r\n desc: \"No cached authority found.\"\r\n },\r\n authRequestNotSet: {\r\n code: \"auth_request_not_set_error\",\r\n desc: \"Auth Request not set. Please ensure initiateAuthRequest was called from the InteractionHandler\"\r\n },\r\n invalidCacheType: {\r\n code: \"invalid_cache_type\",\r\n desc: \"Invalid cache type\"\r\n },\r\n notInBrowserEnvironment: {\r\n code: \"non_browser_environment\",\r\n desc: \"Login and token requests are not supported in non-browser environments.\"\r\n },\r\n databaseNotOpen: {\r\n code: \"database_not_open\",\r\n desc: \"Database is not open!\"\r\n },\r\n noNetworkConnectivity: {\r\n code: \"no_network_connectivity\",\r\n desc: \"No network connectivity. Check your internet connection.\"\r\n },\r\n postRequestFailed: {\r\n code: \"post_request_failed\",\r\n desc: \"Network request failed: If the browser threw a CORS error, check that the redirectUri is registered in the Azure App Portal as type 'SPA'\"\r\n },\r\n getRequestFailed: {\r\n code: \"get_request_failed\",\r\n desc: \"Network request failed. Please check the network trace to determine root cause.\"\r\n },\r\n failedToParseNetworkResponse: {\r\n code: \"failed_to_parse_response\",\r\n desc: \"Failed to parse network response. Check network trace.\"\r\n },\r\n unableToLoadTokenError: {\r\n code: \"unable_to_load_token\",\r\n desc: \"Error loading token to cache.\"\r\n },\r\n signingKeyNotFoundInStorage: {\r\n code: \"crypto_key_not_found\",\r\n desc: \"Cryptographic Key or Keypair not found in browser storage.\"\r\n },\r\n authCodeRequired: {\r\n code: \"auth_code_required\",\r\n desc: \"An authorization code must be provided (as the `code` property on the request) to this flow.\"\r\n },\r\n authCodeOrNativeAccountRequired: {\r\n code: \"auth_code_or_nativeAccountId_required\",\r\n desc: \"An authorization code or nativeAccountId must be provided to this flow.\"\r\n },\r\n spaCodeAndNativeAccountPresent: {\r\n code: \"spa_code_and_nativeAccountId_present\",\r\n desc: \"Request cannot contain both spa code and native account id.\"\r\n },\r\n databaseUnavailable: {\r\n code: \"database_unavailable\",\r\n desc: \"IndexedDB, which is required for persistent cryptographic key storage, is unavailable. This may be caused by browser privacy features which block persistent storage in third-party contexts.\"\r\n },\r\n unableToAcquireTokenFromNativePlatform: {\r\n code: \"unable_to_acquire_token_from_native_platform\",\r\n desc: \"Unable to acquire token from native platform. For a list of possible reasons visit aka.ms/msaljs/browser-errors.\"\r\n },\r\n nativeHandshakeTimeout: {\r\n code: \"native_handshake_timeout\",\r\n desc: \"Timed out while attempting to establish connection to browser extension\"\r\n },\r\n nativeExtensionNotInstalled: {\r\n code: \"native_extension_not_installed\",\r\n desc: \"Native extension is not installed. If you think this is a mistake call the initialize function.\"\r\n },\r\n nativeConnectionNotEstablished: {\r\n code: \"native_connection_not_established\",\r\n desc: \"Connection to native platform has not been established. Please install a compatible browser extension and run initialize(). For more please visit aka.ms/msaljs/browser-errors.\"\r\n },\r\n nativeBrokerCalledBeforeInitialize: {\r\n code: \"native_broker_called_before_initialize\",\r\n desc: \"You must call and await the initialize function before attempting to call any other MSAL API when native brokering is enabled. For more please visit aka.ms/msaljs/browser-errors.\"\r\n },\r\n nativePromptNotSupported: {\r\n code: \"native_prompt_not_supported\",\r\n desc: \"The provided prompt is not supported by the native platform. This request should be routed to the web based flow.\"\r\n }\r\n};\r\n\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nexport class BrowserAuthError extends AuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n\r\n Object.setPrototypeOf(this, BrowserAuthError.prototype);\r\n this.name = \"BrowserAuthError\";\r\n }\r\n\r\n /**\r\n * Creates an error thrown when PKCE is not implemented.\r\n * @param errDetail\r\n */\r\n static createPkceNotGeneratedError(errDetail: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.pkceNotGenerated.code,\r\n `${BrowserAuthErrorMessage.pkceNotGenerated.desc} Detail:${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the crypto object is unavailable.\r\n * @param errDetail\r\n */\r\n static createCryptoNotAvailableError(errDetail: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.cryptoDoesNotExist.code,\r\n `${BrowserAuthErrorMessage.cryptoDoesNotExist.desc} Detail:${errDetail}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when an HTTP method hasn't been implemented by the browser class.\r\n * @param method\r\n */\r\n static createHttpMethodNotImplementedError(method: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.httpMethodNotImplementedError.code,\r\n `${BrowserAuthErrorMessage.httpMethodNotImplementedError.desc} Given Method: ${method}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the navigation URI is empty.\r\n */\r\n static createEmptyNavigationUriError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.emptyNavigateUriError.code, BrowserAuthErrorMessage.emptyNavigateUriError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n * @param hashValue\r\n */\r\n static createEmptyHashError(hashValue: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.hashEmptyError.code, `${BrowserAuthErrorMessage.hashEmptyError.desc} Given Url: ${hashValue}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n */\r\n static createHashDoesNotContainStateError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.hashDoesNotContainStateError.code, BrowserAuthErrorMessage.hashDoesNotContainStateError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value does not contain known properties\r\n */\r\n static createHashDoesNotContainKnownPropertiesError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.hashDoesNotContainKnownPropertiesError.code, BrowserAuthErrorMessage.hashDoesNotContainKnownPropertiesError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n */\r\n static createUnableToParseStateError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToParseStateError.code, BrowserAuthErrorMessage.unableToParseStateError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the state value in the hash does not match the interaction type of the API attempting to consume it.\r\n */\r\n static createStateInteractionTypeMismatchError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.stateInteractionTypeMismatchError.code, BrowserAuthErrorMessage.stateInteractionTypeMismatchError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when a browser interaction (redirect or popup) is in progress.\r\n */\r\n static createInteractionInProgressError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.interactionInProgress.code, BrowserAuthErrorMessage.interactionInProgress.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the popup window could not be opened.\r\n * @param errDetail\r\n */\r\n static createPopupWindowError(errDetail?: string): BrowserAuthError {\r\n let errorMessage = BrowserAuthErrorMessage.popupWindowError.desc;\r\n errorMessage = !StringUtils.isEmpty(errDetail) ? `${errorMessage} Details: ${errDetail}` : errorMessage;\r\n return new BrowserAuthError(BrowserAuthErrorMessage.popupWindowError.code, errorMessage);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when window.open returns an empty window object.\r\n * @param errDetail\r\n */\r\n static createEmptyWindowCreatedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.emptyWindowError.code, BrowserAuthErrorMessage.emptyWindowError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the user closes a popup.\r\n */\r\n static createUserCancelledError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.userCancelledError.code,\r\n BrowserAuthErrorMessage.userCancelledError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when monitorPopupFromHash times out for a given popup.\r\n */\r\n static createMonitorPopupTimeoutError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.monitorPopupTimeoutError.code,\r\n BrowserAuthErrorMessage.monitorPopupTimeoutError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when monitorIframeFromHash times out for a given iframe.\r\n */\r\n static createMonitorIframeTimeoutError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.monitorIframeTimeoutError.code,\r\n BrowserAuthErrorMessage.monitorIframeTimeoutError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when navigateWindow is called inside an iframe or brokered applications.\r\n * @param windowParentCheck\r\n */\r\n static createRedirectInIframeError(windowParentCheck: boolean): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.redirectInIframeError.code,\r\n `${BrowserAuthErrorMessage.redirectInIframeError.desc} (window.parent !== window) => ${windowParentCheck}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when an auth reload is done inside an iframe.\r\n */\r\n static createBlockReloadInHiddenIframeError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.blockTokenRequestsInHiddenIframeError.code,\r\n BrowserAuthErrorMessage.blockTokenRequestsInHiddenIframeError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when a popup attempts to call an acquireToken API\r\n * @returns\r\n */\r\n static createBlockAcquireTokenInPopupsError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.blockAcquireTokenInPopupsError.code,\r\n BrowserAuthErrorMessage.blockAcquireTokenInPopupsError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when an iframe is found to be closed before the timeout is reached.\r\n */\r\n static createIframeClosedPrematurelyError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.iframeClosedPrematurelyError.code, BrowserAuthErrorMessage.iframeClosedPrematurelyError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the logout API is called on any of the silent interaction clients\r\n */\r\n static createSilentLogoutUnsupportedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.silentLogoutUnsupportedError.code, BrowserAuthErrorMessage.silentLogoutUnsupportedError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the account object is not provided in the acquireTokenSilent API.\r\n */\r\n static createNoAccountError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noAccountError.code, BrowserAuthErrorMessage.noAccountError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when a given prompt value is invalid for silent requests.\r\n */\r\n static createSilentPromptValueError(givenPrompt: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.silentPromptValueError.code, `${BrowserAuthErrorMessage.silentPromptValueError.desc} Given value: ${givenPrompt}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the cached token request could not be retrieved from the cache\r\n */\r\n static createUnableToParseTokenRequestCacheError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToParseTokenRequestCacheError.code,\r\n BrowserAuthErrorMessage.unableToParseTokenRequestCacheError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the token request could not be retrieved from the cache\r\n */\r\n static createNoTokenRequestCacheError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noTokenRequestCacheError.code,\r\n BrowserAuthErrorMessage.noTokenRequestCacheError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when handleCodeResponse is called before initiateAuthRequest (InteractionHandler)\r\n */\r\n static createAuthRequestNotSetError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.authRequestNotSet.code,\r\n BrowserAuthErrorMessage.authRequestNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the authority could not be retrieved from the cache\r\n */\r\n static createNoCachedAuthorityError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noCachedAuthorityError.code,\r\n BrowserAuthErrorMessage.noCachedAuthorityError.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if cache type is invalid.\r\n */\r\n static createInvalidCacheTypeError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.invalidCacheType.code, `${BrowserAuthErrorMessage.invalidCacheType.desc}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when login and token requests are made from a non-browser environment\r\n */\r\n static createNonBrowserEnvironmentError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.notInBrowserEnvironment.code, BrowserAuthErrorMessage.notInBrowserEnvironment.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when indexDB database is not open\r\n */\r\n static createDatabaseNotOpenError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.databaseNotOpen.code, BrowserAuthErrorMessage.databaseNotOpen.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when token fetch fails due to no internet\r\n */\r\n static createNoNetworkConnectivityError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.noNetworkConnectivity.code, BrowserAuthErrorMessage.noNetworkConnectivity.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when token fetch fails due to reasons other than internet connectivity\r\n */\r\n static createPostRequestFailedError(errorDesc: string, endpoint: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.postRequestFailed.code, `${BrowserAuthErrorMessage.postRequestFailed.desc} | Network client threw: ${errorDesc} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when get request fails due to reasons other than internet connectivity\r\n */\r\n static createGetRequestFailedError(errorDesc: string, endpoint: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.getRequestFailed.code, `${BrowserAuthErrorMessage.getRequestFailed.desc} | Network client threw: ${errorDesc} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when network client fails to parse network response\r\n */\r\n static createFailedToParseNetworkResponseError(endpoint: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.failedToParseNetworkResponse.code, `${BrowserAuthErrorMessage.failedToParseNetworkResponse.desc} | Attempted to reach: ${endpoint.split(\"?\")[0]}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when the necessary information is not available to sideload tokens\r\n */\r\n static createUnableToLoadTokenError(errorDetail: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToLoadTokenError.code, `${BrowserAuthErrorMessage.unableToLoadTokenError.desc} | ${errorDetail}`);\r\n }\r\n\r\n /**\r\n * Create an error thrown when the queried cryptographic key is not found in IndexedDB\r\n */\r\n static createSigningKeyNotFoundInStorageError(keyId: string): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.signingKeyNotFoundInStorage.code, `${BrowserAuthErrorMessage.signingKeyNotFoundInStorage.desc} | No match found for KeyId: ${keyId}`);\r\n }\r\n\r\n /**\r\n * Create an error when an authorization code is required but not provided\r\n */\r\n static createAuthCodeRequiredError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.authCodeRequired.code, BrowserAuthErrorMessage.authCodeRequired.desc);\r\n }\r\n\r\n /**\r\n * Create an error when an authorization code or native account ID is required but not provided\r\n */\r\n static createAuthCodeOrNativeAccountIdRequiredError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.authCodeOrNativeAccountRequired.code, BrowserAuthErrorMessage.authCodeOrNativeAccountRequired.desc);\r\n }\r\n\r\n /**\r\n * Create an error when both authorization code and native account ID are provided\r\n */\r\n static createSpaCodeAndNativeAccountIdPresentError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.spaCodeAndNativeAccountPresent.code, BrowserAuthErrorMessage.spaCodeAndNativeAccountPresent.desc);\r\n }\r\n\r\n /**\r\n * Create an error when IndexedDB is unavailable\r\n */\r\n static createDatabaseUnavailableError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.databaseUnavailable.code, BrowserAuthErrorMessage.databaseUnavailable.desc);\r\n }\r\n\r\n /**\r\n * Create an error when native token acquisition is not possible\r\n */\r\n static createUnableToAcquireTokenFromNativePlatformError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.unableToAcquireTokenFromNativePlatform.code, BrowserAuthErrorMessage.unableToAcquireTokenFromNativePlatform.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when Handshake with browser extension times out\r\n */\r\n static createNativeHandshakeTimeoutError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeHandshakeTimeout.code, BrowserAuthErrorMessage.nativeHandshakeTimeout.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when browser extension is not installed\r\n */\r\n static createNativeExtensionNotInstalledError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeExtensionNotInstalled.code, BrowserAuthErrorMessage.nativeExtensionNotInstalled.desc);\r\n }\r\n\r\n /**\r\n * Create an error when native connection has not been established\r\n * @returns\r\n */\r\n static createNativeConnectionNotEstablishedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeConnectionNotEstablished.code, BrowserAuthErrorMessage.nativeConnectionNotEstablished.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when the initialize function hasn't been called\r\n */\r\n static createNativeBrokerCalledBeforeInitialize(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativeBrokerCalledBeforeInitialize.code, BrowserAuthErrorMessage.nativeBrokerCalledBeforeInitialize.desc);\r\n }\r\n\r\n /**\r\n * Create an error thrown when requesting a token directly from the native platform with an unsupported prompt parameter e.g. select_account, login or create\r\n * These requests must go through eSTS to ensure eSTS is aware of the new account\r\n */\r\n static createNativePromptParameterNotSupportedError(): BrowserAuthError {\r\n return new BrowserAuthError(BrowserAuthErrorMessage.nativePromptNotSupported.code, BrowserAuthErrorMessage.nativePromptNotSupported.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { PkceCodes } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { Base64Encode } from \"../encode/Base64Encode\";\r\nimport { BrowserCrypto } from \"./BrowserCrypto\";\r\n\r\n// Constant byte array length\r\nconst RANDOM_BYTE_ARR_LENGTH = 32;\r\n\r\n/**\r\n * Class which exposes APIs to generate PKCE codes and code verifiers.\r\n */\r\nexport class PkceGenerator {\r\n\r\n private base64Encode: Base64Encode;\r\n private cryptoObj: BrowserCrypto;\r\n\r\n constructor(cryptoObj: BrowserCrypto) {\r\n this.base64Encode = new Base64Encode();\r\n this.cryptoObj = cryptoObj;\r\n }\r\n\r\n /**\r\n * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636\r\n */\r\n async generateCodes(): Promise {\r\n const codeVerifier = this.generateCodeVerifier();\r\n const codeChallenge = await this.generateCodeChallengeFromVerifier(codeVerifier);\r\n return {\r\n verifier: codeVerifier,\r\n challenge: codeChallenge\r\n };\r\n }\r\n\r\n /**\r\n * Generates a random 32 byte buffer and returns the base64\r\n * encoded string to be used as a PKCE Code Verifier\r\n */\r\n private generateCodeVerifier(): string {\r\n try {\r\n // Generate random values as utf-8\r\n const buffer: Uint8Array = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\r\n this.cryptoObj.getRandomValues(buffer);\r\n // encode verifier as base64\r\n const pkceCodeVerifierB64: string = this.base64Encode.urlEncodeArr(buffer);\r\n return pkceCodeVerifierB64;\r\n } catch (e) {\r\n throw BrowserAuthError.createPkceNotGeneratedError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Creates a base64 encoded PKCE Code Challenge string from the\r\n * hash created from the PKCE Code Verifier supplied\r\n */\r\n private async generateCodeChallengeFromVerifier(pkceCodeVerifier: string): Promise {\r\n try {\r\n // hashed verifier\r\n const pkceHashedCodeVerifier = await this.cryptoObj.sha256Digest(pkceCodeVerifier);\r\n // encode hash as base64\r\n return this.base64Encode.urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier));\r\n } catch (e) {\r\n throw BrowserAuthError.createPkceNotGeneratedError(e);\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\n\r\nexport class ModernBrowserCrypto implements ISubtleCrypto {\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return window.crypto.getRandomValues(dataBuffer);\r\n }\r\n\r\n async generateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.crypto.subtle.generateKey(algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async exportKey(key: CryptoKey): Promise {\r\n return window.crypto.subtle.exportKey(KEY_FORMAT_JWK, key) as Promise;\r\n }\r\n\r\n async importKey(keyData: JsonWebKey, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.crypto.subtle.importKey(KEY_FORMAT_JWK, keyData, algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: ArrayBuffer): Promise {\r\n return window.crypto.subtle.sign(algorithm, key, data) as Promise;\r\n }\r\n\r\n async digest(algorithm: AlgorithmIdentifier, data: Uint8Array): Promise {\r\n return window.crypto.subtle.digest(algorithm, data) as Promise;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\n\r\ndeclare global {\r\n interface Window {\r\n msrCrypto: Crypto & {\r\n initPrng: (entropy: Uint8Array | number[]) => void\r\n }\r\n }\r\n}\r\n\r\nexport class MsrBrowserCrypto implements ISubtleCrypto {\r\n initPrng(entropy : Uint8Array): void {\r\n // Turn into array, as initPrng seems to not always like Uint8Array (even though it should support both)\r\n return window.msrCrypto.initPrng([...entropy]);\r\n }\r\n\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return window.msrCrypto.getRandomValues(dataBuffer);\r\n }\r\n\r\n async generateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.msrCrypto.subtle.generateKey(algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async exportKey(key: CryptoKey): Promise {\r\n return window.msrCrypto.subtle.exportKey(KEY_FORMAT_JWK, key) as Promise as Promise;\r\n }\r\n\r\n async importKey(keyData: JsonWebKey, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return window.msrCrypto.subtle.importKey(KEY_FORMAT_JWK, keyData, algorithm, extractable, keyUsages) as Promise;\r\n }\r\n\r\n async sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: ArrayBuffer): Promise {\r\n return window.msrCrypto.subtle.sign(algorithm, key, data) as Promise;\r\n }\r\n\r\n async digest(algorithm: AlgorithmIdentifier, data: Uint8Array): Promise {\r\n return window.msrCrypto.subtle.digest(algorithm, data) as Promise; \r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants } from \"@azure/msal-common\";\r\nimport { KEY_FORMAT_JWK } from \"../utils/BrowserConstants\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\n\r\nexport class MsBrowserCrypto implements ISubtleCrypto {\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return window[\"msCrypto\"].getRandomValues(dataBuffer);\r\n }\r\n\r\n async generateKey(algorithm: RsaHashedKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msGenerateKey = window[\"msCrypto\"].subtle.generateKey(algorithm, extractable, keyUsages);\r\n msGenerateKey.addEventListener(\"complete\", (e: { target: { result: CryptoKeyPair | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n\r\n msGenerateKey.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async exportKey(key: CryptoKey): Promise {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msExportKey = window[\"msCrypto\"].subtle.exportKey(KEY_FORMAT_JWK, key);\r\n msExportKey.addEventListener(\"complete\", (e: { target: { result: ArrayBuffer; }; }) => {\r\n const resultBuffer: ArrayBuffer = e.target.result;\r\n\r\n const resultString = BrowserStringUtils.utf8ArrToString(new Uint8Array(resultBuffer))\r\n .replace(/\\r/g, Constants.EMPTY_STRING)\r\n .replace(/\\n/g, Constants.EMPTY_STRING)\r\n .replace(/\\t/g, Constants.EMPTY_STRING)\r\n .split(\" \").join(Constants.EMPTY_STRING)\r\n .replace(\"\\u0000\", Constants.EMPTY_STRING);\r\n\r\n try {\r\n resolve(JSON.parse(resultString));\r\n } catch (e) {\r\n reject(e);\r\n }\r\n });\r\n\r\n msExportKey.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async importKey(keyData: JsonWebKey, algorithm: RsaHashedImportParams, extractable: boolean, keyUsages: KeyUsage[]): Promise {\r\n const keyString = BrowserStringUtils.getSortedObjectString(keyData);\r\n const keyBuffer = BrowserStringUtils.stringToArrayBuffer(keyString);\r\n\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msImportKey = window[\"msCrypto\"].subtle.importKey(KEY_FORMAT_JWK, keyBuffer, algorithm, extractable, keyUsages);\r\n msImportKey.addEventListener(\"complete\", (e: { target: { result: CryptoKey | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n\r\n msImportKey.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n\r\n async sign(algorithm: AlgorithmIdentifier, key: CryptoKey, data: ArrayBuffer): Promise {\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const msSign = window[\"msCrypto\"].subtle.sign(algorithm, key, data);\r\n msSign.addEventListener(\"complete\", (e: { target: { result: ArrayBuffer | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n\r\n msSign.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n \r\n async digest(algorithm: AlgorithmIdentifier, data: Uint8Array): Promise {\r\n return new Promise((resolve, reject) => {\r\n const digestOperation = window[\"msCrypto\"].subtle.digest(algorithm, data.buffer);\r\n digestOperation.addEventListener(\"complete\", (e: { target: { result: ArrayBuffer | PromiseLike; }; }) => {\r\n resolve(e.target.result);\r\n });\r\n digestOperation.addEventListener(\"error\", (error: string) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"@azure/msal-common\";\r\n\r\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const BrowserConfigurationAuthErrorMessage = {\r\n redirectUriNotSet: {\r\n code: \"redirect_uri_empty\",\r\n desc: \"A redirect URI is required for all calls, and none has been set.\"\r\n },\r\n postLogoutUriNotSet: {\r\n code: \"post_logout_uri_empty\",\r\n desc: \"A post logout redirect has not been set.\"\r\n },\r\n storageNotSupportedError: {\r\n code: \"storage_not_supported\",\r\n desc: \"Given storage configuration option was not supported.\"\r\n },\r\n noRedirectCallbacksSet: {\r\n code: \"no_redirect_callbacks\",\r\n desc: \"No redirect callbacks have been set. Please call setRedirectCallbacks() with the appropriate function arguments before continuing. \" +\r\n \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\r\n },\r\n invalidCallbackObject: {\r\n code: \"invalid_callback_object\",\r\n desc: \"The object passed for the callback was invalid. \" +\r\n \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\r\n },\r\n stubPcaInstanceCalled: {\r\n code: \"stubbed_public_client_application_called\",\r\n desc: \"Stub instance of Public Client Application was called. If using msal-react, please ensure context is not used without a provider. For more visit: aka.ms/msaljs/browser-errors\"\r\n },\r\n inMemRedirectUnavailable: {\r\n code: \"in_mem_redirect_unavailable\",\r\n desc: \"Redirect cannot be supported. In-memory storage was selected and storeAuthStateInCookie=false, which would cause the library to be unable to handle the incoming hash. If you would like to use the redirect API, please use session/localStorage or set storeAuthStateInCookie=true.\"\r\n },\r\n entropyNotProvided: {\r\n code: \"entropy_not_provided\",\r\n desc: \"The available browser crypto interface requires entropy set via system.cryptoOptions.entropy configuration option.\"\r\n }\r\n};\r\n\r\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\r\nexport class BrowserConfigurationAuthError extends AuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"BrowserConfigurationAuthError\";\r\n\r\n Object.setPrototypeOf(this, BrowserConfigurationAuthError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the redirect uri is empty (not set by caller)\r\n */\r\n static createRedirectUriEmptyError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.redirectUriNotSet.code,\r\n BrowserConfigurationAuthErrorMessage.redirectUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)\r\n */\r\n static createPostLogoutRedirectUriEmptyError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.code,\r\n BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates error thrown when given storage location is not supported.\r\n * @param givenStorageLocation \r\n */\r\n static createStorageNotSupportedError(givenStorageLocation: string): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.storageNotSupportedError.code, `${BrowserConfigurationAuthErrorMessage.storageNotSupportedError.desc} Given Location: ${givenStorageLocation}`);\r\n }\r\n\r\n /**\r\n * Creates error thrown when redirect callbacks are not set before calling loginRedirect() or acquireTokenRedirect().\r\n */\r\n static createRedirectCallbacksNotSetError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.code, \r\n BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.desc);\r\n }\r\n\r\n /**\r\n * Creates error thrown when the stub instance of PublicClientApplication is called.\r\n */\r\n static createStubPcaInstanceCalledError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.stubPcaInstanceCalled.code,\r\n BrowserConfigurationAuthErrorMessage.stubPcaInstanceCalled.desc);\r\n }\r\n\r\n /*\r\n * Create an error thrown when in-memory storage is used and storeAuthStateInCookie=false.\r\n */\r\n static createInMemoryRedirectUnavailableError(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.inMemRedirectUnavailable.code, BrowserConfigurationAuthErrorMessage.inMemRedirectUnavailable.desc);\r\n }\r\n \r\n /**\r\n * Creates an error thrown when a crypto interface that requires entropy is initialized without entropy\r\n */\r\n static createEntropyNotProvided(): BrowserConfigurationAuthError {\r\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.entropyNotProvided.code, BrowserConfigurationAuthErrorMessage.entropyNotProvided.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { ISubtleCrypto } from \"./ISubtleCrypto\";\r\nimport { ModernBrowserCrypto } from \"./ModernBrowserCrypto\";\r\nimport { MsrBrowserCrypto } from \"./MsrBrowserCrypto\";\r\nimport { MsBrowserCrypto } from \"./MsBrowserCrypto\";\r\nimport { Logger } from \"@azure/msal-common\";\r\nimport { BrowserConfigurationAuthError } from \"../error/BrowserConfigurationAuthError\";\r\nimport { CryptoOptions } from \"../config/Configuration\";\r\n/**\r\n * See here for more info on RsaHashedKeyGenParams: https://developer.mozilla.org/en-US/docs/Web/API/RsaHashedKeyGenParams\r\n */\r\n// RSA KeyGen Algorithm\r\nconst PKCS1_V15_KEYGEN_ALG = \"RSASSA-PKCS1-v1_5\";\r\n// SHA-256 hashing algorithm\r\nconst S256_HASH_ALG = \"SHA-256\";\r\n// MOD length for PoP tokens\r\nconst MODULUS_LENGTH = 2048;\r\n// Public Exponent\r\nconst PUBLIC_EXPONENT: Uint8Array = new Uint8Array([0x01, 0x00, 0x01]);\r\n\r\n/**\r\n * This class implements functions used by the browser library to perform cryptography operations such as\r\n * hashing and encoding. It also has helper functions to validate the availability of specific APIs.\r\n */\r\nexport class BrowserCrypto {\r\n\r\n private keygenAlgorithmOptions: RsaHashedKeyGenParams;\r\n private subtleCrypto: ISubtleCrypto;\r\n private logger: Logger;\r\n private cryptoOptions?: CryptoOptions;\r\n\r\n constructor(logger: Logger, cryptoOptions?: CryptoOptions) {\r\n this.logger = logger;\r\n this.cryptoOptions = cryptoOptions;\r\n\r\n if (this.hasBrowserCrypto()) {\r\n // Use standard modern web crypto if available\r\n this.logger.verbose(\"BrowserCrypto: modern crypto interface available\");\r\n this.subtleCrypto = new ModernBrowserCrypto();\r\n } else if (this.hasIECrypto()) {\r\n // For IE11, use msCrypto interface\r\n this.logger.verbose(\"BrowserCrypto: MS crypto interface available\");\r\n this.subtleCrypto = new MsBrowserCrypto();\r\n } else if (this.hasMsrCrypto() && this.cryptoOptions?.useMsrCrypto) {\r\n // For other browsers, use MSR Crypto if found\r\n this.logger.verbose(\"BrowserCrypto: MSR crypto interface available\");\r\n this.subtleCrypto = new MsrBrowserCrypto();\r\n } else {\r\n if (this.hasMsrCrypto()) {\r\n this.logger.info(\"BrowserCrypto: MSR Crypto interface available but system.cryptoOptions.useMsrCrypto not enabled\");\r\n }\r\n this.logger.error(\"BrowserCrypto: No crypto interfaces available.\");\r\n throw BrowserAuthError.createCryptoNotAvailableError(\"Browser crypto, msCrypto, or msrCrypto interfaces not available.\");\r\n }\r\n\r\n // Mainly needed for MSR Crypto: https://github.com/microsoft/MSR-JavaScript-Crypto#random-number-generator-prng\r\n if (this.subtleCrypto.initPrng) {\r\n this.logger.verbose(\"BrowserCrypto: Interface requires entropy\");\r\n\r\n if (!this.cryptoOptions?.entropy) {\r\n this.logger.error(\"BrowserCrypto: Interface requires entropy but none provided.\");\r\n throw BrowserConfigurationAuthError.createEntropyNotProvided();\r\n }\r\n\r\n this.logger.verbose(\"BrowserCrypto: Entropy provided\");\r\n this.subtleCrypto.initPrng(this.cryptoOptions.entropy);\r\n }\r\n\r\n this.keygenAlgorithmOptions = {\r\n name: PKCS1_V15_KEYGEN_ALG,\r\n hash: S256_HASH_ALG,\r\n modulusLength: MODULUS_LENGTH,\r\n publicExponent: PUBLIC_EXPONENT\r\n };\r\n }\r\n\r\n /**\r\n * Check whether IE crypto or other browser cryptography is available.\r\n */\r\n private hasIECrypto(): boolean {\r\n return \"msCrypto\" in window;\r\n }\r\n\r\n /**\r\n * Check whether browser crypto is available.\r\n */\r\n private hasBrowserCrypto(): boolean {\r\n return \"crypto\" in window;\r\n }\r\n\r\n /**\r\n * Check whether MSR crypto polyfill is available\r\n */\r\n private hasMsrCrypto(): boolean {\r\n return \"msrCrypto\" in window;\r\n }\r\n\r\n /**\r\n * Returns a sha-256 hash of the given dataString as an ArrayBuffer.\r\n * @param dataString \r\n */\r\n async sha256Digest(dataString: string): Promise {\r\n const data = BrowserStringUtils.stringToUtf8Arr(dataString);\r\n // MSR Crypto wants object with name property, instead of string\r\n return this.subtleCrypto.digest({ name: S256_HASH_ALG }, data);\r\n }\r\n\r\n /**\r\n * Populates buffer with cryptographically random values.\r\n * @param dataBuffer \r\n */\r\n getRandomValues(dataBuffer: Uint8Array): Uint8Array {\r\n return this.subtleCrypto.getRandomValues(dataBuffer);\r\n }\r\n\r\n /**\r\n * Generates a keypair based on current keygen algorithm config.\r\n * @param extractable \r\n * @param usages \r\n */\r\n async generateKeyPair(extractable: boolean, usages: Array): Promise {\r\n return this.subtleCrypto.generateKey(this.keygenAlgorithmOptions, extractable, usages);\r\n }\r\n\r\n /**\r\n * Export key as Json Web Key (JWK)\r\n * @param key \r\n * @param format \r\n */\r\n async exportJwk(key: CryptoKey): Promise {\r\n return this.subtleCrypto.exportKey(key);\r\n }\r\n\r\n /**\r\n * Imports key as Json Web Key (JWK), can set extractable and usages.\r\n * @param key \r\n * @param format \r\n * @param extractable \r\n * @param usages \r\n */\r\n async importJwk(key: JsonWebKey, extractable: boolean, usages: Array): Promise {\r\n return this.subtleCrypto.importKey(key, this.keygenAlgorithmOptions, extractable, usages);\r\n }\r\n\r\n /**\r\n * Signs given data with given key\r\n * @param key \r\n * @param data \r\n */\r\n async sign(key: CryptoKey, data: ArrayBuffer): Promise {\r\n return this.subtleCrypto.sign(this.keygenAlgorithmOptions, key, data);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { DB_NAME, DB_TABLE_NAME, DB_VERSION } from \"../utils/BrowserConstants\";\r\nimport { IAsyncStorage } from \"./IAsyncMemoryStorage\";\r\n\r\ninterface IDBOpenDBRequestEvent extends Event {\r\n target: IDBOpenDBRequest & EventTarget;\r\n}\r\n\r\ninterface IDBOpenOnUpgradeNeededEvent extends IDBVersionChangeEvent {\r\n target: IDBOpenDBRequest & EventTarget;\r\n}\r\n\r\ninterface IDBRequestEvent extends Event {\r\n target: IDBRequest & EventTarget;\r\n}\r\n\r\n/**\r\n * Storage wrapper for IndexedDB storage in browsers: https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API\r\n */\r\nexport class DatabaseStorage implements IAsyncStorage {\r\n private db: IDBDatabase|undefined;\r\n private dbName: string;\r\n private tableName: string;\r\n private version: number;\r\n private dbOpen: boolean;\r\n\r\n constructor() {\r\n this.dbName = DB_NAME;\r\n this.version = DB_VERSION;\r\n this.tableName = DB_TABLE_NAME;\r\n this.dbOpen = false;\r\n }\r\n\r\n /**\r\n * Opens IndexedDB instance.\r\n */\r\n async open(): Promise {\r\n return new Promise((resolve, reject) => {\r\n const openDB = window.indexedDB.open(this.dbName, this.version);\r\n openDB.addEventListener(\"upgradeneeded\", (e: IDBVersionChangeEvent) => {\r\n const event = e as IDBOpenOnUpgradeNeededEvent;\r\n event.target.result.createObjectStore(this.tableName);\r\n });\r\n openDB.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBOpenDBRequestEvent;\r\n this.db = event.target.result;\r\n this.dbOpen = true;\r\n resolve();\r\n });\r\n openDB.addEventListener(\"error\", () => reject(BrowserAuthError.createDatabaseUnavailableError()));\r\n });\r\n }\r\n\r\n /**\r\n * Closes the connection to IndexedDB database when all pending transactions\r\n * complete.\r\n */\r\n closeConnection(): void {\r\n const db = this.db;\r\n if (db && this.dbOpen) {\r\n db.close();\r\n this.dbOpen = false;\r\n }\r\n }\r\n\r\n /**\r\n * Opens database if it's not already open\r\n */\r\n private async validateDbIsOpen(): Promise {\r\n if (!this.dbOpen) {\r\n return await this.open();\r\n }\r\n }\r\n\r\n /**\r\n * Retrieves item from IndexedDB instance.\r\n * @param key \r\n */\r\n async getItem(key: string): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve, reject) => {\r\n // TODO: Add timeouts?\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbGet = objectStore.get(key);\r\n \r\n dbGet.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBRequestEvent;\r\n this.closeConnection();\r\n resolve(event.target.result);\r\n });\r\n\r\n dbGet.addEventListener(\"error\", (e: Event) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Adds item to IndexedDB under given key\r\n * @param key \r\n * @param payload \r\n */\r\n async setItem(key: string, payload: T): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve: Function, reject: Function) => {\r\n // TODO: Add timeouts?\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n const transaction = this.db.transaction([this.tableName], \"readwrite\");\r\n\r\n const objectStore = transaction.objectStore(this.tableName);\r\n\r\n const dbPut = objectStore.put(payload, key);\r\n\r\n dbPut.addEventListener(\"success\", () => {\r\n this.closeConnection();\r\n resolve();\r\n });\r\n\r\n dbPut.addEventListener(\"error\", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Removes item from IndexedDB under given key\r\n * @param key\r\n */\r\n async removeItem(key: string): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve: Function, reject: Function) => {\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n\r\n const transaction = this.db.transaction([this.tableName], \"readwrite\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbDelete = objectStore.delete(key);\r\n\r\n dbDelete.addEventListener(\"success\", () => {\r\n this.closeConnection();\r\n resolve();\r\n });\r\n\r\n dbDelete.addEventListener(\"error\", (e) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Get all the keys from the storage object as an iterable array of strings.\r\n */\r\n async getKeys(): Promise {\r\n await this.validateDbIsOpen();\r\n return new Promise((resolve: Function, reject: Function) => {\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n\r\n const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbGetKeys = objectStore.getAllKeys();\r\n\r\n dbGetKeys.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBRequestEvent;\r\n this.closeConnection();\r\n resolve(event.target.result);\r\n });\r\n\r\n dbGetKeys.addEventListener(\"error\", (e: Event) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * Checks whether there is an object under the search key in the object store\r\n */\r\n async containsKey(key: string): Promise {\r\n await this.validateDbIsOpen();\r\n\r\n return new Promise((resolve: Function, reject: Function) => {\r\n if (!this.db) {\r\n return reject(BrowserAuthError.createDatabaseNotOpenError());\r\n }\r\n\r\n const transaction = this.db.transaction([this.tableName], \"readonly\");\r\n const objectStore = transaction.objectStore(this.tableName);\r\n const dbContainsKey = objectStore.count(key);\r\n\r\n dbContainsKey.addEventListener(\"success\", (e: Event) => {\r\n const event = e as IDBRequestEvent;\r\n this.closeConnection();\r\n resolve(event.target.result === 1);\r\n });\r\n\r\n dbContainsKey.addEventListener(\"error\", (e: Event) => {\r\n this.closeConnection();\r\n reject(e);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Deletes the MSAL database. The database is deleted rather than cleared to make it possible\r\n * for client applications to downgrade to a previous MSAL version without worrying about forward compatibility issues\r\n * with IndexedDB database versions.\r\n */\r\n async deleteDatabase(): Promise {\r\n // Check if database being deleted exists\r\n\r\n if (this.db && this.dbOpen) {\r\n this.closeConnection();\r\n }\r\n\r\n return new Promise((resolve: Function, reject: Function) => {\r\n const deleteDbRequest = window.indexedDB.deleteDatabase(DB_NAME);\r\n deleteDbRequest.addEventListener(\"success\", () => resolve(true));\r\n deleteDbRequest.addEventListener(\"blocked\", () => resolve(true));\r\n deleteDbRequest.addEventListener(\"error\", () => reject(false));\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IWindowStorage } from \"./IWindowStorage\";\r\n\r\nexport class MemoryStorage implements IWindowStorage {\r\n\r\n private cache: Map;\r\n\r\n constructor() {\r\n this.cache = new Map();\r\n }\r\n\r\n getItem(key: string): T | null {\r\n return this.cache.get(key) || null;\r\n }\r\n\r\n setItem(key: string, value: T): void {\r\n this.cache.set(key, value);\r\n }\r\n\r\n removeItem(key: string): void {\r\n this.cache.delete(key);\r\n }\r\n\r\n getKeys(): string[] {\r\n const cacheKeys: string[] = [];\r\n this.cache.forEach((value: T, key: string) => {\r\n cacheKeys.push(key);\r\n });\r\n return cacheKeys;\r\n }\r\n\r\n containsKey(key: string): boolean {\r\n return this.cache.has(key);\r\n }\r\n\r\n clear() :void {\r\n this.cache.clear();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Logger } from \"@azure/msal-common\";\r\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\r\nimport { DatabaseStorage } from \"./DatabaseStorage\";\r\nimport { IAsyncStorage } from \"./IAsyncMemoryStorage\";\r\nimport { MemoryStorage } from \"./MemoryStorage\";\r\n\r\n/**\r\n * This class allows MSAL to store artifacts asynchronously using the DatabaseStorage IndexedDB wrapper,\r\n * backed up with the more volatile MemoryStorage object for cases in which IndexedDB may be unavailable.\r\n */\r\nexport class AsyncMemoryStorage implements IAsyncStorage {\r\n private inMemoryCache: MemoryStorage;\r\n private indexedDBCache: DatabaseStorage;\r\n private logger: Logger;\r\n private storeName: string;\r\n\r\n constructor(logger: Logger, storeName: string) {\r\n this.inMemoryCache = new MemoryStorage();\r\n this.indexedDBCache = new DatabaseStorage();\r\n this.logger = logger;\r\n this.storeName = storeName;\r\n }\r\n\r\n private handleDatabaseAccessError(error: unknown): void {\r\n if (error instanceof BrowserAuthError && error.errorCode === BrowserAuthErrorMessage.databaseUnavailable.code) {\r\n this.logger.error(\"Could not access persistent storage. This may be caused by browser privacy features which block persistent storage in third-party contexts.\");\r\n } else {\r\n throw error;\r\n }\r\n }\r\n /**\r\n * Get the item matching the given key. Tries in-memory cache first, then in the asynchronous\r\n * storage object if item isn't found in-memory.\r\n * @param key \r\n */\r\n async getItem(key: string): Promise {\r\n const item = this.inMemoryCache.getItem(key);\r\n if(!item) {\r\n try {\r\n this.logger.verbose(\"Queried item not found in in-memory cache, now querying persistent storage.\");\r\n return await this.indexedDBCache.getItem(key);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return item;\r\n }\r\n\r\n /**\r\n * Sets the item in the in-memory cache and then tries to set it in the asynchronous\r\n * storage object with the given key.\r\n * @param key \r\n * @param value \r\n */\r\n async setItem(key: string, value: T): Promise {\r\n this.inMemoryCache.setItem(key, value);\r\n try {\r\n await this.indexedDBCache.setItem(key, value);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the item matching the key from the in-memory cache, then tries to remove it from the asynchronous storage object.\r\n * @param key \r\n */\r\n async removeItem(key: string): Promise {\r\n this.inMemoryCache.removeItem(key);\r\n try {\r\n await this.indexedDBCache.removeItem(key);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Get all the keys from the in-memory cache as an iterable array of strings. If no keys are found, query the keys in the \r\n * asynchronous storage object.\r\n */\r\n async getKeys(): Promise {\r\n const cacheKeys = this.inMemoryCache.getKeys();\r\n if (cacheKeys.length === 0) {\r\n try {\r\n this.logger.verbose(\"In-memory cache is empty, now querying persistent storage.\");\r\n return await this.indexedDBCache.getKeys();\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return cacheKeys;\r\n }\r\n\r\n /**\r\n * Returns true or false if the given key is present in the cache.\r\n * @param key \r\n */\r\n async containsKey(key: string): Promise {\r\n const containsKey = this.inMemoryCache.containsKey(key);\r\n if(!containsKey) {\r\n try {\r\n this.logger.verbose(\"Key not found in in-memory cache, now querying persistent storage.\");\r\n return await this.indexedDBCache.containsKey(key);\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n }\r\n }\r\n return containsKey;\r\n }\r\n\r\n /**\r\n * Clears in-memory Map\r\n */\r\n clearInMemory(): void {\r\n // InMemory cache is a Map instance, clear is straightforward\r\n this.logger.verbose(`Deleting in-memory keystore ${this.storeName}`);\r\n this.inMemoryCache.clear();\r\n this.logger.verbose(`In-memory keystore ${this.storeName} deleted`);\r\n }\r\n\r\n /**\r\n * Tries to delete the IndexedDB database\r\n * @returns\r\n */\r\n async clearPersistent(): Promise {\r\n try {\r\n this.logger.verbose(\"Deleting persistent keystore\");\r\n const dbDeleted = await this.indexedDBCache.deleteDatabase();\r\n if (dbDeleted) {\r\n this.logger.verbose(\"Persistent keystore deleted\");\r\n }\r\n \r\n return dbDeleted;\r\n } catch (e) {\r\n this.handleDatabaseAccessError(e);\r\n return false;\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { LoggerOptions } from \"../config/ClientConfiguration\";\r\nimport { Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * Options for logger messages.\r\n */\r\nexport type LoggerMessageOptions = {\r\n logLevel: LogLevel,\r\n containsPii?: boolean,\r\n context?: string,\r\n correlationId?: string\r\n};\r\n\r\n/**\r\n * Log message level.\r\n */\r\nexport enum LogLevel {\r\n Error,\r\n Warning,\r\n Info,\r\n Verbose,\r\n Trace\r\n}\r\n\r\n/**\r\n * Callback to send the messages to.\r\n */\r\nexport interface ILoggerCallback {\r\n (level: LogLevel, message: string, containsPii: boolean): void;\r\n}\r\n\r\n/**\r\n * Class which facilitates logging of messages to a specific place.\r\n */\r\nexport class Logger {\r\n\r\n // Correlation ID for request, usually set by user.\r\n private correlationId: string;\r\n\r\n // Current log level, defaults to info.\r\n private level: LogLevel = LogLevel.Info;\r\n\r\n // Boolean describing whether PII logging is allowed.\r\n private piiLoggingEnabled: boolean;\r\n\r\n // Callback to send messages to.\r\n private localCallback: ILoggerCallback;\r\n\r\n // Package name implementing this logger\r\n private packageName: string;\r\n\r\n // Package version implementing this logger\r\n private packageVersion: string;\r\n\r\n constructor(loggerOptions: LoggerOptions, packageName?: string, packageVersion?: string) {\r\n const defaultLoggerCallback = () => {\r\n return;\r\n };\r\n const setLoggerOptions = loggerOptions || Logger.createDefaultLoggerOptions();\r\n this.localCallback = setLoggerOptions.loggerCallback || defaultLoggerCallback;\r\n this.piiLoggingEnabled = setLoggerOptions.piiLoggingEnabled || false;\r\n this.level = typeof(setLoggerOptions.logLevel) === \"number\" ? setLoggerOptions.logLevel : LogLevel.Info;\r\n this.correlationId = setLoggerOptions.correlationId || Constants.EMPTY_STRING;\r\n this.packageName = packageName || Constants.EMPTY_STRING;\r\n this.packageVersion = packageVersion || Constants.EMPTY_STRING;\r\n }\r\n \r\n private static createDefaultLoggerOptions(): LoggerOptions {\r\n return {\r\n loggerCallback: () => {\r\n // allow users to not set loggerCallback\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: LogLevel.Info\r\n };\r\n }\r\n\r\n /**\r\n * Create new Logger with existing configurations.\r\n */\r\n public clone(packageName: string, packageVersion: string, correlationId?: string): Logger {\r\n return new Logger({loggerCallback: this.localCallback, piiLoggingEnabled: this.piiLoggingEnabled, logLevel: this.level, correlationId: correlationId || this.correlationId}, packageName, packageVersion);\r\n }\r\n\r\n /**\r\n * Log message with required options.\r\n */\r\n private logMessage(logMessage: string, options: LoggerMessageOptions): void {\r\n if ((options.logLevel > this.level) || (!this.piiLoggingEnabled && options.containsPii)) {\r\n return;\r\n }\r\n const timestamp = new Date().toUTCString();\r\n\r\n // Add correlationId to logs if set, correlationId provided on log messages take precedence\r\n let logHeader: string;\r\n if (!StringUtils.isEmpty(options.correlationId)) {\r\n logHeader = `[${timestamp}] : [${options.correlationId}]`;\r\n } else if (!StringUtils.isEmpty(this.correlationId)) {\r\n logHeader = `[${timestamp}] : [${this.correlationId}]`;\r\n } else {\r\n logHeader = `[${timestamp}]`;\r\n }\r\n\r\n const log = `${logHeader} : ${this.packageName}@${this.packageVersion} : ${LogLevel[options.logLevel]} - ${logMessage}`;\r\n // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? \"-Pii\": Constants.EMPTY_STRING}${options.context ? `:${options.context}` : Constants.EMPTY_STRING}`)(logMessage);\r\n this.executeCallback(options.logLevel, log, options.containsPii || false);\r\n }\r\n\r\n /**\r\n * Execute callback with message.\r\n */\r\n executeCallback(level: LogLevel, message: string, containsPii: boolean): void {\r\n if (this.localCallback) {\r\n this.localCallback(level, message, containsPii);\r\n }\r\n }\r\n\r\n /**\r\n * Logs error messages.\r\n */\r\n error(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Error,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs error messages with PII.\r\n */\r\n errorPii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Error,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs warning messages.\r\n */\r\n warning(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Warning,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs warning messages with PII.\r\n */\r\n warningPii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Warning,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs info messages.\r\n */\r\n info(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Info,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs info messages with PII.\r\n */\r\n infoPii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Info,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs verbose messages.\r\n */\r\n verbose(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Verbose,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs verbose messages with PII.\r\n */\r\n verbosePii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Verbose,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs trace messages.\r\n */\r\n trace(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Trace,\r\n containsPii: false,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Logs trace messages with PII.\r\n */\r\n tracePii(message: string, correlationId?: string): void {\r\n this.logMessage(message, {\r\n logLevel: LogLevel.Trace,\r\n containsPii: true,\r\n correlationId: correlationId || Constants.EMPTY_STRING\r\n });\r\n }\r\n\r\n /**\r\n * Returns whether PII Logging is enabled or not.\r\n */\r\n isPiiLoggingEnabled(): boolean {\r\n return this.piiLoggingEnabled || false;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ICrypto, IPerformanceClient, JoseHeader, Logger, PerformanceEvents, PkceCodes, SignedHttpRequest, SignedHttpRequestParameters } from \"@azure/msal-common\";\r\nimport { GuidGenerator } from \"./GuidGenerator\";\r\nimport { Base64Encode } from \"../encode/Base64Encode\";\r\nimport { Base64Decode } from \"../encode/Base64Decode\";\r\nimport { PkceGenerator } from \"./PkceGenerator\";\r\nimport { BrowserCrypto } from \"./BrowserCrypto\";\r\nimport { BrowserStringUtils } from \"../utils/BrowserStringUtils\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { CryptoKeyStore } from \"../cache/CryptoKeyStore\";\r\nimport { CryptoOptions } from \"../config/Configuration\";\r\n\r\nexport type CachedKeyPair = {\r\n publicKey: CryptoKey,\r\n privateKey: CryptoKey,\r\n requestMethod?: string,\r\n requestUri?: string\r\n};\r\n\r\n/**\r\n * This class implements MSAL's crypto interface, which allows it to perform base64 encoding and decoding, generating cryptographically random GUIDs and \r\n * implementing Proof Key for Code Exchange specs for the OAuth Authorization Code Flow using PKCE (rfc here: https://tools.ietf.org/html/rfc7636).\r\n */\r\nexport class CryptoOps implements ICrypto {\r\n\r\n private browserCrypto: BrowserCrypto;\r\n private guidGenerator: GuidGenerator;\r\n private b64Encode: Base64Encode;\r\n private b64Decode: Base64Decode;\r\n private pkceGenerator: PkceGenerator;\r\n private logger: Logger;\r\n\r\n /**\r\n * CryptoOps can be used in contexts outside a PCA instance,\r\n * meaning there won't be a performance manager available.\r\n */\r\n private performanceClient: IPerformanceClient | undefined;\r\n\r\n private static POP_KEY_USAGES: Array = [\"sign\", \"verify\"];\r\n private static EXTRACTABLE: boolean = true;\r\n private cache: CryptoKeyStore;\r\n\r\n constructor(logger: Logger, performanceClient?: IPerformanceClient, cryptoConfig?: CryptoOptions) {\r\n this.logger = logger;\r\n // Browser crypto needs to be validated first before any other classes can be set.\r\n this.browserCrypto = new BrowserCrypto(this.logger, cryptoConfig);\r\n this.b64Encode = new Base64Encode();\r\n this.b64Decode = new Base64Decode();\r\n this.guidGenerator = new GuidGenerator(this.browserCrypto);\r\n this.pkceGenerator = new PkceGenerator(this.browserCrypto);\r\n this.cache = new CryptoKeyStore(this.logger);\r\n this.performanceClient = performanceClient;\r\n }\r\n\r\n /**\r\n * Creates a new random GUID - used to populate state and nonce.\r\n * @returns string (GUID)\r\n */\r\n createNewGuid(): string {\r\n return this.guidGenerator.generateGuid();\r\n }\r\n\r\n /**\r\n * Encodes input string to base64.\r\n * @param input \r\n */\r\n base64Encode(input: string): string {\r\n return this.b64Encode.encode(input);\r\n } \r\n \r\n /**\r\n * Decodes input string from base64.\r\n * @param input \r\n */\r\n base64Decode(input: string): string {\r\n return this.b64Decode.decode(input);\r\n }\r\n\r\n /**\r\n * Generates PKCE codes used in Authorization Code Flow.\r\n */\r\n async generatePkceCodes(): Promise {\r\n return this.pkceGenerator.generateCodes();\r\n }\r\n\r\n /**\r\n * Generates a keypair, stores it and returns a thumbprint\r\n * @param request\r\n */\r\n async getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise {\r\n const publicKeyThumbMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsGetPublicKeyThumbprint, request.correlationId);\r\n\r\n // Generate Keypair\r\n const keyPair: CryptoKeyPair = await this.browserCrypto.generateKeyPair(CryptoOps.EXTRACTABLE, CryptoOps.POP_KEY_USAGES);\r\n\r\n // Generate Thumbprint for Public Key\r\n const publicKeyJwk: JsonWebKey = await this.browserCrypto.exportJwk(keyPair.publicKey);\r\n \r\n const pubKeyThumprintObj: JsonWebKey = {\r\n e: publicKeyJwk.e,\r\n kty: publicKeyJwk.kty,\r\n n: publicKeyJwk.n\r\n };\r\n \r\n const publicJwkString: string = BrowserStringUtils.getSortedObjectString(pubKeyThumprintObj);\r\n const publicJwkHash = await this.hashString(publicJwkString);\r\n\r\n // Generate Thumbprint for Private Key\r\n const privateKeyJwk: JsonWebKey = await this.browserCrypto.exportJwk(keyPair.privateKey);\r\n // Re-import private key to make it unextractable\r\n const unextractablePrivateKey: CryptoKey = await this.browserCrypto.importJwk(privateKeyJwk, false, [\"sign\"]);\r\n\r\n // Store Keypair data in keystore\r\n await this.cache.asymmetricKeys.setItem(\r\n publicJwkHash, \r\n {\r\n privateKey: unextractablePrivateKey,\r\n publicKey: keyPair.publicKey,\r\n requestMethod: request.resourceRequestMethod,\r\n requestUri: request.resourceRequestUri\r\n }\r\n );\r\n\r\n if (publicKeyThumbMeasurement) {\r\n publicKeyThumbMeasurement.endMeasurement({\r\n success: true\r\n });\r\n }\r\n\r\n return publicJwkHash;\r\n }\r\n\r\n /**\r\n * Removes cryptographic keypair from key store matching the keyId passed in\r\n * @param kid \r\n */\r\n async removeTokenBindingKey(kid: string): Promise {\r\n await this.cache.asymmetricKeys.removeItem(kid);\r\n const keyFound = await this.cache.asymmetricKeys.containsKey(kid);\r\n return !keyFound;\r\n }\r\n\r\n /**\r\n * Removes all cryptographic keys from IndexedDB storage\r\n */\r\n async clearKeystore(): Promise {\r\n return await this.cache.clear();\r\n }\r\n\r\n /**\r\n * Signs the given object as a jwt payload with private key retrieved by given kid.\r\n * @param payload \r\n * @param kid \r\n */\r\n async signJwt(payload: SignedHttpRequest, kid: string, correlationId?: string): Promise {\r\n const signJwtMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.CryptoOptsSignJwt, correlationId);\r\n const cachedKeyPair = await this.cache.asymmetricKeys.getItem(kid);\r\n \r\n if (!cachedKeyPair) {\r\n throw BrowserAuthError.createSigningKeyNotFoundInStorageError(kid);\r\n }\r\n\r\n // Get public key as JWK\r\n const publicKeyJwk = await this.browserCrypto.exportJwk(cachedKeyPair.publicKey);\r\n const publicKeyJwkString = BrowserStringUtils.getSortedObjectString(publicKeyJwk);\r\n\r\n // Base64URL encode public key thumbprint with keyId only: BASE64URL({ kid: \"FULL_PUBLIC_KEY_HASH\" })\r\n const encodedKeyIdThumbprint = this.b64Encode.urlEncode(JSON.stringify({ kid: kid }));\r\n \r\n // Generate header\r\n const shrHeader = JoseHeader.getShrHeaderString({ kid: encodedKeyIdThumbprint, alg: publicKeyJwk.alg });\r\n const encodedShrHeader = this.b64Encode.urlEncode(shrHeader);\r\n\r\n // Generate payload\r\n payload.cnf = {\r\n jwk: JSON.parse(publicKeyJwkString)\r\n };\r\n const encodedPayload = this.b64Encode.urlEncode(JSON.stringify(payload));\r\n\r\n // Form token string\r\n const tokenString = `${encodedShrHeader}.${encodedPayload}`;\r\n\r\n // Sign token\r\n const tokenBuffer = BrowserStringUtils.stringToArrayBuffer(tokenString);\r\n const signatureBuffer = await this.browserCrypto.sign(cachedKeyPair.privateKey, tokenBuffer);\r\n const encodedSignature = this.b64Encode.urlEncodeArr(new Uint8Array(signatureBuffer));\r\n\r\n const signedJwt = `${tokenString}.${encodedSignature}`;\r\n\r\n if (signJwtMeasurement) {\r\n signJwtMeasurement.endMeasurement({\r\n success: true\r\n });\r\n }\r\n\r\n return signedJwt;\r\n }\r\n\r\n /**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\n async hashString(plainText: string): Promise {\r\n const hashBuffer: ArrayBuffer = await this.browserCrypto.sha256Digest(plainText);\r\n const hashBytes = new Uint8Array(hashBuffer);\r\n return this.b64Encode.urlEncodeArr(hashBytes);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nexport type CcsCredential = {\r\n credential: string,\r\n type: CcsCredentialType\r\n};\r\n\r\nexport enum CcsCredentialType {\r\n HOME_ACCOUNT_ID = \"home_account_id\",\r\n UPN = \"UPN\"\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ApplicationTelemetry } from \"../../config/ClientConfiguration\";\r\nimport { Logger } from \"../../logger/Logger\";\r\nimport {\r\n InProgressPerformanceEvent,\r\n IPerformanceClient,\r\n PerformanceCallbackFunction,\r\n QueueMeasurement\r\n} from \"./IPerformanceClient\";\r\nimport { IPerformanceMeasurement } from \"./IPerformanceMeasurement\";\r\nimport {\r\n Counters,\r\n IntFields,\r\n PerformanceEvent,\r\n PerformanceEvents,\r\n PerformanceEventStatus,\r\n StaticFields\r\n} from \"./PerformanceEvent\";\r\n\r\nexport interface PreQueueEvent {\r\n name: PerformanceEvents;\r\n time: number;\r\n}\r\n\r\nexport abstract class PerformanceClient implements IPerformanceClient {\r\n protected authority: string;\r\n protected libraryName: string;\r\n protected libraryVersion: string;\r\n protected applicationTelemetry: ApplicationTelemetry;\r\n protected clientId: string;\r\n protected logger: Logger;\r\n protected callbacks: Map;\r\n\r\n /**\r\n * Multiple events with the same correlation id.\r\n * @protected\r\n * @type {Map}\r\n */\r\n protected eventsByCorrelationId: Map;\r\n\r\n /**\r\n * Map of pre-queue times by correlation Id\r\n *\r\n * @protected\r\n * @type {Map}\r\n */\r\n protected preQueueTimeByCorrelationId: Map;\r\n\r\n /**\r\n * Map of queue measurements by correlation Id\r\n *\r\n * @protected\r\n * @type {Map>}\r\n */\r\n protected queueMeasurements: Map>;\r\n\r\n /**\r\n * Creates an instance of PerformanceClient,\r\n * an abstract class containing core performance telemetry logic.\r\n *\r\n * @constructor\r\n * @param {string} clientId Client ID of the application\r\n * @param {string} authority Authority used by the application\r\n * @param {Logger} logger Logger used by the application\r\n * @param {string} libraryName Name of the library\r\n * @param {string} libraryVersion Version of the library\r\n */\r\n constructor(clientId: string, authority: string, logger: Logger, libraryName: string, libraryVersion: string, applicationTelemetry: ApplicationTelemetry) {\r\n this.authority = authority;\r\n this.libraryName = libraryName;\r\n this.libraryVersion = libraryVersion;\r\n this.applicationTelemetry = applicationTelemetry;\r\n this.clientId = clientId;\r\n this.logger = logger;\r\n this.callbacks = new Map();\r\n this.eventsByCorrelationId = new Map();\r\n this.queueMeasurements = new Map();\r\n this.preQueueTimeByCorrelationId = new Map();\r\n }\r\n\r\n /**\r\n * Generates and returns a unique id, typically a guid.\r\n *\r\n * @abstract\r\n * @returns {string}\r\n */\r\n abstract generateId(): string;\r\n\r\n /**\r\n * Starts and returns an platform-specific implementation of IPerformanceMeasurement.\r\n * Note: this function can be changed to abstract at the next major version bump.\r\n *\r\n * @param {string} measureName\r\n * @param {string} correlationId\r\n * @returns {IPerformanceMeasurement}\r\n */\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n startPerformanceMeasurement(measureName: string, correlationId: string): IPerformanceMeasurement {\r\n return {} as IPerformanceMeasurement;\r\n }\r\n\r\n /**\r\n * Starts and returns an platform-specific implementation of IPerformanceMeasurement.\r\n * Note: this incorrectly-named function will be removed at the next major version bump.\r\n *\r\n * @param {string} measureName\r\n * @param {string} correlationId\r\n * @returns {IPerformanceMeasurement}\r\n */\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n startPerformanceMeasuremeant(measureName: string, correlationId: string): IPerformanceMeasurement {\r\n return {} as IPerformanceMeasurement;\r\n }\r\n\r\n /**\r\n * Sets pre-queue time by correlation Id\r\n *\r\n * @abstract\r\n * @param {PerformanceEvents} eventName\r\n * @param {string} correlationId\r\n * @returns\r\n */\r\n abstract setPreQueueTime(eventName: PerformanceEvents, correlationId?: string): void;\r\n\r\n /**\r\n * Get integral fields.\r\n * Override to change the set.\r\n */\r\n getIntFields(): ReadonlySet {\r\n return IntFields;\r\n }\r\n\r\n /**\r\n * Gets map of pre-queue times by correlation Id\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {string} correlationId\r\n * @returns {number}\r\n */\r\n getPreQueueTime(eventName: PerformanceEvents, correlationId: string): number | void {\r\n const preQueueEvent: PreQueueEvent | undefined = this.preQueueTimeByCorrelationId.get(correlationId);\r\n\r\n if (!preQueueEvent) {\r\n this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue times found for correlationId: ${correlationId}, unable to add queue measurement`);\r\n return;\r\n } else if (preQueueEvent.name !== eventName) {\r\n this.logger.trace(`PerformanceClient.getPreQueueTime: no pre-queue time found for ${eventName}, unable to add queue measurement`);\r\n return;\r\n }\r\n\r\n return preQueueEvent.time;\r\n }\r\n\r\n /**\r\n * Calculates the difference between current time and time when function was queued.\r\n * Note: It is possible to have 0 as the queue time if the current time and the queued time was the same.\r\n *\r\n * @param {number} preQueueTime\r\n * @param {number} currentTime\r\n * @returns {number}\r\n */\r\n calculateQueuedTime(preQueueTime: number, currentTime: number): number {\r\n if (preQueueTime < 1) {\r\n this.logger.trace(`PerformanceClient: preQueueTime should be a positive integer and not ${preQueueTime}`);\r\n return 0;\r\n }\r\n\r\n if (currentTime < 1) {\r\n this.logger.trace(`PerformanceClient: currentTime should be a positive integer and not ${currentTime}`);\r\n return 0;\r\n }\r\n\r\n if (currentTime < preQueueTime) {\r\n this.logger.trace(\"PerformanceClient: currentTime is less than preQueueTime, check how time is being retrieved\");\r\n return 0;\r\n }\r\n\r\n return currentTime-preQueueTime;\r\n }\r\n\r\n /**\r\n * Adds queue measurement time to QueueMeasurements array for given correlation ID.\r\n *\r\n * @param {PerformanceEvents} eventName\r\n * @param {?string} correlationId\r\n * @param {?number} queueTime\r\n * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements\r\n * @returns\r\n */\r\n addQueueMeasurement(eventName: PerformanceEvents, correlationId?: string, queueTime?: number, manuallyCompleted?: boolean): void {\r\n if (!correlationId) {\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: correlationId not provided for ${eventName}, cannot add queue measurement`);\r\n return;\r\n }\r\n\r\n if (queueTime === 0) {\r\n // Possible for there to be no queue time after calculation\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: queue time provided for ${eventName} is ${queueTime}`);\r\n } else if (!queueTime) {\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: no queue time provided for ${eventName}`);\r\n return;\r\n }\r\n\r\n const queueMeasurement: QueueMeasurement = {eventName, queueTime, manuallyCompleted};\r\n\r\n // Adds to existing correlation Id if present in queueMeasurements\r\n const existingMeasurements = this.queueMeasurements.get(correlationId);\r\n if (existingMeasurements) {\r\n existingMeasurements.push(queueMeasurement);\r\n this.queueMeasurements.set(correlationId, existingMeasurements);\r\n } else {\r\n // Sets new correlation Id if not present in queueMeasurements\r\n this.logger.trace(`PerformanceClient.addQueueMeasurement: adding correlationId ${correlationId} to queue measurements`);\r\n const measurementArray = [queueMeasurement];\r\n this.queueMeasurements.set(correlationId, measurementArray);\r\n }\r\n // Delete processed pre-queue event.\r\n this.preQueueTimeByCorrelationId.delete(correlationId);\r\n }\r\n\r\n /**\r\n * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.\r\n *\r\n * @param {PerformanceEvents} measureName\r\n * @param {?string} [correlationId]\r\n * @returns {InProgressPerformanceEvent}\r\n */\r\n startMeasurement(measureName: PerformanceEvents, correlationId?: string): InProgressPerformanceEvent {\r\n // Generate a placeholder correlation if the request does not provide one\r\n const eventCorrelationId = correlationId || this.generateId();\r\n if (!correlationId) {\r\n this.logger.info(`PerformanceClient: No correlation id provided for ${measureName}, generating`, eventCorrelationId);\r\n }\r\n\r\n // Duplicate code to address spelling error will be removed at the next major version bump.\r\n this.logger.trace(`PerformanceClient: Performance measurement started for ${measureName}`, eventCorrelationId);\r\n const performanceMeasurement = this.startPerformanceMeasuremeant(measureName, eventCorrelationId);\r\n performanceMeasurement.startMeasurement();\r\n\r\n const inProgressEvent: PerformanceEvent = {\r\n eventId: this.generateId(),\r\n status: PerformanceEventStatus.InProgress,\r\n authority: this.authority,\r\n libraryName: this.libraryName,\r\n libraryVersion: this.libraryVersion,\r\n clientId: this.clientId,\r\n name: measureName,\r\n startTimeMs: Date.now(),\r\n correlationId: eventCorrelationId,\r\n appName: this.applicationTelemetry?.appName,\r\n appVersion: this.applicationTelemetry?.appVersion,\r\n };\r\n\r\n // Store in progress events so they can be discarded if not ended properly\r\n this.cacheEventByCorrelationId(inProgressEvent);\r\n\r\n // Return the event and functions the caller can use to properly end/flush the measurement\r\n return {\r\n endMeasurement: (event?: Partial): PerformanceEvent | null => {\r\n return this.endMeasurement({\r\n // Initial set of event properties\r\n ...inProgressEvent,\r\n // Properties set when event ends\r\n ...event\r\n },\r\n performanceMeasurement);\r\n },\r\n discardMeasurement: () => {\r\n return this.discardMeasurements(inProgressEvent.correlationId);\r\n },\r\n addStaticFields: (fields: StaticFields) => {\r\n return this.addStaticFields(fields, inProgressEvent.correlationId);\r\n },\r\n increment: (counters: Counters) => {\r\n return this.increment(counters, inProgressEvent.correlationId);\r\n },\r\n measurement: performanceMeasurement,\r\n event: inProgressEvent\r\n };\r\n\r\n }\r\n\r\n /**\r\n * Stops measuring the performance for an operation. Should only be called directly by PerformanceClient classes,\r\n * as consumers should instead use the function returned by startMeasurement.\r\n * Adds a new field named as \"[event name]DurationMs\" for sub-measurements, completes and emits an event\r\n * otherwise.\r\n *\r\n * @param {PerformanceEvent} event\r\n * @param {IPerformanceMeasurement} measurement\r\n * @returns {(PerformanceEvent | null)}\r\n */\r\n endMeasurement(event: PerformanceEvent, measurement?: IPerformanceMeasurement): PerformanceEvent | null {\r\n const rootEvent: PerformanceEvent | undefined = this.eventsByCorrelationId.get(event.correlationId);\r\n if (!rootEvent) {\r\n this.logger.trace(`PerformanceClient: Measurement not found for ${event.eventId}`, event.correlationId);\r\n return null;\r\n }\r\n\r\n const isRoot = event.eventId === rootEvent.eventId;\r\n let queueInfo = {\r\n totalQueueTime: 0,\r\n totalQueueCount: 0,\r\n manuallyCompletedCount: 0\r\n };\r\n if (isRoot) {\r\n queueInfo = this.getQueueInfo(event.correlationId);\r\n this.discardCache(rootEvent.correlationId);\r\n } else {\r\n rootEvent.incompleteSubMeasurements?.delete(event.eventId);\r\n }\r\n\r\n measurement?.endMeasurement();\r\n const durationMs = measurement?.flushMeasurement();\r\n // null indicates no measurement was taken (e.g. needed performance APIs not present)\r\n if (!durationMs) {\r\n this.logger.trace(\"PerformanceClient: Performance measurement not taken\", rootEvent.correlationId);\r\n return null;\r\n }\r\n\r\n this.logger.trace(`PerformanceClient: Performance measurement ended for ${event.name}: ${durationMs} ms`, event.correlationId);\r\n\r\n // Add sub-measurement attribute to root event.\r\n if (!isRoot) {\r\n rootEvent[event.name + \"DurationMs\"] = Math.floor(durationMs);\r\n return { ...rootEvent };\r\n }\r\n\r\n let finalEvent: PerformanceEvent = { ...rootEvent, ...event };\r\n let incompleteSubsCount: number = 0;\r\n // Incomplete sub-measurements are discarded. They are likely an instrumentation bug that should be fixed.\r\n finalEvent.incompleteSubMeasurements?.forEach(subMeasurement => {\r\n this.logger.trace(`PerformanceClient: Incomplete submeasurement ${subMeasurement.name} found for ${event.name}`, finalEvent.correlationId);\r\n incompleteSubsCount++;\r\n });\r\n finalEvent.incompleteSubMeasurements = undefined;\r\n\r\n finalEvent = {\r\n ...finalEvent,\r\n durationMs: Math.round(durationMs),\r\n queuedTimeMs: queueInfo.totalQueueTime,\r\n queuedCount: queueInfo.totalQueueCount,\r\n queuedManuallyCompletedCount: queueInfo.manuallyCompletedCount,\r\n status: PerformanceEventStatus.Completed,\r\n incompleteSubsCount\r\n };\r\n this.truncateIntegralFields(finalEvent, this.getIntFields());\r\n this.emitEvents([finalEvent], event.correlationId);\r\n\r\n return finalEvent;\r\n }\r\n\r\n /**\r\n * Saves extra information to be emitted when the measurements are flushed\r\n * @param fields\r\n * @param correlationId\r\n */\r\n addStaticFields(fields: StaticFields, correlationId: string) : void {\r\n this.logger.trace(\"PerformanceClient: Updating static fields\");\r\n const event = this.eventsByCorrelationId.get(correlationId);\r\n if (event) {\r\n this.eventsByCorrelationId.set(correlationId, {...event, ...fields});\r\n } else {\r\n this.logger.trace(\"PerformanceClient: Event not found for\", correlationId);\r\n }\r\n }\r\n\r\n /**\r\n * Increment counters to be emitted when the measurements are flushed\r\n * @param counters {Counters}\r\n * @param correlationId {string} correlation identifier\r\n */\r\n increment(counters: Counters, correlationId: string): void {\r\n this.logger.trace(\"PerformanceClient: Updating counters\");\r\n const event = this.eventsByCorrelationId.get(correlationId);\r\n if (event) {\r\n for (const counter in counters) {\r\n if (!event.hasOwnProperty(counter)) {\r\n event[counter] = 0;\r\n }\r\n event[counter] += counters[counter];\r\n }\r\n } else {\r\n this.logger.trace(\"PerformanceClient: Event not found for\", correlationId);\r\n }\r\n }\r\n\r\n /**\r\n * Upserts event into event cache.\r\n * First key is the correlation id, second key is the event id.\r\n * Allows for events to be grouped by correlation id,\r\n * and to easily allow for properties on them to be updated.\r\n *\r\n * @private\r\n * @param {PerformanceEvent} event\r\n */\r\n private cacheEventByCorrelationId(event: PerformanceEvent) {\r\n const rootEvent = this.eventsByCorrelationId.get(event.correlationId);\r\n if (rootEvent) {\r\n this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} added/updated`, event.correlationId);\r\n rootEvent.incompleteSubMeasurements = rootEvent.incompleteSubMeasurements || new Map();\r\n rootEvent.incompleteSubMeasurements.set(event.eventId, {name: event.name, startTimeMs: event.startTimeMs });\r\n } else {\r\n this.logger.trace(`PerformanceClient: Performance measurement for ${event.name} started`, event.correlationId);\r\n this.eventsByCorrelationId.set(event.correlationId, { ...event });\r\n }\r\n }\r\n\r\n private getQueueInfo(correlationId: string): { totalQueueTime: number, totalQueueCount: number, manuallyCompletedCount: number } {\r\n const queueMeasurementForCorrelationId = this.queueMeasurements.get(correlationId);\r\n if (!queueMeasurementForCorrelationId) {\r\n this.logger.trace(`PerformanceClient: no queue measurements found for for correlationId: ${correlationId}`);\r\n }\r\n\r\n let totalQueueTime = 0;\r\n let totalQueueCount = 0;\r\n let manuallyCompletedCount = 0;\r\n queueMeasurementForCorrelationId?.forEach((measurement) => {\r\n totalQueueTime += measurement.queueTime;\r\n totalQueueCount++;\r\n manuallyCompletedCount += measurement.manuallyCompleted ? 1 : 0;\r\n });\r\n\r\n return {\r\n totalQueueTime,\r\n totalQueueCount,\r\n manuallyCompletedCount\r\n };\r\n }\r\n\r\n /**\r\n * Removes measurements for a given correlation id.\r\n *\r\n * @param {string} correlationId\r\n */\r\n discardMeasurements(correlationId: string): void {\r\n this.logger.trace(\"PerformanceClient: Performance measurements discarded\", correlationId);\r\n this.eventsByCorrelationId.delete(correlationId);\r\n }\r\n\r\n /**\r\n * Removes cache for a given correlation id.\r\n *\r\n * @param {string} correlationId correlation identifier\r\n */\r\n private discardCache(correlationId: string): void {\r\n this.discardMeasurements(correlationId);\r\n\r\n this.logger.trace(\"PerformanceClient: QueueMeasurements discarded\", correlationId);\r\n this.queueMeasurements.delete(correlationId);\r\n\r\n this.logger.trace(\"PerformanceClient: Pre-queue times discarded\", correlationId);\r\n this.preQueueTimeByCorrelationId.delete(correlationId);\r\n }\r\n\r\n /**\r\n * Registers a callback function to receive performance events.\r\n *\r\n * @param {PerformanceCallbackFunction} callback\r\n * @returns {string}\r\n */\r\n addPerformanceCallback(callback: PerformanceCallbackFunction): string {\r\n const callbackId = this.generateId();\r\n this.callbacks.set(callbackId, callback);\r\n this.logger.verbose(`PerformanceClient: Performance callback registered with id: ${callbackId}`);\r\n\r\n return callbackId;\r\n }\r\n\r\n /**\r\n * Removes a callback registered with addPerformanceCallback.\r\n *\r\n * @param {string} callbackId\r\n * @returns {boolean}\r\n */\r\n removePerformanceCallback(callbackId: string): boolean {\r\n const result = this.callbacks.delete(callbackId);\r\n\r\n if (result) {\r\n this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} removed.`);\r\n } else {\r\n this.logger.verbose(`PerformanceClient: Performance callback ${callbackId} not removed.`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Emits events to all registered callbacks.\r\n *\r\n * @param {PerformanceEvent[]} events\r\n * @param {?string} [correlationId]\r\n */\r\n emitEvents(events: PerformanceEvent[], correlationId: string): void {\r\n this.logger.verbose(\"PerformanceClient: Emitting performance events\", correlationId);\r\n\r\n this.callbacks.forEach((callback: PerformanceCallbackFunction, callbackId: string) => {\r\n this.logger.trace(`PerformanceClient: Emitting event to callback ${callbackId}`, correlationId);\r\n callback.apply(null, [events]);\r\n });\r\n }\r\n\r\n /**\r\n * Enforce truncation of integral fields in performance event.\r\n * @param {PerformanceEvent} event performance event to update.\r\n * @param {Set} intFields integral fields.\r\n */\r\n private truncateIntegralFields(event: PerformanceEvent, intFields: ReadonlySet): void {\r\n intFields.forEach((key) => {\r\n if (key in event && typeof event[key] === \"number\") {\r\n event[key] = Math.floor(event[key]);\r\n }\r\n });\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IPerformanceClient } from \"./IPerformanceClient\";\r\nimport { IPerformanceMeasurement } from \"./IPerformanceMeasurement\";\r\nimport { PerformanceClient } from \"./PerformanceClient\";\r\nimport { PerformanceEvents } from \"./PerformanceEvent\";\r\n\r\nexport class StubPerformanceMeasurement implements IPerformanceMeasurement {\r\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\r\n startMeasurement(): void { }\r\n /* eslint-disable-next-line @typescript-eslint/no-empty-function */\r\n endMeasurement(): void { }\r\n flushMeasurement(): number | null {\r\n return null;\r\n }\r\n \r\n}\r\n\r\nexport class StubPerformanceClient extends PerformanceClient implements IPerformanceClient {\r\n generateId(): string {\r\n return \"callback-id\";\r\n }\r\n \r\n startPerformanceMeasuremeant(): IPerformanceMeasurement {\r\n return new StubPerformanceMeasurement();\r\n }\r\n\r\n startPerformanceMeasurement(): IPerformanceMeasurement {\r\n return new StubPerformanceMeasurement();\r\n }\r\n\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n calculateQueuedTime(preQueueTime: number, currentTime: number): number {\r\n return 0;\r\n }\r\n\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n addQueueMeasurement(eventName: PerformanceEvents, correlationId: string, queueTime: number): void {\r\n return;\r\n }\r\n\r\n /* eslint-disable-next-line @typescript-eslint/no-unused-vars */\r\n setPreQueueTime(eventName: PerformanceEvents, correlationId?: string | undefined): void {\r\n return;\r\n }\r\n\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\nimport { SignedHttpRequest } from \"./SignedHttpRequest\";\r\n\r\n/**\r\n * The PkceCodes type describes the structure\r\n * of objects that contain PKCE code\r\n * challenge and verifier pairs\r\n */\r\nexport type PkceCodes = {\r\n verifier: string,\r\n challenge: string\r\n};\r\n\r\nexport type SignedHttpRequestParameters = Pick & {\r\n correlationId?: string\r\n};\r\n\r\n/**\r\n * Interface for crypto functions used by library\r\n */\r\nexport interface ICrypto {\r\n /**\r\n * Creates a guid randomly.\r\n */\r\n createNewGuid(): string;\r\n /**\r\n * base64 Encode string\r\n * @param input \r\n */\r\n base64Encode(input: string): string;\r\n /**\r\n * base64 decode string\r\n * @param input \r\n */\r\n base64Decode(input: string): string;\r\n /**\r\n * Generate PKCE codes for OAuth. See RFC here: https://tools.ietf.org/html/rfc7636\r\n */\r\n generatePkceCodes(): Promise;\r\n /**\r\n * Generates an JWK RSA S256 Thumbprint\r\n * @param request\r\n */\r\n getPublicKeyThumbprint(request: SignedHttpRequestParameters): Promise;\r\n /**\r\n * Removes cryptographic keypair from key store matching the keyId passed in\r\n * @param kid \r\n */\r\n removeTokenBindingKey(kid: string): Promise;\r\n /**\r\n * Removes all cryptographic keys from IndexedDB storage\r\n */\r\n clearKeystore(): Promise;\r\n /** \r\n * Returns a signed proof-of-possession token with a given acces token that contains a cnf claim with the required kid.\r\n * @param accessToken \r\n */\r\n signJwt(payload: SignedHttpRequest, kid: string, correlationId?: string): Promise;\r\n /**\r\n * Returns the SHA-256 hash of an input string\r\n * @param plainText\r\n */\r\n hashString(plainText: string): Promise;\r\n}\r\n\r\nexport const DEFAULT_CRYPTO_IMPLEMENTATION: ICrypto = {\r\n createNewGuid: (): string => {\r\n const notImplErr = \"Crypto interface - createNewGuid() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n base64Decode: (): string => {\r\n const notImplErr = \"Crypto interface - base64Decode() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n base64Encode: (): string => {\r\n const notImplErr = \"Crypto interface - base64Encode() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async generatePkceCodes(): Promise {\r\n const notImplErr = \"Crypto interface - generatePkceCodes() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async getPublicKeyThumbprint(): Promise {\r\n const notImplErr = \"Crypto interface - getPublicKeyThumbprint() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async removeTokenBindingKey(): Promise {\r\n const notImplErr = \"Crypto interface - removeTokenBindingKey() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async clearKeystore(): Promise {\r\n const notImplErr = \"Crypto interface - clearKeystore() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async signJwt(): Promise {\r\n const notImplErr = \"Crypto interface - signJwt() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async hashString(): Promise {\r\n const notImplErr = \"Crypto interface - hashString() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Separators, CredentialType, CacheType, Constants, AuthenticationScheme } from \"../../utils/Constants\";\r\nimport { ClientAuthError } from \"../../error/ClientAuthError\";\r\n\r\n/**\r\n * Base type for credentials to be stored in the cache: eg: ACCESS_TOKEN, ID_TOKEN etc\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key: -------\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * familyId: Family ID identifier, usually only used for refresh tokens\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.\r\n * tokenType: Matches the authentication scheme for which the token was issued (i.e. Bearer or pop)\r\n * requestedClaimsHash: Matches the SHA 256 hash of the claims object included in the token request\r\n * userAssertionHash: Matches the SHA 256 hash of the obo_assertion for the OBO flow\r\n * }\r\n */\r\nexport class CredentialEntity {\r\n homeAccountId: string;\r\n environment: string;\r\n credentialType: CredentialType;\r\n clientId: string;\r\n secret: string;\r\n familyId?: string;\r\n realm?: string;\r\n target?: string;\r\n userAssertionHash?: string;\r\n tokenType?: AuthenticationScheme;\r\n keyId?: string;\r\n requestedClaimsHash?: string;\r\n\r\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\r\n generateAccountId(): string {\r\n return CredentialEntity.generateAccountIdForCacheKey(this.homeAccountId, this.environment);\r\n }\r\n\r\n /**\r\n * Generate Credential Id key component as per the schema: --\r\n */\r\n generateCredentialId(): string {\r\n return CredentialEntity.generateCredentialIdForCacheKey(\r\n this.credentialType,\r\n this.clientId,\r\n this.realm,\r\n this.familyId\r\n );\r\n }\r\n\r\n /**\r\n * Generate target key component as per schema: \r\n */\r\n generateTarget(): string {\r\n return CredentialEntity.generateTargetForCacheKey(this.target);\r\n }\r\n\r\n /**\r\n * generates credential key\r\n */\r\n generateCredentialKey(): string {\r\n return CredentialEntity.generateCredentialCacheKey(\r\n this.homeAccountId,\r\n this.environment,\r\n this.credentialType,\r\n this.clientId,\r\n this.realm,\r\n this.target,\r\n this.familyId,\r\n this.tokenType,\r\n this.requestedClaimsHash,\r\n );\r\n }\r\n\r\n /**\r\n * returns the type of the cache (in this case credential)\r\n */\r\n generateType(): number {\r\n switch (this.credentialType) {\r\n case CredentialType.ID_TOKEN:\r\n return CacheType.ID_TOKEN;\r\n case CredentialType.ACCESS_TOKEN:\r\n case CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME:\r\n return CacheType.ACCESS_TOKEN;\r\n case CredentialType.REFRESH_TOKEN:\r\n return CacheType.REFRESH_TOKEN;\r\n default: {\r\n throw ClientAuthError.createUnexpectedCredentialTypeError();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * generates credential key\r\n * -\\-----\r\n */\r\n static generateCredentialCacheKey(\r\n homeAccountId: string,\r\n environment: string,\r\n credentialType: CredentialType,\r\n clientId: string,\r\n realm?: string,\r\n target?: string,\r\n familyId?: string,\r\n tokenType?: AuthenticationScheme,\r\n requestedClaimsHash?: string\r\n ): string {\r\n const credentialKey = [\r\n this.generateAccountIdForCacheKey(homeAccountId, environment),\r\n this.generateCredentialIdForCacheKey(credentialType, clientId, realm, familyId),\r\n this.generateTargetForCacheKey(target),\r\n this.generateClaimsHashForCacheKey(requestedClaimsHash),\r\n this.generateSchemeForCacheKey(tokenType)\r\n ];\r\n\r\n return credentialKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * generates Account Id for keys\r\n * @param homeAccountId\r\n * @param environment\r\n */\r\n private static generateAccountIdForCacheKey(\r\n homeAccountId: string,\r\n environment: string\r\n ): string {\r\n const accountId: Array = [homeAccountId, environment];\r\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generates Credential Id for keys\r\n * @param credentialType\r\n * @param realm\r\n * @param clientId\r\n * @param familyId\r\n */\r\n private static generateCredentialIdForCacheKey(\r\n credentialType: CredentialType,\r\n clientId: string,\r\n realm?: string,\r\n familyId?: string\r\n ): string {\r\n const clientOrFamilyId =\r\n credentialType === CredentialType.REFRESH_TOKEN\r\n ? familyId || clientId\r\n : clientId;\r\n const credentialId: Array = [\r\n credentialType,\r\n clientOrFamilyId,\r\n realm || Constants.EMPTY_STRING,\r\n ];\r\n\r\n return credentialId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate target key component as per schema: \r\n */\r\n private static generateTargetForCacheKey(scopes?: string): string {\r\n return (scopes || Constants.EMPTY_STRING).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate requested claims key component as per schema: \r\n */\r\n private static generateClaimsHashForCacheKey(requestedClaimsHash?: string): string {\r\n return(requestedClaimsHash || Constants.EMPTY_STRING).toLowerCase();\r\n }\r\n\r\n /**\r\n * Generate scheme key componenet as per schema: \r\n */\r\n private static generateSchemeForCacheKey(tokenType?: string): string {\r\n /*\r\n * PoP Tokens and SSH certs include scheme in cache key\r\n * Cast to lowercase to handle \"bearer\" from ADFS\r\n */\r\n return (tokenType && tokenType.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase()) ? tokenType.toLowerCase() : Constants.EMPTY_STRING;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CredentialEntity } from \"./CredentialEntity\";\r\nimport { CredentialType } from \"../../utils/Constants\";\r\n\r\n/**\r\n * ID_TOKEN Cache\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key Example: uid.utid-login.microsoftonline.com-idtoken-clientId-contoso.com-\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * }\r\n */\r\nexport class IdTokenEntity extends CredentialEntity {\r\n realm: string;\r\n\r\n /**\r\n * Create IdTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\n static createIdTokenEntity(\r\n homeAccountId: string,\r\n environment: string,\r\n idToken: string,\r\n clientId: string,\r\n tenantId: string,\r\n ): IdTokenEntity {\r\n const idTokenEntity = new IdTokenEntity();\r\n\r\n idTokenEntity.credentialType = CredentialType.ID_TOKEN;\r\n idTokenEntity.homeAccountId = homeAccountId;\r\n idTokenEntity.environment = environment;\r\n idTokenEntity.clientId = clientId;\r\n idTokenEntity.secret = idToken;\r\n idTokenEntity.realm = tenantId;\r\n\r\n return idTokenEntity;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isIdTokenEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"credentialType\") &&\r\n entity.hasOwnProperty(\"realm\") &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"secret\") &&\r\n entity[\"credentialType\"] === CredentialType.ID_TOKEN\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientAuthError } from \"./ClientAuthError\";\r\n\r\n/**\r\n * ClientConfigurationErrorMessage class containing string constants used by error codes and messages.\r\n */\r\nexport const ClientConfigurationErrorMessage = {\r\n redirectUriNotSet: {\r\n code: \"redirect_uri_empty\",\r\n desc: \"A redirect URI is required for all calls, and none has been set.\"\r\n },\r\n postLogoutUriNotSet: {\r\n code: \"post_logout_uri_empty\",\r\n desc: \"A post logout redirect has not been set.\"\r\n },\r\n claimsRequestParsingError: {\r\n code: \"claims_request_parsing_error\",\r\n desc: \"Could not parse the given claims request object.\"\r\n },\r\n authorityUriInsecure: {\r\n code: \"authority_uri_insecure\",\r\n desc: \"Authority URIs must use https. Please see here for valid authority configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options\"\r\n },\r\n urlParseError: {\r\n code: \"url_parse_error\",\r\n desc: \"URL could not be parsed into appropriate segments.\"\r\n },\r\n urlEmptyError: {\r\n code: \"empty_url_error\",\r\n desc: \"URL was empty or null.\"\r\n },\r\n emptyScopesError: {\r\n code: \"empty_input_scopes_error\",\r\n desc: \"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.\"\r\n },\r\n nonArrayScopesError: {\r\n code: \"nonarray_input_scopes_error\",\r\n desc: \"Scopes cannot be passed as non-array.\"\r\n },\r\n clientIdSingleScopeError: {\r\n code: \"clientid_input_scopes_error\",\r\n desc: \"Client ID can only be provided as a single scope.\"\r\n },\r\n invalidPrompt: {\r\n code: \"invalid_prompt_value\",\r\n desc: \"Supported prompt values are 'login', 'select_account', 'consent', 'create', 'none' and 'no_session'. Please see here for valid configuration options: https://azuread.github.io/microsoft-authentication-library-for-js/ref/modules/_azure_msal_common.html#commonauthorizationurlrequest\",\r\n },\r\n invalidClaimsRequest: {\r\n code: \"invalid_claims\",\r\n desc: \"Given claims parameter must be a stringified JSON object.\"\r\n },\r\n tokenRequestEmptyError: {\r\n code: \"token_request_empty\",\r\n desc: \"Token request was empty and not found in cache.\"\r\n },\r\n logoutRequestEmptyError: {\r\n code: \"logout_request_empty\",\r\n desc: \"The logout request was null or undefined.\"\r\n },\r\n invalidCodeChallengeMethod: {\r\n code: \"invalid_code_challenge_method\",\r\n desc: \"code_challenge_method passed is invalid. Valid values are \\\"plain\\\" and \\\"S256\\\".\"\r\n },\r\n invalidCodeChallengeParams: {\r\n code: \"pkce_params_missing\",\r\n desc: \"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request\"\r\n },\r\n invalidCloudDiscoveryMetadata: {\r\n code: \"invalid_cloud_discovery_metadata\",\r\n desc: \"Invalid cloudDiscoveryMetadata provided. Must be a stringified JSON object containing tenant_discovery_endpoint and metadata fields\"\r\n },\r\n invalidAuthorityMetadata: {\r\n code: \"invalid_authority_metadata\",\r\n desc: \"Invalid authorityMetadata provided. Must by a stringified JSON object containing authorization_endpoint, token_endpoint, issuer fields.\"\r\n },\r\n untrustedAuthority: {\r\n code: \"untrusted_authority\",\r\n desc: \"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.\"\r\n },\r\n invalidAzureCloudInstance: {\r\n code: \"invalid_azure_cloud_instance\",\r\n desc: \"Invalid AzureCloudInstance provided. Please refer MSAL JS docs: aks.ms/msaljs/azure_cloud_instance for valid values\"\r\n },\r\n missingSshJwk: {\r\n code: \"missing_ssh_jwk\",\r\n desc: \"Missing sshJwk in SSH certificate request. A stringified JSON Web Key is required when using the SSH authentication scheme.\"\r\n },\r\n missingSshKid: {\r\n code: \"missing_ssh_kid\",\r\n desc: \"Missing sshKid in SSH certificate request. A string that uniquely identifies the public SSH key is required when using the SSH authentication scheme.\"\r\n },\r\n missingNonceAuthenticationHeader: {\r\n code: \"missing_nonce_authentication_header\",\r\n desc: \"Unable to find an authentication header containing server nonce. Either the Authentication-Info or WWW-Authenticate headers must be present in order to obtain a server nonce.\"\r\n },\r\n invalidAuthenticationHeader: {\r\n code: \"invalid_authentication_header\",\r\n desc: \"Invalid authentication header provided\"\r\n },\r\n authorityMismatch: {\r\n code: \"authority_mismatch\",\r\n desc: \"Authority mismatch error. Authority provided in login request or PublicClientApplication config does not match the environment of the provided account. Please use a matching account or make an interactive request to login to this authority.\"\r\n }\r\n};\r\n\r\n/**\r\n * Error thrown when there is an error in configuration of the MSAL.js library.\r\n */\r\nexport class ClientConfigurationError extends ClientAuthError {\r\n\r\n constructor(errorCode: string, errorMessage?: string) {\r\n super(errorCode, errorMessage);\r\n this.name = \"ClientConfigurationError\";\r\n Object.setPrototypeOf(this, ClientConfigurationError.prototype);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the redirect uri is empty (not set by caller)\r\n */\r\n static createRedirectUriEmptyError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.redirectUriNotSet.code,\r\n ClientConfigurationErrorMessage.redirectUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)\r\n */\r\n static createPostLogoutRedirectUriEmptyError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.postLogoutUriNotSet.code,\r\n ClientConfigurationErrorMessage.postLogoutUriNotSet.desc);\r\n }\r\n\r\n /**\r\n * Creates an error thrown when the claims request could not be successfully parsed\r\n */\r\n static createClaimsRequestParsingError(claimsRequestParseError: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.claimsRequestParsingError.code,\r\n `${ClientConfigurationErrorMessage.claimsRequestParsingError.desc} Given value: ${claimsRequestParseError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if authority uri is given an insecure protocol.\r\n * @param urlString\r\n */\r\n static createInsecureAuthorityUriError(urlString: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.authorityUriInsecure.code,\r\n `${ClientConfigurationErrorMessage.authorityUriInsecure.desc} Given URI: ${urlString}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if URL string does not parse into separate segments.\r\n * @param urlString\r\n */\r\n static createUrlParseError(urlParseError: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.urlParseError.code,\r\n `${ClientConfigurationErrorMessage.urlParseError.desc} Given Error: ${urlParseError}`);\r\n }\r\n\r\n /**\r\n * Creates an error thrown if URL string is empty or null.\r\n * @param urlString\r\n */\r\n static createUrlEmptyError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.urlEmptyError.code,\r\n ClientConfigurationErrorMessage.urlEmptyError.desc);\r\n }\r\n\r\n /**\r\n * Error thrown when scopes are empty.\r\n * @param scopesValue\r\n */\r\n static createEmptyScopesArrayError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.emptyScopesError.code,\r\n `${ClientConfigurationErrorMessage.emptyScopesError.desc}`);\r\n }\r\n\r\n /**\r\n * Error thrown when client id scope is not provided as single scope.\r\n * @param inputScopes\r\n */\r\n static createClientIdSingleScopeError(inputScopes: Array): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.clientIdSingleScopeError.code,\r\n `${ClientConfigurationErrorMessage.clientIdSingleScopeError.desc} Given Scopes: ${inputScopes}`);\r\n }\r\n\r\n /**\r\n * Error thrown when prompt is not an allowed type.\r\n * @param promptValue\r\n */\r\n static createInvalidPromptError(promptValue: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidPrompt.code,\r\n `${ClientConfigurationErrorMessage.invalidPrompt.desc} Given value: ${promptValue}`);\r\n }\r\n\r\n /**\r\n * Creates error thrown when claims parameter is not a stringified JSON object\r\n */\r\n static createInvalidClaimsRequestError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidClaimsRequest.code,\r\n ClientConfigurationErrorMessage.invalidClaimsRequest.desc);\r\n }\r\n\r\n /**\r\n * Throws error when token request is empty and nothing cached in storage.\r\n */\r\n static createEmptyLogoutRequestError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.logoutRequestEmptyError.code,\r\n ClientConfigurationErrorMessage.logoutRequestEmptyError.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws error when token request is empty and nothing cached in storage.\r\n */\r\n static createEmptyTokenRequestError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.tokenRequestEmptyError.code,\r\n ClientConfigurationErrorMessage.tokenRequestEmptyError.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws error when an invalid code_challenge_method is passed by the user\r\n */\r\n static createInvalidCodeChallengeMethodError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.invalidCodeChallengeMethod.code,\r\n ClientConfigurationErrorMessage.invalidCodeChallengeMethod.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws error when both params: code_challenge and code_challenge_method are not passed together\r\n */\r\n static createInvalidCodeChallengeParamsError(): ClientConfigurationError {\r\n return new ClientConfigurationError(\r\n ClientConfigurationErrorMessage.invalidCodeChallengeParams.code,\r\n ClientConfigurationErrorMessage.invalidCodeChallengeParams.desc\r\n );\r\n }\r\n\r\n /**\r\n * Throws an error when the user passes invalid cloudDiscoveryMetadata\r\n */\r\n static createInvalidCloudDiscoveryMetadataError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCloudDiscoveryMetadata.code,\r\n ClientConfigurationErrorMessage.invalidCloudDiscoveryMetadata.desc);\r\n }\r\n\r\n /**\r\n * Throws an error when the user passes invalid cloudDiscoveryMetadata\r\n */\r\n static createInvalidAuthorityMetadataError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAuthorityMetadata.code,\r\n ClientConfigurationErrorMessage.invalidAuthorityMetadata.desc);\r\n }\r\n\r\n /**\r\n * Throws error when provided authority is not a member of the trusted host list\r\n */\r\n static createUntrustedAuthorityError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.untrustedAuthority.code,\r\n ClientConfigurationErrorMessage.untrustedAuthority.desc);\r\n }\r\n\r\n /**\r\n * Throws error when the AzureCloudInstance is set to an invalid value\r\n */\r\n static createInvalidAzureCloudInstanceError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAzureCloudInstance.code,\r\n ClientConfigurationErrorMessage.invalidAzureCloudInstance.desc);\r\n }\r\n\r\n /**\r\n * Throws an error when the authentication scheme is set to SSH but the SSH public key is omitted from the request\r\n */\r\n static createMissingSshJwkError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.missingSshJwk.code,\r\n ClientConfigurationErrorMessage.missingSshJwk.desc);\r\n }\r\n\r\n /**\r\n * Throws an error when the authentication scheme is set to SSH but the SSH public key ID is omitted from the request\r\n */\r\n static createMissingSshKidError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.missingSshKid.code,\r\n ClientConfigurationErrorMessage.missingSshKid.desc);\r\n }\r\n\r\n /**\r\n * Throws error when provided headers don't contain a header that a server nonce can be extracted from\r\n */\r\n static createMissingNonceAuthenticationHeadersError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.missingNonceAuthenticationHeader.code,\r\n ClientConfigurationErrorMessage.missingNonceAuthenticationHeader.desc);\r\n }\r\n\r\n /**\r\n * Throws error when a provided header is invalid in any way\r\n */\r\n static createInvalidAuthenticationHeaderError(invalidHeaderName: string, details: string): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidAuthenticationHeader.code,\r\n `${ClientConfigurationErrorMessage.invalidAuthenticationHeader.desc}. Invalid header: ${invalidHeaderName}. Details: ${details}`);\r\n }\r\n \r\n /**\r\n * Create an error when the authority provided in request does not match authority provided in account or MSAL.js configuration.\r\n */\r\n static createAuthorityMismatchError(): ClientConfigurationError {\r\n return new ClientConfigurationError(ClientConfigurationErrorMessage.authorityMismatch.code, ClientConfigurationErrorMessage.authorityMismatch.desc);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { Constants, OIDC_SCOPES } from \"../utils/Constants\";\r\n\r\n/**\r\n * The ScopeSet class creates a set of scopes. Scopes are case-insensitive, unique values, so the Set object in JS makes\r\n * the most sense to implement for this class. All scopes are trimmed and converted to lower case strings in intersection and union functions\r\n * to ensure uniqueness of strings.\r\n */\r\nexport class ScopeSet {\r\n // Scopes as a Set of strings\r\n private scopes: Set;\r\n\r\n constructor(inputScopes: Array) {\r\n // Filter empty string and null/undefined array items\r\n const scopeArr = inputScopes ? StringUtils.trimArrayEntries([...inputScopes]) : [];\r\n const filteredInput = scopeArr ? StringUtils.removeEmptyStringsFromArray(scopeArr) : [];\r\n\r\n // Validate and filter scopes (validate function throws if validation fails)\r\n this.validateInputScopes(filteredInput);\r\n\r\n this.scopes = new Set(); // Iterator in constructor not supported by IE11\r\n filteredInput.forEach(scope => this.scopes.add(scope));\r\n }\r\n\r\n /**\r\n * Factory method to create ScopeSet from space-delimited string\r\n * @param inputScopeString\r\n * @param appClientId\r\n * @param scopesRequired\r\n */\r\n static fromString(inputScopeString: string): ScopeSet {\r\n const scopeString = inputScopeString || Constants.EMPTY_STRING;\r\n const inputScopes: Array = scopeString.split(\" \");\r\n return new ScopeSet(inputScopes);\r\n }\r\n\r\n /**\r\n * Creates the set of scopes to search for in cache lookups\r\n * @param inputScopeString \r\n * @returns \r\n */\r\n static createSearchScopes(inputScopeString: Array): ScopeSet {\r\n const scopeSet = new ScopeSet(inputScopeString);\r\n if (!scopeSet.containsOnlyOIDCScopes()) {\r\n scopeSet.removeOIDCScopes();\r\n } else {\r\n scopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\r\n }\r\n\r\n return scopeSet;\r\n }\r\n\r\n /**\r\n * Used to validate the scopes input parameter requested by the developer.\r\n * @param {Array} inputScopes - Developer requested permissions. Not all scopes are guaranteed to be included in the access token returned.\r\n * @param {boolean} scopesRequired - Boolean indicating whether the scopes array is required or not\r\n */\r\n private validateInputScopes(inputScopes: Array): void {\r\n // Check if scopes are required but not given or is an empty array\r\n if (!inputScopes || inputScopes.length < 1) {\r\n throw ClientConfigurationError.createEmptyScopesArrayError();\r\n }\r\n }\r\n\r\n /**\r\n * Check if a given scope is present in this set of scopes.\r\n * @param scope\r\n */\r\n containsScope(scope: string): boolean {\r\n const lowerCaseScopes = this.printScopesLowerCase().split(\" \");\r\n const lowerCaseScopesSet = new ScopeSet(lowerCaseScopes);\r\n // compare lowercase scopes\r\n return !StringUtils.isEmpty(scope) ? lowerCaseScopesSet.scopes.has(scope.toLowerCase()) : false;\r\n }\r\n\r\n /**\r\n * Check if a set of scopes is present in this set of scopes.\r\n * @param scopeSet\r\n */\r\n containsScopeSet(scopeSet: ScopeSet): boolean {\r\n if (!scopeSet || scopeSet.scopes.size <= 0) {\r\n return false;\r\n }\r\n\r\n return (this.scopes.size >= scopeSet.scopes.size && scopeSet.asArray().every(scope => this.containsScope(scope)));\r\n }\r\n\r\n /**\r\n * Check if set of scopes contains only the defaults\r\n */\r\n containsOnlyOIDCScopes(): boolean {\r\n let defaultScopeCount = 0;\r\n OIDC_SCOPES.forEach((defaultScope: string) => {\r\n if (this.containsScope(defaultScope)) {\r\n defaultScopeCount += 1;\r\n }\r\n });\r\n\r\n return this.scopes.size === defaultScopeCount;\r\n }\r\n\r\n /**\r\n * Appends single scope if passed\r\n * @param newScope\r\n */\r\n appendScope(newScope: string): void {\r\n if (!StringUtils.isEmpty(newScope)) {\r\n this.scopes.add(newScope.trim());\r\n }\r\n }\r\n\r\n /**\r\n * Appends multiple scopes if passed\r\n * @param newScopes\r\n */\r\n appendScopes(newScopes: Array): void {\r\n try {\r\n newScopes.forEach(newScope => this.appendScope(newScope));\r\n } catch (e) {\r\n throw ClientAuthError.createAppendScopeSetError(e);\r\n }\r\n }\r\n\r\n /**\r\n * Removes element from set of scopes.\r\n * @param scope\r\n */\r\n removeScope(scope: string): void {\r\n if (StringUtils.isEmpty(scope)) {\r\n throw ClientAuthError.createRemoveEmptyScopeFromSetError(scope);\r\n }\r\n this.scopes.delete(scope.trim());\r\n }\r\n\r\n /**\r\n * Removes default scopes from set of scopes\r\n * Primarily used to prevent cache misses if the default scopes are not returned from the server\r\n */\r\n removeOIDCScopes(): void {\r\n OIDC_SCOPES.forEach((defaultScope: string) => {\r\n this.scopes.delete(defaultScope);\r\n });\r\n }\r\n\r\n /**\r\n * Combines an array of scopes with the current set of scopes.\r\n * @param otherScopes\r\n */\r\n unionScopeSets(otherScopes: ScopeSet): Set {\r\n if (!otherScopes) {\r\n throw ClientAuthError.createEmptyInputScopeSetError();\r\n }\r\n const unionScopes = new Set(); // Iterator in constructor not supported in IE11\r\n otherScopes.scopes.forEach(scope => unionScopes.add(scope.toLowerCase()));\r\n this.scopes.forEach(scope => unionScopes.add(scope.toLowerCase()));\r\n return unionScopes;\r\n }\r\n\r\n /**\r\n * Check if scopes intersect between this set and another.\r\n * @param otherScopes\r\n */\r\n intersectingScopeSets(otherScopes: ScopeSet): boolean {\r\n if (!otherScopes) {\r\n throw ClientAuthError.createEmptyInputScopeSetError();\r\n }\r\n \r\n // Do not allow OIDC scopes to be the only intersecting scopes\r\n if (!otherScopes.containsOnlyOIDCScopes()) {\r\n otherScopes.removeOIDCScopes();\r\n }\r\n const unionScopes = this.unionScopeSets(otherScopes);\r\n const sizeOtherScopes = otherScopes.getScopeCount();\r\n const sizeThisScopes = this.getScopeCount();\r\n const sizeUnionScopes = unionScopes.size;\r\n return sizeUnionScopes < (sizeThisScopes + sizeOtherScopes);\r\n }\r\n\r\n /**\r\n * Returns size of set of scopes.\r\n */\r\n getScopeCount(): number {\r\n return this.scopes.size;\r\n }\r\n\r\n /**\r\n * Returns the scopes as an array of string values\r\n */\r\n asArray(): Array {\r\n const array: Array = [];\r\n this.scopes.forEach(val => array.push(val));\r\n return array;\r\n }\r\n\r\n /**\r\n * Prints scopes into a space-delimited string\r\n */\r\n printScopes(): string {\r\n if (this.scopes) {\r\n const scopeArr = this.asArray();\r\n return scopeArr.join(\" \");\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Prints scopes into a space-delimited lower-case string (used for caching)\r\n */\r\n printScopesLowerCase(): string {\r\n return this.printScopes().toLowerCase();\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { TokenClaims } from \"./TokenClaims\";\r\nimport { DecodedAuthToken } from \"./DecodedAuthToken\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\n\r\n/**\r\n * JWT Token representation class. Parses token string and generates claims object.\r\n */\r\nexport class AuthToken {\r\n\r\n // Raw Token string\r\n rawToken: string;\r\n // Claims inside token\r\n claims: TokenClaims;\r\n constructor(rawToken: string, crypto: ICrypto) {\r\n if (StringUtils.isEmpty(rawToken)) {\r\n throw ClientAuthError.createTokenNullOrEmptyError(rawToken);\r\n }\r\n\r\n this.rawToken = rawToken;\r\n this.claims = AuthToken.extractTokenClaims(rawToken, crypto);\r\n }\r\n\r\n /**\r\n * Extract token by decoding the rawToken\r\n *\r\n * @param encodedToken\r\n */\r\n static extractTokenClaims(encodedToken: string, crypto: ICrypto): TokenClaims {\r\n\r\n const decodedToken: DecodedAuthToken = StringUtils.decodeAuthToken(encodedToken);\r\n\r\n // token will be decoded to get the username\r\n try {\r\n const base64TokenPayload = decodedToken.JWSPayload;\r\n\r\n // base64Decode() should throw an error if there is an issue\r\n const base64Decoded = crypto.base64Decode(base64TokenPayload);\r\n return JSON.parse(base64Decoded) as TokenClaims;\r\n } catch (err) {\r\n throw ClientAuthError.createTokenParsingError(err);\r\n }\r\n }\r\n\r\n /**\r\n * Determine if the token's max_age has transpired\r\n */\r\n static checkMaxAge(authTime: number, maxAge: number): void {\r\n /*\r\n * per https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest\r\n * To force an immediate re-authentication: If an app requires that a user re-authenticate prior to access,\r\n * provide a value of 0 for the max_age parameter and the AS will force a fresh login.\r\n */\r\n const fiveMinuteSkew = 300000; // five minutes in milliseconds\r\n if ((maxAge === 0) || ((Date.now() - fiveMinuteSkew) > (authTime + maxAge))) {\r\n throw ClientAuthError.createMaxAgeTranspiredError();\r\n }\r\n }\r\n}\r\n","/* eslint-disable header/header */\nexport const name = \"@azure/msal-common\";\nexport const version = \"13.3.3\";\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AccountFilter, CredentialFilter, ValidCredentialType, AppMetadataFilter, AppMetadataCache, TokenKeys } from \"./utils/CacheTypes\";\r\nimport { CacheRecord } from \"./entities/CacheRecord\";\r\nimport { CredentialType, APP_METADATA, THE_FAMILY_ID, AUTHORITY_METADATA_CONSTANTS, AuthenticationScheme, Separators } from \"../utils/Constants\";\r\nimport { CredentialEntity } from \"./entities/CredentialEntity\";\r\nimport { ScopeSet } from \"../request/ScopeSet\";\r\nimport { AccountEntity } from \"./entities/AccountEntity\";\r\nimport { AccessTokenEntity } from \"./entities/AccessTokenEntity\";\r\nimport { IdTokenEntity } from \"./entities/IdTokenEntity\";\r\nimport { RefreshTokenEntity } from \"./entities/RefreshTokenEntity\";\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { ICacheManager } from \"./interface/ICacheManager\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { AccountInfo } from \"../account/AccountInfo\";\r\nimport { AppMetadataEntity } from \"./entities/AppMetadataEntity\";\r\nimport { ServerTelemetryEntity } from \"./entities/ServerTelemetryEntity\";\r\nimport { ThrottlingEntity } from \"./entities/ThrottlingEntity\";\r\nimport { AuthToken } from \"../account/AuthToken\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { AuthorityMetadataEntity } from \"./entities/AuthorityMetadataEntity\";\r\nimport { BaseAuthRequest } from \"../request/BaseAuthRequest\";\r\nimport { Logger } from \"../logger/Logger\";\r\nimport { name, version } from \"../packageMetadata\";\r\n\r\n/**\r\n * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.\r\n */\r\nexport abstract class CacheManager implements ICacheManager {\r\n protected clientId: string;\r\n protected cryptoImpl: ICrypto;\r\n // Instance of logger for functions defined in the msal-common layer\r\n private commonLogger: Logger;\r\n\r\n constructor(clientId: string, cryptoImpl: ICrypto, logger: Logger) {\r\n this.clientId = clientId;\r\n this.cryptoImpl = cryptoImpl;\r\n this.commonLogger = logger.clone(name, version);\r\n }\r\n\r\n /**\r\n * fetch the account entity from the platform cache\r\n * @param accountKey\r\n */\r\n abstract getAccount(accountKey: string): AccountEntity | null;\r\n\r\n /**\r\n * set account entity in the platform cache\r\n * @param account\r\n */\r\n abstract setAccount(account: AccountEntity): void;\r\n\r\n /**\r\n * fetch the idToken entity from the platform cache\r\n * @param idTokenKey\r\n */\r\n abstract getIdTokenCredential(idTokenKey: string): IdTokenEntity | null;\r\n\r\n /**\r\n * set idToken entity to the platform cache\r\n * @param idToken\r\n */\r\n abstract setIdTokenCredential(idToken: IdTokenEntity): void;\r\n\r\n /**\r\n * fetch the idToken entity from the platform cache\r\n * @param accessTokenKey\r\n */\r\n abstract getAccessTokenCredential(accessTokenKey: string): AccessTokenEntity | null;\r\n\r\n /**\r\n * set idToken entity to the platform cache\r\n * @param accessToken\r\n */\r\n abstract setAccessTokenCredential(accessToken: AccessTokenEntity): void;\r\n\r\n /**\r\n * fetch the idToken entity from the platform cache\r\n * @param refreshTokenKey\r\n */\r\n abstract getRefreshTokenCredential(refreshTokenKey: string): RefreshTokenEntity | null;\r\n\r\n /**\r\n * set idToken entity to the platform cache\r\n * @param refreshToken\r\n */\r\n abstract setRefreshTokenCredential(refreshToken: RefreshTokenEntity): void;\r\n\r\n /**\r\n * fetch appMetadata entity from the platform cache\r\n * @param appMetadataKey\r\n */\r\n abstract getAppMetadata(appMetadataKey: string): AppMetadataEntity | null;\r\n\r\n /**\r\n * set appMetadata entity to the platform cache\r\n * @param appMetadata\r\n */\r\n abstract setAppMetadata(appMetadata: AppMetadataEntity): void;\r\n\r\n /**\r\n * fetch server telemetry entity from the platform cache\r\n * @param serverTelemetryKey\r\n */\r\n abstract getServerTelemetry(serverTelemetryKey: string): ServerTelemetryEntity | null;\r\n\r\n /**\r\n * set server telemetry entity to the platform cache\r\n * @param serverTelemetryKey\r\n * @param serverTelemetry\r\n */\r\n abstract setServerTelemetry(serverTelemetryKey: string, serverTelemetry: ServerTelemetryEntity): void;\r\n\r\n /**\r\n * fetch cloud discovery metadata entity from the platform cache\r\n * @param key\r\n */\r\n abstract getAuthorityMetadata(key: string): AuthorityMetadataEntity | null;\r\n\r\n /**\r\n *\r\n */\r\n abstract getAuthorityMetadataKeys(): Array;\r\n\r\n /**\r\n * set cloud discovery metadata entity to the platform cache\r\n * @param key\r\n * @param value\r\n */\r\n abstract setAuthorityMetadata(key: string, value: AuthorityMetadataEntity): void;\r\n\r\n /**\r\n * fetch throttling entity from the platform cache\r\n * @param throttlingCacheKey\r\n */\r\n abstract getThrottlingCache(throttlingCacheKey: string): ThrottlingEntity | null;\r\n\r\n /**\r\n * set throttling entity to the platform cache\r\n * @param throttlingCacheKey\r\n * @param throttlingCache\r\n */\r\n abstract setThrottlingCache(throttlingCacheKey: string, throttlingCache: ThrottlingEntity): void;\r\n\r\n /**\r\n * Function to remove an item from cache given its key.\r\n * @param key\r\n */\r\n abstract removeItem(key: string): void;\r\n\r\n /**\r\n * Function which returns boolean whether cache contains a specific key.\r\n * @param key\r\n */\r\n abstract containsKey(key: string, type?: string): boolean;\r\n\r\n /**\r\n * Function which retrieves all current keys from the cache.\r\n */\r\n abstract getKeys(): string[];\r\n\r\n /**\r\n * Function which retrieves all account keys from the cache\r\n */\r\n abstract getAccountKeys(): string[];\r\n\r\n /**\r\n * Function which retrieves all token keys from the cache\r\n */\r\n abstract getTokenKeys(): TokenKeys;\r\n\r\n /**\r\n * Function which clears cache.\r\n */\r\n abstract clear(): Promise;\r\n\r\n /**\r\n * Function which updates an outdated credential cache key\r\n */\r\n abstract updateCredentialCacheKey(currentCacheKey: string, credential: ValidCredentialType): string;\r\n\r\n /**\r\n * Returns all accounts in cache\r\n */\r\n getAllAccounts(): AccountInfo[] {\r\n const allAccountKeys = this.getAccountKeys();\r\n if (allAccountKeys.length < 1) {\r\n return [];\r\n }\r\n\r\n const accountEntities: AccountEntity[] = allAccountKeys.reduce((accounts: AccountEntity[], key: string) => {\r\n const entity: AccountEntity | null = this.getAccount(key);\r\n\r\n if (!entity) {\r\n return accounts;\r\n }\r\n accounts.push(entity);\r\n return accounts;\r\n }, []);\r\n\r\n if (accountEntities.length < 1) {\r\n return [];\r\n } else {\r\n const allAccounts = accountEntities.map((accountEntity) => {\r\n return this.getAccountInfoFromEntity(accountEntity);\r\n });\r\n return allAccounts;\r\n }\r\n }\r\n\r\n /** \r\n * Gets accountInfo object based on provided filters\r\n */\r\n getAccountInfoFilteredBy(accountFilter: AccountFilter): AccountInfo | null{\r\n const allAccounts = this.getAccountsFilteredBy(accountFilter);\r\n if (allAccounts.length > 0) {\r\n return this.getAccountInfoFromEntity(allAccounts[0]);\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n private getAccountInfoFromEntity(accountEntity: AccountEntity): AccountInfo {\r\n const accountInfo = accountEntity.getAccountInfo();\r\n const idToken = this.getIdToken(accountInfo);\r\n if (idToken) {\r\n accountInfo.idToken = idToken.secret;\r\n accountInfo.idTokenClaims = new AuthToken(idToken.secret, this.cryptoImpl).claims;\r\n }\r\n return accountInfo;\r\n }\r\n\r\n /**\r\n * saves a cache record\r\n * @param cacheRecord\r\n */\r\n async saveCacheRecord(cacheRecord: CacheRecord): Promise {\r\n if (!cacheRecord) {\r\n throw ClientAuthError.createNullOrUndefinedCacheRecord();\r\n }\r\n\r\n if (!!cacheRecord.account) {\r\n this.setAccount(cacheRecord.account);\r\n }\r\n\r\n if (!!cacheRecord.idToken) {\r\n this.setIdTokenCredential(cacheRecord.idToken);\r\n }\r\n\r\n if (!!cacheRecord.accessToken) {\r\n await this.saveAccessToken(cacheRecord.accessToken);\r\n }\r\n\r\n if (!!cacheRecord.refreshToken) {\r\n this.setRefreshTokenCredential(cacheRecord.refreshToken);\r\n }\r\n\r\n if (!!cacheRecord.appMetadata) {\r\n this.setAppMetadata(cacheRecord.appMetadata);\r\n }\r\n }\r\n\r\n /**\r\n * saves access token credential\r\n * @param credential\r\n */\r\n private async saveAccessToken(credential: AccessTokenEntity): Promise {\r\n const accessTokenFilter: CredentialFilter = {\r\n clientId: credential.clientId,\r\n credentialType: credential.credentialType,\r\n environment: credential.environment,\r\n homeAccountId: credential.homeAccountId,\r\n realm: credential.realm,\r\n tokenType: credential.tokenType,\r\n requestedClaimsHash: credential.requestedClaimsHash\r\n };\r\n\r\n const tokenKeys = this.getTokenKeys();\r\n const currentScopes = ScopeSet.fromString(credential.target);\r\n\r\n const removedAccessTokens: Array> = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n if(!this.accessTokenKeyMatchesFilter(key, accessTokenFilter, false)) {\r\n return;\r\n }\r\n \r\n const tokenEntity = this.getAccessTokenCredential(key);\r\n\r\n if (tokenEntity && this.credentialMatchesFilter(tokenEntity, accessTokenFilter)) {\r\n const tokenScopeSet = ScopeSet.fromString(tokenEntity.target);\r\n if (tokenScopeSet.intersectingScopeSets(currentScopes)) {\r\n removedAccessTokens.push(this.removeAccessToken(key));\r\n }\r\n }\r\n });\r\n await Promise.all(removedAccessTokens);\r\n this.setAccessTokenCredential(credential);\r\n }\r\n\r\n /**\r\n * retrieve accounts matching all provided filters; if no filter is set, get all accounts\r\n * not checking for casing as keys are all generated in lower case, remember to convert to lower case if object properties are compared\r\n * @param homeAccountId\r\n * @param environment\r\n * @param realm\r\n */\r\n getAccountsFilteredBy(accountFilter: AccountFilter): AccountEntity[] {\r\n const allAccountKeys = this.getAccountKeys();\r\n const matchingAccounts: AccountEntity[] = [];\r\n\r\n allAccountKeys.forEach((cacheKey) => {\r\n if (!this.isAccountKey(cacheKey, accountFilter.homeAccountId, accountFilter.realm)) {\r\n // Don't parse value if the key doesn't match the account filters\r\n return;\r\n }\r\n\r\n const entity: AccountEntity | null = this.getAccount(cacheKey);\r\n\r\n if (!entity) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.homeAccountId && !this.matchHomeAccountId(entity, accountFilter.homeAccountId)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.localAccountId && !this.matchLocalAccountId(entity, accountFilter.localAccountId)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.username && !this.matchUsername(entity, accountFilter.username)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.environment && !this.matchEnvironment(entity, accountFilter.environment)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.realm && !this.matchRealm(entity, accountFilter.realm)) {\r\n return;\r\n }\r\n\r\n if (!!accountFilter.nativeAccountId && !this.matchNativeAccountId(entity, accountFilter.nativeAccountId)) {\r\n return;\r\n }\r\n\r\n matchingAccounts.push(entity);\r\n });\r\n\r\n return matchingAccounts;\r\n }\r\n\r\n /**\r\n * Returns true if the given key matches our account key schema. Also matches homeAccountId and/or tenantId if provided\r\n * @param key \r\n * @param homeAccountId \r\n * @param tenantId \r\n * @returns \r\n */\r\n isAccountKey(key: string, homeAccountId?: string, tenantId?: string): boolean {\r\n if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 3) {\r\n // Account cache keys contain 3 items separated by '-' (each item may also contain '-')\r\n return false;\r\n }\r\n\r\n if (homeAccountId && !key.toLowerCase().includes(homeAccountId.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n if (tenantId && !key.toLowerCase().includes(tenantId.toLowerCase())) {\r\n return false;\r\n }\r\n\r\n // Do not check environment as aliasing can cause false negatives\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns true if the given key matches our credential key schema.\r\n * @param key \r\n */\r\n isCredentialKey(key: string): boolean {\r\n if (key.split(Separators.CACHE_KEY_SEPARATOR).length < 6) {\r\n // Credential cache keys contain 6 items separated by '-' (each item may also contain '-')\r\n return false;\r\n }\r\n\r\n const lowerCaseKey = key.toLowerCase();\r\n // Credential keys must indicate what credential type they represent\r\n if (lowerCaseKey.indexOf(CredentialType.ID_TOKEN.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) === -1 &&\r\n lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) === -1\r\n ) {\r\n return false;\r\n }\r\n\r\n if (lowerCaseKey.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) > -1) {\r\n // Refresh tokens must contain the client id or family id\r\n const clientIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${this.clientId}${Separators.CACHE_KEY_SEPARATOR}`;\r\n const familyIdValidation = `${CredentialType.REFRESH_TOKEN}${Separators.CACHE_KEY_SEPARATOR}${THE_FAMILY_ID}${Separators.CACHE_KEY_SEPARATOR}`;\r\n if (lowerCaseKey.indexOf(clientIdValidation.toLowerCase()) === -1 && lowerCaseKey.indexOf(familyIdValidation.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n } else if (lowerCaseKey.indexOf(this.clientId.toLowerCase()) === -1) {\r\n // Tokens must contain the clientId\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Returns whether or not the given credential entity matches the filter\r\n * @param entity \r\n * @param filter \r\n * @returns \r\n */\r\n credentialMatchesFilter(entity: ValidCredentialType, filter: CredentialFilter): boolean {\r\n if (!!filter.clientId && !this.matchClientId(entity, filter.clientId)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.userAssertionHash && !this.matchUserAssertionHash(entity, filter.userAssertionHash)) {\r\n return false;\r\n }\r\n\r\n /*\r\n * homeAccountId can be undefined, and we want to filter out cached items that have a homeAccountId of \"\"\r\n * because we don't want a client_credential request to return a cached token that has a homeAccountId\r\n */\r\n if ((typeof filter.homeAccountId === \"string\") && !this.matchHomeAccountId(entity, filter.homeAccountId)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.environment && !this.matchEnvironment(entity, filter.environment)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.realm && !this.matchRealm(entity, filter.realm)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.credentialType && !this.matchCredentialType(entity, filter.credentialType)) {\r\n return false;\r\n }\r\n\r\n if (!!filter.familyId && !this.matchFamilyId(entity, filter.familyId)) {\r\n return false;\r\n }\r\n\r\n /*\r\n * idTokens do not have \"target\", target specific refreshTokens do exist for some types of authentication\r\n * Resource specific refresh tokens case will be added when the support is deemed necessary\r\n */\r\n if (!!filter.target && !this.matchTarget(entity, filter.target)) {\r\n return false;\r\n }\r\n\r\n // If request OR cached entity has requested Claims Hash, check if they match\r\n if (filter.requestedClaimsHash || entity.requestedClaimsHash) {\r\n // Don't match if either is undefined or they are different\r\n if (entity.requestedClaimsHash !== filter.requestedClaimsHash) {\r\n return false;\r\n }\r\n }\r\n\r\n // Access Token with Auth Scheme specific matching\r\n if (entity.credentialType === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME) {\r\n if(!!filter.tokenType && !this.matchTokenType(entity, filter.tokenType)) {\r\n return false;\r\n }\r\n\r\n // KeyId (sshKid) in request must match cached SSH certificate keyId because SSH cert is bound to a specific key\r\n if (filter.tokenType === AuthenticationScheme.SSH) {\r\n if(filter.keyId && !this.matchKeyId(entity, filter.keyId)) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * retrieve appMetadata matching all provided filters; if no filter is set, get all appMetadata\r\n * @param filter\r\n */\r\n getAppMetadataFilteredBy(filter: AppMetadataFilter): AppMetadataCache {\r\n return this.getAppMetadataFilteredByInternal(\r\n filter.environment,\r\n filter.clientId,\r\n );\r\n }\r\n\r\n /**\r\n * Support function to help match appMetadata\r\n * @param environment\r\n * @param clientId\r\n */\r\n private getAppMetadataFilteredByInternal(\r\n environment?: string,\r\n clientId?: string\r\n ): AppMetadataCache {\r\n\r\n const allCacheKeys = this.getKeys();\r\n const matchingAppMetadata: AppMetadataCache = {};\r\n\r\n allCacheKeys.forEach((cacheKey) => {\r\n // don't parse any non-appMetadata type cache entities\r\n if (!this.isAppMetadata(cacheKey)) {\r\n return;\r\n }\r\n\r\n // Attempt retrieval\r\n const entity = this.getAppMetadata(cacheKey);\r\n\r\n if (!entity) {\r\n return;\r\n }\r\n\r\n if (!!environment && !this.matchEnvironment(entity, environment)) {\r\n return;\r\n }\r\n\r\n if (!!clientId && !this.matchClientId(entity, clientId)) {\r\n return;\r\n }\r\n\r\n matchingAppMetadata[cacheKey] = entity;\r\n\r\n });\r\n\r\n return matchingAppMetadata;\r\n }\r\n\r\n /**\r\n * retrieve authorityMetadata that contains a matching alias\r\n * @param filter\r\n */\r\n getAuthorityMetadataByAlias(host: string): AuthorityMetadataEntity | null {\r\n const allCacheKeys = this.getAuthorityMetadataKeys();\r\n let matchedEntity = null;\r\n\r\n allCacheKeys.forEach((cacheKey) => {\r\n // don't parse any non-authorityMetadata type cache entities\r\n if (!this.isAuthorityMetadata(cacheKey) || cacheKey.indexOf(this.clientId) === -1) {\r\n return;\r\n }\r\n\r\n // Attempt retrieval\r\n const entity = this.getAuthorityMetadata(cacheKey);\r\n\r\n if (!entity) {\r\n return;\r\n }\r\n\r\n if (entity.aliases.indexOf(host) === -1) {\r\n return;\r\n }\r\n\r\n matchedEntity = entity;\r\n\r\n });\r\n\r\n return matchedEntity;\r\n }\r\n\r\n /**\r\n * Removes all accounts and related tokens from cache.\r\n */\r\n async removeAllAccounts(): Promise {\r\n const allAccountKeys = this.getAccountKeys();\r\n const removedAccounts: Array> = [];\r\n\r\n allAccountKeys.forEach((cacheKey) => {\r\n removedAccounts.push(this.removeAccount(cacheKey));\r\n });\r\n\r\n await Promise.all(removedAccounts);\r\n }\r\n\r\n /**\r\n * Removes the account and related tokens for a given account key\r\n * @param account\r\n */\r\n async removeAccount(accountKey: string): Promise {\r\n const account = this.getAccount(accountKey);\r\n if (!account) {\r\n throw ClientAuthError.createNoAccountFoundError();\r\n }\r\n await this.removeAccountContext(account);\r\n this.removeItem(accountKey);\r\n }\r\n\r\n /**\r\n * Removes credentials associated with the provided account\r\n * @param account\r\n */\r\n async removeAccountContext(account: AccountEntity): Promise {\r\n const allTokenKeys = this.getTokenKeys();\r\n const accountId = account.generateAccountId();\r\n const removedCredentials: Array> = [];\r\n\r\n allTokenKeys.idToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n this.removeIdToken(key);\r\n }\r\n });\r\n\r\n allTokenKeys.accessToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n removedCredentials.push(this.removeAccessToken(key));\r\n }\r\n });\r\n\r\n allTokenKeys.refreshToken.forEach((key) => {\r\n if (key.indexOf(accountId) === 0) {\r\n this.removeRefreshToken(key);\r\n }\r\n });\r\n\r\n await Promise.all(removedCredentials);\r\n }\r\n\r\n /**\r\n * returns a boolean if the given credential is removed\r\n * @param credential\r\n */\r\n async removeAccessToken(key: string): Promise {\r\n const credential = this.getAccessTokenCredential(key);\r\n if (!credential) {\r\n return;\r\n }\r\n\r\n // Remove Token Binding Key from key store for PoP Tokens Credentials\r\n if (credential.credentialType.toLowerCase() === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME.toLowerCase()) {\r\n if(credential.tokenType === AuthenticationScheme.POP) {\r\n const accessTokenWithAuthSchemeEntity = credential as AccessTokenEntity;\r\n const kid = accessTokenWithAuthSchemeEntity.keyId;\r\n\r\n if (kid) {\r\n try {\r\n await this.cryptoImpl.removeTokenBindingKey(kid);\r\n } catch (error) {\r\n throw ClientAuthError.createBindingKeyNotRemovedError();\r\n }\r\n }\r\n }\r\n }\r\n\r\n return this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Removes all app metadata objects from cache.\r\n */\r\n removeAppMetadata(): boolean {\r\n const allCacheKeys = this.getKeys();\r\n allCacheKeys.forEach((cacheKey) => {\r\n if (this.isAppMetadata(cacheKey)) {\r\n this.removeItem(cacheKey);\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Retrieve the cached credentials into a cacherecord\r\n * @param account\r\n * @param clientId\r\n * @param scopes\r\n * @param environment\r\n * @param authScheme\r\n */\r\n readCacheRecord(account: AccountInfo, request: BaseAuthRequest, environment: string): CacheRecord {\r\n const tokenKeys = this.getTokenKeys();\r\n const cachedAccount = this.readAccountFromCache(account);\r\n const cachedIdToken = this.getIdToken(account, tokenKeys);\r\n const cachedAccessToken = this.getAccessToken(account, request, tokenKeys);\r\n const cachedRefreshToken = this.getRefreshToken(account, false, tokenKeys);\r\n const cachedAppMetadata = this.readAppMetadataFromCache(environment);\r\n\r\n if (cachedAccount && cachedIdToken) {\r\n cachedAccount.idTokenClaims = new AuthToken(cachedIdToken.secret, this.cryptoImpl).claims;\r\n }\r\n\r\n return {\r\n account: cachedAccount,\r\n idToken: cachedIdToken,\r\n accessToken: cachedAccessToken,\r\n refreshToken: cachedRefreshToken,\r\n appMetadata: cachedAppMetadata,\r\n };\r\n }\r\n\r\n /**\r\n * Retrieve AccountEntity from cache\r\n * @param account\r\n */\r\n readAccountFromCache(account: AccountInfo): AccountEntity | null {\r\n const accountKey: string = AccountEntity.generateAccountCacheKey(account);\r\n return this.getAccount(accountKey);\r\n }\r\n\r\n /**\r\n * Retrieve IdTokenEntity from cache\r\n * @param clientId\r\n * @param account\r\n * @param inputRealm\r\n */\r\n getIdToken(account: AccountInfo, tokenKeys?: TokenKeys): IdTokenEntity | null {\r\n this.commonLogger.trace(\"CacheManager - getIdToken called\");\r\n const idTokenFilter: CredentialFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: CredentialType.ID_TOKEN,\r\n clientId: this.clientId,\r\n realm: account.tenantId,\r\n };\r\n\r\n const idTokens: IdTokenEntity[] = this.getIdTokensByFilter(idTokenFilter, tokenKeys);\r\n const numIdTokens = idTokens.length;\r\n\r\n if (numIdTokens < 1) {\r\n this.commonLogger.info(\"CacheManager:getIdToken - No token found\");\r\n return null;\r\n } else if (numIdTokens > 1) {\r\n this.commonLogger.info(\r\n \"CacheManager:getIdToken - Multiple id tokens found, clearing them\"\r\n );\r\n idTokens.forEach((idToken) => {\r\n this.removeIdToken(idToken.generateCredentialKey());\r\n });\r\n return null;\r\n }\r\n\r\n this.commonLogger.info(\"CacheManager:getIdToken - Returning id token\");\r\n return idTokens[0];\r\n }\r\n\r\n /**\r\n * Gets all idTokens matching the given filter\r\n * @param filter \r\n * @returns \r\n */\r\n getIdTokensByFilter(filter: CredentialFilter, tokenKeys?: TokenKeys): IdTokenEntity[] {\r\n const idTokenKeys = tokenKeys && tokenKeys.idToken || this.getTokenKeys().idToken;\r\n\r\n const idTokens: IdTokenEntity[] = [];\r\n idTokenKeys.forEach((key) => {\r\n if (!this.idTokenKeyMatchesFilter(key, {clientId: this.clientId, ...filter})) {\r\n return;\r\n }\r\n\r\n const idToken = this.getIdTokenCredential(key);\r\n if (idToken && this.credentialMatchesFilter(idToken, filter)) {\r\n idTokens.push(idToken);\r\n }\r\n });\r\n\r\n return idTokens;\r\n }\r\n\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key \r\n * @param filter\r\n * @returns \r\n */\r\n idTokenKeyMatchesFilter(inputKey: string, filter: CredentialFilter): boolean {\r\n const key = inputKey.toLowerCase();\r\n if (filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Removes idToken from the cache\r\n * @param key \r\n */\r\n removeIdToken(key: string): void {\r\n this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Removes refresh token from the cache\r\n * @param key \r\n */\r\n removeRefreshToken(key: string): void {\r\n this.removeItem(key);\r\n }\r\n\r\n /**\r\n * Retrieve AccessTokenEntity from cache\r\n * @param clientId\r\n * @param account\r\n * @param scopes\r\n * @param authScheme\r\n */\r\n getAccessToken(account: AccountInfo, request: BaseAuthRequest, tokenKeys?: TokenKeys): AccessTokenEntity | null {\r\n this.commonLogger.trace(\"CacheManager - getAccessToken called\");\r\n const scopes = ScopeSet.createSearchScopes(request.scopes);\r\n const authScheme = request.authenticationScheme || AuthenticationScheme.BEARER;\r\n /*\r\n * Distinguish between Bearer and PoP/SSH token cache types\r\n * Cast to lowercase to handle \"bearer\" from ADFS\r\n */\r\n const credentialType = (authScheme && authScheme.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase()) ? CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME : CredentialType.ACCESS_TOKEN;\r\n\r\n const accessTokenFilter: CredentialFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: credentialType,\r\n clientId: this.clientId,\r\n realm: account.tenantId,\r\n target: scopes,\r\n tokenType: authScheme,\r\n keyId: request.sshKid,\r\n requestedClaimsHash: request.requestedClaimsHash,\r\n };\r\n\r\n const accessTokenKeys = tokenKeys && tokenKeys.accessToken || this.getTokenKeys().accessToken;\r\n const accessTokens: AccessTokenEntity[] = [];\r\n\r\n accessTokenKeys.forEach((key) => {\r\n // Validate key\r\n if (this.accessTokenKeyMatchesFilter(key, accessTokenFilter, true)) {\r\n const accessToken = this.getAccessTokenCredential(key);\r\n\r\n // Validate value\r\n if (accessToken && this.credentialMatchesFilter(accessToken, accessTokenFilter)) {\r\n accessTokens.push(accessToken);\r\n }\r\n }\r\n });\r\n\r\n const numAccessTokens = accessTokens.length;\r\n if (numAccessTokens < 1) {\r\n this.commonLogger.info(\"CacheManager:getAccessToken - No token found\");\r\n return null;\r\n } else if (numAccessTokens > 1) {\r\n this.commonLogger.info(\r\n \"CacheManager:getAccessToken - Multiple access tokens found, clearing them\"\r\n );\r\n accessTokens.forEach((accessToken) => {\r\n this.removeAccessToken(accessToken.generateCredentialKey());\r\n });\r\n return null;\r\n }\r\n\r\n this.commonLogger.info(\"CacheManager:getAccessToken - Returning access token\");\r\n return accessTokens[0];\r\n }\r\n\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key \r\n * @param filter \r\n * @param keyMustContainAllScopes \r\n * @returns \r\n */\r\n accessTokenKeyMatchesFilter(inputKey: string, filter: CredentialFilter, keyMustContainAllScopes: boolean): boolean {\r\n const key = inputKey.toLowerCase();\r\n if (filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.realm && key.indexOf(filter.realm.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.requestedClaimsHash && key.indexOf(filter.requestedClaimsHash.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.target) {\r\n const scopes = filter.target.asArray();\r\n for (let i = 0; i < scopes.length; i++) {\r\n if (keyMustContainAllScopes && !key.includes(scopes[i].toLowerCase())) {\r\n // When performing a cache lookup a missing scope would be a cache miss\r\n return false;\r\n } else if (!keyMustContainAllScopes && key.includes(scopes[i].toLowerCase())) {\r\n // When performing a cache write, any token with a subset of requested scopes should be replaced\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Gets all access tokens matching the filter\r\n * @param filter \r\n * @returns \r\n */\r\n getAccessTokensByFilter(filter: CredentialFilter): AccessTokenEntity[] {\r\n const tokenKeys = this.getTokenKeys();\r\n\r\n const accessTokens: AccessTokenEntity[] = [];\r\n tokenKeys.accessToken.forEach((key) => {\r\n if (!this.accessTokenKeyMatchesFilter(key, filter, true)) {\r\n return;\r\n }\r\n\r\n const accessToken = this.getAccessTokenCredential(key);\r\n if (accessToken && this.credentialMatchesFilter(accessToken, filter)) {\r\n accessTokens.push(accessToken);\r\n }\r\n });\r\n\r\n return accessTokens;\r\n }\r\n\r\n /**\r\n * Helper to retrieve the appropriate refresh token from cache\r\n * @param clientId\r\n * @param account\r\n * @param familyRT\r\n */\r\n getRefreshToken(account: AccountInfo, familyRT: boolean, tokenKeys?: TokenKeys): RefreshTokenEntity | null {\r\n this.commonLogger.trace(\"CacheManager - getRefreshToken called\");\r\n const id = familyRT ? THE_FAMILY_ID : undefined;\r\n const refreshTokenFilter: CredentialFilter = {\r\n homeAccountId: account.homeAccountId,\r\n environment: account.environment,\r\n credentialType: CredentialType.REFRESH_TOKEN,\r\n clientId: this.clientId,\r\n familyId: id,\r\n };\r\n\r\n const refreshTokenKeys = tokenKeys && tokenKeys.refreshToken || this.getTokenKeys().refreshToken;\r\n const refreshTokens: RefreshTokenEntity[] = [];\r\n\r\n refreshTokenKeys.forEach((key) => {\r\n // Validate key\r\n if (this.refreshTokenKeyMatchesFilter(key, refreshTokenFilter)) {\r\n const refreshToken = this.getRefreshTokenCredential(key);\r\n // Validate value\r\n if (refreshToken && this.credentialMatchesFilter(refreshToken, refreshTokenFilter)) {\r\n refreshTokens.push(refreshToken);\r\n }\r\n }\r\n });\r\n\r\n const numRefreshTokens = refreshTokens.length;\r\n if (numRefreshTokens < 1) {\r\n this.commonLogger.info(\"CacheManager:getRefreshToken - No refresh token found.\");\r\n return null;\r\n }\r\n // address the else case after remove functions address environment aliases\r\n\r\n this.commonLogger.info(\"CacheManager:getRefreshToken - returning refresh token\");\r\n return refreshTokens[0] as RefreshTokenEntity;\r\n }\r\n\r\n /**\r\n * Validate the cache key against filter before retrieving and parsing cache value\r\n * @param key\r\n * @param filter\r\n */\r\n refreshTokenKeyMatchesFilter(inputKey: string, filter: CredentialFilter): boolean {\r\n const key = inputKey.toLowerCase();\r\n if (filter.familyId && key.indexOf(filter.familyId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n // If familyId is used, clientId is not in the key\r\n if (!filter.familyId && filter.clientId && key.indexOf(filter.clientId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n if (filter.homeAccountId && key.indexOf(filter.homeAccountId.toLowerCase()) === -1) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Retrieve AppMetadataEntity from cache\r\n */\r\n readAppMetadataFromCache(environment: string): AppMetadataEntity | null {\r\n const appMetadataFilter: AppMetadataFilter = {\r\n environment,\r\n clientId: this.clientId,\r\n };\r\n\r\n const appMetadata: AppMetadataCache = this.getAppMetadataFilteredBy(appMetadataFilter);\r\n const appMetadataEntries: AppMetadataEntity[] = Object.keys(appMetadata).map((key) => appMetadata[key]);\r\n\r\n const numAppMetadata = appMetadataEntries.length;\r\n if (numAppMetadata < 1) {\r\n return null;\r\n } else if (numAppMetadata > 1) {\r\n throw ClientAuthError.createMultipleMatchingAppMetadataInCacheError();\r\n }\r\n\r\n return appMetadataEntries[0] as AppMetadataEntity;\r\n }\r\n\r\n /**\r\n * Return the family_id value associated with FOCI\r\n * @param environment\r\n * @param clientId\r\n */\r\n isAppMetadataFOCI(environment: string): boolean {\r\n const appMetadata = this.readAppMetadataFromCache(environment);\r\n return !!(appMetadata && appMetadata.familyId === THE_FAMILY_ID);\r\n }\r\n\r\n /**\r\n * helper to match account ids\r\n * @param value\r\n * @param homeAccountId\r\n */\r\n private matchHomeAccountId(entity: AccountEntity | CredentialEntity, homeAccountId: string): boolean {\r\n return !!((typeof entity.homeAccountId === \"string\") && (homeAccountId === entity.homeAccountId));\r\n }\r\n\r\n /**\r\n * helper to match account ids\r\n * @param entity \r\n * @param localAccountId \r\n * @returns \r\n */\r\n private matchLocalAccountId(entity: AccountEntity, localAccountId: string): boolean {\r\n return !!((typeof entity.localAccountId === \"string\") && (localAccountId === entity.localAccountId));\r\n }\r\n\r\n /**\r\n * helper to match usernames\r\n * @param entity \r\n * @param username \r\n * @returns \r\n */\r\n private matchUsername(entity: AccountEntity, username: string): boolean {\r\n return !!((typeof entity.username === \"string\") && (username.toLowerCase() === entity.username.toLowerCase()));\r\n }\r\n\r\n /**\r\n * helper to match assertion\r\n * @param value\r\n * @param oboAssertion\r\n */\r\n private matchUserAssertionHash(entity: CredentialEntity, userAssertionHash: string): boolean {\r\n return !!(entity.userAssertionHash && userAssertionHash === entity.userAssertionHash);\r\n }\r\n\r\n /**\r\n * helper to match environment\r\n * @param value\r\n * @param environment\r\n */\r\n private matchEnvironment(entity: AccountEntity | CredentialEntity | AppMetadataEntity, environment: string): boolean {\r\n const cloudMetadata = this.getAuthorityMetadataByAlias(environment);\r\n if (cloudMetadata && cloudMetadata.aliases.indexOf(entity.environment) > -1) {\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * helper to match credential type\r\n * @param entity\r\n * @param credentialType\r\n */\r\n private matchCredentialType(entity: CredentialEntity, credentialType: string): boolean {\r\n return (entity.credentialType && credentialType.toLowerCase() === entity.credentialType.toLowerCase());\r\n }\r\n\r\n /**\r\n * helper to match client ids\r\n * @param entity\r\n * @param clientId\r\n */\r\n private matchClientId(entity: CredentialEntity | AppMetadataEntity, clientId: string): boolean {\r\n return !!(entity.clientId && clientId === entity.clientId);\r\n }\r\n\r\n /**\r\n * helper to match family ids\r\n * @param entity\r\n * @param familyId\r\n */\r\n private matchFamilyId(entity: CredentialEntity | AppMetadataEntity, familyId: string): boolean {\r\n return !!(entity.familyId && familyId === entity.familyId);\r\n }\r\n\r\n /**\r\n * helper to match realm\r\n * @param entity\r\n * @param realm\r\n */\r\n private matchRealm(entity: AccountEntity | CredentialEntity, realm: string): boolean {\r\n return !!(entity.realm && realm === entity.realm);\r\n }\r\n\r\n /**\r\n * helper to match nativeAccountId\r\n * @param entity\r\n * @param nativeAccountId\r\n * @returns boolean indicating the match result\r\n */\r\n private matchNativeAccountId(entity: AccountEntity, nativeAccountId: string): boolean {\r\n return !!(entity.nativeAccountId && nativeAccountId === entity.nativeAccountId);\r\n }\r\n\r\n /**\r\n * Returns true if the target scopes are a subset of the current entity's scopes, false otherwise.\r\n * @param entity\r\n * @param target\r\n */\r\n private matchTarget(entity: CredentialEntity, target: ScopeSet): boolean {\r\n const isNotAccessTokenCredential = (entity.credentialType !== CredentialType.ACCESS_TOKEN && entity.credentialType !== CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME);\r\n\r\n if ( isNotAccessTokenCredential || !entity.target) {\r\n return false;\r\n }\r\n\r\n const entityScopeSet: ScopeSet = ScopeSet.fromString(entity.target);\r\n\r\n return entityScopeSet.containsScopeSet(target);\r\n }\r\n\r\n /**\r\n * Returns true if the credential's tokenType or Authentication Scheme matches the one in the request, false otherwise\r\n * @param entity\r\n * @param tokenType\r\n */\r\n private matchTokenType(entity: CredentialEntity, tokenType: AuthenticationScheme): boolean {\r\n return !!(entity.tokenType && entity.tokenType === tokenType);\r\n }\r\n\r\n /**\r\n * Returns true if the credential's keyId matches the one in the request, false otherwise\r\n * @param entity\r\n * @param tokenType\r\n */\r\n private matchKeyId(entity: CredentialEntity, keyId: string): boolean {\r\n return !!(entity.keyId && entity.keyId === keyId);\r\n }\r\n\r\n /**\r\n * returns if a given cache entity is of the type appmetadata\r\n * @param key\r\n */\r\n private isAppMetadata(key: string): boolean {\r\n return key.indexOf(APP_METADATA) !== -1;\r\n }\r\n\r\n /**\r\n * returns if a given cache entity is of the type authoritymetadata\r\n * @param key\r\n */\r\n protected isAuthorityMetadata(key: string): boolean {\r\n return key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) !== -1;\r\n }\r\n\r\n /**\r\n * returns cache key used for cloud instance metadata\r\n */\r\n generateAuthorityMetadataCacheKey(authority: string): string {\r\n return `${AUTHORITY_METADATA_CONSTANTS.CACHE_KEY}-${this.clientId}-${authority}`;\r\n }\r\n\r\n /**\r\n * Helper to convert serialized data to object\r\n * @param obj\r\n * @param json\r\n */\r\n static toObject(obj: T, json: object): T {\r\n for (const propertyName in json) {\r\n obj[propertyName] = json[propertyName];\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport class DefaultStorageClass extends CacheManager {\r\n setAccount(): void {\r\n const notImplErr = \"Storage interface - setAccount() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAccount(): AccountEntity {\r\n const notImplErr = \"Storage interface - getAccount() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setIdTokenCredential(): void {\r\n const notImplErr = \"Storage interface - setIdTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getIdTokenCredential(): IdTokenEntity {\r\n const notImplErr = \"Storage interface - getIdTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setAccessTokenCredential(): void {\r\n const notImplErr = \"Storage interface - setAccessTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAccessTokenCredential(): AccessTokenEntity {\r\n const notImplErr = \"Storage interface - getAccessTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setRefreshTokenCredential(): void {\r\n const notImplErr = \"Storage interface - setRefreshTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getRefreshTokenCredential(): RefreshTokenEntity {\r\n const notImplErr = \"Storage interface - getRefreshTokenCredential() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setAppMetadata(): void {\r\n const notImplErr = \"Storage interface - setAppMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAppMetadata(): AppMetadataEntity {\r\n const notImplErr = \"Storage interface - getAppMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setServerTelemetry(): void {\r\n const notImplErr = \"Storage interface - setServerTelemetry() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getServerTelemetry(): ServerTelemetryEntity {\r\n const notImplErr = \"Storage interface - getServerTelemetry() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setAuthorityMetadata(): void {\r\n const notImplErr = \"Storage interface - setAuthorityMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAuthorityMetadata(): AuthorityMetadataEntity | null {\r\n const notImplErr = \"Storage interface - getAuthorityMetadata() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAuthorityMetadataKeys(): Array {\r\n const notImplErr = \"Storage interface - getAuthorityMetadataKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n setThrottlingCache(): void {\r\n const notImplErr = \"Storage interface - setThrottlingCache() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getThrottlingCache(): ThrottlingEntity {\r\n const notImplErr = \"Storage interface - getThrottlingCache() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n removeItem(): boolean {\r\n const notImplErr = \"Storage interface - removeItem() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n containsKey(): boolean {\r\n const notImplErr = \"Storage interface - containsKey() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getKeys(): string[] {\r\n const notImplErr = \"Storage interface - getKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getAccountKeys(): string[] {\r\n const notImplErr = \"Storage interface - getAccountKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n getTokenKeys(): TokenKeys {\r\n const notImplErr = \"Storage interface - getTokenKeys() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n async clear(): Promise {\r\n const notImplErr = \"Storage interface - clear() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n updateCredentialCacheKey(): string {\r\n const notImplErr = \"Storage interface - updateCredentialCacheKey() has not been implemented for the cacheStorage interface.\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\n/**\r\n * Utility class which exposes functions for managing date and time operations.\r\n */\r\nexport class TimeUtils {\r\n\r\n /**\r\n * return the current time in Unix time (seconds).\r\n */\r\n static nowSeconds(): number {\r\n // Date.getTime() returns in milliseconds.\r\n return Math.round(new Date().getTime() / 1000.0);\r\n }\r\n \r\n /**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\r\n static isTokenExpired(expiresOn: string, offset: number): boolean {\r\n // check for access token expiry\r\n const expirationSec = Number(expiresOn) || 0;\r\n const offsetCurrentTimeSec = TimeUtils.nowSeconds() + offset;\r\n\r\n // If current time + offset is greater than token expiration time, then token is expired.\r\n return (offsetCurrentTimeSec > expirationSec);\r\n }\r\n\r\n /**\r\n * If the current time is earlier than the time that a token was cached at, we must discard the token\r\n * i.e. The system clock was turned back after acquiring the cached token\r\n * @param cachedAt \r\n * @param offset \r\n */\r\n static wasClockTurnedBack(cachedAt: string): boolean {\r\n const cachedAtSec = Number(cachedAt);\r\n\r\n return cachedAtSec > TimeUtils.nowSeconds();\r\n }\r\n\r\n /**\r\n * Waits for t number of milliseconds\r\n * @param t number\r\n * @param value T\r\n */\r\n static delay(t: number, value?: T): Promise {\r\n return new Promise((resolve) => setTimeout(() => resolve(value), t));\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CredentialEntity } from \"./CredentialEntity\";\r\nimport { CredentialType, AuthenticationScheme } from \"../../utils/Constants\";\r\nimport { TimeUtils } from \"../../utils/TimeUtils\";\r\nimport { StringUtils } from \"../../utils/StringUtils\";\r\nimport { ICrypto } from \"../../crypto/ICrypto\";\r\nimport { TokenClaims } from \"../../account/TokenClaims\";\r\nimport { AuthToken } from \"../../account/AuthToken\";\r\nimport { ClientAuthError } from \"../../error/ClientAuthError\";\r\n\r\n/**\r\n * ACCESS_TOKEN Credential Type\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key Example: uid.utid-login.microsoftonline.com-accesstoken-clientId-contoso.com-user.read\r\n *\r\n * Value Schema:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * familyId: Family ID identifier, usually only used for refresh tokens\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.\r\n * cachedAt: Absolute device time when entry was created in the cache.\r\n * expiresOn: Token expiry time, calculated based on current UTC time in seconds. Represented as a string.\r\n * extendedExpiresOn: Additional extended expiry time until when token is valid in case of server-side outage. Represented as string in UTC seconds.\r\n * keyId: used for POP and SSH tokenTypes\r\n * tokenType: Type of the token issued. Usually \"Bearer\"\r\n * }\r\n */\r\nexport class AccessTokenEntity extends CredentialEntity {\r\n realm: string;\r\n target: string;\r\n cachedAt: string;\r\n expiresOn: string;\r\n extendedExpiresOn?: string;\r\n refreshOn?: string;\r\n keyId?: string; // for POP and SSH tokenTypes\r\n tokenType?: AuthenticationScheme;\r\n requestedClaims?: string;\r\n requestedClaimsHash?: string;\r\n\r\n /**\r\n * Create AccessTokenEntity\r\n * @param homeAccountId\r\n * @param environment\r\n * @param accessToken\r\n * @param clientId\r\n * @param tenantId\r\n * @param scopes\r\n * @param expiresOn\r\n * @param extExpiresOn\r\n */\r\n static createAccessTokenEntity(\r\n homeAccountId: string,\r\n environment: string,\r\n accessToken: string,\r\n clientId: string,\r\n tenantId: string,\r\n scopes: string,\r\n expiresOn: number,\r\n extExpiresOn: number,\r\n cryptoUtils: ICrypto,\r\n refreshOn?: number,\r\n tokenType?: AuthenticationScheme,\r\n userAssertionHash?:string,\r\n keyId?: string,\r\n requestedClaims?: string,\r\n requestedClaimsHash?: string\r\n ): AccessTokenEntity {\r\n const atEntity: AccessTokenEntity = new AccessTokenEntity();\r\n\r\n atEntity.homeAccountId = homeAccountId;\r\n atEntity.credentialType = CredentialType.ACCESS_TOKEN;\r\n atEntity.secret = accessToken;\r\n\r\n const currentTime = TimeUtils.nowSeconds();\r\n atEntity.cachedAt = currentTime.toString();\r\n\r\n /*\r\n * Token expiry time.\r\n * This value should be  calculated based on the current UTC time measured locally and the value  expires_in Represented as a string in JSON.\r\n */\r\n atEntity.expiresOn = expiresOn.toString();\r\n atEntity.extendedExpiresOn = extExpiresOn.toString();\r\n if (refreshOn) {\r\n atEntity.refreshOn = refreshOn.toString();\r\n }\r\n\r\n atEntity.environment = environment;\r\n atEntity.clientId = clientId;\r\n atEntity.realm = tenantId;\r\n atEntity.target = scopes;\r\n atEntity.userAssertionHash = userAssertionHash;\r\n\r\n atEntity.tokenType = StringUtils.isEmpty(tokenType) ? AuthenticationScheme.BEARER : tokenType;\r\n\r\n if (requestedClaims) {\r\n atEntity.requestedClaims = requestedClaims;\r\n atEntity.requestedClaimsHash = requestedClaimsHash;\r\n }\r\n\r\n /*\r\n * Create Access Token With Auth Scheme instead of regular access token\r\n * Cast to lower to handle \"bearer\" from ADFS\r\n */\r\n if (atEntity.tokenType?.toLowerCase() !== AuthenticationScheme.BEARER.toLowerCase()) {\r\n atEntity.credentialType = CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;\r\n switch (atEntity.tokenType) {\r\n case AuthenticationScheme.POP:\r\n // Make sure keyId is present and add it to credential\r\n const tokenClaims: TokenClaims | null = AuthToken.extractTokenClaims(accessToken, cryptoUtils);\r\n if (!tokenClaims?.cnf?.kid) {\r\n throw ClientAuthError.createTokenClaimsRequiredError();\r\n }\r\n atEntity.keyId = tokenClaims.cnf.kid;\r\n break;\r\n case AuthenticationScheme.SSH:\r\n atEntity.keyId = keyId;\r\n }\r\n }\r\n\r\n return atEntity;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAccessTokenEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"credentialType\") &&\r\n entity.hasOwnProperty(\"realm\") &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"secret\") &&\r\n entity.hasOwnProperty(\"target\") &&\r\n (entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN || entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CredentialEntity } from \"./CredentialEntity\";\r\nimport { CredentialType } from \"../../utils/Constants\";\r\n\r\n/**\r\n * REFRESH_TOKEN Cache\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key Example: uid.utid-login.microsoftonline.com-refreshtoken-clientId--\r\n *\r\n * Value:\r\n * {\r\n * homeAccountId: home account identifier for the auth scheme,\r\n * environment: entity that issued the token, represented as a full host\r\n * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other\r\n * clientId: client ID of the application\r\n * secret: Actual credential as a string\r\n * familyId: Family ID identifier, '1' represents Microsoft Family\r\n * realm: Full tenant or organizational identifier that the account belongs to\r\n * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.\r\n * }\r\n */\r\nexport class RefreshTokenEntity extends CredentialEntity {\r\n familyId?: string;\r\n\r\n /**\r\n * Create RefreshTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\r\n static createRefreshTokenEntity(\r\n homeAccountId: string,\r\n environment: string,\r\n refreshToken: string,\r\n clientId: string,\r\n familyId?: string,\r\n userAssertionHash?: string\r\n ): RefreshTokenEntity {\r\n const rtEntity = new RefreshTokenEntity();\r\n\r\n rtEntity.clientId = clientId;\r\n rtEntity.credentialType = CredentialType.REFRESH_TOKEN;\r\n rtEntity.environment = environment;\r\n rtEntity.homeAccountId = homeAccountId;\r\n rtEntity.secret = refreshToken;\r\n rtEntity.userAssertionHash = userAssertionHash;\r\n\r\n if (familyId)\r\n rtEntity.familyId = familyId;\r\n\r\n return rtEntity;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isRefreshTokenEntity(entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n entity.hasOwnProperty(\"homeAccountId\") &&\r\n entity.hasOwnProperty(\"environment\") &&\r\n entity.hasOwnProperty(\"credentialType\") &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"secret\") &&\r\n entity[\"credentialType\"] === CredentialType.REFRESH_TOKEN\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { APP_METADATA, Separators } from \"../../utils/Constants\";\r\n\r\n/**\r\n * APP_METADATA Cache\r\n *\r\n * Key:Value Schema:\r\n *\r\n * Key: appmetadata--\r\n *\r\n * Value:\r\n * {\r\n * clientId: client ID of the application\r\n * environment: entity that issued the token, represented as a full host\r\n * familyId: Family ID identifier, '1' represents Microsoft Family\r\n * }\r\n */\r\nexport class AppMetadataEntity {\r\n clientId: string;\r\n environment: string;\r\n familyId?: string;\r\n\r\n /**\r\n * Generate AppMetadata Cache Key as per the schema: appmetadata--\r\n */\r\n generateAppMetadataKey(): string {\r\n return AppMetadataEntity.generateAppMetadataCacheKey(this.environment, this.clientId);\r\n }\r\n\r\n /**\r\n * Generate AppMetadata Cache Key\r\n */\r\n static generateAppMetadataCacheKey(environment: string, clientId: string): string {\r\n const appMetaDataKeyArray: Array = [\r\n APP_METADATA,\r\n environment,\r\n clientId,\r\n ];\r\n return appMetaDataKeyArray.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\r\n }\r\n\r\n /**\r\n * Creates AppMetadataEntity\r\n * @param clientId\r\n * @param environment\r\n * @param familyId\r\n */\r\n static createAppMetadataEntity(clientId: string, environment: string, familyId?: string): AppMetadataEntity {\r\n const appMetadata = new AppMetadataEntity();\r\n\r\n appMetadata.clientId = clientId;\r\n appMetadata.environment = environment;\r\n if (familyId) {\r\n appMetadata.familyId = familyId;\r\n }\r\n\r\n return appMetadata;\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAppMetadataEntity(key: string, entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n key.indexOf(APP_METADATA) === 0 &&\r\n entity.hasOwnProperty(\"clientId\") &&\r\n entity.hasOwnProperty(\"environment\")\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { SERVER_TELEM_CONSTANTS } from \"../../utils/Constants\";\r\n\r\nexport class ServerTelemetryEntity {\r\n failedRequests: Array;\r\n errors: string[];\r\n cacheHits: number;\r\n\r\n constructor() {\r\n this.failedRequests = [];\r\n this.errors = [];\r\n this.cacheHits = 0;\r\n }\r\n\r\n /**\r\n * validates if a given cache entry is \"Telemetry\", parses \r\n * @param key\r\n * @param entity\r\n */\r\n static isServerTelemetryEntity(key: string, entity?: object): boolean {\r\n\r\n const validateKey: boolean = key.indexOf(SERVER_TELEM_CONSTANTS.CACHE_KEY) === 0;\r\n let validateEntity: boolean = true;\r\n\r\n if (entity) {\r\n validateEntity =\r\n entity.hasOwnProperty(\"failedRequests\") &&\r\n entity.hasOwnProperty(\"errors\") &&\r\n entity.hasOwnProperty(\"cacheHits\");\r\n }\r\n\r\n return validateKey && validateEntity;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { CloudDiscoveryMetadata } from \"../../authority/CloudDiscoveryMetadata\";\r\nimport { OpenIdConfigResponse } from \"../../authority/OpenIdConfigResponse\";\r\nimport { AUTHORITY_METADATA_CONSTANTS } from \"../../utils/Constants\";\r\nimport { TimeUtils } from \"../../utils/TimeUtils\";\r\n\r\nexport class AuthorityMetadataEntity {\r\n aliases: Array;\r\n preferred_cache: string;\r\n preferred_network: string;\r\n canonical_authority: string;\r\n authorization_endpoint: string;\r\n token_endpoint: string;\r\n end_session_endpoint?: string;\r\n issuer: string;\r\n aliasesFromNetwork: boolean;\r\n endpointsFromNetwork: boolean;\r\n expiresAt: number;\r\n jwks_uri: string;\r\n\r\n constructor() {\r\n this.expiresAt = TimeUtils.nowSeconds() + AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS;\r\n }\r\n\r\n /**\r\n * Update the entity with new aliases, preferred_cache and preferred_network values\r\n * @param metadata \r\n * @param fromNetwork \r\n */\r\n updateCloudDiscoveryMetadata(metadata: CloudDiscoveryMetadata, fromNetwork: boolean): void {\r\n this.aliases = metadata.aliases;\r\n this.preferred_cache = metadata.preferred_cache;\r\n this.preferred_network = metadata.preferred_network;\r\n this.aliasesFromNetwork = fromNetwork;\r\n }\r\n\r\n /**\r\n * Update the entity with new endpoints\r\n * @param metadata \r\n * @param fromNetwork \r\n */\r\n updateEndpointMetadata(metadata: OpenIdConfigResponse, fromNetwork: boolean): void {\r\n this.authorization_endpoint = metadata.authorization_endpoint;\r\n this.token_endpoint = metadata.token_endpoint;\r\n this.end_session_endpoint = metadata.end_session_endpoint;\r\n this.issuer = metadata.issuer;\r\n this.endpointsFromNetwork = fromNetwork;\r\n this.jwks_uri = metadata.jwks_uri;\r\n }\r\n\r\n /**\r\n * Save the authority that was used to create this cache entry\r\n * @param authority \r\n */\r\n updateCanonicalAuthority(authority: string): void {\r\n this.canonical_authority = authority;\r\n }\r\n\r\n /**\r\n * Reset the exiresAt value\r\n */\r\n resetExpiresAt(): void {\r\n this.expiresAt = TimeUtils.nowSeconds() + AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS;\r\n }\r\n\r\n /**\r\n * Returns whether or not the data needs to be refreshed\r\n */\r\n isExpired(): boolean {\r\n return this.expiresAt <= TimeUtils.nowSeconds();\r\n }\r\n\r\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\r\n static isAuthorityMetadataEntity(key: string, entity: object): boolean {\r\n\r\n if (!entity) {\r\n return false;\r\n }\r\n\r\n return (\r\n key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 &&\r\n entity.hasOwnProperty(\"aliases\") &&\r\n entity.hasOwnProperty(\"preferred_cache\") &&\r\n entity.hasOwnProperty(\"preferred_network\") &&\r\n entity.hasOwnProperty(\"canonical_authority\") &&\r\n entity.hasOwnProperty(\"authorization_endpoint\") &&\r\n entity.hasOwnProperty(\"token_endpoint\") &&\r\n entity.hasOwnProperty(\"issuer\") &&\r\n entity.hasOwnProperty(\"aliasesFromNetwork\") &&\r\n entity.hasOwnProperty(\"endpointsFromNetwork\") &&\r\n entity.hasOwnProperty(\"expiresAt\") &&\r\n entity.hasOwnProperty(\"jwks_uri\")\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ThrottlingConstants } from \"../../utils/Constants\";\r\n\r\nexport class ThrottlingEntity {\r\n // Unix-time value representing the expiration of the throttle\r\n throttleTime: number;\r\n // Information provided by the server\r\n error?: string;\r\n errorCodes?: Array;\r\n errorMessage?: string;\r\n subError?: string;\r\n\r\n /**\r\n * validates if a given cache entry is \"Throttling\", parses \r\n * @param key\r\n * @param entity\r\n */\r\n static isThrottlingEntity(key: string, entity?: object): boolean {\r\n \r\n let validateKey: boolean = false;\r\n if (key) {\r\n validateKey = key.indexOf(ThrottlingConstants.THROTTLING_PREFIX) === 0;\r\n }\r\n \r\n let validateEntity: boolean = true;\r\n if (entity) {\r\n validateEntity = entity.hasOwnProperty(\"throttleTime\");\r\n }\r\n\r\n return validateKey && validateEntity;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { StringUtils } from \"./StringUtils\";\r\nimport { Constants } from \"./Constants\";\r\nimport { ICrypto } from \"../crypto/ICrypto\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\n\r\n/**\r\n * Type which defines the object that is stringified, encoded and sent in the state value.\r\n * Contains the following:\r\n * - id - unique identifier for this request\r\n * - ts - timestamp for the time the request was made. Used to ensure that token expiration is not calculated incorrectly.\r\n * - platformState - string value sent from the platform.\r\n */\r\nexport type LibraryStateObject = {\r\n id: string,\r\n meta?: Record\r\n};\r\n\r\n/**\r\n * Type which defines the stringified and encoded object sent to the service in the authorize request.\r\n */\r\nexport type RequestStateObject = {\r\n userRequestState: string,\r\n libraryState: LibraryStateObject\r\n};\r\n\r\n/**\r\n * Class which provides helpers for OAuth 2.0 protocol specific values\r\n */\r\nexport class ProtocolUtils {\r\n\r\n /**\r\n * Appends user state with random guid, or returns random guid.\r\n * @param userState \r\n * @param randomGuid \r\n */\r\n static setRequestState(cryptoObj: ICrypto, userState?: string, meta?: Record): string {\r\n const libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta);\r\n return !StringUtils.isEmpty(userState) ? `${libraryState}${Constants.RESOURCE_DELIM}${userState}` : libraryState;\r\n }\r\n\r\n /**\r\n * Generates the state value used by the common library.\r\n * @param randomGuid \r\n * @param cryptoObj \r\n */\r\n static generateLibraryState(cryptoObj: ICrypto, meta?: Record): string {\r\n if (!cryptoObj) {\r\n throw ClientAuthError.createNoCryptoObjectError(\"generateLibraryState\");\r\n }\r\n\r\n // Create a state object containing a unique id and the timestamp of the request creation\r\n const stateObj: LibraryStateObject = {\r\n id: cryptoObj.createNewGuid()\r\n };\r\n\r\n if (meta) {\r\n stateObj.meta = meta;\r\n }\r\n\r\n const stateString = JSON.stringify(stateObj);\r\n\r\n return cryptoObj.base64Encode(stateString);\r\n }\r\n\r\n /**\r\n * Parses the state into the RequestStateObject, which contains the LibraryState info and the state passed by the user.\r\n * @param state \r\n * @param cryptoObj \r\n */\r\n static parseRequestState(cryptoObj: ICrypto, state: string): RequestStateObject {\r\n if (!cryptoObj) {\r\n throw ClientAuthError.createNoCryptoObjectError(\"parseRequestState\");\r\n }\r\n\r\n if (StringUtils.isEmpty(state)) {\r\n throw ClientAuthError.createInvalidStateError(state, \"Null, undefined or empty state\");\r\n }\r\n\r\n try {\r\n // Split the state between library state and user passed state and decode them separately\r\n const splitState = state.split(Constants.RESOURCE_DELIM);\r\n const libraryState = splitState[0];\r\n const userState = splitState.length > 1 ? splitState.slice(1).join(Constants.RESOURCE_DELIM) : Constants.EMPTY_STRING;\r\n const libraryStateString = cryptoObj.base64Decode(libraryState);\r\n const libraryStateObj = JSON.parse(libraryStateString) as LibraryStateObject;\r\n return {\r\n userRequestState: !StringUtils.isEmpty(userState) ? userState : Constants.EMPTY_STRING,\r\n libraryState: libraryStateObj\r\n };\r\n } catch(e) {\r\n throw ClientAuthError.createInvalidStateError(state, e);\r\n }\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { IdTokenEntity } from \"./IdTokenEntity\";\r\nimport { AccessTokenEntity } from \"./AccessTokenEntity\";\r\nimport { RefreshTokenEntity } from \"./RefreshTokenEntity\";\r\nimport { AccountEntity } from \"./AccountEntity\";\r\nimport { AppMetadataEntity } from \"./AppMetadataEntity\";\r\n\r\nexport class CacheRecord {\r\n account: AccountEntity | null;\r\n idToken: IdTokenEntity | null;\r\n accessToken: AccessTokenEntity | null;\r\n refreshToken: RefreshTokenEntity | null;\r\n appMetadata: AppMetadataEntity | null;\r\n\r\n constructor(accountEntity?: AccountEntity | null, idTokenEntity?: IdTokenEntity | null, accessTokenEntity?: AccessTokenEntity | null, refreshTokenEntity?: RefreshTokenEntity | null, appMetadataEntity?: AppMetadataEntity | null) {\r\n this.account = accountEntity || null;\r\n this.idToken = idTokenEntity || null;\r\n this.accessToken = accessTokenEntity || null;\r\n this.refreshToken = refreshTokenEntity || null;\r\n this.appMetadata = appMetadataEntity || null;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ProtocolMode } from \"./ProtocolMode\";\r\nimport { AzureRegionConfiguration } from \"./AzureRegionConfiguration\";\r\n\r\nexport type AuthorityOptions = {\r\n protocolMode: ProtocolMode;\r\n knownAuthorities: Array;\r\n cloudDiscoveryMetadata: string;\r\n authorityMetadata: string;\r\n skipAuthorityMetadataCache?: boolean;\r\n azureRegionConfiguration?: AzureRegionConfiguration;\r\n};\r\n\r\nexport enum AzureCloudInstance {\r\n // AzureCloudInstance is not specified.\r\n None,\r\n\r\n // Microsoft Azure public cloud\r\n AzurePublic = \"https://login.microsoftonline.com\",\r\n\r\n // Microsoft PPE\r\n AzurePpe = \"https://login.windows-ppe.net\",\r\n\r\n // Microsoft Chinese national cloud\r\n AzureChina = \"https://login.chinacloudapi.cn\",\r\n\r\n // Microsoft German national cloud (\"Black Forest\")\r\n AzureGermany = \"https://login.microsoftonline.de\",\r\n\r\n // US Government cloud\r\n AzureUsGovernment = \"https://login.microsoftonline.us\",\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { BrowserConfigurationAuthError } from \"../error/BrowserConfigurationAuthError\";\r\nimport { BrowserCacheLocation } from \"../utils/BrowserConstants\";\r\nimport { IWindowStorage } from \"./IWindowStorage\";\r\n\r\nexport class BrowserStorage implements IWindowStorage {\r\n\r\n private windowStorage: Storage;\r\n\r\n constructor(cacheLocation: string) {\r\n this.validateWindowStorage(cacheLocation);\r\n this.windowStorage = window[cacheLocation];\r\n }\r\n\r\n private validateWindowStorage(cacheLocation: string): void {\r\n if (cacheLocation !== BrowserCacheLocation.LocalStorage && cacheLocation !== BrowserCacheLocation.SessionStorage) {\r\n throw BrowserConfigurationAuthError.createStorageNotSupportedError(cacheLocation);\r\n }\r\n const storageSupported = !!window[cacheLocation];\r\n if (!storageSupported) {\r\n throw BrowserConfigurationAuthError.createStorageNotSupportedError(cacheLocation);\r\n }\r\n }\r\n\r\n getItem(key: string): string | null {\r\n return this.windowStorage.getItem(key);\r\n }\r\n\r\n setItem(key: string, value: string): void {\r\n this.windowStorage.setItem(key, value);\r\n }\r\n\r\n removeItem(key: string): void {\r\n this.windowStorage.removeItem(key);\r\n }\r\n\r\n getKeys(): string[] {\r\n return Object.keys(this.windowStorage);\r\n }\r\n\r\n containsKey(key: string): boolean {\r\n return this.windowStorage.hasOwnProperty(key);\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { ServerAuthorizationCodeResponse } from \"../response/ServerAuthorizationCodeResponse\";\r\nimport { ClientConfigurationError } from \"../error/ClientConfigurationError\";\r\nimport { ClientAuthError } from \"../error/ClientAuthError\";\r\nimport { StringUtils } from \"../utils/StringUtils\";\r\nimport { IUri } from \"./IUri\";\r\nimport { AADAuthorityConstants, Constants } from \"../utils/Constants\";\r\n\r\n/**\r\n * Url object class which can perform various transformations on url strings.\r\n */\r\nexport class UrlString {\r\n\r\n // internal url string field\r\n private _urlString: string;\r\n public get urlString(): string {\r\n return this._urlString;\r\n }\r\n\r\n constructor(url: string) {\r\n this._urlString = url;\r\n if (StringUtils.isEmpty(this._urlString)) {\r\n // Throws error if url is empty\r\n throw ClientConfigurationError.createUrlEmptyError();\r\n }\r\n\r\n if (StringUtils.isEmpty(this.getHash())) {\r\n this._urlString = UrlString.canonicalizeUri(url);\r\n }\r\n }\r\n\r\n /**\r\n * Ensure urls are lower case and end with a / character.\r\n * @param url\r\n */\r\n static canonicalizeUri(url: string): string {\r\n if (url) {\r\n let lowerCaseUrl = url.toLowerCase();\r\n\r\n if (StringUtils.endsWith(lowerCaseUrl, \"?\")) {\r\n lowerCaseUrl = lowerCaseUrl.slice(0, -1);\r\n } else if (StringUtils.endsWith(lowerCaseUrl, \"?/\")) {\r\n lowerCaseUrl = lowerCaseUrl.slice(0, -2);\r\n }\r\n\r\n if (!StringUtils.endsWith(lowerCaseUrl, \"/\")) {\r\n lowerCaseUrl += \"/\";\r\n }\r\n\r\n return lowerCaseUrl;\r\n }\r\n\r\n return url;\r\n }\r\n\r\n /**\r\n * Throws if urlString passed is not a valid authority URI string.\r\n */\r\n validateAsUri(): void {\r\n // Attempts to parse url for uri components\r\n let components;\r\n try {\r\n components = this.getUrlComponents();\r\n } catch (e) {\r\n throw ClientConfigurationError.createUrlParseError(e);\r\n }\r\n\r\n // Throw error if URI or path segments are not parseable.\r\n if (!components.HostNameAndPort || !components.PathSegments) {\r\n throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);\r\n }\r\n\r\n // Throw error if uri is insecure.\r\n if(!components.Protocol || components.Protocol.toLowerCase() !== \"https:\") {\r\n throw ClientConfigurationError.createInsecureAuthorityUriError(this.urlString);\r\n }\r\n }\r\n\r\n /**\r\n * Given a url and a query string return the url with provided query string appended\r\n * @param url\r\n * @param queryString\r\n */\r\n static appendQueryString(url: string, queryString: string): string {\r\n if (StringUtils.isEmpty(queryString)) {\r\n return url;\r\n }\r\n\r\n return url.indexOf(\"?\") < 0 ? `${url}?${queryString}` : `${url}&${queryString}`;\r\n }\r\n\r\n /**\r\n * Returns a url with the hash removed\r\n * @param url\r\n */\r\n static removeHashFromUrl(url: string): string {\r\n return UrlString.canonicalizeUri(url.split(\"#\")[0]);\r\n }\r\n\r\n /**\r\n * Given a url like https://a:b/common/d?e=f#g, and a tenantId, returns https://a:b/tenantId/d\r\n * @param href The url\r\n * @param tenantId The tenant id to replace\r\n */\r\n replaceTenantPath(tenantId: string): UrlString {\r\n const urlObject = this.getUrlComponents();\r\n const pathArray = urlObject.PathSegments;\r\n if (tenantId && (pathArray.length !== 0 && (pathArray[0] === AADAuthorityConstants.COMMON || pathArray[0] === AADAuthorityConstants.ORGANIZATIONS))) {\r\n pathArray[0] = tenantId;\r\n }\r\n return UrlString.constructAuthorityUriFromObject(urlObject);\r\n }\r\n\r\n /**\r\n * Returns the anchor part(#) of the URL\r\n */\r\n getHash(): string {\r\n return UrlString.parseHash(this.urlString);\r\n }\r\n\r\n /**\r\n * Parses out the components from a url string.\r\n * @returns An object with the various components. Please cache this value insted of calling this multiple times on the same url.\r\n */\r\n getUrlComponents(): IUri {\r\n // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\r\n const regEx = RegExp(\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\");\r\n\r\n // If url string does not match regEx, we throw an error\r\n const match = this.urlString.match(regEx);\r\n if (!match) {\r\n throw ClientConfigurationError.createUrlParseError(`Given url string: ${this.urlString}`);\r\n }\r\n\r\n // Url component object\r\n const urlComponents = {\r\n Protocol: match[1],\r\n HostNameAndPort: match[4],\r\n AbsolutePath: match[5],\r\n QueryString: match[7]\r\n } as IUri;\r\n\r\n let pathSegments = urlComponents.AbsolutePath.split(\"/\");\r\n pathSegments = pathSegments.filter((val) => val && val.length > 0); // remove empty elements\r\n urlComponents.PathSegments = pathSegments;\r\n\r\n if (!StringUtils.isEmpty(urlComponents.QueryString) && urlComponents.QueryString.endsWith(\"/\")) {\r\n urlComponents.QueryString = urlComponents.QueryString.substring(0, urlComponents.QueryString.length-1);\r\n }\r\n return urlComponents;\r\n }\r\n\r\n static getDomainFromUrl(url: string): string {\r\n const regEx = RegExp(\"^([^:/?#]+://)?([^/?#]*)\");\r\n\r\n const match = url.match(regEx);\r\n\r\n if (!match) {\r\n throw ClientConfigurationError.createUrlParseError(`Given url string: ${url}`);\r\n }\r\n\r\n return match[2];\r\n }\r\n\r\n static getAbsoluteUrl(relativeUrl: string, baseUrl: string): string {\r\n if (relativeUrl[0] === Constants.FORWARD_SLASH) {\r\n const url = new UrlString(baseUrl);\r\n const baseComponents = url.getUrlComponents();\r\n\r\n return baseComponents.Protocol + \"//\" + baseComponents.HostNameAndPort + relativeUrl;\r\n }\r\n\r\n return relativeUrl;\r\n }\r\n\r\n /**\r\n * Parses hash string from given string. Returns empty string if no hash symbol is found.\r\n * @param hashString\r\n */\r\n static parseHash(hashString: string): string {\r\n const hashIndex1 = hashString.indexOf(\"#\");\r\n const hashIndex2 = hashString.indexOf(\"#/\");\r\n if (hashIndex2 > -1) {\r\n return hashString.substring(hashIndex2 + 2);\r\n } else if (hashIndex1 > -1) {\r\n return hashString.substring(hashIndex1 + 1);\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Parses query string from given string. Returns empty string if no query symbol is found.\r\n * @param queryString\r\n */\r\n static parseQueryString(queryString: string): string {\r\n const queryIndex1 = queryString.indexOf(\"?\");\r\n const queryIndex2 = queryString.indexOf(\"/?\");\r\n if (queryIndex2 > -1) {\r\n return queryString.substring(queryIndex2 + 2);\r\n } else if (queryIndex1 > -1) {\r\n return queryString.substring(queryIndex1 + 1);\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n static constructAuthorityUriFromObject(urlObject: IUri): UrlString {\r\n return new UrlString(urlObject.Protocol + \"//\" + urlObject.HostNameAndPort + \"/\" + urlObject.PathSegments.join(\"/\"));\r\n }\r\n\r\n /**\r\n * Returns URL hash as server auth code response object.\r\n */\r\n static getDeserializedHash(hash: string): ServerAuthorizationCodeResponse {\r\n // Check if given hash is empty\r\n if (StringUtils.isEmpty(hash)) {\r\n return {};\r\n }\r\n // Strip the # symbol if present\r\n const parsedHash = UrlString.parseHash(hash);\r\n // If # symbol was not present, above will return empty string, so give original hash value\r\n const deserializedHash: ServerAuthorizationCodeResponse = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedHash) ? hash : parsedHash);\r\n // Check if deserialization didn't work\r\n if (!deserializedHash) {\r\n throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedHash));\r\n }\r\n return deserializedHash;\r\n }\r\n\r\n /**\r\n * Returns URL query string as server auth code response object.\r\n */\r\n static getDeserializedQueryString(query: string): ServerAuthorizationCodeResponse {\r\n // Check if given query is empty\r\n if (StringUtils.isEmpty(query)) {\r\n return {};\r\n }\r\n // Strip the ? symbol if present\r\n const parsedQueryString = UrlString.parseQueryString(query);\r\n // If ? symbol was not present, above will return empty string, so give original query value\r\n const deserializedQueryString: ServerAuthorizationCodeResponse = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedQueryString) ? query : parsedQueryString);\r\n // Check if deserialization didn't work\r\n if (!deserializedQueryString) {\r\n throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedQueryString));\r\n }\r\n return deserializedQueryString;\r\n }\r\n\r\n /**\r\n * Check if the hash of the URL string contains known properties\r\n */\r\n static hashContainsKnownProperties(hash: string): boolean {\r\n if (StringUtils.isEmpty(hash) || hash.indexOf(\"=\") < 0) {\r\n // Hash doesn't contain key/value pairs\r\n return false;\r\n }\r\n\r\n const parameters: ServerAuthorizationCodeResponse = UrlString.getDeserializedHash(hash);\r\n return !!(\r\n parameters.code ||\r\n parameters.error_description ||\r\n parameters.error ||\r\n parameters.state\r\n );\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { InteractionType } from \"./BrowserConstants\";\r\nimport { StringUtils, ClientAuthError, ICrypto, RequestStateObject, ProtocolUtils, ServerAuthorizationCodeResponse, UrlString } from \"@azure/msal-common\";\r\n\r\nexport type BrowserStateObject = {\r\n interactionType: InteractionType\r\n};\r\n\r\nexport class BrowserProtocolUtils {\r\n\r\n /**\r\n * Extracts the BrowserStateObject from the state string.\r\n * @param browserCrypto \r\n * @param state \r\n */\r\n static extractBrowserRequestState(browserCrypto: ICrypto, state: string): BrowserStateObject | null {\r\n if (StringUtils.isEmpty(state)) {\r\n return null;\r\n }\r\n\r\n try {\r\n const requestStateObj: RequestStateObject = ProtocolUtils.parseRequestState(browserCrypto, state);\r\n return requestStateObj.libraryState.meta as BrowserStateObject;\r\n } catch (e) {\r\n throw ClientAuthError.createInvalidStateError(state, e);\r\n }\r\n }\r\n\r\n /**\r\n * Parses properties of server response from url hash\r\n * @param locationHash Hash from url\r\n */\r\n static parseServerResponseFromHash(locationHash: string): ServerAuthorizationCodeResponse {\r\n if (!locationHash) {\r\n return {};\r\n }\r\n \r\n const hashUrlString = new UrlString(locationHash);\r\n return UrlString.getDeserializedHash(hashUrlString.getHash());\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, PersistentCacheKeys, StringUtils, CommonAuthorizationCodeRequest, ICrypto, AccountEntity, IdTokenEntity, AccessTokenEntity, RefreshTokenEntity, AppMetadataEntity, CacheManager, ServerTelemetryEntity, ThrottlingEntity, ProtocolUtils, Logger, AuthorityMetadataEntity, DEFAULT_CRYPTO_IMPLEMENTATION, AccountInfo, ActiveAccountFilters, CcsCredential, CcsCredentialType, IdToken, ValidCredentialType, ClientAuthError, TokenKeys, CredentialType, AuthenticationResult, AuthenticationScheme, CacheRecord } from \"@azure/msal-common\";\r\nimport { CacheOptions } from \"../config/Configuration\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { BrowserCacheLocation, InteractionType, TemporaryCacheKeys, InMemoryCacheKeys, StaticCacheKeys } from \"../utils/BrowserConstants\";\r\nimport { BrowserStorage } from \"./BrowserStorage\";\r\nimport { MemoryStorage } from \"./MemoryStorage\";\r\nimport { IWindowStorage } from \"./IWindowStorage\";\r\nimport { BrowserProtocolUtils } from \"../utils/BrowserProtocolUtils\";\r\nimport { NativeTokenRequest } from \"../broker/nativeBroker/NativeRequest\";\r\nimport { SilentRequest } from \"../request/SilentRequest\";\r\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\r\nimport { RedirectRequest } from \"../request/RedirectRequest\";\r\nimport { PopupRequest } from \"../request/PopupRequest\";\r\n\r\n/**\r\n * This class implements the cache storage interface for MSAL through browser local or session storage.\r\n * Cookies are only used if storeAuthStateInCookie is true, and are only used for\r\n * parameters such as state and nonce, generally.\r\n */\r\nexport class BrowserCacheManager extends CacheManager {\r\n\r\n // Cache configuration, either set by user or default values.\r\n protected cacheConfig: Required;\r\n // Window storage object (either local or sessionStorage)\r\n protected browserStorage: IWindowStorage;\r\n // Internal in-memory storage object used for data used by msal that does not need to persist across page loads\r\n protected internalStorage: MemoryStorage;\r\n // Temporary cache\r\n protected temporaryCacheStorage: IWindowStorage;\r\n // Logger instance\r\n protected logger: Logger;\r\n\r\n // Cookie life calculation (hours * minutes * seconds * ms)\r\n protected readonly COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1000;\r\n\r\n constructor(clientId: string, cacheConfig: Required, cryptoImpl: ICrypto, logger: Logger) {\r\n super(clientId, cryptoImpl, logger);\r\n this.cacheConfig = cacheConfig;\r\n this.logger = logger;\r\n this.internalStorage = new MemoryStorage();\r\n this.browserStorage = this.setupBrowserStorage(this.cacheConfig.cacheLocation);\r\n this.temporaryCacheStorage = this.setupTemporaryCacheStorage(this.cacheConfig.temporaryCacheLocation, this.cacheConfig.cacheLocation);\r\n\r\n // Migrate cache entries from older versions of MSAL.\r\n if (cacheConfig.cacheMigrationEnabled) {\r\n this.migrateCacheEntries();\r\n this.createKeyMaps();\r\n }\r\n }\r\n\r\n /**\r\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured cacheLocation.\r\n * @param cacheLocation\r\n */\r\n protected setupBrowserStorage(cacheLocation: BrowserCacheLocation | string): IWindowStorage {\r\n switch (cacheLocation) {\r\n case BrowserCacheLocation.LocalStorage:\r\n case BrowserCacheLocation.SessionStorage:\r\n try {\r\n return new BrowserStorage(cacheLocation);\r\n } catch (e) {\r\n this.logger.verbose(e);\r\n break;\r\n }\r\n case BrowserCacheLocation.MemoryStorage:\r\n default:\r\n break;\r\n }\r\n this.cacheConfig.cacheLocation = BrowserCacheLocation.MemoryStorage;\r\n return new MemoryStorage();\r\n }\r\n\r\n /**\r\n * Returns a window storage class implementing the IWindowStorage interface that corresponds to the configured temporaryCacheLocation.\r\n * @param temporaryCacheLocation\r\n * @param cacheLocation\r\n */\r\n protected setupTemporaryCacheStorage(temporaryCacheLocation: BrowserCacheLocation | string, cacheLocation: BrowserCacheLocation | string): IWindowStorage {\r\n switch (cacheLocation) {\r\n case BrowserCacheLocation.LocalStorage:\r\n case BrowserCacheLocation.SessionStorage:\r\n try {\r\n /*\r\n * When users do not explicitly choose their own temporaryCacheLocation, \r\n * temporary cache items will always be stored in session storage to mitigate problems caused by multiple tabs\r\n */\r\n return new BrowserStorage(temporaryCacheLocation || BrowserCacheLocation.SessionStorage);\r\n } catch (e) {\r\n this.logger.verbose(e);\r\n return this.internalStorage;\r\n }\r\n case BrowserCacheLocation.MemoryStorage:\r\n default:\r\n return this.internalStorage;\r\n }\r\n }\r\n\r\n /**\r\n * Migrate all old cache entries to new schema. No rollback supported.\r\n * @param storeAuthStateInCookie\r\n */\r\n protected migrateCacheEntries(): void {\r\n const idTokenKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ID_TOKEN}`;\r\n const clientInfoKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.CLIENT_INFO}`;\r\n const errorKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ERROR}`;\r\n const errorDescKey = `${Constants.CACHE_PREFIX}.${PersistentCacheKeys.ERROR_DESC}`;\r\n\r\n const idTokenValue = this.browserStorage.getItem(idTokenKey);\r\n const clientInfoValue = this.browserStorage.getItem(clientInfoKey);\r\n const errorValue = this.browserStorage.getItem(errorKey);\r\n const errorDescValue = this.browserStorage.getItem(errorDescKey);\r\n\r\n const values = [idTokenValue, clientInfoValue, errorValue, errorDescValue];\r\n const keysToMigrate = [PersistentCacheKeys.ID_TOKEN, PersistentCacheKeys.CLIENT_INFO, PersistentCacheKeys.ERROR, PersistentCacheKeys.ERROR_DESC];\r\n\r\n keysToMigrate.forEach((cacheKey: string, index: number) => this.migrateCacheEntry(cacheKey, values[index]));\r\n }\r\n\r\n /**\r\n * Utility function to help with migration.\r\n * @param newKey\r\n * @param value\r\n * @param storeAuthStateInCookie\r\n */\r\n protected migrateCacheEntry(newKey: string, value: string | null): void {\r\n if (value) {\r\n this.setTemporaryCache(newKey, value, true);\r\n }\r\n }\r\n\r\n /**\r\n * Searches all cache entries for MSAL accounts and creates the account key map\r\n * This is used to migrate users from older versions of MSAL which did not create the map.\r\n * @returns \r\n */\r\n private createKeyMaps(): void {\r\n this.logger.trace(\"BrowserCacheManager - createKeyMaps called.\");\r\n const accountKeys = this.getItem(StaticCacheKeys.ACCOUNT_KEYS);\r\n const tokenKeys = this.getItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`);\r\n if (accountKeys && tokenKeys) {\r\n this.logger.verbose(\"BrowserCacheManager:createKeyMaps - account and token key maps already exist, skipping migration.\");\r\n // Key maps already exist, no need to iterate through cache\r\n return;\r\n }\r\n\r\n const allKeys = this.browserStorage.getKeys();\r\n allKeys.forEach((key) => {\r\n if (this.isCredentialKey(key)) {\r\n // Get item, parse, validate and write key to map\r\n const value = this.getItem(key);\r\n if (value) {\r\n const credObj = this.validateAndParseJson(value);\r\n if (credObj && credObj.hasOwnProperty(\"credentialType\")) {\r\n switch (credObj[\"credentialType\"]) {\r\n case CredentialType.ID_TOKEN:\r\n if (IdTokenEntity.isIdTokenEntity(credObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - idToken found, saving key to token key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - idToken with key: ${key} found, saving key to token key map`);\r\n const idTokenEntity = CacheManager.toObject(new IdTokenEntity(), credObj);\r\n const newKey = this.updateCredentialCacheKey(key, idTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.ID_TOKEN);\r\n return;\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - key found matching idToken schema with value containing idToken credentialType field but value failed IdTokenEntity validation, skipping.\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed idToken validation on key: ${key}`);\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n case CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME:\r\n if (AccessTokenEntity.isAccessTokenEntity(credObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - accessToken found, saving key to token key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - accessToken with key: ${key} found, saving key to token key map`);\r\n const accessTokenEntity = CacheManager.toObject(new AccessTokenEntity(), credObj);\r\n const newKey = this.updateCredentialCacheKey(key, accessTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.ACCESS_TOKEN);\r\n return;\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - key found matching accessToken schema with value containing accessToken credentialType field but value failed AccessTokenEntity validation, skipping.\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed accessToken validation on key: ${key}`);\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n if (RefreshTokenEntity.isRefreshTokenEntity(credObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - refreshToken found, saving key to token key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - refreshToken with key: ${key} found, saving key to token key map`);\r\n const refreshTokenEntity = CacheManager.toObject(new RefreshTokenEntity(), credObj);\r\n const newKey = this.updateCredentialCacheKey(key, refreshTokenEntity);\r\n this.addTokenKey(newKey, CredentialType.REFRESH_TOKEN);\r\n return;\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - key found matching refreshToken schema with value containing refreshToken credentialType field but value failed RefreshTokenEntity validation, skipping.\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - failed refreshToken validation on key: ${key}`);\r\n }\r\n break;\r\n default:\r\n // If credentialType isn't one of our predefined ones, it may not be an MSAL cache value. Ignore.\r\n }\r\n }\r\n }\r\n } \r\n \r\n if (this.isAccountKey(key)) {\r\n const value = this.getItem(key);\r\n if (value) {\r\n const accountObj = this.validateAndParseJson(value);\r\n if (accountObj && AccountEntity.isAccountEntity(accountObj)) {\r\n this.logger.trace(\"BrowserCacheManager:createKeyMaps - account found, saving key to account key map\");\r\n this.logger.tracePii(`BrowserCacheManager:createKeyMaps - account with key: ${key} found, saving key to account key map`);\r\n this.addAccountKeyToMap(key);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Parses passed value as JSON object, JSON.parse() will throw an error.\r\n * @param input\r\n */\r\n protected validateAndParseJson(jsonValue: string): object | null {\r\n try {\r\n const parsedJson = JSON.parse(jsonValue);\r\n /**\r\n * There are edge cases in which JSON.parse will successfully parse a non-valid JSON object\r\n * (e.g. JSON.parse will parse an escaped string into an unescaped string), so adding a type check\r\n * of the parsed value is necessary in order to be certain that the string represents a valid JSON object.\r\n *\r\n */\r\n return (parsedJson && typeof parsedJson === \"object\") ? parsedJson : null;\r\n } catch (error) {\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * fetches the entry from the browser storage based off the key\r\n * @param key\r\n */\r\n getItem(key: string): string | null {\r\n return this.browserStorage.getItem(key);\r\n }\r\n\r\n /**\r\n * sets the entry in the browser storage\r\n * @param key\r\n * @param value\r\n */\r\n setItem(key: string, value: string): void {\r\n this.browserStorage.setItem(key, value);\r\n }\r\n\r\n /**\r\n * fetch the account entity from the platform cache\r\n * @param accountKey\r\n */\r\n getAccount(accountKey: string): AccountEntity | null {\r\n this.logger.trace(\"BrowserCacheManager.getAccount called\");\r\n const account = this.getItem(accountKey);\r\n if (!account) {\r\n this.removeAccountKeyFromMap(accountKey);\r\n return null;\r\n }\r\n\r\n const parsedAccount = this.validateAndParseJson(account);\r\n if (!parsedAccount || !AccountEntity.isAccountEntity(parsedAccount)) {\r\n this.removeAccountKeyFromMap(accountKey);\r\n return null;\r\n }\r\n\r\n return CacheManager.toObject(new AccountEntity(), parsedAccount);\r\n }\r\n\r\n /**\r\n * set account entity in the platform cache\r\n * @param key\r\n * @param value\r\n */\r\n setAccount(account: AccountEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAccount called\");\r\n const key = account.generateAccountKey();\r\n this.setItem(key, JSON.stringify(account));\r\n this.addAccountKeyToMap(key);\r\n }\r\n\r\n /**\r\n * Returns the array of account keys currently cached\r\n * @returns \r\n */\r\n getAccountKeys(): Array {\r\n this.logger.trace(\"BrowserCacheManager.getAccountKeys called\");\r\n const accountKeys = this.getItem(StaticCacheKeys.ACCOUNT_KEYS);\r\n if (accountKeys) {\r\n return JSON.parse(accountKeys);\r\n }\r\n\r\n this.logger.verbose(\"BrowserCacheManager.getAccountKeys - No account keys found\");\r\n return [];\r\n }\r\n\r\n /**\r\n * Add a new account to the key map\r\n * @param key \r\n */\r\n addAccountKeyToMap(key: string): void {\r\n this.logger.trace(\"BrowserCacheManager.addAccountKeyToMap called\");\r\n this.logger.tracePii(`BrowserCacheManager.addAccountKeyToMap called with key: ${key}`);\r\n const accountKeys = this.getAccountKeys();\r\n if (accountKeys.indexOf(key) === -1) {\r\n // Only add key if it does not already exist in the map\r\n accountKeys.push(key);\r\n this.setItem(StaticCacheKeys.ACCOUNT_KEYS, JSON.stringify(accountKeys));\r\n this.logger.verbose(\"BrowserCacheManager.addAccountKeyToMap account key added\");\r\n } else {\r\n this.logger.verbose(\"BrowserCacheManager.addAccountKeyToMap account key already exists in map\");\r\n }\r\n }\r\n\r\n /**\r\n * Remove an account from the key map\r\n * @param key \r\n */\r\n removeAccountKeyFromMap(key: string): void {\r\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap called\");\r\n this.logger.tracePii(`BrowserCacheManager.removeAccountKeyFromMap called with key: ${key}`);\r\n const accountKeys = this.getAccountKeys();\r\n const removalIndex = accountKeys.indexOf(key);\r\n if (removalIndex > -1) {\r\n accountKeys.splice(removalIndex, 1);\r\n this.setItem(StaticCacheKeys.ACCOUNT_KEYS, JSON.stringify(accountKeys));\r\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap account key removed\");\r\n } else {\r\n this.logger.trace(\"BrowserCacheManager.removeAccountKeyFromMap key not found in existing map\");\r\n }\r\n }\r\n\r\n /**\r\n * Extends inherited removeAccount function to include removal of the account key from the map\r\n * @param key \r\n */\r\n async removeAccount(key: string): Promise {\r\n super.removeAccount(key);\r\n this.removeAccountKeyFromMap(key);\r\n }\r\n\r\n /**\r\n * Removes given idToken from the cache and from the key map\r\n * @param key \r\n */\r\n removeIdToken(key: string): void {\r\n super.removeIdToken(key);\r\n this.removeTokenKey(key, CredentialType.ID_TOKEN);\r\n }\r\n\r\n /**\r\n * Removes given accessToken from the cache and from the key map\r\n * @param key \r\n */\r\n async removeAccessToken(key: string): Promise {\r\n super.removeAccessToken(key);\r\n this.removeTokenKey(key, CredentialType.ACCESS_TOKEN);\r\n }\r\n\r\n /**\r\n * Removes given refreshToken from the cache and from the key map\r\n * @param key \r\n */\r\n removeRefreshToken(key: string): void {\r\n super.removeRefreshToken(key);\r\n this.removeTokenKey(key, CredentialType.REFRESH_TOKEN);\r\n }\r\n\r\n /**\r\n * Gets the keys for the cached tokens associated with this clientId\r\n * @returns \r\n */\r\n getTokenKeys(): TokenKeys {\r\n this.logger.trace(\"BrowserCacheManager.getTokenKeys called\");\r\n const item = this.getItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`);\r\n if (item) {\r\n const tokenKeys = this.validateAndParseJson(item);\r\n if (tokenKeys && \r\n tokenKeys.hasOwnProperty(\"idToken\") &&\r\n tokenKeys.hasOwnProperty(\"accessToken\") &&\r\n tokenKeys.hasOwnProperty(\"refreshToken\")\r\n ) {\r\n return tokenKeys as TokenKeys;\r\n } else {\r\n this.logger.error(\"BrowserCacheManager.getTokenKeys - Token keys found but in an unknown format. Returning empty key map.\");\r\n }\r\n } else {\r\n this.logger.verbose(\"BrowserCacheManager.getTokenKeys - No token keys found\");\r\n }\r\n\r\n return {\r\n idToken: [],\r\n accessToken: [],\r\n refreshToken: []\r\n };\r\n }\r\n\r\n /**\r\n * Adds the given key to the token key map\r\n * @param key \r\n * @param type \r\n */\r\n addTokenKey(key: string, type: CredentialType): void {\r\n this.logger.trace(\"BrowserCacheManager addTokenKey called\");\r\n const tokenKeys = this.getTokenKeys();\r\n\r\n switch (type) {\r\n case CredentialType.ID_TOKEN:\r\n if (tokenKeys.idToken.indexOf(key) === -1) {\r\n this.logger.info(\"BrowserCacheManager: addTokenKey - idToken added to map\");\r\n tokenKeys.idToken.push(key);\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n if (tokenKeys.accessToken.indexOf(key) === -1) {\r\n this.logger.info(\"BrowserCacheManager: addTokenKey - accessToken added to map\");\r\n tokenKeys.accessToken.push(key);\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n if (tokenKeys.refreshToken.indexOf(key) === -1) {\r\n this.logger.info(\"BrowserCacheManager: addTokenKey - refreshToken added to map\");\r\n tokenKeys.refreshToken.push(key);\r\n }\r\n break;\r\n default:\r\n this.logger.error(`BrowserCacheManager:addTokenKey - CredentialType provided invalid. CredentialType: ${type}`);\r\n ClientAuthError.createUnexpectedCredentialTypeError();\r\n }\r\n\r\n this.setItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`, JSON.stringify(tokenKeys));\r\n }\r\n\r\n /**\r\n * Removes the given key from the token key map\r\n * @param key \r\n * @param type \r\n */\r\n removeTokenKey(key: string, type: CredentialType): void {\r\n this.logger.trace(\"BrowserCacheManager removeTokenKey called\");\r\n const tokenKeys = this.getTokenKeys();\r\n\r\n switch (type) {\r\n case CredentialType.ID_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove idToken with key: ${key} from map`);\r\n const idRemoval = tokenKeys.idToken.indexOf(key);\r\n if (idRemoval > -1) {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - idToken removed from map\");\r\n tokenKeys.idToken.splice(idRemoval, 1);\r\n } else {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - idToken does not exist in map. Either it was previously removed or it was never added.\");\r\n }\r\n break;\r\n case CredentialType.ACCESS_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove accessToken with key: ${key} from map`);\r\n const accessRemoval = tokenKeys.accessToken.indexOf(key);\r\n if (accessRemoval > -1) {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - accessToken removed from map\");\r\n tokenKeys.accessToken.splice(accessRemoval, 1);\r\n } else {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - accessToken does not exist in map. Either it was previously removed or it was never added.\");\r\n }\r\n break;\r\n case CredentialType.REFRESH_TOKEN:\r\n this.logger.infoPii(`BrowserCacheManager: removeTokenKey - attempting to remove refreshToken with key: ${key} from map`);\r\n const refreshRemoval = tokenKeys.refreshToken.indexOf(key);\r\n if (refreshRemoval > -1) {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - refreshToken removed from map\");\r\n tokenKeys.refreshToken.splice(refreshRemoval, 1);\r\n } else {\r\n this.logger.info(\"BrowserCacheManager: removeTokenKey - refreshToken does not exist in map. Either it was previously removed or it was never added.\");\r\n }\r\n break;\r\n default:\r\n this.logger.error(`BrowserCacheManager:removeTokenKey - CredentialType provided invalid. CredentialType: ${type}`);\r\n ClientAuthError.createUnexpectedCredentialTypeError();\r\n }\r\n\r\n this.setItem(`${StaticCacheKeys.TOKEN_KEYS}.${this.clientId}`, JSON.stringify(tokenKeys));\r\n }\r\n\r\n /**\r\n * generates idToken entity from a string\r\n * @param idTokenKey\r\n */\r\n getIdTokenCredential(idTokenKey: string): IdTokenEntity | null {\r\n const value = this.getItem(idTokenKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n return null;\r\n }\r\n\r\n const parsedIdToken = this.validateAndParseJson(value);\r\n if (!parsedIdToken || !IdTokenEntity.isIdTokenEntity(parsedIdToken)) {\r\n this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getIdTokenCredential: cache hit\");\r\n return CacheManager.toObject(new IdTokenEntity(), parsedIdToken);\r\n }\r\n\r\n /**\r\n * set IdToken credential to the platform cache\r\n * @param idToken\r\n */\r\n setIdTokenCredential(idToken: IdTokenEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setIdTokenCredential called\");\r\n const idTokenKey = idToken.generateCredentialKey();\r\n\r\n this.setItem(idTokenKey, JSON.stringify(idToken));\r\n\r\n this.addTokenKey(idTokenKey, CredentialType.ID_TOKEN);\r\n }\r\n\r\n /**\r\n * generates accessToken entity from a string\r\n * @param key\r\n */\r\n getAccessTokenCredential(accessTokenKey: string): AccessTokenEntity | null {\r\n const value = this.getItem(accessTokenKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n return null;\r\n }\r\n const parsedAccessToken = this.validateAndParseJson(value);\r\n if (!parsedAccessToken || !AccessTokenEntity.isAccessTokenEntity(parsedAccessToken)) {\r\n this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getAccessTokenCredential: cache hit\");\r\n return CacheManager.toObject(new AccessTokenEntity(), parsedAccessToken);\r\n }\r\n\r\n /**\r\n * set accessToken credential to the platform cache\r\n * @param accessToken\r\n */\r\n setAccessTokenCredential(accessToken: AccessTokenEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAccessTokenCredential called\");\r\n const accessTokenKey = accessToken.generateCredentialKey();\r\n this.setItem(accessTokenKey, JSON.stringify(accessToken));\r\n\r\n this.addTokenKey(accessTokenKey, CredentialType.ACCESS_TOKEN);\r\n }\r\n\r\n /**\r\n * generates refreshToken entity from a string\r\n * @param refreshTokenKey\r\n */\r\n getRefreshTokenCredential(refreshTokenKey: string): RefreshTokenEntity | null {\r\n const value = this.getItem(refreshTokenKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n return null;\r\n }\r\n const parsedRefreshToken = this.validateAndParseJson(value);\r\n if (!parsedRefreshToken || !RefreshTokenEntity.isRefreshTokenEntity(parsedRefreshToken)) {\r\n this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: called, no cache hit\");\r\n this.removeTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getRefreshTokenCredential: cache hit\");\r\n return CacheManager.toObject(new RefreshTokenEntity(), parsedRefreshToken);\r\n }\r\n\r\n /**\r\n * set refreshToken credential to the platform cache\r\n * @param refreshToken\r\n */\r\n setRefreshTokenCredential(refreshToken: RefreshTokenEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setRefreshTokenCredential called\");\r\n const refreshTokenKey = refreshToken.generateCredentialKey();\r\n this.setItem(refreshTokenKey, JSON.stringify(refreshToken));\r\n\r\n this.addTokenKey(refreshTokenKey, CredentialType.REFRESH_TOKEN);\r\n }\r\n\r\n /**\r\n * fetch appMetadata entity from the platform cache\r\n * @param appMetadataKey\r\n */\r\n getAppMetadata(appMetadataKey: string): AppMetadataEntity | null {\r\n const value = this.getItem(appMetadataKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (!parsedMetadata || !AppMetadataEntity.isAppMetadataEntity(appMetadataKey, parsedMetadata)) {\r\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getAppMetadata: cache hit\");\r\n return CacheManager.toObject(new AppMetadataEntity(), parsedMetadata);\r\n }\r\n\r\n /**\r\n * set appMetadata entity to the platform cache\r\n * @param appMetadata\r\n */\r\n setAppMetadata(appMetadata: AppMetadataEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAppMetadata called\");\r\n const appMetadataKey = appMetadata.generateAppMetadataKey();\r\n this.setItem(appMetadataKey, JSON.stringify(appMetadata));\r\n }\r\n\r\n /**\r\n * fetch server telemetry entity from the platform cache\r\n * @param serverTelemetryKey\r\n */\r\n getServerTelemetry(serverTelemetryKey: string): ServerTelemetryEntity | null {\r\n const value = this.getItem(serverTelemetryKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: called, no cache hit\");\r\n return null;\r\n }\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (!parsedMetadata || !ServerTelemetryEntity.isServerTelemetryEntity(serverTelemetryKey, parsedMetadata)) {\r\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getServerTelemetry: cache hit\");\r\n return CacheManager.toObject(new ServerTelemetryEntity(), parsedMetadata);\r\n }\r\n\r\n /**\r\n * set server telemetry entity to the platform cache\r\n * @param serverTelemetryKey\r\n * @param serverTelemetry\r\n */\r\n setServerTelemetry(serverTelemetryKey: string, serverTelemetry: ServerTelemetryEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setServerTelemetry called\");\r\n this.setItem(serverTelemetryKey, JSON.stringify(serverTelemetry));\r\n }\r\n\r\n /**\r\n *\r\n */\r\n getAuthorityMetadata(key: string): AuthorityMetadataEntity | null {\r\n const value = this.internalStorage.getItem(key);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getAuthorityMetadata: called, no cache hit\");\r\n return null;\r\n }\r\n const parsedMetadata = this.validateAndParseJson(value);\r\n if (parsedMetadata && AuthorityMetadataEntity.isAuthorityMetadataEntity(key, parsedMetadata)) {\r\n this.logger.trace(\"BrowserCacheManager.getAuthorityMetadata: cache hit\");\r\n return CacheManager.toObject(new AuthorityMetadataEntity(), parsedMetadata);\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n getAuthorityMetadataKeys(): Array {\r\n const allKeys = this.internalStorage.getKeys();\r\n return allKeys.filter((key) => {\r\n return this.isAuthorityMetadata(key);\r\n });\r\n }\r\n\r\n /**\r\n * Sets wrapper metadata in memory\r\n * @param wrapperSKU\r\n * @param wrapperVersion\r\n */\r\n setWrapperMetadata(wrapperSKU: string, wrapperVersion: string): void {\r\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_SKU, wrapperSKU);\r\n this.internalStorage.setItem(InMemoryCacheKeys.WRAPPER_VER, wrapperVersion);\r\n }\r\n\r\n /**\r\n * Returns wrapper metadata from in-memory storage\r\n */\r\n getWrapperMetadata(): [string, string] {\r\n const sku = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_SKU) || Constants.EMPTY_STRING;\r\n const version = this.internalStorage.getItem(InMemoryCacheKeys.WRAPPER_VER) || Constants.EMPTY_STRING;\r\n return [sku, version];\r\n }\r\n\r\n /**\r\n *\r\n * @param entity\r\n */\r\n setAuthorityMetadata(key: string, entity: AuthorityMetadataEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setAuthorityMetadata called\");\r\n this.internalStorage.setItem(key, JSON.stringify(entity));\r\n }\r\n\r\n /**\r\n * Gets the active account\r\n */\r\n getActiveAccount(): AccountInfo | null {\r\n const activeAccountKeyFilters = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n const activeAccountValueFilters = this.getItem(activeAccountKeyFilters);\r\n if (!activeAccountValueFilters) {\r\n // if new active account cache type isn't found, it's an old version, so look for that instead\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account filters cache schema found, looking for legacy schema\");\r\n const activeAccountKeyLocal = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT);\r\n const activeAccountValueLocal = this.getItem(activeAccountKeyLocal);\r\n if (!activeAccountValueLocal) {\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account found\");\r\n return null;\r\n }\r\n const activeAccount = this.getAccountInfoByFilter({ localAccountId: activeAccountValueLocal })[0] || null;\r\n if (activeAccount) {\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: Legacy active account cache schema found\");\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: Adding active account filters cache schema\");\r\n this.setActiveAccount(activeAccount);\r\n return activeAccount;\r\n }\r\n return null;\r\n }\r\n const activeAccountValueObj = this.validateAndParseJson(activeAccountValueFilters) as AccountInfo;\r\n if (activeAccountValueObj) {\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: Active account filters schema found\");\r\n return this.getAccountInfoByFilter({\r\n homeAccountId: activeAccountValueObj.homeAccountId,\r\n localAccountId: activeAccountValueObj.localAccountId\r\n })[0] || null;\r\n }\r\n this.logger.trace(\"BrowserCacheManager.getActiveAccount: No active account found\");\r\n return null;\r\n }\r\n\r\n /**\r\n * Sets the active account's localAccountId in cache\r\n * @param account\r\n */\r\n setActiveAccount(account: AccountInfo | null): void {\r\n const activeAccountKey = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT_FILTERS);\r\n const activeAccountKeyLocal = this.generateCacheKey(PersistentCacheKeys.ACTIVE_ACCOUNT);\r\n if (account) {\r\n this.logger.verbose(\"setActiveAccount: Active account set\");\r\n const activeAccountValue: ActiveAccountFilters = {\r\n homeAccountId: account.homeAccountId,\r\n localAccountId: account.localAccountId\r\n };\r\n this.browserStorage.setItem(activeAccountKey, JSON.stringify(activeAccountValue));\r\n this.browserStorage.setItem(activeAccountKeyLocal, account.localAccountId);\r\n } else {\r\n this.logger.verbose(\"setActiveAccount: No account passed, active account not set\");\r\n this.browserStorage.removeItem(activeAccountKey);\r\n this.browserStorage.removeItem(activeAccountKeyLocal);\r\n }\r\n }\r\n\r\n /**\r\n * Gets a list of accounts that match all of the filters provided\r\n * @param account\r\n */\r\n getAccountInfoByFilter(accountFilter: Partial>): AccountInfo[] {\r\n const allAccounts = this.getAllAccounts();\r\n this.logger.trace(`BrowserCacheManager.getAccountInfoByFilter: total ${allAccounts.length} accounts found`);\r\n\r\n return allAccounts.filter((accountObj) => {\r\n if (accountFilter.username && accountFilter.username.toLowerCase() !== accountObj.username.toLowerCase()) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.homeAccountId && accountFilter.homeAccountId !== accountObj.homeAccountId) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.localAccountId && accountFilter.localAccountId !== accountObj.localAccountId) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.tenantId && accountFilter.tenantId !== accountObj.tenantId) {\r\n return false;\r\n }\r\n\r\n if (accountFilter.environment && accountFilter.environment !== accountObj.environment) {\r\n return false;\r\n }\r\n\r\n return true;\r\n });\r\n }\r\n\r\n /**\r\n * Checks the cache for accounts matching loginHint or SID\r\n * @param loginHint\r\n * @param sid\r\n */\r\n getAccountInfoByHints(loginHint?: string, sid?: string): AccountInfo | null {\r\n const matchingAccounts = this.getAllAccounts().filter((accountInfo) => {\r\n if (sid) {\r\n const accountSid = accountInfo.idTokenClaims && accountInfo.idTokenClaims[\"sid\"];\r\n return sid === accountSid;\r\n }\r\n\r\n if (loginHint) {\r\n return loginHint === accountInfo.username;\r\n }\r\n\r\n return false;\r\n });\r\n\r\n if (matchingAccounts.length === 1) {\r\n return matchingAccounts[0];\r\n } else if (matchingAccounts.length > 1) {\r\n throw ClientAuthError.createMultipleMatchingAccountsInCacheError();\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * fetch throttling entity from the platform cache\r\n * @param throttlingCacheKey\r\n */\r\n getThrottlingCache(throttlingCacheKey: string): ThrottlingEntity | null {\r\n const value = this.getItem(throttlingCacheKey);\r\n if (!value) {\r\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n const parsedThrottlingCache = this.validateAndParseJson(value);\r\n if (!parsedThrottlingCache || !ThrottlingEntity.isThrottlingEntity(throttlingCacheKey, parsedThrottlingCache)) {\r\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: called, no cache hit\");\r\n return null;\r\n }\r\n\r\n this.logger.trace(\"BrowserCacheManager.getThrottlingCache: cache hit\");\r\n return CacheManager.toObject(new ThrottlingEntity(), parsedThrottlingCache);\r\n }\r\n\r\n /**\r\n * set throttling entity to the platform cache\r\n * @param throttlingCacheKey\r\n * @param throttlingCache\r\n */\r\n setThrottlingCache(throttlingCacheKey: string, throttlingCache: ThrottlingEntity): void {\r\n this.logger.trace(\"BrowserCacheManager.setThrottlingCache called\");\r\n this.setItem(throttlingCacheKey, JSON.stringify(throttlingCache));\r\n }\r\n\r\n /**\r\n * Gets cache item with given key.\r\n * Will retrieve from cookies if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\r\n getTemporaryCache(cacheKey: string, generateKey?: boolean): string | null {\r\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n const itemCookie = this.getItemCookie(key);\r\n if (itemCookie) {\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: storeAuthStateInCookies set to true, retrieving from cookies\");\r\n return itemCookie;\r\n }\r\n }\r\n\r\n const value = this.temporaryCacheStorage.getItem(key);\r\n if (!value) {\r\n // If temp cache item not found in session/memory, check local storage for items set by old versions\r\n if (this.cacheConfig.cacheLocation === BrowserCacheLocation.LocalStorage) {\r\n const item = this.browserStorage.getItem(key);\r\n if (item) {\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: Temporary cache item found in local storage\");\r\n return item;\r\n }\r\n }\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: No cache item found in local storage\");\r\n return null;\r\n }\r\n this.logger.trace(\"BrowserCacheManager.getTemporaryCache: Temporary cache item returned\");\r\n return value;\r\n }\r\n\r\n /**\r\n * Sets the cache item with the key and value given.\r\n * Stores in cookie if storeAuthStateInCookie is set to true.\r\n * This can cause cookie overflow if used incorrectly.\r\n * @param key\r\n * @param value\r\n */\r\n setTemporaryCache(cacheKey: string, value: string, generateKey?: boolean): void {\r\n const key = generateKey ? this.generateCacheKey(cacheKey) : cacheKey;\r\n\r\n this.temporaryCacheStorage.setItem(key, value);\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n this.logger.trace(\"BrowserCacheManager.setTemporaryCache: storeAuthStateInCookie set to true, setting item cookie\");\r\n this.setItemCookie(key, value);\r\n }\r\n }\r\n\r\n /**\r\n * Removes the cache item with the given key.\r\n * Will also clear the cookie item if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\r\n removeItem(key: string): void {\r\n this.browserStorage.removeItem(key);\r\n this.temporaryCacheStorage.removeItem(key);\r\n if (this.cacheConfig.storeAuthStateInCookie) {\r\n this.logger.trace(\"BrowserCacheManager.removeItem: storeAuthStateInCookie is true, clearing item cookie\");\r\n this.clearItemCookie(key);\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether key is in cache.\r\n * @param key\r\n */\r\n containsKey(key: string): boolean {\r\n return this.browserStorage.containsKey(key) || this.temporaryCacheStorage.containsKey(key);\r\n }\r\n\r\n /**\r\n * Gets all keys in window.\r\n */\r\n getKeys(): string[] {\r\n return [\r\n ...this.browserStorage.getKeys(),\r\n ...this.temporaryCacheStorage.getKeys()\r\n ];\r\n }\r\n\r\n /**\r\n * Clears all cache entries created by MSAL.\r\n */\r\n async clear(): Promise {\r\n // Removes all accounts and their credentials\r\n await this.removeAllAccounts();\r\n this.removeAppMetadata();\r\n\r\n // Removes all remaining MSAL cache items\r\n this.getKeys().forEach((cacheKey: string) => {\r\n // Check if key contains msal prefix; For now, we are clearing all the cache items created by MSAL.js\r\n if ((this.browserStorage.containsKey(cacheKey) || this.temporaryCacheStorage.containsKey(cacheKey)) && ((cacheKey.indexOf(Constants.CACHE_PREFIX) !== -1) || (cacheKey.indexOf(this.clientId) !== -1))) {\r\n this.removeItem(cacheKey);\r\n }\r\n });\r\n\r\n this.internalStorage.clear();\r\n }\r\n\r\n /**\r\n * Clears all access tokes that have claims prior to saving the current one\r\n * @param credential \r\n * @returns \r\n */\r\n async clearTokensAndKeysWithClaims(): Promise {\r\n\r\n this.logger.trace(\"BrowserCacheManager.clearTokensAndKeysWithClaims called\");\r\n const tokenKeys = this.getTokenKeys();\r\n \r\n const removedAccessTokens: Array> = [];\r\n tokenKeys.accessToken.forEach((key: string) => {\r\n // if the access token has claims in its key, remove the token key and the token\r\n const credential = this.getAccessTokenCredential(key);\r\n if(credential?.requestedClaimsHash && key.includes(credential.requestedClaimsHash.toLowerCase())) {\r\n removedAccessTokens.push(this.removeAccessToken(key));\r\n }\r\n });\r\n await Promise.all(removedAccessTokens);\r\n\r\n // warn if any access tokens are removed\r\n if(removedAccessTokens.length > 0) {\r\n this.logger.warning(`${removedAccessTokens.length} access tokens with claims in the cache keys have been removed from the cache.`);\r\n }\r\n }\r\n\r\n /**\r\n * Add value to cookies\r\n * @param cookieName\r\n * @param cookieValue\r\n * @param expires\r\n */\r\n setItemCookie(cookieName: string, cookieValue: string, expires?: number): void {\r\n let cookieStr = `${encodeURIComponent(cookieName)}=${encodeURIComponent(cookieValue)};path=/;SameSite=Lax;`;\r\n if (expires) {\r\n const expireTime = this.getCookieExpirationTime(expires);\r\n cookieStr += `expires=${expireTime};`;\r\n }\r\n\r\n if (this.cacheConfig.secureCookies) {\r\n cookieStr += \"Secure;\";\r\n }\r\n\r\n document.cookie = cookieStr;\r\n }\r\n\r\n /**\r\n * Get one item by key from cookies\r\n * @param cookieName\r\n */\r\n getItemCookie(cookieName: string): string {\r\n const name = `${encodeURIComponent(cookieName)}=`;\r\n const cookieList = document.cookie.split(\";\");\r\n for (let i: number = 0; i < cookieList.length; i++) {\r\n let cookie = cookieList[i];\r\n while (cookie.charAt(0) === \" \") {\r\n cookie = cookie.substring(1);\r\n }\r\n if (cookie.indexOf(name) === 0) {\r\n return decodeURIComponent(cookie.substring(name.length, cookie.length));\r\n }\r\n }\r\n return Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Clear all msal-related cookies currently set in the browser. Should only be used to clear temporary cache items.\r\n */\r\n clearMsalCookies(): void {\r\n const cookiePrefix = `${Constants.CACHE_PREFIX}.${this.clientId}`;\r\n const cookieList = document.cookie.split(\";\");\r\n cookieList.forEach((cookie: string): void => {\r\n while (cookie.charAt(0) === \" \") {\r\n // eslint-disable-next-line no-param-reassign\r\n cookie = cookie.substring(1);\r\n }\r\n if (cookie.indexOf(cookiePrefix) === 0) {\r\n const cookieKey = cookie.split(\"=\")[0];\r\n this.clearItemCookie(cookieKey);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Clear an item in the cookies by key\r\n * @param cookieName\r\n */\r\n clearItemCookie(cookieName: string): void {\r\n this.setItemCookie(cookieName, Constants.EMPTY_STRING, -1);\r\n }\r\n\r\n /**\r\n * Get cookie expiration time\r\n * @param cookieLifeDays\r\n */\r\n getCookieExpirationTime(cookieLifeDays: number): string {\r\n const today = new Date();\r\n const expr = new Date(today.getTime() + cookieLifeDays * this.COOKIE_LIFE_MULTIPLIER);\r\n return expr.toUTCString();\r\n }\r\n\r\n /**\r\n * Gets the cache object referenced by the browser\r\n */\r\n getCache(): object {\r\n return this.browserStorage;\r\n }\r\n\r\n /**\r\n * interface compat, we cannot overwrite browser cache; Functionality is supported by individual entities in browser\r\n */\r\n setCache(): void {\r\n // sets nothing\r\n }\r\n\r\n /**\r\n * Prepend msal. to each key; Skip for any JSON object as Key (defined schemas do not need the key appended: AccessToken Keys or the upcoming schema)\r\n * @param key\r\n * @param addInstanceId\r\n */\r\n generateCacheKey(key: string): string {\r\n const generatedKey = this.validateAndParseJson(key);\r\n if (!generatedKey) {\r\n if (StringUtils.startsWith(key, Constants.CACHE_PREFIX) || StringUtils.startsWith(key, PersistentCacheKeys.ADAL_ID_TOKEN)) {\r\n return key;\r\n }\r\n return `${Constants.CACHE_PREFIX}.${this.clientId}.${key}`;\r\n }\r\n\r\n return JSON.stringify(key);\r\n }\r\n\r\n /**\r\n * Create authorityKey to cache authority\r\n * @param state\r\n */\r\n generateAuthorityKey(stateString: string): string {\r\n const {\r\n libraryState: {\r\n id: stateId\r\n }\r\n } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n\r\n return this.generateCacheKey(`${TemporaryCacheKeys.AUTHORITY}.${stateId}`);\r\n }\r\n\r\n /**\r\n * Create Nonce key to cache nonce\r\n * @param state\r\n */\r\n generateNonceKey(stateString: string): string {\r\n const {\r\n libraryState: {\r\n id: stateId\r\n }\r\n } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n\r\n return this.generateCacheKey(`${TemporaryCacheKeys.NONCE_IDTOKEN}.${stateId}`);\r\n }\r\n\r\n /**\r\n * Creates full cache key for the request state\r\n * @param stateString State string for the request\r\n */\r\n generateStateKey(stateString: string): string {\r\n // Use the library state id to key temp storage for uniqueness for multiple concurrent requests\r\n const {\r\n libraryState: {\r\n id: stateId\r\n }\r\n } = ProtocolUtils.parseRequestState(this.cryptoImpl, stateString);\r\n return this.generateCacheKey(`${TemporaryCacheKeys.REQUEST_STATE}.${stateId}`);\r\n }\r\n\r\n /**\r\n * Gets the cached authority based on the cached state. Returns empty if no cached state found.\r\n */\r\n getCachedAuthority(cachedState: string): string | null {\r\n const stateCacheKey = this.generateStateKey(cachedState);\r\n const state = this.getTemporaryCache(stateCacheKey);\r\n if (!state) {\r\n return null;\r\n }\r\n\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n return this.getTemporaryCache(authorityCacheKey);\r\n }\r\n\r\n /**\r\n * Updates account, authority, and state in cache\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n */\r\n updateCacheEntries(state: string, nonce: string, authorityInstance: string, loginHint: string, account: AccountInfo | null): void {\r\n this.logger.trace(\"BrowserCacheManager.updateCacheEntries called\");\r\n // Cache the request state\r\n const stateCacheKey = this.generateStateKey(state);\r\n this.setTemporaryCache(stateCacheKey, state, false);\r\n\r\n // Cache the nonce\r\n const nonceCacheKey = this.generateNonceKey(state);\r\n this.setTemporaryCache(nonceCacheKey, nonce, false);\r\n\r\n // Cache authorityKey\r\n const authorityCacheKey = this.generateAuthorityKey(state);\r\n this.setTemporaryCache(authorityCacheKey, authorityInstance, false);\r\n\r\n if (account) {\r\n const ccsCredential: CcsCredential = {\r\n credential: account.homeAccountId,\r\n type: CcsCredentialType.HOME_ACCOUNT_ID\r\n };\r\n this.setTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, JSON.stringify(ccsCredential), true);\r\n } else if (!StringUtils.isEmpty(loginHint)) {\r\n const ccsCredential: CcsCredential = {\r\n credential: loginHint,\r\n type: CcsCredentialType.UPN\r\n };\r\n this.setTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, JSON.stringify(ccsCredential), true);\r\n }\r\n }\r\n\r\n /**\r\n * Reset all temporary cache items\r\n * @param state\r\n */\r\n resetRequestCache(state: string): void {\r\n this.logger.trace(\"BrowserCacheManager.resetRequestCache called\");\r\n // check state and remove associated cache items\r\n if (!StringUtils.isEmpty(state)) {\r\n this.getKeys().forEach(key => {\r\n if (key.indexOf(state) !== -1) {\r\n this.removeItem(key);\r\n }\r\n });\r\n }\r\n\r\n // delete generic interactive request parameters\r\n if (state) {\r\n this.removeItem(this.generateStateKey(state));\r\n this.removeItem(this.generateNonceKey(state));\r\n this.removeItem(this.generateAuthorityKey(state));\r\n }\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.URL_HASH));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.CORRELATION_ID));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.CCS_CREDENTIAL));\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST));\r\n this.setInteractionInProgress(false);\r\n }\r\n\r\n /**\r\n * Removes temporary cache for the provided state\r\n * @param stateString\r\n */\r\n cleanRequestByState(stateString: string): void {\r\n this.logger.trace(\"BrowserCacheManager.cleanRequestByState called\");\r\n // Interaction is completed - remove interaction status.\r\n if (stateString) {\r\n const stateKey = this.generateStateKey(stateString);\r\n const cachedState = this.temporaryCacheStorage.getItem(stateKey);\r\n this.logger.infoPii(`BrowserCacheManager.cleanRequestByState: Removing temporary cache items for state: ${cachedState}`);\r\n this.resetRequestCache(cachedState || Constants.EMPTY_STRING);\r\n }\r\n this.clearMsalCookies();\r\n }\r\n\r\n /**\r\n * Looks in temporary cache for any state values with the provided interactionType and removes all temporary cache items for that state\r\n * Used in scenarios where temp cache needs to be cleaned but state is not known, such as clicking browser back button.\r\n * @param interactionType\r\n */\r\n cleanRequestByInteractionType(interactionType: InteractionType): void {\r\n this.logger.trace(\"BrowserCacheManager.cleanRequestByInteractionType called\");\r\n // Loop through all keys to find state key\r\n this.getKeys().forEach((key) => {\r\n // If this key is not the state key, move on\r\n if (key.indexOf(TemporaryCacheKeys.REQUEST_STATE) === -1) {\r\n return;\r\n }\r\n\r\n // Retrieve state value, return if not a valid value\r\n const stateValue = this.temporaryCacheStorage.getItem(key);\r\n if (!stateValue) {\r\n return;\r\n }\r\n // Extract state and ensure it matches given InteractionType, then clean request cache\r\n const parsedState = BrowserProtocolUtils.extractBrowserRequestState(this.cryptoImpl, stateValue);\r\n if (parsedState && parsedState.interactionType === interactionType) {\r\n this.logger.infoPii(`BrowserCacheManager.cleanRequestByInteractionType: Removing temporary cache items for state: ${stateValue}`);\r\n this.resetRequestCache(stateValue);\r\n }\r\n });\r\n this.clearMsalCookies();\r\n this.setInteractionInProgress(false);\r\n }\r\n\r\n cacheCodeRequest(authCodeRequest: CommonAuthorizationCodeRequest, browserCrypto: ICrypto): void {\r\n this.logger.trace(\"BrowserCacheManager.cacheCodeRequest called\");\r\n\r\n const encodedValue = browserCrypto.base64Encode(JSON.stringify(authCodeRequest));\r\n this.setTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, encodedValue, true);\r\n }\r\n\r\n /**\r\n * Gets the token exchange parameters from the cache. Throws an error if nothing is found.\r\n */\r\n getCachedRequest(state: string, browserCrypto: ICrypto): CommonAuthorizationCodeRequest {\r\n this.logger.trace(\"BrowserCacheManager.getCachedRequest called\");\r\n // Get token request from cache and parse as TokenExchangeParameters.\r\n const encodedTokenRequest = this.getTemporaryCache(TemporaryCacheKeys.REQUEST_PARAMS, true);\r\n if (!encodedTokenRequest) {\r\n throw BrowserAuthError.createNoTokenRequestCacheError();\r\n }\r\n\r\n const parsedRequest = this.validateAndParseJson(browserCrypto.base64Decode(encodedTokenRequest)) as CommonAuthorizationCodeRequest;\r\n if (!parsedRequest) {\r\n throw BrowserAuthError.createUnableToParseTokenRequestCacheError();\r\n }\r\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\r\n\r\n // Get cached authority and use if no authority is cached with request.\r\n if (StringUtils.isEmpty(parsedRequest.authority)) {\r\n const authorityCacheKey: string = this.generateAuthorityKey(state);\r\n const cachedAuthority = this.getTemporaryCache(authorityCacheKey);\r\n if (!cachedAuthority) {\r\n throw BrowserAuthError.createNoCachedAuthorityError();\r\n }\r\n parsedRequest.authority = cachedAuthority;\r\n }\r\n\r\n return parsedRequest;\r\n }\r\n\r\n /**\r\n * Gets cached native request for redirect flows\r\n */\r\n getCachedNativeRequest(): NativeTokenRequest | null {\r\n this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest called\");\r\n const cachedRequest = this.getTemporaryCache(TemporaryCacheKeys.NATIVE_REQUEST, true);\r\n if (!cachedRequest) {\r\n this.logger.trace(\"BrowserCacheManager.getCachedNativeRequest: No cached native request found\");\r\n return null;\r\n }\r\n\r\n const parsedRequest = this.validateAndParseJson(cachedRequest) as NativeTokenRequest;\r\n if (!parsedRequest) {\r\n this.logger.error(\"BrowserCacheManager.getCachedNativeRequest: Unable to parse native request\");\r\n return null;\r\n }\r\n\r\n return parsedRequest;\r\n }\r\n\r\n isInteractionInProgress(matchClientId?: boolean): boolean {\r\n const clientId = this.getInteractionInProgress();\r\n\r\n if (matchClientId) {\r\n return clientId === this.clientId;\r\n } else {\r\n return !!clientId;\r\n }\r\n }\r\n\r\n getInteractionInProgress(): string | null {\r\n const key = `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n return this.getTemporaryCache(key, false);\r\n }\r\n\r\n setInteractionInProgress(inProgress: boolean): void {\r\n // Ensure we don't overwrite interaction in progress for a different clientId\r\n const key = `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.INTERACTION_STATUS_KEY}`;\r\n if (inProgress) {\r\n if (this.getInteractionInProgress()) {\r\n throw BrowserAuthError.createInteractionInProgressError();\r\n } else {\r\n // No interaction is in progress\r\n this.setTemporaryCache(key, this.clientId, false);\r\n }\r\n } else if (!inProgress && this.getInteractionInProgress() === this.clientId) {\r\n this.removeItem(key);\r\n }\r\n }\r\n\r\n /**\r\n * Returns username retrieved from ADAL or MSAL v1 idToken\r\n */\r\n getLegacyLoginHint(): string | null {\r\n // Only check for adal/msal token if no SSO params are being used\r\n const adalIdTokenString = this.getTemporaryCache(PersistentCacheKeys.ADAL_ID_TOKEN);\r\n if (adalIdTokenString) {\r\n this.browserStorage.removeItem(PersistentCacheKeys.ADAL_ID_TOKEN);\r\n this.logger.verbose(\"Cached ADAL id token retrieved.\");\r\n }\r\n\r\n // Check for cached MSAL v1 id token\r\n const msalIdTokenString = this.getTemporaryCache(PersistentCacheKeys.ID_TOKEN, true);\r\n if (msalIdTokenString) {\r\n this.removeItem(this.generateCacheKey(PersistentCacheKeys.ID_TOKEN));\r\n this.logger.verbose(\"Cached MSAL.js v1 id token retrieved\");\r\n }\r\n\r\n const cachedIdTokenString = msalIdTokenString || adalIdTokenString;\r\n if (cachedIdTokenString) {\r\n const cachedIdToken = new IdToken(cachedIdTokenString, this.cryptoImpl);\r\n if (cachedIdToken.claims && cachedIdToken.claims.preferred_username) {\r\n this.logger.verbose(\"No SSO params used and ADAL/MSAL v1 token retrieved, setting ADAL/MSAL v1 preferred_username as loginHint\");\r\n return cachedIdToken.claims.preferred_username;\r\n }\r\n else if (cachedIdToken.claims && cachedIdToken.claims.upn) {\r\n this.logger.verbose(\"No SSO params used and ADAL/MSAL v1 token retrieved, setting ADAL/MSAL v1 upn as loginHint\");\r\n return cachedIdToken.claims.upn;\r\n }\r\n else {\r\n this.logger.verbose(\"No SSO params used and ADAL/MSAL v1 token retrieved, however, no account hint claim found. Enable preferred_username or upn id token claim to get SSO.\");\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Updates a credential's cache key if the current cache key is outdated\r\n */\r\n updateCredentialCacheKey(currentCacheKey: string, credential: ValidCredentialType): string {\r\n const updatedCacheKey = credential.generateCredentialKey();\r\n\r\n if (currentCacheKey !== updatedCacheKey) {\r\n const cacheItem = this.getItem(currentCacheKey);\r\n if (cacheItem) {\r\n this.removeItem(currentCacheKey);\r\n this.setItem(updatedCacheKey, cacheItem);\r\n this.logger.verbose(`Updated an outdated ${credential.credentialType} cache key`);\r\n return updatedCacheKey;\r\n } else {\r\n this.logger.error(`Attempted to update an outdated ${credential.credentialType} cache key but no item matching the outdated key was found in storage`);\r\n }\r\n }\r\n\r\n return currentCacheKey;\r\n }\r\n\r\n /**\r\n * Returns application id as redirect context during AcquireTokenRedirect flow.\r\n */\r\n getRedirectRequestContext(): string | null {\r\n return this.getTemporaryCache(TemporaryCacheKeys.REDIRECT_CONTEXT, true);\r\n }\r\n\r\n /**\r\n * Sets application id as the redirect context during AcquireTokenRedirect flow.\r\n * @param value\r\n */\r\n setRedirectRequestContext(value: string): void {\r\n this.setTemporaryCache(TemporaryCacheKeys.REDIRECT_CONTEXT, value, true);\r\n }\r\n\r\n /**\r\n * Builds credential entities from AuthenticationResult object and saves the resulting credentials to the cache\r\n * @param result\r\n * @param request\r\n */\r\n async hydrateCache(\r\n result: AuthenticationResult,\r\n request: SilentRequest\r\n | SsoSilentRequest\r\n | RedirectRequest\r\n | PopupRequest\r\n ): Promise {\r\n const idTokenEntity = IdTokenEntity.createIdTokenEntity(\r\n result.account?.homeAccountId || \"\" ,\r\n result.account?.environment || \"\",\r\n result.idToken,\r\n this.clientId,\r\n result.tenantId\r\n );\r\n\r\n let claimsHash;\r\n if (request.claims) {\r\n claimsHash = await this.cryptoImpl.hashString(request.claims);\r\n }\r\n const accessTokenEntity = AccessTokenEntity.createAccessTokenEntity(\r\n result.account?.homeAccountId || \"\",\r\n result.account?.environment || \"\",\r\n result.accessToken,\r\n this.clientId,\r\n result.tenantId,\r\n result.scopes.join(\" \"),\r\n result.expiresOn?.getTime() || 0,\r\n result.extExpiresOn?.getTime() || 0,\r\n this.cryptoImpl,\r\n undefined, // refreshOn\r\n result.tokenType as AuthenticationScheme,\r\n undefined, // userAssertionHash\r\n request.sshKid,\r\n request.claims,\r\n claimsHash\r\n );\r\n\r\n const cacheRecord = new CacheRecord(\r\n undefined,\r\n idTokenEntity,\r\n accessTokenEntity\r\n );\r\n return this.saveCacheRecord(cacheRecord);\r\n }\r\n}\r\n\r\nexport const DEFAULT_BROWSER_CACHE_MANAGER = (clientId: string, logger: Logger): BrowserCacheManager => {\r\n const cacheOptions: Required = {\r\n cacheLocation: BrowserCacheLocation.MemoryStorage,\r\n temporaryCacheLocation: BrowserCacheLocation.MemoryStorage,\r\n storeAuthStateInCookie: false,\r\n secureCookies: false,\r\n cacheMigrationEnabled: false,\r\n claimsBasedCachingEnabled: true\r\n };\r\n return new BrowserCacheManager(clientId, cacheOptions, DEFAULT_CRYPTO_IMPLEMENTATION, logger);\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INetworkModule } from \"../network/INetworkModule\";\r\nimport { DEFAULT_CRYPTO_IMPLEMENTATION, ICrypto } from \"../crypto/ICrypto\";\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { ILoggerCallback, Logger, LogLevel } from \"../logger/Logger\";\r\nimport { Constants } from \"../utils/Constants\";\r\nimport { version } from \"../packageMetadata\";\r\nimport { Authority } from \"../authority/Authority\";\r\nimport { AzureCloudInstance } from \"../authority/AuthorityOptions\";\r\nimport { CacheManager, DefaultStorageClass } from \"../cache/CacheManager\";\r\nimport { ServerTelemetryManager } from \"../telemetry/server/ServerTelemetryManager\";\r\nimport { ICachePlugin } from \"../cache/interface/ICachePlugin\";\r\nimport { ISerializableTokenCache } from \"../cache/interface/ISerializableTokenCache\";\r\nimport { ClientCredentials } from \"../account/ClientCredentials\";\r\n\r\n// Token renewal offset default in seconds\r\nconst DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;\r\n\r\n/**\r\n * Use the configuration object to configure MSAL Modules and initialize the base interfaces for MSAL.\r\n *\r\n * This object allows you to configure important elements of MSAL functionality:\r\n * - authOptions - Authentication for application\r\n * - cryptoInterface - Implementation of crypto functions\r\n * - libraryInfo - Library metadata\r\n * - telemetry - Telemetry options and data\r\n * - loggerOptions - Logging for application\r\n * - cacheOptions - Cache options for application\r\n * - networkInterface - Network implementation\r\n * - storageInterface - Storage implementation\r\n * - systemOptions - Additional library options\r\n * - clientCredentials - Credentials options for confidential clients\r\n */\r\nexport type ClientConfiguration = {\r\n authOptions: AuthOptions,\r\n systemOptions?: SystemOptions,\r\n loggerOptions?: LoggerOptions,\r\n cacheOptions?: CacheOptions,\r\n storageInterface?: CacheManager,\r\n networkInterface?: INetworkModule,\r\n cryptoInterface?: ICrypto,\r\n clientCredentials?: ClientCredentials,\r\n libraryInfo?: LibraryInfo\r\n telemetry?: TelemetryOptions,\r\n serverTelemetryManager?: ServerTelemetryManager | null,\r\n persistencePlugin?: ICachePlugin | null,\r\n serializableCache?: ISerializableTokenCache | null, \r\n};\r\n\r\nexport type CommonClientConfiguration = {\r\n authOptions: Required,\r\n systemOptions: Required,\r\n loggerOptions : Required,\r\n cacheOptions: Required,\r\n storageInterface: CacheManager,\r\n networkInterface : INetworkModule,\r\n cryptoInterface : Required,\r\n libraryInfo : LibraryInfo,\r\n telemetry: Required,\r\n serverTelemetryManager: ServerTelemetryManager | null,\r\n clientCredentials: ClientCredentials,\r\n persistencePlugin: ICachePlugin | null,\r\n serializableCache: ISerializableTokenCache | null, \r\n};\r\n\r\n/**\r\n * Use this to configure the auth options in the ClientConfiguration object\r\n *\r\n * - clientId - Client ID of your app registered with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview in Microsoft Identity Platform\r\n * - authority - You can configure a specific authority, defaults to \" \" or \"https://login.microsoftonline.com/common\"\r\n * - knownAuthorities - An array of URIs that are known to be valid. Used in B2C scenarios.\r\n * - cloudDiscoveryMetadata - A string containing the cloud discovery response. Used in AAD scenarios.\r\n * - clientCapabilities - Array of capabilities which will be added to the claims.access_token.xms_cc request property on every network request.\r\n * - protocolMode - Enum that represents the protocol that msal follows. Used for configuring proper endpoints.\r\n * - skipAuthorityMetadataCache - A flag to choose whether to use or not use the local metadata cache during authority initialization. Defaults to false.\r\n */\r\nexport type AuthOptions = {\r\n clientId: string;\r\n authority: Authority;\r\n clientCapabilities?: Array;\r\n azureCloudOptions?: AzureCloudOptions;\r\n skipAuthorityMetadataCache?: boolean;\r\n};\r\n\r\n/**\r\n * Use this to configure token renewal info in the Configuration object\r\n *\r\n * - tokenRenewalOffsetSeconds - Sets the window of offset needed to renew the token before expiry\r\n */\r\nexport type SystemOptions = {\r\n tokenRenewalOffsetSeconds?: number;\r\n preventCorsPreflight?: boolean;\r\n};\r\n\r\n/**\r\n * Use this to configure the logging that MSAL does, by configuring logger options in the Configuration object\r\n *\r\n * - loggerCallback - Callback for logger\r\n * - piiLoggingEnabled - Sets whether pii logging is enabled\r\n * - logLevel - Sets the level at which logging happens\r\n * - correlationId - Sets the correlationId printed by the logger\r\n */\r\nexport type LoggerOptions = {\r\n loggerCallback?: ILoggerCallback,\r\n piiLoggingEnabled?: boolean,\r\n logLevel?: LogLevel,\r\n correlationId?: string\r\n};\r\n\r\n/**\r\n * Use this to configure credential cache preferences in the ClientConfiguration object\r\n *\r\n * - claimsBasedCachingEnabled - Sets whether tokens should be cached based on the claims hash. Default is true.\r\n */\r\nexport type CacheOptions = {\r\n claimsBasedCachingEnabled?: boolean;\r\n};\r\n\r\n/**\r\n * Library-specific options\r\n */\r\nexport type LibraryInfo = {\r\n sku: string,\r\n version: string,\r\n cpu: string,\r\n os: string\r\n};\r\n\r\n/**\r\n * AzureCloudInstance specific options\r\n *\r\n * - azureCloudInstance - string enum providing short notation for soverign and public cloud authorities\r\n * - tenant - provision to provide the tenant info\r\n */\r\nexport type AzureCloudOptions = {\r\n azureCloudInstance: AzureCloudInstance;\r\n tenant?: string,\r\n};\r\n\r\nexport type TelemetryOptions = {\r\n application: ApplicationTelemetry;\r\n};\r\n\r\n/**\r\n * Telemetry information sent on request\r\n * - appName: Unique string name of an application\r\n * - appVersion: Version of the application using MSAL\r\n */\r\nexport type ApplicationTelemetry = {\r\n appName: string;\r\n appVersion: string;\r\n};\r\n\r\nexport const DEFAULT_SYSTEM_OPTIONS: Required = {\r\n tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC,\r\n preventCorsPreflight: false\r\n};\r\n\r\nconst DEFAULT_LOGGER_IMPLEMENTATION: Required = {\r\n loggerCallback: () => {\r\n // allow users to not set loggerCallback\r\n },\r\n piiLoggingEnabled: false,\r\n logLevel: LogLevel.Info,\r\n correlationId: Constants.EMPTY_STRING\r\n};\r\n\r\nconst DEFAULT_CACHE_OPTIONS: Required = {\r\n claimsBasedCachingEnabled: true\r\n};\r\n\r\nconst DEFAULT_NETWORK_IMPLEMENTATION: INetworkModule = {\r\n async sendGetRequestAsync(): Promise {\r\n const notImplErr = \"Network interface - sendGetRequestAsync() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n },\r\n async sendPostRequestAsync(): Promise {\r\n const notImplErr = \"Network interface - sendPostRequestAsync() has not been implemented\";\r\n throw AuthError.createUnexpectedError(notImplErr);\r\n }\r\n};\r\n\r\nconst DEFAULT_LIBRARY_INFO: LibraryInfo = {\r\n sku: Constants.SKU,\r\n version: version,\r\n cpu: Constants.EMPTY_STRING,\r\n os: Constants.EMPTY_STRING\r\n};\r\n\r\nconst DEFAULT_CLIENT_CREDENTIALS: ClientCredentials = {\r\n clientSecret: Constants.EMPTY_STRING,\r\n clientAssertion: undefined\r\n};\r\n\r\nconst DEFAULT_AZURE_CLOUD_OPTIONS: AzureCloudOptions = {\r\n azureCloudInstance: AzureCloudInstance.None,\r\n tenant: `${Constants.DEFAULT_COMMON_TENANT}`\r\n};\r\n\r\nconst DEFAULT_TELEMETRY_OPTIONS: Required = {\r\n application: {\r\n appName: \"\",\r\n appVersion: \"\"\r\n }\r\n};\r\n\r\n/**\r\n * Function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param Configuration\r\n *\r\n * @returns Configuration\r\n */\r\nexport function buildClientConfiguration(\r\n {\r\n authOptions: userAuthOptions,\r\n systemOptions: userSystemOptions,\r\n loggerOptions: userLoggerOption,\r\n cacheOptions: userCacheOptions,\r\n storageInterface: storageImplementation,\r\n networkInterface: networkImplementation,\r\n cryptoInterface: cryptoImplementation,\r\n clientCredentials: clientCredentials,\r\n libraryInfo: libraryInfo,\r\n telemetry: telemetry,\r\n serverTelemetryManager: serverTelemetryManager,\r\n persistencePlugin: persistencePlugin,\r\n serializableCache: serializableCache, \r\n }: ClientConfiguration): CommonClientConfiguration {\r\n\r\n const loggerOptions = { ...DEFAULT_LOGGER_IMPLEMENTATION, ...userLoggerOption };\r\n\r\n return {\r\n authOptions: buildAuthOptions(userAuthOptions),\r\n systemOptions: { ...DEFAULT_SYSTEM_OPTIONS, ...userSystemOptions },\r\n loggerOptions: loggerOptions,\r\n cacheOptions: {...DEFAULT_CACHE_OPTIONS, ...userCacheOptions },\r\n storageInterface: storageImplementation || new DefaultStorageClass(userAuthOptions.clientId, DEFAULT_CRYPTO_IMPLEMENTATION, new Logger(loggerOptions)),\r\n networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION,\r\n cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION,\r\n clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS,\r\n libraryInfo: { ...DEFAULT_LIBRARY_INFO, ...libraryInfo },\r\n telemetry: { ...DEFAULT_TELEMETRY_OPTIONS, ...telemetry },\r\n serverTelemetryManager: serverTelemetryManager || null,\r\n persistencePlugin: persistencePlugin || null,\r\n serializableCache: serializableCache || null, \r\n };\r\n}\r\n\r\n/**\r\n * Construct authoptions from the client and platform passed values\r\n * @param authOptions\r\n */\r\nfunction buildAuthOptions(authOptions: AuthOptions): Required {\r\n return {\r\n clientCapabilities: [],\r\n azureCloudOptions: DEFAULT_AZURE_CLOUD_OPTIONS,\r\n skipAuthorityMetadataCache: false,\r\n ...authOptions\r\n };\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { AuthError } from \"../error/AuthError\";\r\nimport { NetworkResponse } from \"./NetworkManager\";\r\n\r\n/**\r\n * Options allowed by network request APIs.\r\n */\r\nexport type NetworkRequestOptions = {\r\n headers?: Record,\r\n body?: string;\r\n};\r\n\r\n/**\r\n * Client network interface to send backend requests.\r\n * @interface\r\n */\r\nexport interface INetworkModule {\r\n\r\n /**\r\n * Interface function for async network \"GET\" requests. Based on the Fetch standard: https://fetch.spec.whatwg.org/\r\n * @param url\r\n * @param requestParams\r\n * @param enableCaching\r\n */\r\n sendGetRequestAsync(url: string, options?: NetworkRequestOptions, cancellationToken?: number): Promise>;\r\n\r\n /**\r\n * Interface function for async network \"POST\" requests. Based on the Fetch standard: https://fetch.spec.whatwg.org/\r\n * @param url\r\n * @param requestParams\r\n * @param enableCaching\r\n */\r\n sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise>;\r\n}\r\n\r\nexport const StubbedNetworkModule: INetworkModule = {\r\n sendGetRequestAsync: () => {\r\n const notImplErr = \"Network interface - sendGetRequestAsync() has not been implemented for the Network interface.\";\r\n return Promise.reject(AuthError.createUnexpectedError(notImplErr));\r\n },\r\n sendPostRequestAsync: () => {\r\n const notImplErr = \"Network interface - sendPostRequestAsync() has not been implemented for the Network interface.\";\r\n return Promise.reject(AuthError.createUnexpectedError(notImplErr));\r\n }\r\n};\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, INetworkModule, NetworkRequestOptions, NetworkResponse } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { HTTP_REQUEST_TYPE } from \"../utils/BrowserConstants\";\r\n\r\n/**\r\n * This class implements the Fetch API for GET and POST requests. See more here: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API\r\n */\r\nexport class FetchClient implements INetworkModule {\r\n\r\n /**\r\n * Fetch Client for REST endpoints - Get request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendGetRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n let response;\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.GET,\r\n headers: this.getFetchHeaders(options)\r\n });\r\n } catch (e) {\r\n if (window.navigator.onLine) {\r\n throw BrowserAuthError.createGetRequestFailedError(e, url);\r\n } else {\r\n throw BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n try {\r\n return {\r\n headers: this.getHeaderDict(response.headers),\r\n body: await response.json() as T,\r\n status: response.status\r\n };\r\n } catch (e) {\r\n throw BrowserAuthError.createFailedToParseNetworkResponseError(url);\r\n }\r\n }\r\n\r\n /**\r\n * Fetch Client for REST endpoints - Post request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n const reqBody = (options && options.body) || Constants.EMPTY_STRING;\r\n\r\n let response;\r\n try {\r\n response = await fetch(url, {\r\n method: HTTP_REQUEST_TYPE.POST,\r\n headers: this.getFetchHeaders(options),\r\n body: reqBody\r\n });\r\n } catch (e) {\r\n if (window.navigator.onLine) {\r\n throw BrowserAuthError.createPostRequestFailedError(e, url);\r\n } else {\r\n throw BrowserAuthError.createNoNetworkConnectivityError();\r\n }\r\n }\r\n\r\n try {\r\n return {\r\n headers: this.getHeaderDict(response.headers),\r\n body: await response.json() as T,\r\n status: response.status\r\n };\r\n } catch (e) {\r\n throw BrowserAuthError.createFailedToParseNetworkResponseError(url);\r\n }\r\n }\r\n\r\n /**\r\n * Get Fetch API Headers object from string map\r\n * @param inputHeaders \r\n */\r\n private getFetchHeaders(options?: NetworkRequestOptions): Headers {\r\n const headers = new Headers();\r\n if (!(options && options.headers)) {\r\n return headers;\r\n }\r\n const optionsHeaders = options.headers;\r\n Object.keys(optionsHeaders).forEach((key) => {\r\n headers.append(key, optionsHeaders[key]);\r\n });\r\n return headers;\r\n }\r\n\r\n private getHeaderDict(headers: Headers): Record {\r\n const headerDict: Record = {};\r\n headers.forEach((value: string, key: string) => {\r\n headerDict[key] = value;\r\n });\r\n return headerDict;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INetworkModule, NetworkRequestOptions, NetworkResponse } from \"@azure/msal-common\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { HTTP_REQUEST_TYPE } from \"../utils/BrowserConstants\";\r\n\r\n/**\r\n * This client implements the XMLHttpRequest class to send GET and POST requests.\r\n */\r\nexport class XhrClient implements INetworkModule {\r\n\r\n /**\r\n * XhrClient for REST endpoints - Get request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendGetRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n return this.sendRequestAsync(url, HTTP_REQUEST_TYPE.GET, options);\r\n }\r\n\r\n /**\r\n * XhrClient for REST endpoints - Post request\r\n * @param url \r\n * @param headers \r\n * @param body \r\n */\r\n async sendPostRequestAsync(url: string, options?: NetworkRequestOptions): Promise> {\r\n return this.sendRequestAsync(url, HTTP_REQUEST_TYPE.POST, options);\r\n }\r\n\r\n /**\r\n * Helper for XhrClient requests.\r\n * @param url \r\n * @param method \r\n * @param options \r\n */\r\n private sendRequestAsync(url: string, method: HTTP_REQUEST_TYPE, options?: NetworkRequestOptions): Promise> {\r\n return new Promise>((resolve, reject) => {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(method, url, /* async: */ true);\r\n this.setXhrHeaders(xhr, options);\r\n xhr.onload = (): void => {\r\n if (xhr.status < 200 || xhr.status >= 300) {\r\n if (method === HTTP_REQUEST_TYPE.POST) {\r\n reject(BrowserAuthError.createPostRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n } else {\r\n reject(BrowserAuthError.createGetRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n }\r\n }\r\n try {\r\n const jsonResponse = JSON.parse(xhr.responseText) as T;\r\n const networkResponse: NetworkResponse = {\r\n headers: this.getHeaderDict(xhr),\r\n body: jsonResponse,\r\n status: xhr.status\r\n };\r\n resolve(networkResponse);\r\n } catch (e) {\r\n reject(BrowserAuthError.createFailedToParseNetworkResponseError(url));\r\n }\r\n };\r\n\r\n xhr.onerror = (): void => {\r\n if (window.navigator.onLine) {\r\n if (method === HTTP_REQUEST_TYPE.POST) {\r\n reject(BrowserAuthError.createPostRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n } else {\r\n reject(BrowserAuthError.createGetRequestFailedError(`Failed with status ${xhr.status}`, url));\r\n }\r\n } else {\r\n reject(BrowserAuthError.createNoNetworkConnectivityError());\r\n }\r\n };\r\n\r\n if (method === HTTP_REQUEST_TYPE.POST && options && options.body) {\r\n xhr.send(options.body);\r\n } else if (method === HTTP_REQUEST_TYPE.GET) {\r\n xhr.send();\r\n } else {\r\n throw BrowserAuthError.createHttpMethodNotImplementedError(method);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Helper to set XHR headers for request.\r\n * @param xhr \r\n * @param options \r\n */\r\n private setXhrHeaders(xhr: XMLHttpRequest, options?: NetworkRequestOptions): void {\r\n if (options && options.headers) {\r\n const headers = options.headers;\r\n Object.keys(headers).forEach((key: string) => {\r\n xhr.setRequestHeader(key, headers[key]);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Gets a string map of the headers received in the response.\r\n * \r\n * Algorithm comes from https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/getAllResponseHeaders\r\n * @param xhr \r\n */\r\n private getHeaderDict(xhr: XMLHttpRequest): Record {\r\n const headerString = xhr.getAllResponseHeaders();\r\n const headerArr = headerString.trim().split(/[\\r\\n]+/);\r\n const headerDict: Record = {};\r\n headerArr.forEach((value: string) => {\r\n const parts = value.split(\": \");\r\n const headerName = parts.shift();\r\n const headerVal = parts.join(\": \");\r\n if (headerName && headerVal) {\r\n headerDict[headerName] = headerVal;\r\n }\r\n });\r\n\r\n return headerDict;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { Constants, INetworkModule, UrlString } from \"@azure/msal-common\";\r\nimport { FetchClient } from \"../network/FetchClient\";\r\nimport { XhrClient } from \"../network/XhrClient\";\r\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\r\nimport { InteractionType, BrowserConstants } from \"./BrowserConstants\";\r\n\r\n/**\r\n * Utility class for browser specific functions\r\n */\r\nexport class BrowserUtils {\r\n\r\n // #region Window Navigation and URL management\r\n\r\n /**\r\n * Clears hash from window url.\r\n */\r\n static clearHash(contentWindow: Window): void {\r\n // Office.js sets history.replaceState to null\r\n contentWindow.location.hash = Constants.EMPTY_STRING;\r\n if (typeof contentWindow.history.replaceState === \"function\") {\r\n // Full removes \"#\" from url\r\n contentWindow.history.replaceState(null, Constants.EMPTY_STRING, `${contentWindow.location.origin}${contentWindow.location.pathname}${contentWindow.location.search}`);\r\n }\r\n }\r\n\r\n /**\r\n * Replaces current hash with hash from provided url\r\n */\r\n static replaceHash(url: string): void {\r\n const urlParts = url.split(\"#\");\r\n urlParts.shift(); // Remove part before the hash\r\n window.location.hash = urlParts.length > 0 ? urlParts.join(\"#\") : Constants.EMPTY_STRING;\r\n }\r\n\r\n /**\r\n * Returns boolean of whether the current window is in an iframe or not.\r\n */\r\n static isInIframe(): boolean {\r\n return window.parent !== window;\r\n }\r\n\r\n /**\r\n * Returns boolean of whether or not the current window is a popup opened by msal\r\n */\r\n static isInPopup(): boolean {\r\n return typeof window !== \"undefined\" && !!window.opener && \r\n window.opener !== window && \r\n typeof window.name === \"string\" && \r\n window.name.indexOf(`${BrowserConstants.POPUP_NAME_PREFIX}.`) === 0;\r\n }\r\n\r\n // #endregion\r\n\r\n /**\r\n * Returns current window URL as redirect uri\r\n */\r\n static getCurrentUri(): string {\r\n return window.location.href.split(\"?\")[0].split(\"#\")[0];\r\n }\r\n\r\n /**\r\n * Gets the homepage url for the current window location.\r\n */\r\n static getHomepage(): string {\r\n const currentUrl = new UrlString(window.location.href);\r\n const urlComponents = currentUrl.getUrlComponents();\r\n return `${urlComponents.Protocol}//${urlComponents.HostNameAndPort}/`;\r\n }\r\n\r\n /**\r\n * Returns best compatible network client object. \r\n */\r\n static getBrowserNetworkClient(): INetworkModule {\r\n if (window.fetch && window.Headers) {\r\n return new FetchClient();\r\n } else {\r\n return new XhrClient();\r\n }\r\n }\r\n\r\n /**\r\n * Throws error if we have completed an auth and are \r\n * attempting another auth request inside an iframe.\r\n */\r\n static blockReloadInHiddenIframes(): void {\r\n const isResponseHash = UrlString.hashContainsKnownProperties(window.location.hash);\r\n // return an error if called from the hidden iframe created by the msal js silent calls\r\n if (isResponseHash && BrowserUtils.isInIframe()) {\r\n throw BrowserAuthError.createBlockReloadInHiddenIframeError();\r\n }\r\n }\r\n\r\n /**\r\n * Block redirect operations in iframes unless explicitly allowed\r\n * @param interactionType Interaction type for the request\r\n * @param allowRedirectInIframe Config value to allow redirects when app is inside an iframe\r\n */\r\n static blockRedirectInIframe(interactionType: InteractionType, allowRedirectInIframe: boolean): void {\r\n const isIframedApp = BrowserUtils.isInIframe();\r\n if (interactionType === InteractionType.Redirect && isIframedApp && !allowRedirectInIframe) {\r\n // If we are not in top frame, we shouldn't redirect. This is also handled by the service.\r\n throw BrowserAuthError.createRedirectInIframeError(isIframedApp);\r\n }\r\n }\r\n\r\n /**\r\n * Block redirectUri loaded in popup from calling AcquireToken APIs\r\n */\r\n static blockAcquireTokenInPopups(): void {\r\n // Popups opened by msal popup APIs are given a name that starts with \"msal.\"\r\n if (BrowserUtils.isInPopup()) {\r\n throw BrowserAuthError.createBlockAcquireTokenInPopupsError();\r\n }\r\n }\r\n\r\n /**\r\n * Throws error if token requests are made in non-browser environment\r\n * @param isBrowserEnvironment Flag indicating if environment is a browser.\r\n */\r\n static blockNonBrowserEnvironment(isBrowserEnvironment: boolean): void {\r\n if (!isBrowserEnvironment) {\r\n throw BrowserAuthError.createNonBrowserEnvironmentError();\r\n }\r\n }\r\n\r\n /**\r\n * Throws error if native brokering is enabled but initialize hasn't been called\r\n * @param allowNativeBroker \r\n * @param initialized \r\n */\r\n static blockNativeBrokerCalledBeforeInitialized(allowNativeBroker: boolean, initialized: boolean): void {\r\n if (allowNativeBroker && !initialized) {\r\n throw BrowserAuthError.createNativeBrokerCalledBeforeInitialize();\r\n }\r\n }\r\n\r\n /**\r\n * Returns boolean of whether current browser is an Internet Explorer or Edge browser.\r\n */\r\n static detectIEOrEdge(): boolean {\r\n const ua = window.navigator.userAgent;\r\n const msie = ua.indexOf(\"MSIE \");\r\n const msie11 = ua.indexOf(\"Trident/\");\r\n const msedge = ua.indexOf(\"Edge/\");\r\n const isIE = msie > 0 || msie11 > 0;\r\n const isEdge = msedge > 0;\r\n return isIE || isEdge;\r\n }\r\n}\r\n","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { INavigationClient } from \"./INavigationClient\";\r\nimport { NavigationOptions } from \"./NavigationOptions\";\r\n\r\nexport class NavigationClient implements INavigationClient {\r\n /**\r\n * Navigates to other pages within the same web application\r\n * @param url \r\n * @param options \r\n */\r\n navigateInternal(url: string, options: NavigationOptions): Promise{\r\n return NavigationClient.defaultNavigateWindow(url, options);\r\n }\r\n\r\n /**\r\n * Navigates to other pages outside the web application i.e. the Identity Provider\r\n * @param url \r\n * @param options \r\n */\r\n navigateExternal(url: string, options: NavigationOptions): Promise
\n Need an account?\n \n \n Sign Up!\n \n \n