{"version":3,"sources":["webpack:///./node_modules/@azure/msal-browser/dist/index.es.js"],"names":["_extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","_assign","assign","t","s","i","n","arguments","length","call","apply","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__spreadArrays","il","r","k","a","j","jl","_extendStatics$","__extends$1","_assign$","__awaiter$1","__generator$1","LogLevel","AuthErrorMessage","code","desc","AuthError","_super","errorCode","errorMessage","_this","errorString","name","createUnexpectedError","errDesc","Error","pkg","ClientAuthErrorMessage","ClientAuthError","createClientInfoDecodingError","caughtError","createClientInfoEmptyError","rawClientInfo","createIdTokenParsingError","caughtExtractionError","createIdTokenNullOrEmptyError","invalidRawTokenString","createEndpointDiscoveryIncompleteError","errDetail","createInvalidAuthorityTypeError","givenUrl","createHashNotDeserializedError","hashParamObj","createInvalidStateError","invalidState","createStateMismatchError","createNonceMismatchError","createAccountMismatchError","createInvalidIdTokenError","idToken","JSON","stringify","createNoTokensFoundError","createCacheParseError","cacheKey","createUserLoginRequiredError","createMultipleMatchingTokensInCacheError","scope","createMultipleMatchingAccountsInCacheError","createTokenRequestCannotBeMadeError","createAppendEmptyScopeToSetError","givenScope","createRemoveEmptyScopeFromSetError","createAppendScopeSetError","appendError","createEmptyInputScopeSetError","givenScopeSet","createDeviceCodeCancelledError","createDeviceCodeExpiredError","createNoAccountInSilentRequestError","createNullOrUndefinedCacheRecord","createInvalidCacheEnvironmentError","createNoAccountFoundError","createCachePluginError","createNoCryptoObjectError","operationName","createInvalidCacheTypeError","createUnexpectedAccountTypeError","createUnexpectedCredentialTypeError","createInvalidAssertionError","createInvalidCredentialError","StringUtils","decodeJwt","jwtToken","isEmpty","matches","exec","header","JWSPayload","JWSSig","str","startsWith","search","indexOf","endsWith","lastIndexOf","queryStringToObject","query","match","pl","decode","decodeURIComponent","replace","obj","trimArrayEntries","arr","map","entry","trim","removeEmptyStringsFromArray","filter","HeaderNames","PersistentCacheKeys","AADAuthorityConstants","AADServerParamKeys","IdTokenClaimName","ClaimsRequestKeys","Logger","loggerOptions","level","Info","localCallback","loggerCallback","piiLoggingEnabled","logLevel","logMessage","options","containsPii","timestamp","Date","toUTCString","log","correlationId","executeCallback","message","error","errorPii","warning","Warning","warningPii","info","infoPii","verbose","Verbose","verbosePii","isPiiLoggingEnabled","Constants","SSOTypes","PromptValue","LOGIN","SELECT_ACCOUNT","CONSENT","NONE","SID","LOGIN_HINT","ResponseMode","GrantType","CacheAccountType","Separators","CredentialType","CacheSchemaType","CacheType","CodeChallengeMethodValues","PLAIN","S256","SERVER_TELEM_CONSTANTS","SCHEMA_VERSION","FAILURE_LIMIT","CACHE_KEY","CATEGORY_SEPARATOR","VALUE_SEPARATOR","CredentialEntity","generateAccountId","generateAccountIdForCacheKey","homeAccountId","environment","generateCredentialId","generateCredentialIdForCacheKey","credentialType","clientId","realm","familyId","generateTarget","generateTargetForCacheKey","target","generateCredentialKey","generateCredentialCacheKey","generateType","ID_TOKEN","ACCESS_TOKEN","REFRESH_TOKEN","getCredentialType","key","toLowerCase","join","CACHE_KEY_SEPARATOR","scopes","ClientConfigurationErrorMessage","ClientConfigurationError","createRedirectUriEmptyError","createPostLogoutRedirectUriEmptyError","createClaimsRequestParsingError","claimsRequestParseError","createInsecureAuthorityUriError","urlString","createUrlParseError","urlParseError","createUrlEmptyError","createScopesNonArrayError","inputScopes","createEmptyScopesArrayError","createClientIdSingleScopeError","createInvalidPromptError","promptValue","createInvalidClaimsRequestError","createEmptyLogoutRequestError","createEmptyTokenRequestError","createInvalidCodeChallengeMethodError","createInvalidCodeChallengeParamsError","createKnownAuthoritiesCloudDiscoveryMetadataError","createInvalidCloudDiscoveryMetadataError","createUntrustedAuthorityError","ScopeSet","scopeArr","__spreadArrays$1","filteredInput","validateInputScopes","Set","forEach","add","fromString","inputScopeString","split","containsScope","has","containsScopeSet","scopeSet","size","asArray","every","appendScope","newScope","appendScopes","newScopes","removeScope","delete","unionScopeSets","otherScopes","unionScopes","intersectingScopeSets","sizeOtherScopes","getScopeCount","sizeThisScopes","array","val","printScopes","printScopesLowerCase","buildClientInfo","crypto","decodedClientInfo","base64Decode","parse","UrlString","url","_urlString","getHash","canonicalizeUri","defineProperty","get","enumerable","configurable","validateAsUri","components","getUrlComponents","HostNameAndPort","PathSegments","Protocol","urlRemoveQueryStringParameter","regex","RegExp","removeHashFromUrl","replaceTenantPath","tenantId","urlObject","pathArray","COMMON","ORGANIZATIONS","constructAuthorityUriFromObject","parseHash","regEx","urlComponents","AbsolutePath","pathSegments","getDomainFromUrl","hashString","hashIndex1","hashIndex2","substring","getDeserializedHash","hash","parsedHash","deserializedHash","hashContainsKnownProperties","parameters","error_description","state","TrustedAuthority","setTrustedAuthoritiesFromConfig","knownAuthorities","cloudDiscoveryMetadata","getTrustedHostList","createCloudDiscoveryMetadataFromKnownAuthorities","parsedMetadata","saveCloudDiscoveryMetadata","metadata","setTrustedAuthoritiesFromNetwork","authorityToVerify","networkInterface","instanceDiscoveryEndpoint","response","host","_a","sendGetRequestAsync","IsInTrustedHostList","aliases","authority","TrustedHostList","authorityDomain","preferred_cache","preferred_network","keys","getCloudDiscoveryMetadata","AccountEntity","generateAccountKey","generateAccountCacheKey","username","authorityType","ADFS_ACCOUNT_TYPE","ADFS","MSAV1_ACCOUNT_TYPE","MSA","MSSTS_ACCOUNT_TYPE","MSSTS","GENERIC_ACCOUNT_TYPE","GENERIC","getAccountInfo","accountInterface","createAccount","clientInfo","account","clientInfoObj","uid","CLIENT_INFO_SEPARATOR","utid","reqEnvironment","canonicalAuthorityUrlComponents","env","claims","tid","localAccountId","oid","sid","preferred_username","emails","createADFSAccount","sub","upn","isAccountEntity","entity","CacheManager","getAllAccounts","currentAccounts","getAccountsFilteredBy","accountValues","accountKey","accountObj","toObject","saveCacheRecord","cacheRecord","saveAccount","saveCredential","accessToken","saveAccessToken","refreshToken","setItem","ACCOUNT","credential","CREDENTIAL","currentTokenCache","getCredentialsFilteredBy","currentScopes","currentAccessTokens","accessTokens","tokenEntity","removeCredential","getAccount","getItem","getCredential","accountFilter","getAccountsFilteredByInternal","allCacheKeys","getKeys","matchingAccounts","getAccountEntity","matchHomeAccountId","matchEnvironment","matchRealm","getCredentialsFilteredByInternal","matchingCredentials","idTokens","refreshTokens","credType","matchCredentialType","matchClientId","matchTarget","removeAppMetadata","isAppMetadata","removeItem","APP_METADATA","removeAllAccounts","removeAccount","removeAccountContext","accountId","cacheEntity","cloudMetadata","entityScopeSet","requestTargetScopeSet","json","propertyName","DefaultStorageClass","containsKey","clear","DEFAULT_AUTH_OPTIONS","clientCapabilities","DEFAULT_SYSTEM_OPTIONS","tokenRenewalOffsetSeconds","DEFAULT_LOGGER_IMPLEMENTATION","DEFAULT_NETWORK_IMPLEMENTATION","sendPostRequestAsync","DEFAULT_CRYPTO_IMPLEMENTATION","createNewGuid","base64Encode","generatePkceCodes","DEFAULT_LIBRARY_INFO","sku","version","cpu","os","DEFAULT_CLIENT_CREDENTIALS","clientSecret","clientAssertion","AuthorityType","BaseClient","configuration","userAuthOptions","userSystemOptions","userLoggerOption","storageImplementation","networkImplementation","cryptoImplementation","clientCredentials","libraryInfo","serverTelemetryManager","config","authOptions","systemOptions","storageInterface","cryptoInterface","logger","cryptoUtils","cacheManager","networkClient","createDefaultTokenRequestHeaders","headers","createDefaultLibraryHeaders","CONTENT_TYPE","X_CLIENT_CURR_TELEM","generateCurrentRequestHeaderValue","X_CLIENT_LAST_TELEM","generateLastRequestHeaderValue","X_CLIENT_SKU","X_CLIENT_VER","X_CLIENT_OS","X_CLIENT_CPU","executePostToTokenEndpoint","tokenEndpoint","queryString","status","clearTelemetryCache","RequestValidator","validateRedirectUri","redirectUri","validatePrompt","prompt","validateClaims","validateCodeChallengeParams","codeChallenge","codeChallengeMethod","validateCodeChallengeMethod","sanitizeEQParams","eQParams","queryParams","RequestParameterBuilder","Map","addResponseTypeCode","set","RESPONSE_TYPE","encodeURIComponent","addResponseMode","responseMode","RESPONSE_MODE","QUERY","addScopes","SCOPE","addClientId","CLIENT_ID","addRedirectUri","REDIRECT_URI","addDomainHint","domainHint","DOMAIN_HINT","addLoginHint","loginHint","addSid","addClaims","mergedClaims","addClientCapabilitiesToClaims","CLAIMS","addCorrelationId","CLIENT_REQUEST_ID","addLibraryInfo","addPrompt","PROMPT","addState","STATE","addNonce","nonce","NONCE","addCodeChallengeParams","CODE_CHALLENGE","CODE_CHALLENGE_METHOD","addAuthorizationCode","CODE","addDeviceCode","DEVICE_CODE","addRefreshToken","addCodeVerifier","codeVerifier","CODE_VERIFIER","addClientSecret","CLIENT_SECRET","addClientAssertion","CLIENT_ASSERTION","addClientAssertionType","clientAssertionType","CLIENT_ASSERTION_TYPE","addGrantType","grantType","GRANT_TYPE","addClientInfo","addExtraQueryParameters","eQparams","XMS_CC","values","createQueryString","queryParameterArray","ServerError","subError","IdToken","rawIdToken","extractIdToken","encodedIdToken","decodedToken","base64IdTokenPayload","base64Decoded","err","TimeUtils","nowSeconds","Math","round","getTime","isTokenExpired","expiresOn","offset","expirationSec","Number","HTTP_REQUEST_TYPE","TemporaryCacheKeys","ApiId","InteractionType","IdTokenEntity","createIdTokenEntity","idTokenEntity","secret","isIdTokenEntity","AccessTokenEntity","createAccessTokenEntity","extExpiresOn","atEntity","currentTime","cachedAt","toString","extendedExpiresOn","isAccessTokenEntity","RefreshTokenEntity","createRefreshTokenEntity","rtEntity","isRefreshTokenEntity","InteractionRequiredAuthErrorMessage","InteractionRequiredAuthSubErrorMessage","InteractionRequiredAuthError","isInteractionRequiredError","isInteractionRequiredErrorCode","isInteractionRequiredSubError","isInteractionRequiredErrorDesc","some","irErrorCode","CacheRecord","accountEntity","accessTokenEntity","refreshTokenEntity","ProtocolUtils","setRequestState","cryptoObj","userState","meta","libraryState","generateLibraryState","stateObj","id","ts","stateString","parseRequestState","splitState","slice","libraryStateString","libraryStateObj","userRequestState","ResponseHandler","cacheStorage","validateServerAuthorizationCodeResponse","serverResponseHash","cachedState","suberror","client_info","validateTokenResponse","serverResponse","errString","error_codes","correlation_id","trace_id","handleServerTokenResponse","serverTokenResponse","cachedNonce","requestScopes","homeAccountIdentifier","idTokenObj","id_token","requestStateObj","generateCacheRecord","generateAuthenticationResult","cachedIdToken","cachedAccount","generateAccountEntity","cachedAccessToken","access_token","responseScopes","tokenExpirationSeconds","expires_in","extendedTokenExpirationSeconds","ext_expires_in","tenant","cachedRefreshToken","refresh_token","foci","Adfs","fromTokenCache","requestState","uniqueId","idTokenClaims","fromCache","AuthorizationCodeClient","getAuthCodeUrl","request","createAuthCodeUrlQueryString","authorizationEndpoint","acquireToken","responseHandler","executeTokenRequest","handleFragmentResponse","hashFragment","hashUrlString","serverParams","getLogoutUri","logoutRequest","postLogoutUriParam","postLogoutRedirectUri","POST_LOGOUT_URI","correlationIdParam","endSessionEndpoint","requestBody","createTokenRequestBody","parameterBuilder","assertion","assertionType","AUTHORIZATION_CODE_GRANT","extraScopesToConsent","extraQueryParameters","RefreshTokenClient","DeviceCodeClient","deviceCodeResponse","getDeviceCode","deviceCodeCallback","acquireTokenWithDeviceCode","executePostRequestToDeviceCodeEndpoint","deviceCodeEndpoint","userCode","deviceCode","verificationUri","expiresIn","interval","_b","user_code","device_code","verification_uri","deviceCodeExpirationTime","pollingIntervalMilli","intervalId","setInterval","error_1","cancel","clearInterval","requestParameters","DEVICE_CODE_GRANT","REFRESH_TOKEN_GRANT","SilentFlowClient","ClientCredentialClient","cachedAuthenticationResult","skipCache","getCachedAuthenticationResult","readAccessTokenFromCache","accessTokenFilter","credentialCache","CLIENT_CREDENTIALS_GRANT","refreshTokenClient","refreshTokenRequest","readRefreshTokenFromCache","isRefreshRequired","incrementCacheHits","readIdTokenFromCache","forceRefresh","inputRealm","idTokenKey","refreshTokenKey","Authority","canonicalAuthority","_canonicalAuthority","Default","_canonicalAuthorityUrlComponents","discoveryComplete","replaceTenant","tenantDiscoveryResponse","authorization_endpoint","token_endpoint","end_session_endpoint","issuer","discoverEndpoints","openIdConfigurationEndpoint","validateAndSetPreferredNetwork","preferredNetwork","resolveEndpointsAsync","openIdConfigEndpoint","defaultOpenIdConfigurationEndpoint","AuthorityFactory","createDiscoveredInstance","authorityUri","acquireTokenAuthority","e_1","createInstance","authorityUrl","ServerTelemetryManager","telemetryRequest","apiId","telemetryCacheKey","forceRefreshInt","lastRequests","getLastRequests","failedRequests","errors","platformFields","errorCount","cacheHits","cacheFailedRequest","shift","TELEMETRY","BrowserConstants","DEFAULT_REQUEST","FetchClient","fetch","method","GET","getFetchHeaders","getHeaderDict","reqBody","POST","Headers","append","headerDict","BrowserAuthErrorMessage","BrowserAuthError","createNoWindowObjectError","createPkceNotGeneratedError","createCryptoNotAvailableError","createHttpMethodNotImplementedError","createEmptyNavigationUriError","createEmptyHashError","hashValue","createInteractionInProgressError","createPopupWindowError","createEmptyWindowCreatedError","createUserCancelledError","createMonitorWindowTimeoutError","createRedirectInIframeError","windowParentCheck","createBlockReloadInHiddenIframeError","createIframeClosedPrematurelyError","createSilentSSOInsufficientInfoError","createSilentPromptValueError","givenPrompt","createTokenRequestCacheError","XhrClient","sendRequestAsync","xhr","XMLHttpRequest","open","setXhrHeaders","onload","responseText","jsonResponse","networkResponse","onerror","send","setRequestHeader","headerArr","getAllResponseHeaders","parts","headerName","headerVal","BrowserUtils","navigateWindow","urlNavigate","noHistory","window","location","clearHash","replaceHash","urlParts","isInIframe","parent","getCurrentUri","href","getHomepage","getBrowserNetworkClient","blockReloadInHiddenIframes","detectIEOrEdge","ua","navigator","userAgent","msie","msie11","msedge","DEFAULT_AUTH_OPTIONS$1","navigateToLoginRequestUrl","DEFAULT_CACHE_OPTIONS","cacheLocation","storeAuthStateInCookie","DEFAULT_BROWSER_SYSTEM_OPTIONS","windowHashTimeout","iframeHashTimeout","loadFrameTimeout","asyncPopups","BrowserConfigurationAuthErrorMessage","BrowserConfigurationAuthError","createStorageNotSupportedError","givenStorageLocation","createInvalidCallbackObjectError","callbackObject","createRedirectCallbacksNotSetError","BrowserStorage","cacheConfig","validateWindowStorage","windowStorage","migrateCacheEntries","clientInfoKey","CLIENT_INFO","errorKey","ERROR","errorDescKey","ERROR_DESC","index","migrateCacheEntry","newKey","generateCacheKey","TEMPORARY","validateObjectKey","type","stringVal","setItemCookie","itemCookie","getItemCookie","clearItemCookie","cookieName","cookieValue","expires","cookieStr","getCookieExpirationTime","document","cookie","cookieList","charAt","clearMsalCookie","nonceKey","NONCE_IDTOKEN","REQUEST_STATE","ORIGIN_URI","cookieLifeDays","today","getCache","setCache","ADAL_ID_TOKEN","generateAuthorityKey","AUTHORITY","generateNonceKey","setAuthorityCache","authorityKey","getCachedAuthority","updateCacheEntries","authorityInstance","resetRequestCache","REQUEST_PARAMS","URL_HASH","cleanRequest","cacheCodeRequest","authCodeRequest","browserCrypto","getCachedRequest","encodedTokenRequest","parsedRequest","cachedAuthority","MathUtils","decimalToHex","num","hex","GuidGenerator","generateGuid","buffer","Uint8Array","getRandomValues","guidHolder","guidResponse","random","isGuid","guid","test","BrowserStringUtils","stringToUtf8Arr","sDOMStr","nChr","nArrLen","nStrLen","nMapIdx","charCodeAt","aBytes","nIdx","nChrIdx","utf8ArrToString","sView","nPart","nLen","String","fromCharCode","Base64Encode","urlEncode","input","encode","urlEncodeArr","inputArr","base64EncArr","inputUtf8Arr","eqLen","sB64Enc","nMod3","nUint24","uint6ToB64","nUint6","Base64Decode","encodedString","base64DecToArr","base64String","nBlockSize","nInLen","nOutLen","ceil","nMod4","nOutIdx","nInIdx","b64ToUint6","charNum","PkceGenerator","generateCodes","generateCodeVerifier","generateCodeChallengeFromVerifier","verifier","challenge","pkceCodeVerifier","pkceHashedCodeVerifier","sha256Digest","BrowserCrypto","hasCryptoAPI","dataString","data","hasIECrypto","getMSCryptoDigest","getSubtleCryptoDigest","dataBuffer","hasBrowserCrypto","algorithm","subtle","digest","digestOperation","addEventListener","CryptoOps","b64Encode","b64Decode","guidGenerator","pkceGenerator","InteractionHandler","authCodeModule","storageImpl","authModule","browserStorage","handleCodeResponse","locationHash","authCode","cachedNonceKey","tokenResponse","RedirectHandler","initiateAuthRequest","requestUrl","redirectStartPage","isIframedApp","PopupHandler","unloadWindow","bind","popup","openPopup","monitorPopupForHash","popupWindow","timeout","maxTicks","ticks","closed","cleanPopup","contentHash","openSizedPopup","focus","currentWindow","winLeft","screenLeft","screenX","winTop","screenTop","screenY","width","innerWidth","documentElement","clientWidth","height","innerHeight","clientHeight","left","max","top","close","removeEventListener","SilentHandler","configuredLoadFrameTimeout","userRequestScopes","frameName","loadFrame","loadFrameSync","monitorIframeForHash","iframe","timeoutMark","performance","now","removeHiddenIframe","contentWindow","setTimeout","frameHandle","getHiddenIframe","src","iframeId","authFrame","getElementById","createElement","ifr","setAttribute","style","visibility","position","border","getElementsByTagName","appendChild","insertAdjacentHTML","frames","parentNode","removeChild","BrowserProtocolUtils","extractBrowserRequestState","PublicClientApplication","userInputAuth","userInputCache","userInputSystem","auth","cache","system","defaultAuthority","handleRedirectPromise","handleRedirectResponse","responseHash","loginRequestUrl","loginRequestUrlNormalized","currentUrlNormalized","hashKey","homepage","getRedirectResponseHash","handleHash","isResponseHash","cachedHash","interactionType","REDIRECT","cachedRequest","currentAuthority","authClient","initializeServerTelemetryManager","createAuthCodeClient","loginRedirect","acquireTokenRedirect","validRequest","interactionHandler","navigateUrl","e_2","preflightInteractiveRequest","initializeAuthorizationCodeRequest","loginPopup","acquireTokenPopup","acquireTokenPopupAsync","e_3","POPUP","ssoSilent","silentRequest","scopeString","e_4","initializeAuthorizationRequest","SILENT","silentTokenHelper","acquireTokenSilent","e_5","isServerError","isInvalidGrantError","silentAuthUrlRequest","e_6","initializeBaseRequest","acquireTokenSilent_silentFlow","createSilentFlowClient","acquireTokenSilent_authCode","silentHandler","msalFrame","logout","validLogoutRequest","logoutUri","initializeLogoutRequest","getAccountByUsername","userName","allAccounts","getAccountByHomeId","getRedirectUri","requestRedirectUri","getPostLogoutRedirectUri","requestPostLogoutRedirectUri","getDiscoveredDefaultAuthority","interactionInProgress","clientConfig","getClientConfiguration","requestAuthority","discoveredAuthority","validatedRequest","telemetryPayload","setDefaultScopes","adalIdTokenString","adalIdToken","browserState","FRAGMENT","generatedPkceParams"],"mappings":"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","file":"205995ea-b4983a669159aaffb33a.js","sourcesContent":["/*! @azure/msal-browser v2.1.0 2020-08-25 */\n'use strict';\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\nvar _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign = function __assign() {\n _assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign.apply(this, arguments);\n};\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : new P(function (resolve) {\n resolve(result.value);\n }).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n/*! @azure/msal-common v1.2.0 2020-08-25 */\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\n\n/* global Reflect, Promise */\n\n\nvar _extendStatics$ = function extendStatics$1(d, b) {\n _extendStatics$ = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics$(d, b);\n};\n\nfunction __extends$1(d, b) {\n _extendStatics$(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar _assign$ = function __assign$1() {\n _assign$ = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return _assign$.apply(this, arguments);\n};\n\nfunction __awaiter$1(thisArg, _arguments, P, generator) {\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : new P(function (resolve) {\n resolve(result.value);\n }).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator$1(thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n}\n\nfunction __spreadArrays$1() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n}\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * AuthErrorMessage class containing string constants used by error codes and messages.\r\n */\n\n\nvar AuthErrorMessage = {\n unexpectedError: {\n code: \"unexpected_error\",\n desc: \"Unexpected error in authentication.\"\n }\n};\n/**\r\n * General error class thrown by the MSAL.js library.\r\n */\n\nvar AuthError =\n/** @class */\nfunction (_super) {\n __extends$1(AuthError, _super);\n\n function AuthError(errorCode, errorMessage) {\n var _this = this;\n\n var errorString = errorMessage ? errorCode + \": \" + errorMessage : errorCode;\n _this = _super.call(this, errorString) || this;\n Object.setPrototypeOf(_this, AuthError.prototype);\n _this.errorCode = errorCode;\n _this.errorMessage = errorMessage;\n _this.name = \"AuthError\";\n return _this;\n }\n /**\r\n * Creates an error that is thrown when something unexpected happens in the library.\r\n * @param errDesc\r\n */\n\n\n AuthError.createUnexpectedError = function (errDesc) {\n return new AuthError(AuthErrorMessage.unexpectedError.code, AuthErrorMessage.unexpectedError.desc + \": \" + errDesc);\n };\n\n return AuthError;\n}(Error);\n\nvar name = \"@azure/msal-common\";\nvar author = {\n name: \"Microsoft\",\n email: \"nugetaad@microsoft.com\",\n url: \"https://www.microsoft.com\"\n};\nvar license = \"MIT\";\nvar repository = {\n type: \"git\",\n url: \"https://github.com/AzureAD/microsoft-authentication-library-for-js.git\"\n};\nvar version = \"1.2.0\";\nvar description = \"Microsoft Authentication Library for js\";\nvar keywords = [\"implicit\", \"authorization code\", \"PKCE\", \"js\", \"AAD\", \"msal\", \"oauth\"];\nvar main = \"./dist/index.js\";\nvar module = \"./dist/index.es.js\";\nvar types = \"./dist/src/index.d.ts\";\nvar browserslist = [\"last 1 version\", \"> 1%\", \"maintained node versions\", \"not dead\"];\nvar engines = {\n node: \">=0.8.0\"\n};\nvar directories = {\n test: \"test\"\n};\nvar files = [\"dist\"];\nvar scripts = {\n clean: \"shx rm -rf dist lib\",\n \"clean:coverage\": \"rimraf ../../.nyc_output/*\",\n doc: \"npm run doc:generate && npm run doc:deploy\",\n \"doc:generate\": \"typedoc --mode modules --excludePrivate --excludeProtected --excludeNotExported --out ./ref ./src/ --gitRevision dev\",\n \"doc:deploy\": \"gh-pages -d ref -a -e ref/msal-common\",\n lint: \"eslint src --ext .ts\",\n test: \"mocha\",\n \"test:coverage\": \"nyc --reporter=text mocha --exit\",\n \"test:coverage:only\": \"npm run clean:coverage && npm run test:coverage\",\n \"build:modules\": \"rollup -c\",\n \"build:modules:watch\": \"rollup -cw\",\n build: \"npm run clean && npm run lint && npm run build:modules\",\n prepack: \"npm run build\"\n};\nvar devDependencies = {\n \"@babel/core\": \"^7.7.2\",\n \"@babel/plugin-proposal-class-properties\": \"^7.7.0\",\n \"@babel/plugin-proposal-object-rest-spread\": \"^7.6.2\",\n \"@babel/polyfill\": \"^7.7.0\",\n \"@babel/preset-env\": \"^7.7.1\",\n \"@babel/preset-typescript\": \"^7.7.2\",\n \"@babel/register\": \"^7.7.0\",\n \"@istanbuljs/nyc-config-babel\": \"^2.1.1\",\n \"@rollup/plugin-json\": \"^4.0.0\",\n \"@types/chai\": \"^4.2.5\",\n \"@types/chai-as-promised\": \"^7.1.2\",\n \"@types/debug\": \"^4.1.5\",\n \"@types/mocha\": \"^5.2.7\",\n \"@types/sinon\": \"^7.5.0\",\n \"@typescript-eslint/eslint-plugin\": \"^2.4.0\",\n \"@typescript-eslint/eslint-plugin-tslint\": \"^2.4.0\",\n \"@typescript-eslint/parser\": \"^2.4.0\",\n \"babel-plugin-istanbul\": \"^5.2.0\",\n beachball: \"^1.32.2\",\n chai: \"^4.2.0\",\n \"chai-as-promised\": \"^7.1.1\",\n eslint: \"^6.5.1\",\n \"gh-pages\": \"^3.1.0\",\n husky: \"^3.0.9\",\n mocha: \"^6.2.2\",\n nyc: \"^14.1.1\",\n rimraf: \"^3.0.2\",\n rollup: \"^1.24.0\",\n \"rollup-plugin-typescript2\": \"^0.24.3\",\n \"rollup-plugin-uglify\": \"^6.0.4\",\n shx: \"^0.3.2\",\n sinon: \"^7.5.0\",\n tslib: \"^1.10.0\",\n tslint: \"^5.20.0\",\n typedoc: \"^0.17.8\",\n typescript: \"^3.7.5\"\n};\nvar dependencies = {\n debug: \"^4.1.1\"\n};\nvar pkg = {\n name: name,\n author: author,\n license: license,\n repository: repository,\n version: version,\n description: description,\n keywords: keywords,\n main: main,\n module: module,\n types: types,\n browserslist: browserslist,\n engines: engines,\n directories: directories,\n files: files,\n scripts: scripts,\n devDependencies: devDependencies,\n dependencies: dependencies\n};\n/**\r\n * ClientAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\n\nvar ClientAuthErrorMessage = {\n clientInfoDecodingError: {\n code: \"client_info_decoding_error\",\n desc: \"The client info could not be parsed/decoded correctly. Please review the trace to determine the root cause.\"\n },\n clientInfoEmptyError: {\n code: \"client_info_empty_error\",\n desc: \"The client info was empty. Please review the trace to determine the root cause.\"\n },\n idTokenParsingError: {\n code: \"id_token_parsing_error\",\n desc: \"ID token cannot be parsed. Please review stack trace to determine root cause.\"\n },\n nullOrEmptyIdToken: {\n code: \"null_or_empty_id_token\",\n desc: \"The idToken is null or empty. Please review the trace to determine the root cause.\"\n },\n endpointResolutionError: {\n code: \"endpoints_resolution_error\",\n desc: \"Error: could not resolve endpoints. Please check network and try again.\"\n },\n invalidAuthorityType: {\n code: \"invalid_authority_type\",\n desc: \"The given authority is not a valid type of authority supported by MSAL. Please review the trace to determine the root cause.\"\n },\n hashNotDeserialized: {\n code: \"hash_not_deserialized\",\n desc: \"The hash parameters could not be deserialized. Please review the trace to determine the root cause.\"\n },\n blankGuidGenerated: {\n code: \"blank_guid_generated\",\n desc: \"The guid generated was blank. Please review the trace to determine the root cause.\"\n },\n invalidStateError: {\n code: \"invalid_state\",\n desc: \"State was not the expected format. Please check the logs to determine whether the request was sent using ProtocolUtils.setRequestState().\"\n },\n stateMismatchError: {\n code: \"state_mismatch\",\n desc: \"State mismatch error. Please check your network. Continued requests may cause cache overflow.\"\n },\n nonceMismatchError: {\n code: \"nonce_mismatch\",\n desc: \"Nonce mismatch error. This may be caused by a race condition in concurrent requests.\"\n },\n accountMismatchError: {\n code: \"account_mismatch\",\n desc: \"The cached account and account which made the token request do not match.\"\n },\n invalidIdToken: {\n code: \"invalid_id_token\",\n desc: \"Invalid ID token format.\"\n },\n noTokensFoundError: {\n code: \"no_tokens_found\",\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().\"\n },\n cacheParseError: {\n code: \"cache_parse_error\",\n desc: \"Could not parse cache key.\"\n },\n userLoginRequiredError: {\n code: \"user_login_error\",\n desc: \"User login is required.\"\n },\n multipleMatchingTokens: {\n code: \"multiple_matching_tokens\",\n desc: \"The cache contains multiple tokens satisfying the requirements. \" + \"Call AcquireToken again providing more requirements such as authority or account.\"\n },\n multipleMatchingAccounts: {\n code: \"multiple_matching_accounts\",\n desc: \"The cache contains multiple accounts satisfying the given parameters. Please pass more info to obtain the correct account\"\n },\n tokenRequestCannotBeMade: {\n code: \"request_cannot_be_made\",\n desc: \"Token request cannot be made without authorization code or refresh token.\"\n },\n appendEmptyScopeError: {\n code: \"cannot_append_empty_scope\",\n desc: \"Cannot append null or empty scope to ScopeSet. Please check the stack trace for more info.\"\n },\n removeEmptyScopeError: {\n code: \"cannot_remove_empty_scope\",\n desc: \"Cannot remove null or empty scope from ScopeSet. Please check the stack trace for more info.\"\n },\n appendScopeSetError: {\n code: \"cannot_append_scopeset\",\n desc: \"Cannot append ScopeSet due to error.\"\n },\n emptyInputScopeSetError: {\n code: \"empty_input_scopeset\",\n desc: \"Empty input ScopeSet cannot be processed.\"\n },\n DeviceCodePollingCancelled: {\n code: \"device_code_polling_cancelled\",\n desc: \"Caller has cancelled token endpoint polling during device code flow by setting DeviceCodeRequest.cancel = true.\"\n },\n DeviceCodeExpired: {\n code: \"device_code_expired\",\n desc: \"Device code is expired.\"\n },\n NoAccountInSilentRequest: {\n code: \"no_account_in_silent_request\",\n desc: \"Please pass an account object, silent flow is not supported without account information\"\n },\n invalidCacheRecord: {\n code: \"invalid_cache_record\",\n desc: \"Cache record object was null or undefined.\"\n },\n invalidCacheEnvironment: {\n code: \"invalid_cache_environment\",\n desc: \"Invalid environment when attempting to create cache entry\"\n },\n noAccountFound: {\n code: \"no_account_found\",\n desc: \"No account found in cache for given key.\"\n },\n CachePluginError: {\n code: \"no cache plugin set on CacheManager\",\n desc: \"ICachePlugin needs to be set before using readFromStorage or writeFromStorage\"\n },\n noCryptoObj: {\n code: \"no_crypto_object\",\n desc: \"No crypto object detected. This is required for the following operation: \"\n },\n invalidCacheType: {\n code: \"invalid_cache_type\",\n desc: \"Invalid cache type\"\n },\n unexpectedAccountType: {\n code: \"unexpected_account_type\",\n desc: \"Unexpected account type.\"\n },\n unexpectedCredentialType: {\n code: \"unexpected_credential_type\",\n desc: \"Unexpected credential type.\"\n },\n invalidAssertion: {\n code: \"invalid_assertion\",\n desc: \"Client assertion must meet requirements described in https://tools.ietf.org/html/rfc7515\"\n },\n invalidClientCredential: {\n code: \"invalid_client_credential\",\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\"\n }\n};\n/**\r\n * Error thrown when there is an error in the client code running on the browser.\r\n */\n\nvar ClientAuthError =\n/** @class */\nfunction (_super) {\n __extends$1(ClientAuthError, _super);\n\n function ClientAuthError(errorCode, errorMessage) {\n var _this = _super.call(this, errorCode, errorMessage) || this;\n\n _this.name = \"ClientAuthError\";\n Object.setPrototypeOf(_this, ClientAuthError.prototype);\n return _this;\n }\n /**\r\n * Creates an error thrown when client info object doesn't decode correctly.\r\n * @param caughtError\r\n */\n\n\n ClientAuthError.createClientInfoDecodingError = function (caughtError) {\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoDecodingError.code, ClientAuthErrorMessage.clientInfoDecodingError.desc + \" Failed with error: \" + caughtError);\n };\n /**\r\n * Creates an error thrown if the client info is empty.\r\n * @param rawClientInfo\r\n */\n\n\n ClientAuthError.createClientInfoEmptyError = function (rawClientInfo) {\n return new ClientAuthError(ClientAuthErrorMessage.clientInfoEmptyError.code, ClientAuthErrorMessage.clientInfoEmptyError.desc + \" Given Object: \" + rawClientInfo);\n };\n /**\r\n * Creates an error thrown when the id token extraction errors out.\r\n * @param err\r\n */\n\n\n ClientAuthError.createIdTokenParsingError = function (caughtExtractionError) {\n return new ClientAuthError(ClientAuthErrorMessage.idTokenParsingError.code, ClientAuthErrorMessage.idTokenParsingError.desc + \" Failed with error: \" + caughtExtractionError);\n };\n /**\r\n * Creates an error thrown when the id token string is null or empty.\r\n * @param invalidRawTokenString\r\n */\n\n\n ClientAuthError.createIdTokenNullOrEmptyError = function (invalidRawTokenString) {\n return new ClientAuthError(ClientAuthErrorMessage.nullOrEmptyIdToken.code, ClientAuthErrorMessage.nullOrEmptyIdToken.desc + \" Raw ID Token Value: \" + invalidRawTokenString);\n };\n /**\r\n * Creates an error thrown when the endpoint discovery doesn't complete correctly.\r\n */\n\n\n ClientAuthError.createEndpointDiscoveryIncompleteError = function (errDetail) {\n return new ClientAuthError(ClientAuthErrorMessage.endpointResolutionError.code, ClientAuthErrorMessage.endpointResolutionError.desc + \" Detail: \" + errDetail);\n };\n /**\r\n * Creates an error thrown if authority type is not valid.\r\n * @param invalidAuthorityError\r\n */\n\n\n ClientAuthError.createInvalidAuthorityTypeError = function (givenUrl) {\n return new ClientAuthError(ClientAuthErrorMessage.invalidAuthorityType.code, ClientAuthErrorMessage.invalidAuthorityType.desc + \" Given Url: \" + givenUrl);\n };\n /**\r\n * Creates an error thrown when the hash cannot be deserialized.\r\n * @param invalidAuthorityError\r\n */\n\n\n ClientAuthError.createHashNotDeserializedError = function (hashParamObj) {\n return new ClientAuthError(ClientAuthErrorMessage.hashNotDeserialized.code, ClientAuthErrorMessage.hashNotDeserialized.desc + \" Given Object: \" + hashParamObj);\n };\n /**\r\n * Creates an error thrown when the state cannot be parsed.\r\n * @param invalidState\r\n */\n\n\n ClientAuthError.createInvalidStateError = function (invalidState, errorString) {\n return new ClientAuthError(ClientAuthErrorMessage.invalidStateError.code, ClientAuthErrorMessage.invalidStateError.desc + \" Invalid State: \" + invalidState + \", Root Err: \" + errorString);\n };\n /**\r\n * Creates an error thrown when two states do not match.\r\n */\n\n\n ClientAuthError.createStateMismatchError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.stateMismatchError.code, ClientAuthErrorMessage.stateMismatchError.desc);\n };\n /**\r\n * Creates an error thrown when the nonce does not match.\r\n */\n\n\n ClientAuthError.createNonceMismatchError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.nonceMismatchError.code, ClientAuthErrorMessage.nonceMismatchError.desc);\n };\n /**\r\n * Creates an error thrown when the cached account and response account do not match.\r\n */\n\n\n ClientAuthError.createAccountMismatchError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.accountMismatchError.code, ClientAuthErrorMessage.accountMismatchError.desc);\n };\n /**\r\n * Throws error if idToken is not correctly formed\r\n * @param idToken\r\n */\n\n\n ClientAuthError.createInvalidIdTokenError = function (idToken) {\n return new ClientAuthError(ClientAuthErrorMessage.invalidIdToken.code, ClientAuthErrorMessage.invalidIdToken.desc + \" Given token: \" + JSON.stringify(idToken));\n };\n /**\r\n * Creates an error thrown when the authorization code required for a token request is null or empty.\r\n */\n\n\n ClientAuthError.createNoTokensFoundError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.noTokensFoundError.code, ClientAuthErrorMessage.noTokensFoundError.desc);\n };\n /**\r\n * Creates an error in cache parsing.\r\n */\n\n\n ClientAuthError.createCacheParseError = function (cacheKey) {\n return new ClientAuthError(ClientAuthErrorMessage.cacheParseError.code, ClientAuthErrorMessage.cacheParseError.desc + \" Cache key: \" + cacheKey);\n };\n /**\r\n * Throws error when renewing token without login.\r\n */\n\n\n ClientAuthError.createUserLoginRequiredError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.userLoginRequiredError.code, ClientAuthErrorMessage.userLoginRequiredError.desc);\n };\n /**\r\n * Throws error when multiple tokens are in cache for the given scope.\r\n * @param scope\r\n */\n\n\n ClientAuthError.createMultipleMatchingTokensInCacheError = function (scope) {\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingTokens.code, \"Cache error for scope \" + scope + \": \" + ClientAuthErrorMessage.multipleMatchingTokens.desc + \".\");\n };\n /**\r\n * Throws error when multiple tokens are in cache for the given scope.\r\n * @param scope\r\n */\n\n\n ClientAuthError.createMultipleMatchingAccountsInCacheError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.multipleMatchingAccounts.code, ClientAuthErrorMessage.multipleMatchingAccounts.desc);\n };\n /**\r\n * Throws error when no auth code or refresh token is given to ServerTokenRequestParameters.\r\n */\n\n\n ClientAuthError.createTokenRequestCannotBeMadeError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.tokenRequestCannotBeMade.code, ClientAuthErrorMessage.tokenRequestCannotBeMade.desc);\n };\n /**\r\n * Throws error when attempting to append a null, undefined or empty scope to a set\r\n * @param givenScope\r\n */\n\n\n ClientAuthError.createAppendEmptyScopeToSetError = function (givenScope) {\n return new ClientAuthError(ClientAuthErrorMessage.appendEmptyScopeError.code, ClientAuthErrorMessage.appendEmptyScopeError.desc + \" Given Scope: \" + givenScope);\n };\n /**\r\n * Throws error when attempting to append a null, undefined or empty scope to a set\r\n * @param givenScope\r\n */\n\n\n ClientAuthError.createRemoveEmptyScopeFromSetError = function (givenScope) {\n return new ClientAuthError(ClientAuthErrorMessage.removeEmptyScopeError.code, ClientAuthErrorMessage.removeEmptyScopeError.desc + \" Given Scope: \" + givenScope);\n };\n /**\r\n * Throws error when attempting to append null or empty ScopeSet.\r\n * @param appendError\r\n */\n\n\n ClientAuthError.createAppendScopeSetError = function (appendError) {\n return new ClientAuthError(ClientAuthErrorMessage.appendScopeSetError.code, ClientAuthErrorMessage.appendScopeSetError.desc + \" Detail Error: \" + appendError);\n };\n /**\r\n * Throws error if ScopeSet is null or undefined.\r\n * @param givenScopeSet\r\n */\n\n\n ClientAuthError.createEmptyInputScopeSetError = function (givenScopeSet) {\n return new ClientAuthError(ClientAuthErrorMessage.emptyInputScopeSetError.code, ClientAuthErrorMessage.emptyInputScopeSetError.desc + \" Given ScopeSet: \" + givenScopeSet);\n };\n /**\r\n * Throws error if user sets CancellationToken.cancel = true during polling of token endpoint during device code flow\r\n */\n\n\n ClientAuthError.createDeviceCodeCancelledError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodePollingCancelled.code, \"\" + ClientAuthErrorMessage.DeviceCodePollingCancelled.desc);\n };\n /**\r\n * Throws error if device code is expired\r\n */\n\n\n ClientAuthError.createDeviceCodeExpiredError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.DeviceCodeExpired.code, \"\" + ClientAuthErrorMessage.DeviceCodeExpired.desc);\n };\n /**\r\n * Throws error when silent requests are made without an account object\r\n */\n\n\n ClientAuthError.createNoAccountInSilentRequestError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.NoAccountInSilentRequest.code, \"\" + ClientAuthErrorMessage.NoAccountInSilentRequest.desc);\n };\n /**\r\n * Throws error when cache record is null or undefined.\r\n */\n\n\n ClientAuthError.createNullOrUndefinedCacheRecord = function () {\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheRecord.code, ClientAuthErrorMessage.invalidCacheRecord.desc);\n };\n /**\r\n * Throws error when provided environment is not part of the CloudDiscoveryMetadata object\r\n */\n\n\n ClientAuthError.createInvalidCacheEnvironmentError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheEnvironment.code, ClientAuthErrorMessage.invalidCacheEnvironment.desc);\n };\n /**\r\n * Throws error when account is not found in cache.\r\n */\n\n\n ClientAuthError.createNoAccountFoundError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.noAccountFound.code, ClientAuthErrorMessage.noAccountFound.desc);\n };\n /**\r\n * Throws error if ICachePlugin not set on CacheManager.\r\n */\n\n\n ClientAuthError.createCachePluginError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.CachePluginError.code, \"\" + ClientAuthErrorMessage.CachePluginError.desc);\n };\n /**\r\n * Throws error if crypto object not found.\r\n * @param operationName\r\n */\n\n\n ClientAuthError.createNoCryptoObjectError = function (operationName) {\n return new ClientAuthError(ClientAuthErrorMessage.noCryptoObj.code, \"\" + ClientAuthErrorMessage.noCryptoObj.desc + operationName);\n };\n /**\r\n * Throws error if cache type is invalid.\r\n */\n\n\n ClientAuthError.createInvalidCacheTypeError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.invalidCacheType.code, \"\" + ClientAuthErrorMessage.invalidCacheType.desc);\n };\n /**\r\n * Throws error if unexpected account type.\r\n */\n\n\n ClientAuthError.createUnexpectedAccountTypeError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.unexpectedAccountType.code, \"\" + ClientAuthErrorMessage.unexpectedAccountType.desc);\n };\n /**\r\n * Throws error if unexpected credential type.\r\n */\n\n\n ClientAuthError.createUnexpectedCredentialTypeError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.unexpectedCredentialType.code, \"\" + ClientAuthErrorMessage.unexpectedCredentialType.desc);\n };\n /**\r\n * Throws error if client assertion is not valid.\r\n */\n\n\n ClientAuthError.createInvalidAssertionError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.invalidAssertion.code, \"\" + ClientAuthErrorMessage.invalidAssertion.desc);\n };\n /**\r\n * Throws error if client assertion is not valid.\r\n */\n\n\n ClientAuthError.createInvalidCredentialError = function () {\n return new ClientAuthError(ClientAuthErrorMessage.invalidClientCredential.code, \"\" + ClientAuthErrorMessage.invalidClientCredential.desc);\n };\n\n return ClientAuthError;\n}(AuthError);\n/**\r\n * @hidden\r\n */\n\n\nvar StringUtils =\n/** @class */\nfunction () {\n function StringUtils() {}\n /**\r\n * decode a JWT\r\n *\r\n * @param jwtToken\r\n */\n\n\n StringUtils.decodeJwt = function (jwtToken) {\n if (StringUtils.isEmpty(jwtToken)) {\n throw ClientAuthError.createIdTokenNullOrEmptyError(jwtToken);\n }\n\n var idTokenPartsRegex = /^([^\\.\\s]*)\\.([^\\.\\s]+)\\.([^\\.\\s]*)$/;\n var matches = idTokenPartsRegex.exec(jwtToken);\n\n if (!matches || matches.length < 4) {\n throw ClientAuthError.createIdTokenParsingError(\"Given token is malformed: \" + JSON.stringify(jwtToken));\n }\n\n var crackedToken = {\n header: matches[1],\n JWSPayload: matches[2],\n JWSSig: matches[3]\n };\n return crackedToken;\n };\n /**\r\n * Check if a string is empty.\r\n *\r\n * @param str\r\n */\n\n\n StringUtils.isEmpty = function (str) {\n return typeof str === \"undefined\" || !str || 0 === str.length;\n };\n\n StringUtils.startsWith = function (str, search) {\n return str.indexOf(search) === 0;\n };\n\n StringUtils.endsWith = function (str, search) {\n return str.length >= search.length && str.lastIndexOf(search) === str.length - search.length;\n };\n /**\r\n * Parses string into an object.\r\n *\r\n * @param query\r\n */\n\n\n StringUtils.queryStringToObject = function (query) {\n var match; // Regex for replacing addition symbol with a space\n\n var pl = /\\+/g;\n var search = /([^&=]+)=([^&]*)/g;\n\n var decode = function decode(s) {\n return decodeURIComponent(decodeURIComponent(s.replace(pl, \" \")));\n };\n\n var obj = {};\n match = search.exec(query);\n\n while (match) {\n obj[decode(match[1])] = decode(match[2]);\n match = search.exec(query);\n }\n\n return obj;\n };\n /**\r\n * Trims entries in an array.\r\n *\r\n * @param arr\r\n */\n\n\n StringUtils.trimArrayEntries = function (arr) {\n return arr.map(function (entry) {\n return entry.trim();\n });\n };\n /**\r\n * Removes empty strings from array\r\n * @param arr\r\n */\n\n\n StringUtils.removeEmptyStringsFromArray = function (arr) {\n return arr.filter(function (entry) {\n return !StringUtils.isEmpty(entry);\n });\n };\n\n return StringUtils;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Log message level.\r\n */\n\n\nvar LogLevel;\n\n(function (LogLevel) {\n LogLevel[LogLevel[\"Error\"] = 0] = \"Error\";\n LogLevel[LogLevel[\"Warning\"] = 1] = \"Warning\";\n LogLevel[LogLevel[\"Info\"] = 2] = \"Info\";\n LogLevel[LogLevel[\"Verbose\"] = 3] = \"Verbose\";\n})(LogLevel || (LogLevel = {}));\n/**\r\n * Class which facilitates logging of messages to a specific place.\r\n */\n\n\nvar Logger =\n/** @class */\nfunction () {\n function Logger(loggerOptions) {\n // Current log level, defaults to info.\n this.level = LogLevel.Info;\n\n if (loggerOptions) {\n this.localCallback = loggerOptions.loggerCallback;\n this.piiLoggingEnabled = loggerOptions.piiLoggingEnabled;\n this.level = loggerOptions.logLevel;\n }\n }\n /**\r\n * Log message with required options.\r\n */\n\n\n Logger.prototype.logMessage = function (logMessage, options) {\n if (options.logLevel > this.level || !this.piiLoggingEnabled && options.containsPii) {\n return;\n }\n\n var timestamp = new Date().toUTCString();\n var logHeader = StringUtils.isEmpty(this.correlationId) ? \"[\" + timestamp + \"] : \" : \"[\" + timestamp + \"] : [\" + this.correlationId + \"]\";\n var log = logHeader + \" : \" + pkg.version + \" : \" + LogLevel[options.logLevel] + \" - \" + logMessage; // debug(`msal:${LogLevel[options.logLevel]}${options.containsPii ? \"-Pii\": \"\"}${options.context ? `:${options.context}` : \"\"}`)(logMessage);\n\n this.executeCallback(options.logLevel, log, options.containsPii);\n };\n /**\r\n * Execute callback with message.\r\n */\n\n\n Logger.prototype.executeCallback = function (level, message, containsPii) {\n if (this.localCallback) {\n this.localCallback(level, message, containsPii);\n }\n };\n /**\r\n * Logs error messages.\r\n */\n\n\n Logger.prototype.error = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Error,\n containsPii: false,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs error messages with PII.\r\n */\n\n\n Logger.prototype.errorPii = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Error,\n containsPii: true,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs warning messages.\r\n */\n\n\n Logger.prototype.warning = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Warning,\n containsPii: false,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs warning messages with PII.\r\n */\n\n\n Logger.prototype.warningPii = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Warning,\n containsPii: true,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs info messages.\r\n */\n\n\n Logger.prototype.info = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Info,\n containsPii: false,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs info messages with PII.\r\n */\n\n\n Logger.prototype.infoPii = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Info,\n containsPii: true,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs verbose messages.\r\n */\n\n\n Logger.prototype.verbose = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Verbose,\n containsPii: false,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Logs verbose messages with PII.\r\n */\n\n\n Logger.prototype.verbosePii = function (message, correlationId) {\n this.logMessage(message, {\n logLevel: LogLevel.Verbose,\n containsPii: true,\n correlationId: correlationId || \"\"\n });\n };\n /**\r\n * Returns whether PII Logging is enabled or not.\r\n */\n\n\n Logger.prototype.isPiiLoggingEnabled = function () {\n return this.piiLoggingEnabled || false;\n };\n\n return Logger;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n\nvar Constants = {\n LIBRARY_NAME: \"MSAL.JS\",\n SKU: \"msal.js.common\",\n // Prefix for all library cache entries\n CACHE_PREFIX: \"msal\",\n // default authority\n DEFAULT_AUTHORITY: \"https://login.microsoftonline.com/common/\",\n DEFAULT_AUTHORITY_HOST: \"login.microsoftonline.com\",\n // ADFS String\n ADFS: \"adfs\",\n // Default AAD Instance Discovery Endpoint\n AAD_INSTANCE_DISCOVERY_ENDPT: \"https://login.microsoftonline.com/common/discovery/instance?api-version=1.1&authorization_endpoint=\",\n // Resource delimiter - used for certain cache entries\n RESOURCE_DELIM: \"|\",\n // Placeholder for non-existent account ids/objects\n NO_ACCOUNT: \"NO_ACCOUNT\",\n // Claims\n CLAIMS: \"claims\",\n // Consumer UTID\n CONSUMER_UTID: \"9188040d-6c67-4c5b-b112-36a304b66dad\",\n // Default scopes\n OPENID_SCOPE: \"openid\",\n PROFILE_SCOPE: \"profile\",\n OFFLINE_ACCESS_SCOPE: \"offline_access\",\n // Default response type for authorization code flow\n CODE_RESPONSE_TYPE: \"code\",\n CODE_GRANT_TYPE: \"authorization_code\",\n RT_GRANT_TYPE: \"refresh_token\",\n FRAGMENT_RESPONSE_MODE: \"fragment\",\n S256_CODE_CHALLENGE_METHOD: \"S256\",\n URL_FORM_CONTENT_TYPE: \"application/x-www-form-urlencoded;charset=utf-8\",\n AUTHORIZATION_PENDING: \"authorization_pending\",\n NOT_DEFINED: \"not_defined\"\n};\n/**\r\n * Request header names\r\n */\n\nvar HeaderNames;\n\n(function (HeaderNames) {\n HeaderNames[\"CONTENT_TYPE\"] = \"Content-Type\";\n HeaderNames[\"X_CLIENT_CURR_TELEM\"] = \"x-client-current-telemetry\";\n HeaderNames[\"X_CLIENT_LAST_TELEM\"] = \"x-client-last-telemetry\";\n})(HeaderNames || (HeaderNames = {}));\n/**\r\n * Persistent cache keys MSAL which stay while user is logged in.\r\n */\n\n\nvar PersistentCacheKeys;\n\n(function (PersistentCacheKeys) {\n PersistentCacheKeys[\"ID_TOKEN\"] = \"idtoken\";\n PersistentCacheKeys[\"CLIENT_INFO\"] = \"client.info\";\n PersistentCacheKeys[\"ADAL_ID_TOKEN\"] = \"adal.idtoken\";\n PersistentCacheKeys[\"ERROR\"] = \"error\";\n PersistentCacheKeys[\"ERROR_DESC\"] = \"error.description\";\n})(PersistentCacheKeys || (PersistentCacheKeys = {}));\n/**\r\n * String constants related to AAD Authority\r\n */\n\n\nvar AADAuthorityConstants;\n\n(function (AADAuthorityConstants) {\n AADAuthorityConstants[\"COMMON\"] = \"common\";\n AADAuthorityConstants[\"ORGANIZATIONS\"] = \"organizations\";\n AADAuthorityConstants[\"CONSUMERS\"] = \"consumers\";\n})(AADAuthorityConstants || (AADAuthorityConstants = {}));\n/**\r\n * Keys in the hashParams sent by AAD Server\r\n */\n\n\nvar AADServerParamKeys;\n\n(function (AADServerParamKeys) {\n AADServerParamKeys[\"CLIENT_ID\"] = \"client_id\";\n AADServerParamKeys[\"REDIRECT_URI\"] = \"redirect_uri\";\n AADServerParamKeys[\"RESPONSE_TYPE\"] = \"response_type\";\n AADServerParamKeys[\"RESPONSE_MODE\"] = \"response_mode\";\n AADServerParamKeys[\"GRANT_TYPE\"] = \"grant_type\";\n AADServerParamKeys[\"CLAIMS\"] = \"claims\";\n AADServerParamKeys[\"SCOPE\"] = \"scope\";\n AADServerParamKeys[\"ERROR\"] = \"error\";\n AADServerParamKeys[\"ERROR_DESCRIPTION\"] = \"error_description\";\n AADServerParamKeys[\"ACCESS_TOKEN\"] = \"access_token\";\n AADServerParamKeys[\"ID_TOKEN\"] = \"id_token\";\n AADServerParamKeys[\"REFRESH_TOKEN\"] = \"refresh_token\";\n AADServerParamKeys[\"EXPIRES_IN\"] = \"expires_in\";\n AADServerParamKeys[\"STATE\"] = \"state\";\n AADServerParamKeys[\"NONCE\"] = \"nonce\";\n AADServerParamKeys[\"PROMPT\"] = \"prompt\";\n AADServerParamKeys[\"SESSION_STATE\"] = \"session_state\";\n AADServerParamKeys[\"CLIENT_INFO\"] = \"client_info\";\n AADServerParamKeys[\"CODE\"] = \"code\";\n AADServerParamKeys[\"CODE_CHALLENGE\"] = \"code_challenge\";\n AADServerParamKeys[\"CODE_CHALLENGE_METHOD\"] = \"code_challenge_method\";\n AADServerParamKeys[\"CODE_VERIFIER\"] = \"code_verifier\";\n AADServerParamKeys[\"CLIENT_REQUEST_ID\"] = \"client-request-id\";\n AADServerParamKeys[\"X_CLIENT_SKU\"] = \"x-client-SKU\";\n AADServerParamKeys[\"X_CLIENT_VER\"] = \"x-client-VER\";\n AADServerParamKeys[\"X_CLIENT_OS\"] = \"x-client-OS\";\n AADServerParamKeys[\"X_CLIENT_CPU\"] = \"x-client-CPU\";\n AADServerParamKeys[\"POST_LOGOUT_URI\"] = \"post_logout_redirect_uri\";\n AADServerParamKeys[\"DEVICE_CODE\"] = \"device_code\";\n AADServerParamKeys[\"CLIENT_SECRET\"] = \"client_secret\";\n AADServerParamKeys[\"CLIENT_ASSERTION\"] = \"client_assertion\";\n AADServerParamKeys[\"CLIENT_ASSERTION_TYPE\"] = \"client_assertion_type\";\n})(AADServerParamKeys || (AADServerParamKeys = {}));\n/**\r\n * IdToken claim string constants\r\n */\n\n\nvar IdTokenClaimName;\n\n(function (IdTokenClaimName) {\n IdTokenClaimName[\"ISSUER\"] = \"iss\";\n IdTokenClaimName[\"OBJID\"] = \"oid\";\n IdTokenClaimName[\"SUBJECT\"] = \"sub\";\n IdTokenClaimName[\"TENANTID\"] = \"tid\";\n IdTokenClaimName[\"VERSION\"] = \"ver\";\n IdTokenClaimName[\"PREF_USERNAME\"] = \"preferred_username\";\n IdTokenClaimName[\"NAME\"] = \"name\";\n IdTokenClaimName[\"NONCE\"] = \"nonce\";\n IdTokenClaimName[\"EXPIRATION\"] = \"exp\";\n IdTokenClaimName[\"HOME_OBJID\"] = \"home_oid\";\n IdTokenClaimName[\"SESSIONID\"] = \"sid\";\n IdTokenClaimName[\"CLOUD_INSTANCE_HOSTNAME\"] = \"cloud_instance_host_name\";\n})(IdTokenClaimName || (IdTokenClaimName = {}));\n\nvar ClaimsRequestKeys;\n\n(function (ClaimsRequestKeys) {\n ClaimsRequestKeys[\"ACCESS_TOKEN\"] = \"access_token\";\n ClaimsRequestKeys[\"XMS_CC\"] = \"xms_cc\";\n})(ClaimsRequestKeys || (ClaimsRequestKeys = {}));\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 */\n\n\nvar PromptValue = {\n LOGIN: \"login\",\n SELECT_ACCOUNT: \"select_account\",\n CONSENT: \"consent\",\n NONE: \"none\"\n};\n/**\r\n * SSO Types - generated to populate hints\r\n */\n\nvar SSOTypes;\n\n(function (SSOTypes) {\n SSOTypes[\"ACCOUNT\"] = \"account\";\n SSOTypes[\"SID\"] = \"sid\";\n SSOTypes[\"LOGIN_HINT\"] = \"login_hint\";\n SSOTypes[\"ID_TOKEN\"] = \"id_token\";\n SSOTypes[\"DOMAIN_HINT\"] = \"domain_hint\";\n SSOTypes[\"ORGANIZATIONS\"] = \"organizations\";\n SSOTypes[\"CONSUMERS\"] = \"consumers\";\n SSOTypes[\"ACCOUNT_ID\"] = \"accountIdentifier\";\n SSOTypes[\"HOMEACCOUNT_ID\"] = \"homeAccountIdentifier\";\n})(SSOTypes || (SSOTypes = {}));\n/**\r\n * Disallowed extra query parameters.\r\n */\n\n\nvar BlacklistedEQParams = [SSOTypes.SID, SSOTypes.LOGIN_HINT];\n/**\r\n * allowed values for codeVerifier\r\n */\n\nvar CodeChallengeMethodValues = {\n PLAIN: \"plain\",\n S256: \"S256\"\n};\n/**\r\n * allowed values for response_mode\r\n */\n\nvar ResponseMode;\n\n(function (ResponseMode) {\n ResponseMode[\"QUERY\"] = \"query\";\n ResponseMode[\"FRAGMENT\"] = \"fragment\";\n ResponseMode[\"FORM_POST\"] = \"form_post\";\n})(ResponseMode || (ResponseMode = {}));\n/**\r\n * allowed grant_type\r\n */\n\n\nvar GrantType;\n\n(function (GrantType) {\n GrantType[\"IMPLICIT_GRANT\"] = \"implicit\";\n GrantType[\"AUTHORIZATION_CODE_GRANT\"] = \"authorization_code\";\n GrantType[\"CLIENT_CREDENTIALS_GRANT\"] = \"client_credentials\";\n GrantType[\"RESOURCE_OWNER_PASSWORD_GRANT\"] = \"password\";\n GrantType[\"REFRESH_TOKEN_GRANT\"] = \"refresh_token\";\n GrantType[\"DEVICE_CODE_GRANT\"] = \"device_code\";\n})(GrantType || (GrantType = {}));\n/**\r\n * Account types in Cache\r\n */\n\n\nvar CacheAccountType;\n\n(function (CacheAccountType) {\n CacheAccountType[\"MSSTS_ACCOUNT_TYPE\"] = \"MSSTS\";\n CacheAccountType[\"ADFS_ACCOUNT_TYPE\"] = \"ADFS\";\n CacheAccountType[\"MSAV1_ACCOUNT_TYPE\"] = \"MSA\";\n CacheAccountType[\"GENERIC_ACCOUNT_TYPE\"] = \"Generic\"; // NTLM, Kerberos, FBA, Basic etc\n})(CacheAccountType || (CacheAccountType = {}));\n/**\r\n * Separators used in cache\r\n */\n\n\nvar Separators;\n\n(function (Separators) {\n Separators[\"CACHE_KEY_SEPARATOR\"] = \"-\";\n Separators[\"CLIENT_INFO_SEPARATOR\"] = \".\";\n})(Separators || (Separators = {}));\n/**\r\n * Credentail Type stored in the cache\r\n */\n\n\nvar CredentialType;\n\n(function (CredentialType) {\n CredentialType[\"ID_TOKEN\"] = \"IdToken\";\n CredentialType[\"ACCESS_TOKEN\"] = \"AccessToken\";\n CredentialType[\"REFRESH_TOKEN\"] = \"RefreshToken\";\n})(CredentialType || (CredentialType = {}));\n/**\r\n * Credentail Type stored in the cache\r\n */\n\n\nvar CacheSchemaType;\n\n(function (CacheSchemaType) {\n CacheSchemaType[\"ACCOUNT\"] = \"Account\";\n CacheSchemaType[\"CREDENTIAL\"] = \"Credential\";\n CacheSchemaType[\"APP_METADATA\"] = \"AppMetadata\";\n CacheSchemaType[\"TEMPORARY\"] = \"TempCache\";\n CacheSchemaType[\"TELEMETRY\"] = \"Telemetry\";\n})(CacheSchemaType || (CacheSchemaType = {}));\n/**\r\n * Combine all cache types\r\n */\n\n\nvar CacheType;\n\n(function (CacheType) {\n CacheType[CacheType[\"ADFS\"] = 1001] = \"ADFS\";\n CacheType[CacheType[\"MSA\"] = 1002] = \"MSA\";\n CacheType[CacheType[\"MSSTS\"] = 1003] = \"MSSTS\";\n CacheType[CacheType[\"GENERIC\"] = 1004] = \"GENERIC\";\n CacheType[CacheType[\"ACCESS_TOKEN\"] = 2001] = \"ACCESS_TOKEN\";\n CacheType[CacheType[\"REFRESH_TOKEN\"] = 2002] = \"REFRESH_TOKEN\";\n CacheType[CacheType[\"ID_TOKEN\"] = 2003] = \"ID_TOKEN\";\n CacheType[CacheType[\"APP_METADATA\"] = 3001] = \"APP_METADATA\";\n})(CacheType || (CacheType = {}));\n/**\r\n * More Cache related constants\r\n */\n\n\nvar APP_METADATA = \"appmetadata\";\nvar ClientInfo = \"client_info\";\nvar SERVER_TELEM_CONSTANTS = {\n SCHEMA_VERSION: 2,\n FAILURE_LIMIT: 3,\n CACHE_KEY: \"server-telemetry\",\n CATEGORY_SEPARATOR: \"|\",\n VALUE_SEPARATOR: \",\"\n};\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 * }\r\n */\n\nvar CredentialEntity =\n/** @class */\nfunction () {\n function CredentialEntity() {}\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\n\n\n CredentialEntity.prototype.generateAccountId = function () {\n return CredentialEntity.generateAccountIdForCacheKey(this.homeAccountId, this.environment);\n };\n /**\r\n * Generate Credential Id key component as per the schema: --\r\n */\n\n\n CredentialEntity.prototype.generateCredentialId = function () {\n return CredentialEntity.generateCredentialIdForCacheKey(this.credentialType, this.clientId, this.realm, this.familyId);\n };\n /**\r\n * Generate target key component as per schema: \r\n */\n\n\n CredentialEntity.prototype.generateTarget = function () {\n return CredentialEntity.generateTargetForCacheKey(this.target);\n };\n /**\r\n * generates credential key\r\n */\n\n\n CredentialEntity.prototype.generateCredentialKey = function () {\n return CredentialEntity.generateCredentialCacheKey(this.homeAccountId, this.environment, this.credentialType, this.clientId, this.realm, this.target, this.familyId);\n };\n /**\r\n * returns the type of the cache (in this case credential)\r\n */\n\n\n CredentialEntity.prototype.generateType = function () {\n switch (this.credentialType) {\n case CredentialType.ID_TOKEN:\n return CacheType.ID_TOKEN;\n\n case CredentialType.ACCESS_TOKEN:\n return CacheType.ACCESS_TOKEN;\n\n case CredentialType.REFRESH_TOKEN:\n return CacheType.REFRESH_TOKEN;\n\n default:\n {\n throw ClientAuthError.createUnexpectedCredentialTypeError();\n }\n }\n };\n /**\r\n * helper function to return `CredentialType`\r\n * @param key\r\n */\n\n\n CredentialEntity.getCredentialType = function (key) {\n if (key.indexOf(CredentialType.ACCESS_TOKEN.toLowerCase()) !== -1) {\n return CredentialType.ACCESS_TOKEN;\n } else if (key.indexOf(CredentialType.ID_TOKEN.toLowerCase()) !== -1) {\n return CredentialType.ID_TOKEN;\n } else if (key.indexOf(CredentialType.REFRESH_TOKEN.toLowerCase()) !== -1) {\n return CredentialType.REFRESH_TOKEN;\n }\n\n return Constants.NOT_DEFINED;\n };\n /**\r\n * generates credential key\r\n */\n\n\n CredentialEntity.generateCredentialCacheKey = function (homeAccountId, environment, credentialType, clientId, realm, target, familyId) {\n var credentialKey = [this.generateAccountIdForCacheKey(homeAccountId, environment), this.generateCredentialIdForCacheKey(credentialType, clientId, realm, familyId), this.generateTargetForCacheKey(target)];\n return credentialKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\n };\n /**\r\n * generates Account Id for keys\r\n * @param homeAccountId\r\n * @param environment\r\n */\n\n\n CredentialEntity.generateAccountIdForCacheKey = function (homeAccountId, environment) {\n var accountId = [homeAccountId, environment];\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\n };\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 */\n\n\n CredentialEntity.generateCredentialIdForCacheKey = function (credentialType, clientId, realm, familyId) {\n var clientOrFamilyId = credentialType === CredentialType.REFRESH_TOKEN ? familyId || clientId : clientId;\n var credentialId = [credentialType, clientOrFamilyId, realm || \"\"];\n return credentialId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\n };\n /**\r\n * Generate target key component as per schema: \r\n */\n\n\n CredentialEntity.generateTargetForCacheKey = function (scopes) {\n return (scopes || \"\").toLowerCase();\n };\n\n return CredentialEntity;\n}();\n/**\r\n * ClientConfigurationErrorMessage class containing string constants used by error codes and messages.\r\n */\n\n\nvar ClientConfigurationErrorMessage = {\n redirectUriNotSet: {\n code: \"redirect_uri_empty\",\n desc: \"A redirect URI is required for all calls, and none has been set.\"\n },\n postLogoutUriNotSet: {\n code: \"post_logout_uri_empty\",\n desc: \"A post logout redirect has not been set.\"\n },\n claimsRequestParsingError: {\n code: \"claims_request_parsing_error\",\n desc: \"Could not parse the given claims request object.\"\n },\n authorityUriInsecure: {\n code: \"authority_uri_insecure\",\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\"\n },\n urlParseError: {\n code: \"url_parse_error\",\n desc: \"URL could not be parsed into appropriate segments.\"\n },\n urlEmptyError: {\n code: \"empty_url_error\",\n desc: \"URL was empty or null.\"\n },\n emptyScopesError: {\n code: \"empty_input_scopes_error\",\n desc: \"Scopes cannot be passed as null, undefined or empty array because they are required to obtain an access token.\"\n },\n nonArrayScopesError: {\n code: \"nonarray_input_scopes_error\",\n desc: \"Scopes cannot be passed as non-array.\"\n },\n clientIdSingleScopeError: {\n code: \"clientid_input_scopes_error\",\n desc: \"Client ID can only be provided as a single scope.\"\n },\n invalidPrompt: {\n code: \"invalid_prompt_value\",\n desc: \"Supported prompt values are 'login', 'select_account', 'consent' and 'none'. Please see here for valid configuration options: https://docs.microsoft.com/en-us/azure/active-directory/develop/msal-js-initializing-client-applications#configuration-options\"\n },\n invalidClaimsRequest: {\n code: \"invalid_claims\",\n desc: \"Given claims parameter must be a stringified JSON object.\"\n },\n tokenRequestEmptyError: {\n code: \"token_request_empty\",\n desc: \"Token request was empty and not found in cache.\"\n },\n logoutRequestEmptyError: {\n code: \"logout_request_empty\",\n desc: \"The logout request was null or undefined.\"\n },\n invalidCodeChallengeMethod: {\n code: \"invalid_code_challenge_method\",\n desc: \"code_challenge_method passed is invalid. Valid values are \\\"plain\\\" and \\\"S256\\\".\"\n },\n invalidCodeChallengeParams: {\n code: \"pkce_params_missing\",\n desc: \"Both params: code_challenge and code_challenge_method are to be passed if to be sent in the request\"\n },\n knownAuthoritiesAndCloudDiscoveryMetadata: {\n code: \"invalid_known_authorities\",\n desc: \"knownAuthorities and cloudDiscoveryMetadata cannot both be provided. Please provide cloudDiscoveryMetadata object for AAD, knownAuthorities otherwise.\"\n },\n invalidCloudDiscoveryMetadata: {\n code: \"invalid_cloud_discovery_metadata\",\n desc: \"Invalid cloudDiscoveryMetadata provided. Must be a JSON object containing tenant_discovery_endpoint and metadata fields\"\n },\n untrustedAuthority: {\n code: \"untrusted_authority\",\n desc: \"The provided authority is not a trusted authority. Please include this authority in the knownAuthorities config parameter.\"\n }\n};\n/**\r\n * Error thrown when there is an error in configuration of the MSAL.js library.\r\n */\n\nvar ClientConfigurationError =\n/** @class */\nfunction (_super) {\n __extends$1(ClientConfigurationError, _super);\n\n function ClientConfigurationError(errorCode, errorMessage) {\n var _this = _super.call(this, errorCode, errorMessage) || this;\n\n _this.name = \"ClientConfigurationError\";\n Object.setPrototypeOf(_this, ClientConfigurationError.prototype);\n return _this;\n }\n /**\r\n * Creates an error thrown when the redirect uri is empty (not set by caller)\r\n */\n\n\n ClientConfigurationError.createRedirectUriEmptyError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.redirectUriNotSet.code, ClientConfigurationErrorMessage.redirectUriNotSet.desc);\n };\n /**\r\n * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)\r\n */\n\n\n ClientConfigurationError.createPostLogoutRedirectUriEmptyError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.postLogoutUriNotSet.code, ClientConfigurationErrorMessage.postLogoutUriNotSet.desc);\n };\n /**\r\n * Creates an error thrown when the claims request could not be successfully parsed\r\n */\n\n\n ClientConfigurationError.createClaimsRequestParsingError = function (claimsRequestParseError) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.claimsRequestParsingError.code, ClientConfigurationErrorMessage.claimsRequestParsingError.desc + \" Given value: \" + claimsRequestParseError);\n };\n /**\r\n * Creates an error thrown if authority uri is given an insecure protocol.\r\n * @param urlString\r\n */\n\n\n ClientConfigurationError.createInsecureAuthorityUriError = function (urlString) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.authorityUriInsecure.code, ClientConfigurationErrorMessage.authorityUriInsecure.desc + \" Given URI: \" + urlString);\n };\n /**\r\n * Creates an error thrown if URL string does not parse into separate segments.\r\n * @param urlString\r\n */\n\n\n ClientConfigurationError.createUrlParseError = function (urlParseError) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.urlParseError.code, ClientConfigurationErrorMessage.urlParseError.desc + \" Given Error: \" + urlParseError);\n };\n /**\r\n * Creates an error thrown if URL string is empty or null.\r\n * @param urlString\r\n */\n\n\n ClientConfigurationError.createUrlEmptyError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.urlEmptyError.code, ClientConfigurationErrorMessage.urlEmptyError.desc);\n };\n /**\r\n * Error thrown when scopes are not an array\r\n * @param inputScopes\r\n */\n\n\n ClientConfigurationError.createScopesNonArrayError = function (inputScopes) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.nonArrayScopesError.code, ClientConfigurationErrorMessage.nonArrayScopesError.desc + \" Given Scopes: \" + inputScopes);\n };\n /**\r\n * Error thrown when scopes are empty.\r\n * @param scopesValue\r\n */\n\n\n ClientConfigurationError.createEmptyScopesArrayError = function (inputScopes) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.emptyScopesError.code, ClientConfigurationErrorMessage.emptyScopesError.desc + \" Given Scopes: \" + inputScopes);\n };\n /**\r\n * Error thrown when client id scope is not provided as single scope.\r\n * @param inputScopes\r\n */\n\n\n ClientConfigurationError.createClientIdSingleScopeError = function (inputScopes) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.clientIdSingleScopeError.code, ClientConfigurationErrorMessage.clientIdSingleScopeError.desc + \" Given Scopes: \" + inputScopes);\n };\n /**\r\n * Error thrown when prompt is not an allowed type.\r\n * @param promptValue\r\n */\n\n\n ClientConfigurationError.createInvalidPromptError = function (promptValue) {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidPrompt.code, ClientConfigurationErrorMessage.invalidPrompt.desc + \" Given value: \" + promptValue);\n };\n /**\r\n * Creates error thrown when claims parameter is not a stringified JSON object\r\n */\n\n\n ClientConfigurationError.createInvalidClaimsRequestError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidClaimsRequest.code, ClientConfigurationErrorMessage.invalidClaimsRequest.desc);\n };\n /**\r\n * Throws error when token request is empty and nothing cached in storage.\r\n */\n\n\n ClientConfigurationError.createEmptyLogoutRequestError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.logoutRequestEmptyError.code, ClientConfigurationErrorMessage.logoutRequestEmptyError.desc);\n };\n /**\r\n * Throws error when token request is empty and nothing cached in storage.\r\n */\n\n\n ClientConfigurationError.createEmptyTokenRequestError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.tokenRequestEmptyError.code, ClientConfigurationErrorMessage.tokenRequestEmptyError.desc);\n };\n /**\r\n * Throws error when an invalid code_challenge_method is passed by the user\r\n */\n\n\n ClientConfigurationError.createInvalidCodeChallengeMethodError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCodeChallengeMethod.code, ClientConfigurationErrorMessage.invalidCodeChallengeMethod.desc);\n };\n /**\r\n * Throws error when both params: code_challenge and code_challenge_method are not passed together\r\n */\n\n\n ClientConfigurationError.createInvalidCodeChallengeParamsError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCodeChallengeParams.code, ClientConfigurationErrorMessage.invalidCodeChallengeParams.desc);\n };\n /**\r\n * Throws an error when the user passes both knownAuthorities and cloudDiscoveryMetadata\r\n */\n\n\n ClientConfigurationError.createKnownAuthoritiesCloudDiscoveryMetadataError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.knownAuthoritiesAndCloudDiscoveryMetadata.code, ClientConfigurationErrorMessage.knownAuthoritiesAndCloudDiscoveryMetadata.desc);\n };\n /**\r\n * Throws an error when the user passes invalid cloudDiscoveryMetadata\r\n */\n\n\n ClientConfigurationError.createInvalidCloudDiscoveryMetadataError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.invalidCloudDiscoveryMetadata.code, ClientConfigurationErrorMessage.invalidCloudDiscoveryMetadata.desc);\n };\n /**\r\n * Throws error when provided authority is not a member of the trusted host list\r\n */\n\n\n ClientConfigurationError.createUntrustedAuthorityError = function () {\n return new ClientConfigurationError(ClientConfigurationErrorMessage.untrustedAuthority.code, ClientConfigurationErrorMessage.untrustedAuthority.desc);\n };\n\n return ClientConfigurationError;\n}(ClientAuthError);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar ScopeSet =\n/** @class */\nfunction () {\n function ScopeSet(inputScopes) {\n var _this = this; // Filter empty string and null/undefined array items\n\n\n var scopeArr = inputScopes ? StringUtils.trimArrayEntries(__spreadArrays$1(inputScopes)) : [];\n var filteredInput = scopeArr ? StringUtils.removeEmptyStringsFromArray(scopeArr) : []; // Validate and filter scopes (validate function throws if validation fails)\n\n this.validateInputScopes(filteredInput);\n this.scopes = new Set(); // Iterator in constructor not supported by IE11\n\n filteredInput.forEach(function (scope) {\n return _this.scopes.add(scope);\n });\n }\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 */\n\n\n ScopeSet.fromString = function (inputScopeString) {\n inputScopeString = inputScopeString || \"\";\n var inputScopes = inputScopeString.split(\" \");\n return new ScopeSet(inputScopes);\n };\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 */\n\n\n ScopeSet.prototype.validateInputScopes = function (inputScopes) {\n // Check if scopes are required but not given or is an empty array\n if (!inputScopes || inputScopes.length < 1) {\n throw ClientConfigurationError.createEmptyScopesArrayError(inputScopes);\n }\n };\n /**\r\n * Check if a given scope is present in this set of scopes.\r\n * @param scope\r\n */\n\n\n ScopeSet.prototype.containsScope = function (scope) {\n return !StringUtils.isEmpty(scope) ? this.scopes.has(scope) : false;\n };\n /**\r\n * Check if a set of scopes is present in this set of scopes.\r\n * @param scopeSet\r\n */\n\n\n ScopeSet.prototype.containsScopeSet = function (scopeSet) {\n var _this = this;\n\n if (!scopeSet || scopeSet.scopes.size <= 0) {\n return false;\n }\n\n return this.scopes.size >= scopeSet.scopes.size && scopeSet.asArray().every(function (scope) {\n return _this.containsScope(scope);\n });\n };\n /**\r\n * Appends single scope if passed\r\n * @param newScope\r\n */\n\n\n ScopeSet.prototype.appendScope = function (newScope) {\n if (!StringUtils.isEmpty(newScope)) {\n this.scopes.add(newScope.trim());\n }\n };\n /**\r\n * Appends multiple scopes if passed\r\n * @param newScopes\r\n */\n\n\n ScopeSet.prototype.appendScopes = function (newScopes) {\n var _this = this;\n\n try {\n newScopes.forEach(function (newScope) {\n return _this.appendScope(newScope);\n });\n } catch (e) {\n throw ClientAuthError.createAppendScopeSetError(e);\n }\n };\n /**\r\n * Removes element from set of scopes.\r\n * @param scope\r\n */\n\n\n ScopeSet.prototype.removeScope = function (scope) {\n if (StringUtils.isEmpty(scope)) {\n throw ClientAuthError.createRemoveEmptyScopeFromSetError(scope);\n }\n\n this.scopes.delete(scope.trim());\n };\n /**\r\n * Combines an array of scopes with the current set of scopes.\r\n * @param otherScopes\r\n */\n\n\n ScopeSet.prototype.unionScopeSets = function (otherScopes) {\n if (!otherScopes) {\n throw ClientAuthError.createEmptyInputScopeSetError(otherScopes);\n }\n\n var unionScopes = new Set(); // Iterator in constructor not supported in IE11\n\n otherScopes.scopes.forEach(function (scope) {\n return unionScopes.add(scope);\n });\n this.scopes.forEach(function (scope) {\n return unionScopes.add(scope);\n });\n return unionScopes;\n };\n /**\r\n * Check if scopes intersect between this set and another.\r\n * @param otherScopes\r\n */\n\n\n ScopeSet.prototype.intersectingScopeSets = function (otherScopes) {\n if (!otherScopes) {\n throw ClientAuthError.createEmptyInputScopeSetError(otherScopes);\n }\n\n var unionScopes = this.unionScopeSets(otherScopes); // Do not allow offline_access to be the only intersecting scope\n\n var sizeOtherScopes = otherScopes.getScopeCount();\n var sizeThisScopes = this.getScopeCount();\n var sizeUnionScopes = unionScopes.size;\n return sizeUnionScopes < sizeThisScopes + sizeOtherScopes;\n };\n /**\r\n * Returns size of set of scopes.\r\n */\n\n\n ScopeSet.prototype.getScopeCount = function () {\n return this.scopes.size;\n };\n /**\r\n * Returns the scopes as an array of string values\r\n */\n\n\n ScopeSet.prototype.asArray = function () {\n var array = [];\n this.scopes.forEach(function (val) {\n return array.push(val);\n });\n return array;\n };\n /**\r\n * Prints scopes into a space-delimited string\r\n */\n\n\n ScopeSet.prototype.printScopes = function () {\n if (this.scopes) {\n var scopeArr = this.asArray();\n return scopeArr.join(\" \");\n }\n\n return \"\";\n };\n /**\r\n * Prints scopes into a space-delimited lower-case string (used for caching)\r\n */\n\n\n ScopeSet.prototype.printScopesLowerCase = function () {\n return this.printScopes().toLowerCase();\n };\n\n return ScopeSet;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Function to build a client info object\r\n * @param rawClientInfo\r\n * @param crypto\r\n */\n\n\nfunction buildClientInfo(rawClientInfo, crypto) {\n if (StringUtils.isEmpty(rawClientInfo)) {\n throw ClientAuthError.createClientInfoEmptyError(rawClientInfo);\n }\n\n try {\n var decodedClientInfo = crypto.base64Decode(rawClientInfo);\n return JSON.parse(decodedClientInfo);\n } catch (e) {\n throw ClientAuthError.createClientInfoDecodingError(e);\n }\n}\n/**\r\n * Url object class which can perform various transformations on url strings.\r\n */\n\n\nvar UrlString =\n/** @class */\nfunction () {\n function UrlString(url) {\n this._urlString = url;\n\n if (StringUtils.isEmpty(this._urlString)) {\n // Throws error if url is empty\n throw ClientConfigurationError.createUrlEmptyError();\n }\n\n if (StringUtils.isEmpty(this.getHash())) {\n this._urlString = UrlString.canonicalizeUri(url);\n }\n }\n\n Object.defineProperty(UrlString.prototype, \"urlString\", {\n get: function get() {\n return this._urlString;\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Ensure urls are lower case and end with a / character.\r\n * @param url\r\n */\n\n UrlString.canonicalizeUri = function (url) {\n if (url) {\n url = url.toLowerCase();\n }\n\n if (url && !StringUtils.endsWith(url, \"/\")) {\n url += \"/\";\n }\n\n return url;\n };\n /**\r\n * Throws if urlString passed is not a valid authority URI string.\r\n */\n\n\n UrlString.prototype.validateAsUri = function () {\n // Attempts to parse url for uri components\n var components;\n\n try {\n components = this.getUrlComponents();\n } catch (e) {\n throw ClientConfigurationError.createUrlParseError(e);\n } // Throw error if URI or path segments are not parseable.\n\n\n if (!components.HostNameAndPort || !components.PathSegments || components.PathSegments.length < 1) {\n throw ClientConfigurationError.createUrlParseError(\"Given url string: \" + this.urlString);\n } // Throw error if uri is insecure.\n\n\n if (!components.Protocol || components.Protocol.toLowerCase() !== \"https:\") {\n throw ClientConfigurationError.createInsecureAuthorityUriError(this.urlString);\n }\n };\n /**\r\n * Function to remove query string params from url. Returns the new url.\r\n * @param url\r\n * @param name\r\n */\n\n\n UrlString.prototype.urlRemoveQueryStringParameter = function (name) {\n var regex = new RegExp(\"(\\\\&\" + name + \"=)[^\\&]+\");\n this._urlString = this.urlString.replace(regex, \"\"); // name=value&\n\n regex = new RegExp(\"(\" + name + \"=)[^\\&]+&\");\n this._urlString = this.urlString.replace(regex, \"\"); // name=value\n\n regex = new RegExp(\"(\" + name + \"=)[^\\&]+\");\n this._urlString = this.urlString.replace(regex, \"\");\n return this.urlString;\n };\n\n UrlString.removeHashFromUrl = function (url) {\n return UrlString.canonicalizeUri(url.split(\"#\")[0]);\n };\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 */\n\n\n UrlString.prototype.replaceTenantPath = function (tenantId) {\n var urlObject = this.getUrlComponents();\n var pathArray = urlObject.PathSegments;\n\n if (tenantId && pathArray.length !== 0 && (pathArray[0] === AADAuthorityConstants.COMMON || pathArray[0] === AADAuthorityConstants.ORGANIZATIONS)) {\n pathArray[0] = tenantId;\n }\n\n return UrlString.constructAuthorityUriFromObject(urlObject);\n };\n /**\r\n * Returns the anchor part(#) of the URL\r\n */\n\n\n UrlString.prototype.getHash = function () {\n return UrlString.parseHash(this.urlString);\n };\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 */\n\n\n UrlString.prototype.getUrlComponents = function () {\n // https://gist.github.com/curtisz/11139b2cfcaef4a261e0\n var regEx = RegExp(\"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\\\?([^#]*))?(#(.*))?\"); // If url string does not match regEx, we throw an error\n\n var match = this.urlString.match(regEx);\n\n if (!match) {\n throw ClientConfigurationError.createUrlParseError(\"Given url string: \" + this.urlString);\n } // Url component object\n\n\n var urlComponents = {\n Protocol: match[1],\n HostNameAndPort: match[4],\n AbsolutePath: match[5]\n };\n var pathSegments = urlComponents.AbsolutePath.split(\"/\");\n pathSegments = pathSegments.filter(function (val) {\n return val && val.length > 0;\n }); // remove empty elements\n\n urlComponents.PathSegments = pathSegments;\n return urlComponents;\n };\n\n UrlString.getDomainFromUrl = function (url) {\n var regEx = RegExp(\"^([^:/?#]+://)?([^/?#]*)\");\n var match = url.match(regEx);\n\n if (!match) {\n throw ClientConfigurationError.createUrlParseError(\"Given url string: \" + url);\n }\n\n return match[2];\n };\n /**\r\n * Parses hash string from given string. Returns empty string if no hash symbol is found.\r\n * @param hashString\r\n */\n\n\n UrlString.parseHash = function (hashString) {\n var hashIndex1 = hashString.indexOf(\"#\");\n var hashIndex2 = hashString.indexOf(\"#/\");\n\n if (hashIndex2 > -1) {\n return hashString.substring(hashIndex2 + 2);\n } else if (hashIndex1 > -1) {\n return hashString.substring(hashIndex1 + 1);\n }\n\n return \"\";\n };\n\n UrlString.constructAuthorityUriFromObject = function (urlObject) {\n return new UrlString(urlObject.Protocol + \"//\" + urlObject.HostNameAndPort + \"/\" + urlObject.PathSegments.join(\"/\"));\n };\n /**\r\n * Returns URL hash as server auth code response object.\r\n */\n\n\n UrlString.getDeserializedHash = function (hash) {\n // Check if given hash is empty\n if (StringUtils.isEmpty(hash)) {\n return {};\n } // Strip the # symbol if present\n\n\n var parsedHash = UrlString.parseHash(hash); // If # symbol was not present, above will return empty string, so give original hash value\n\n var deserializedHash = StringUtils.queryStringToObject(StringUtils.isEmpty(parsedHash) ? hash : parsedHash); // Check if deserialization didn't work\n\n if (!deserializedHash) {\n throw ClientAuthError.createHashNotDeserializedError(JSON.stringify(deserializedHash));\n }\n\n return deserializedHash;\n };\n /**\r\n * Check if the hash of the URL string contains known properties\r\n */\n\n\n UrlString.hashContainsKnownProperties = function (hash) {\n if (StringUtils.isEmpty(hash)) {\n return false;\n }\n\n var parameters = UrlString.getDeserializedHash(hash);\n return !!(parameters.code || parameters.error_description || parameters.error || parameters.state);\n };\n\n return UrlString;\n}();\n\nvar TrustedAuthority =\n/** @class */\nfunction () {\n function TrustedAuthority() {}\n /**\r\n * Set the CloudDiscoveryMetadata object from knownAuthorities or cloudDiscoveryMetadata passed into the app config\r\n * @param knownAuthorities\r\n * @param cloudDiscoveryMetadata\r\n */\n\n\n TrustedAuthority.setTrustedAuthoritiesFromConfig = function (knownAuthorities, cloudDiscoveryMetadata) {\n if (!this.getTrustedHostList().length) {\n if (knownAuthorities.length > 0 && !StringUtils.isEmpty(cloudDiscoveryMetadata)) {\n throw ClientConfigurationError.createKnownAuthoritiesCloudDiscoveryMetadataError();\n }\n\n this.createCloudDiscoveryMetadataFromKnownAuthorities(knownAuthorities);\n\n try {\n if (cloudDiscoveryMetadata) {\n var parsedMetadata = JSON.parse(cloudDiscoveryMetadata);\n this.saveCloudDiscoveryMetadata(parsedMetadata.metadata);\n }\n } catch (e) {\n throw ClientConfigurationError.createInvalidCloudDiscoveryMetadataError();\n }\n }\n };\n /**\r\n * Called to get metadata from network if CloudDiscoveryMetadata was not populated by config\r\n * @param networkInterface\r\n */\n\n\n TrustedAuthority.setTrustedAuthoritiesFromNetwork = function (authorityToVerify, networkInterface) {\n return __awaiter$1(this, void 0, void 0, function () {\n var instanceDiscoveryEndpoint, response, metadata, e_1, host;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n instanceDiscoveryEndpoint = \"\" + Constants.AAD_INSTANCE_DISCOVERY_ENDPT + authorityToVerify.urlString + \"oauth2/v2.0/authorize\";\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 3,, 4]);\n\n return [4\n /*yield*/\n , networkInterface.sendGetRequestAsync(instanceDiscoveryEndpoint)];\n\n case 2:\n response = _a.sent();\n metadata = response.body.metadata;\n this.saveCloudDiscoveryMetadata(metadata);\n return [3\n /*break*/\n , 4];\n\n case 3:\n e_1 = _a.sent();\n return [2\n /*return*/\n ];\n\n case 4:\n host = authorityToVerify.getUrlComponents().HostNameAndPort;\n\n if (this.getTrustedHostList().length > 0 && !this.IsInTrustedHostList(host)) {\n // Custom Domain scenario, host is trusted because Instance Discovery call succeeded \n this.createCloudDiscoveryMetadataFromKnownAuthorities([host]);\n }\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n *\r\n * @param metadata\r\n */\n\n\n TrustedAuthority.saveCloudDiscoveryMetadata = function (metadata) {\n metadata.forEach(function (entry) {\n var authorities = entry.aliases;\n authorities.forEach(function (authority) {\n TrustedAuthority.TrustedHostList[authority.toLowerCase()] = entry;\n });\n });\n };\n /**\r\n * Create a generic metadata object for each host passed to knownAuthorities.\r\n * This is mostly useful for B2C or ADFS scenarios\r\n * @param knownAuthorities\r\n */\n\n\n TrustedAuthority.createCloudDiscoveryMetadataFromKnownAuthorities = function (knownAuthorities) {\n var _this = this;\n\n knownAuthorities.forEach(function (authority) {\n var authorityDomain = UrlString.getDomainFromUrl(authority).toLowerCase();\n _this.TrustedHostList[authorityDomain] = {\n preferred_cache: authorityDomain,\n preferred_network: authorityDomain,\n aliases: [authorityDomain]\n };\n });\n };\n\n TrustedAuthority.getTrustedHostList = function () {\n return Object.keys(this.TrustedHostList);\n };\n /**\r\n * Get metadata for the provided host\r\n * @param host\r\n */\n\n\n TrustedAuthority.getCloudDiscoveryMetadata = function (host) {\n return this.TrustedHostList[host.toLowerCase()] || null;\n };\n /**\r\n * Checks to see if the host is in a list of trusted hosts\r\n * @param host\r\n */\n\n\n TrustedAuthority.IsInTrustedHostList = function (host) {\n return Object.keys(this.TrustedHostList).indexOf(host.toLowerCase()) > -1;\n };\n\n TrustedAuthority.TrustedHostList = {};\n return TrustedAuthority;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 * name: Full name for the account, including given name and family name,\r\n * clientInfo: Full base64 encoded client info received from ESTS\r\n * lastModificationTime: last time this entity was modified in the cache\r\n * lastModificationApp:\r\n * }\r\n */\n\n\nvar AccountEntity =\n/** @class */\nfunction () {\n function AccountEntity() {}\n /**\r\n * Generate Account Id key component as per the schema: -\r\n */\n\n\n AccountEntity.prototype.generateAccountId = function () {\n var accountId = [this.homeAccountId, this.environment];\n return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\n };\n /**\r\n * Generate Account Cache Key as per the schema: --\r\n */\n\n\n AccountEntity.prototype.generateAccountKey = function () {\n return AccountEntity.generateAccountCacheKey({\n homeAccountId: this.homeAccountId,\n environment: this.environment,\n tenantId: this.realm,\n username: this.username\n });\n };\n /**\r\n * returns the type of the cache (in this case account)\r\n */\n\n\n AccountEntity.prototype.generateType = function () {\n switch (this.authorityType) {\n case CacheAccountType.ADFS_ACCOUNT_TYPE:\n return CacheType.ADFS;\n\n case CacheAccountType.MSAV1_ACCOUNT_TYPE:\n return CacheType.MSA;\n\n case CacheAccountType.MSSTS_ACCOUNT_TYPE:\n return CacheType.MSSTS;\n\n case CacheAccountType.GENERIC_ACCOUNT_TYPE:\n return CacheType.GENERIC;\n\n default:\n {\n throw ClientAuthError.createUnexpectedAccountTypeError();\n }\n }\n };\n /**\r\n * Returns the AccountInfo interface for this account.\r\n */\n\n\n AccountEntity.prototype.getAccountInfo = function () {\n return {\n homeAccountId: this.homeAccountId,\n environment: this.environment,\n tenantId: this.realm,\n username: this.username\n };\n };\n /**\r\n * Generates account key from interface\r\n * @param accountInterface\r\n */\n\n\n AccountEntity.generateAccountCacheKey = function (accountInterface) {\n var accountKey = [accountInterface.homeAccountId, accountInterface.environment || \"\", accountInterface.tenantId || \"\"];\n return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();\n };\n /**\r\n * Build Account cache from IdToken, clientInfo and authority/policy\r\n * @param clientInfo\r\n * @param authority\r\n * @param idToken\r\n * @param policy\r\n */\n\n\n AccountEntity.createAccount = function (clientInfo, authority, idToken, crypto) {\n var account = new AccountEntity();\n account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;\n account.clientInfo = clientInfo;\n var clientInfoObj = buildClientInfo(clientInfo, crypto);\n account.homeAccountId = \"\" + clientInfoObj.uid + Separators.CLIENT_INFO_SEPARATOR + clientInfoObj.utid;\n var reqEnvironment = authority.canonicalAuthorityUrlComponents.HostNameAndPort;\n var env = TrustedAuthority.getCloudDiscoveryMetadata(reqEnvironment) ? TrustedAuthority.getCloudDiscoveryMetadata(reqEnvironment).preferred_cache : \"\";\n\n if (StringUtils.isEmpty(env)) {\n throw ClientAuthError.createInvalidCacheEnvironmentError();\n }\n\n account.environment = env;\n account.realm = idToken.claims.tid;\n\n if (idToken) {\n // How do you account for MSA CID here?\n var localAccountId = !StringUtils.isEmpty(idToken.claims.oid) ? idToken.claims.oid : idToken.claims.sid;\n account.localAccountId = localAccountId; // In B2C scenarios the emails claim is used instead of preferred_username and it is an array. In most cases it will contain a single email.\n // This field should not be relied upon if a custom policy is configured to return more than 1 email.\n\n account.username = idToken.claims.preferred_username || (idToken.claims.emails ? idToken.claims.emails[0] : \"\");\n account.name = idToken.claims.name;\n }\n\n return account;\n };\n /**\r\n * Build ADFS account type\r\n * @param authority\r\n * @param idToken\r\n */\n\n\n AccountEntity.createADFSAccount = function (authority, idToken) {\n var account = new AccountEntity();\n account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;\n account.homeAccountId = idToken.claims.sub;\n var reqEnvironment = authority.canonicalAuthorityUrlComponents.HostNameAndPort;\n var env = TrustedAuthority.getCloudDiscoveryMetadata(reqEnvironment) ? TrustedAuthority.getCloudDiscoveryMetadata(reqEnvironment).preferred_cache : \"\";\n\n if (StringUtils.isEmpty(env)) {\n throw ClientAuthError.createInvalidCacheEnvironmentError();\n }\n\n account.environment = env;\n account.username = idToken.claims.upn; // add uniqueName to claims\n // account.name = idToken.claims.uniqueName;\n\n return account;\n };\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\n\n\n AccountEntity.isAccountEntity = function (entity) {\n return entity.hasOwnProperty(\"homeAccountId\") && entity.hasOwnProperty(\"environment\") && entity.hasOwnProperty(\"realm\") && entity.hasOwnProperty(\"localAccountId\") && entity.hasOwnProperty(\"username\") && entity.hasOwnProperty(\"authorityType\");\n };\n\n return AccountEntity;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Interface class which implement cache storage functions used by MSAL to perform validity checks, and store tokens.\r\n */\n\n\nvar CacheManager =\n/** @class */\nfunction () {\n function CacheManager() {}\n /**\r\n * Returns all accounts in cache\r\n */\n\n\n CacheManager.prototype.getAllAccounts = function () {\n var currentAccounts = this.getAccountsFilteredBy();\n var accountValues = Object.keys(currentAccounts).map(function (accountKey) {\n return currentAccounts[accountKey];\n });\n var numAccounts = accountValues.length;\n\n if (numAccounts < 1) {\n return [];\n } else {\n var allAccounts = accountValues.map(function (value) {\n var accountObj = new AccountEntity();\n accountObj = CacheManager.toObject(accountObj, value);\n return accountObj.getAccountInfo();\n });\n return allAccounts;\n }\n };\n /**\r\n * saves a cache record\r\n * @param cacheRecord\r\n */\n\n\n CacheManager.prototype.saveCacheRecord = function (cacheRecord) {\n if (!cacheRecord) {\n throw ClientAuthError.createNullOrUndefinedCacheRecord();\n }\n\n if (!!cacheRecord.account) {\n this.saveAccount(cacheRecord.account);\n }\n\n if (!!cacheRecord.idToken) {\n this.saveCredential(cacheRecord.idToken);\n }\n\n if (!!cacheRecord.accessToken) {\n this.saveAccessToken(cacheRecord.accessToken);\n }\n\n if (!!cacheRecord.refreshToken) {\n this.saveCredential(cacheRecord.refreshToken);\n }\n };\n /**\r\n * saves account into cache\r\n * @param account\r\n */\n\n\n CacheManager.prototype.saveAccount = function (account) {\n var key = account.generateAccountKey();\n this.setItem(key, account, CacheSchemaType.ACCOUNT);\n };\n /**\r\n * saves credential - accessToken, idToken or refreshToken into cache\r\n * @param credential\r\n */\n\n\n CacheManager.prototype.saveCredential = function (credential) {\n var key = credential.generateCredentialKey();\n this.setItem(key, credential, CacheSchemaType.CREDENTIAL);\n };\n /**\r\n * saves access token credential\r\n * @param credential\r\n */\n\n\n CacheManager.prototype.saveAccessToken = function (credential) {\n var _this = this;\n\n var currentTokenCache = this.getCredentialsFilteredBy({\n clientId: credential.clientId,\n credentialType: CredentialType.ACCESS_TOKEN,\n environment: credential.environment,\n homeAccountId: credential.homeAccountId,\n realm: credential.realm\n });\n var currentScopes = ScopeSet.fromString(credential.target);\n var currentAccessTokens = Object.keys(currentTokenCache.accessTokens).map(function (key) {\n return currentTokenCache.accessTokens[key];\n });\n\n if (currentAccessTokens) {\n currentAccessTokens.forEach(function (tokenEntity) {\n var tokenScopeSet = ScopeSet.fromString(tokenEntity.target);\n\n if (tokenScopeSet.intersectingScopeSets(currentScopes)) {\n _this.removeCredential(tokenEntity);\n }\n });\n }\n\n this.saveCredential(credential);\n };\n /**\r\n * Given account key retrieve an account\r\n * @param key\r\n */\n\n\n CacheManager.prototype.getAccount = function (key) {\n var account = this.getItem(key, CacheSchemaType.ACCOUNT);\n return account;\n };\n /**\r\n * retrieve a credential - accessToken, idToken or refreshToken; given the cache key\r\n * @param key\r\n */\n\n\n CacheManager.prototype.getCredential = function (key) {\n return this.getItem(key, CacheSchemaType.CREDENTIAL);\n };\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 */\n\n\n CacheManager.prototype.getAccountsFilteredBy = function (accountFilter) {\n return this.getAccountsFilteredByInternal(accountFilter ? accountFilter.homeAccountId : \"\", accountFilter ? accountFilter.environment : \"\", accountFilter ? accountFilter.realm : \"\");\n };\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 */\n\n\n CacheManager.prototype.getAccountsFilteredByInternal = function (homeAccountId, environment, realm) {\n var _this = this;\n\n var allCacheKeys = this.getKeys();\n var matchingAccounts = {};\n allCacheKeys.forEach(function (cacheKey) {\n var entity = _this.getAccountEntity(cacheKey);\n\n if (!entity) {\n return null;\n }\n\n if (!StringUtils.isEmpty(homeAccountId) && !_this.matchHomeAccountId(entity, homeAccountId)) {\n return;\n }\n\n if (!StringUtils.isEmpty(environment) && !_this.matchEnvironment(entity, environment)) {\n return;\n }\n\n if (!StringUtils.isEmpty(realm) && !_this.matchRealm(entity, realm)) {\n return;\n }\n\n matchingAccounts[cacheKey] = entity;\n });\n return matchingAccounts;\n };\n /**\r\n * retrieve credentails matching all provided filters; if no filter is set, get all credentials\r\n * @param homeAccountId\r\n * @param environment\r\n * @param credentialType\r\n * @param clientId\r\n * @param realm\r\n * @param target\r\n */\n\n\n CacheManager.prototype.getCredentialsFilteredBy = function (filter) {\n return this.getCredentialsFilteredByInternal(filter.homeAccountId, filter.environment, filter.credentialType, filter.clientId, filter.realm, filter.target);\n };\n /**\r\n * Support function to help match credentials\r\n * @param homeAccountId\r\n * @param environment\r\n * @param credentialType\r\n * @param clientId\r\n * @param realm\r\n * @param target\r\n */\n\n\n CacheManager.prototype.getCredentialsFilteredByInternal = function (homeAccountId, environment, credentialType, clientId, realm, target) {\n var _this = this;\n\n var allCacheKeys = this.getKeys();\n var matchingCredentials = {\n idTokens: {},\n accessTokens: {},\n refreshTokens: {}\n };\n allCacheKeys.forEach(function (cacheKey) {\n var entity; // don't parse any non-credential type cache entities\n\n var credType = CredentialEntity.getCredentialType(cacheKey);\n\n if (credType === Constants.NOT_DEFINED) {\n return;\n } // Attempt retrieval\n\n\n try {\n entity = _this.getItem(cacheKey, CacheSchemaType.CREDENTIAL);\n } catch (e) {\n return;\n }\n\n if (!StringUtils.isEmpty(homeAccountId) && !_this.matchHomeAccountId(entity, homeAccountId)) {\n return;\n }\n\n if (!StringUtils.isEmpty(environment) && !_this.matchEnvironment(entity, environment)) {\n return;\n }\n\n if (!StringUtils.isEmpty(realm) && !_this.matchRealm(entity, realm)) {\n return;\n }\n\n if (!StringUtils.isEmpty(credentialType) && !_this.matchCredentialType(entity, credentialType)) {\n return;\n }\n\n if (!StringUtils.isEmpty(clientId) && !_this.matchClientId(entity, clientId)) {\n return;\n } // idTokens do not have \"target\", target specific refreshTokens do exist for some types of authentication\n // TODO: Add case for target specific refresh tokens\n\n\n if (!StringUtils.isEmpty(target) && !_this.matchTarget(entity, target)) {\n return;\n }\n\n switch (credType) {\n case CredentialType.ID_TOKEN:\n matchingCredentials.idTokens[cacheKey] = entity;\n break;\n\n case CredentialType.ACCESS_TOKEN:\n matchingCredentials.accessTokens[cacheKey] = entity;\n break;\n\n case CredentialType.REFRESH_TOKEN:\n matchingCredentials.refreshTokens[cacheKey] = entity;\n break;\n }\n });\n return matchingCredentials;\n };\n /**\r\n * Removes all app metadata objects from cache.\r\n */\n\n\n CacheManager.prototype.removeAppMetadata = function () {\n var _this = this;\n\n var allCacheKeys = this.getKeys();\n allCacheKeys.forEach(function (cacheKey) {\n if (_this.isAppMetadata(cacheKey)) {\n _this.removeItem(cacheKey, CacheSchemaType.APP_METADATA);\n }\n });\n return true;\n };\n /**\r\n * Removes all accounts and related tokens from cache.\r\n */\n\n\n CacheManager.prototype.removeAllAccounts = function () {\n var _this = this;\n\n var allCacheKeys = this.getKeys();\n allCacheKeys.forEach(function (cacheKey) {\n var entity = _this.getAccountEntity(cacheKey);\n\n if (!entity) {\n return;\n }\n\n _this.removeAccount(cacheKey);\n });\n return true;\n };\n /**\r\n * returns a boolean if the given account is removed\r\n * @param account\r\n */\n\n\n CacheManager.prototype.removeAccount = function (accountKey) {\n var account = this.getAccount(accountKey);\n\n if (!account) {\n throw ClientAuthError.createNoAccountFoundError();\n }\n\n return this.removeAccountContext(account) && this.removeItem(accountKey, CacheSchemaType.ACCOUNT);\n };\n /**\r\n * returns a boolean if the given account is removed\r\n * @param account\r\n */\n\n\n CacheManager.prototype.removeAccountContext = function (account) {\n var _this = this;\n\n var allCacheKeys = this.getKeys();\n var accountId = account.generateAccountId();\n allCacheKeys.forEach(function (cacheKey) {\n // don't parse any non-credential type cache entities\n if (CredentialEntity.getCredentialType(cacheKey) === Constants.NOT_DEFINED) {\n return;\n }\n\n var cacheEntity = _this.getItem(cacheKey, CacheSchemaType.CREDENTIAL);\n\n if (!!cacheEntity && accountId === cacheEntity.generateAccountId()) {\n _this.removeCredential(cacheEntity);\n }\n });\n return true;\n };\n /**\r\n * returns a boolean if the given credential is removed\r\n * @param credential\r\n */\n\n\n CacheManager.prototype.removeCredential = function (credential) {\n var key = credential.generateCredentialKey();\n return this.removeItem(key, CacheSchemaType.CREDENTIAL);\n };\n /**\r\n *\r\n * @param value\r\n * @param homeAccountId\r\n */\n\n\n CacheManager.prototype.matchHomeAccountId = function (entity, homeAccountId) {\n return entity.homeAccountId && homeAccountId === entity.homeAccountId;\n };\n /**\r\n *\r\n * @param value\r\n * @param environment\r\n */\n\n\n CacheManager.prototype.matchEnvironment = function (entity, environment) {\n var cloudMetadata = TrustedAuthority.getCloudDiscoveryMetadata(environment);\n\n if (cloudMetadata && cloudMetadata.aliases.indexOf(entity.environment) > -1) {\n return true;\n }\n\n return false;\n };\n /**\r\n *\r\n * @param entity\r\n * @param credentialType\r\n */\n\n\n CacheManager.prototype.matchCredentialType = function (entity, credentialType) {\n return entity.credentialType && credentialType.toLowerCase() === entity.credentialType.toLowerCase();\n };\n /**\r\n *\r\n * @param entity\r\n * @param clientId\r\n */\n\n\n CacheManager.prototype.matchClientId = function (entity, clientId) {\n return entity.clientId && clientId === entity.clientId;\n };\n /**\r\n *\r\n * @param entity\r\n * @param realm\r\n */\n\n\n CacheManager.prototype.matchRealm = function (entity, realm) {\n return entity.realm && realm === entity.realm;\n };\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 */\n\n\n CacheManager.prototype.matchTarget = function (entity, target) {\n if (entity.credentialType !== CredentialType.ACCESS_TOKEN || StringUtils.isEmpty(entity.target)) {\n return false;\n }\n\n var entityScopeSet = ScopeSet.fromString(entity.target);\n var requestTargetScopeSet = ScopeSet.fromString(target); // ignore offline_access when comparing scopes\n\n entityScopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\n requestTargetScopeSet.removeScope(Constants.OFFLINE_ACCESS_SCOPE);\n return entityScopeSet.containsScopeSet(requestTargetScopeSet);\n };\n /**\r\n * Returns a valid AccountEntity if key and object contain correct values, null otherwise.\r\n * @param key\r\n */\n\n\n CacheManager.prototype.getAccountEntity = function (key) {\n // don't parse any non-account type cache entities\n if (CredentialEntity.getCredentialType(key) !== Constants.NOT_DEFINED || this.isAppMetadata(key)) {\n return null;\n } // Attempt retrieval\n\n\n var entity;\n\n try {\n entity = this.getItem(key, CacheSchemaType.ACCOUNT);\n } catch (e) {\n return null;\n } // Authority type is required for accounts, return if it is not available (not an account entity)\n\n\n if (!entity || StringUtils.isEmpty(entity.authorityType)) {\n return null;\n }\n\n return entity;\n };\n /**\r\n * returns if a given cache entity is of the type appmetadata\r\n * @param key\r\n */\n\n\n CacheManager.prototype.isAppMetadata = function (key) {\n return key.indexOf(APP_METADATA) !== -1;\n };\n /**\r\n * Helper to convert serialized data to object\r\n * @param obj\r\n * @param json\r\n */\n\n\n CacheManager.toObject = function (obj, json) {\n for (var propertyName in json) {\n obj[propertyName] = json[propertyName];\n }\n\n return obj;\n };\n\n return CacheManager;\n}();\n\nvar DefaultStorageClass =\n/** @class */\nfunction (_super) {\n __extends$1(DefaultStorageClass, _super);\n\n function DefaultStorageClass() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n\n DefaultStorageClass.prototype.setItem = function () {\n var notImplErr = \"Storage interface - setItem() has not been implemented for the cacheStorage interface.\";\n throw AuthError.createUnexpectedError(notImplErr);\n };\n\n DefaultStorageClass.prototype.getItem = function () {\n var notImplErr = \"Storage interface - getItem() has not been implemented for the cacheStorage interface.\";\n throw AuthError.createUnexpectedError(notImplErr);\n };\n\n DefaultStorageClass.prototype.removeItem = function () {\n var notImplErr = \"Storage interface - removeItem() has not been implemented for the cacheStorage interface.\";\n throw AuthError.createUnexpectedError(notImplErr);\n };\n\n DefaultStorageClass.prototype.containsKey = function () {\n var notImplErr = \"Storage interface - containsKey() has not been implemented for the cacheStorage interface.\";\n throw AuthError.createUnexpectedError(notImplErr);\n };\n\n DefaultStorageClass.prototype.getKeys = function () {\n var notImplErr = \"Storage interface - getKeys() has not been implemented for the cacheStorage interface.\";\n throw AuthError.createUnexpectedError(notImplErr);\n };\n\n DefaultStorageClass.prototype.clear = function () {\n var notImplErr = \"Storage interface - clear() has not been implemented for the cacheStorage interface.\";\n throw AuthError.createUnexpectedError(notImplErr);\n };\n\n return DefaultStorageClass;\n}(CacheManager);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n// Token renewal offset default in seconds\n\n\nvar DEFAULT_TOKEN_RENEWAL_OFFSET_SEC = 300;\nvar DEFAULT_AUTH_OPTIONS = {\n clientId: \"\",\n authority: null,\n knownAuthorities: [],\n cloudDiscoveryMetadata: \"\",\n clientCapabilities: []\n};\nvar DEFAULT_SYSTEM_OPTIONS = {\n tokenRenewalOffsetSeconds: DEFAULT_TOKEN_RENEWAL_OFFSET_SEC\n};\nvar DEFAULT_LOGGER_IMPLEMENTATION = {\n loggerCallback: function loggerCallback() {// allow users to not set loggerCallback\n },\n piiLoggingEnabled: false,\n logLevel: LogLevel.Info\n};\nvar DEFAULT_NETWORK_IMPLEMENTATION = {\n sendGetRequestAsync: function sendGetRequestAsync() {\n return __awaiter$1(this, void 0, void 0, function () {\n var notImplErr;\n return __generator$1(this, function (_a) {\n notImplErr = \"Network interface - sendGetRequestAsync() has not been implemented\";\n throw AuthError.createUnexpectedError(notImplErr);\n });\n });\n },\n sendPostRequestAsync: function sendPostRequestAsync() {\n return __awaiter$1(this, void 0, void 0, function () {\n var notImplErr;\n return __generator$1(this, function (_a) {\n notImplErr = \"Network interface - sendPostRequestAsync() has not been implemented\";\n throw AuthError.createUnexpectedError(notImplErr);\n });\n });\n }\n};\nvar DEFAULT_CRYPTO_IMPLEMENTATION = {\n createNewGuid: function createNewGuid() {\n var notImplErr = \"Crypto interface - createNewGuid() has not been implemented\";\n throw AuthError.createUnexpectedError(notImplErr);\n },\n base64Decode: function base64Decode() {\n var notImplErr = \"Crypto interface - base64Decode() has not been implemented\";\n throw AuthError.createUnexpectedError(notImplErr);\n },\n base64Encode: function base64Encode() {\n var notImplErr = \"Crypto interface - base64Encode() has not been implemented\";\n throw AuthError.createUnexpectedError(notImplErr);\n },\n generatePkceCodes: function generatePkceCodes() {\n return __awaiter$1(this, void 0, void 0, function () {\n var notImplErr;\n return __generator$1(this, function (_a) {\n notImplErr = \"Crypto interface - generatePkceCodes() has not been implemented\";\n throw AuthError.createUnexpectedError(notImplErr);\n });\n });\n }\n};\nvar DEFAULT_LIBRARY_INFO = {\n sku: Constants.SKU,\n version: version,\n cpu: \"\",\n os: \"\"\n};\nvar DEFAULT_CLIENT_CREDENTIALS = {\n clientSecret: \"\",\n clientAssertion: null\n};\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 */\n\nfunction buildClientConfiguration(_a) {\n var userAuthOptions = _a.authOptions,\n userSystemOptions = _a.systemOptions,\n userLoggerOption = _a.loggerOptions,\n storageImplementation = _a.storageInterface,\n networkImplementation = _a.networkInterface,\n cryptoImplementation = _a.cryptoInterface,\n clientCredentials = _a.clientCredentials,\n libraryInfo = _a.libraryInfo,\n serverTelemetryManager = _a.serverTelemetryManager;\n return {\n authOptions: _assign$(_assign$({}, DEFAULT_AUTH_OPTIONS), userAuthOptions),\n systemOptions: _assign$(_assign$({}, DEFAULT_SYSTEM_OPTIONS), userSystemOptions),\n loggerOptions: _assign$(_assign$({}, DEFAULT_LOGGER_IMPLEMENTATION), userLoggerOption),\n storageInterface: storageImplementation || new DefaultStorageClass(),\n networkInterface: networkImplementation || DEFAULT_NETWORK_IMPLEMENTATION,\n cryptoInterface: cryptoImplementation || DEFAULT_CRYPTO_IMPLEMENTATION,\n clientCredentials: clientCredentials || DEFAULT_CLIENT_CREDENTIALS,\n libraryInfo: _assign$(_assign$({}, DEFAULT_LIBRARY_INFO), libraryInfo),\n serverTelemetryManager: serverTelemetryManager || null\n };\n}\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Base application class which will construct requests to send to and handle responses from the Microsoft STS using the authorization code flow.\r\n */\n\n\nvar BaseClient =\n/** @class */\nfunction () {\n function BaseClient(configuration) {\n // Set the configuration\n this.config = buildClientConfiguration(configuration); // Initialize the logger\n\n this.logger = new Logger(this.config.loggerOptions); // Initialize crypto\n\n this.cryptoUtils = this.config.cryptoInterface; // Initialize storage interface\n\n this.cacheManager = this.config.storageInterface; // Set the network interface\n\n this.networkClient = this.config.networkInterface; // Set TelemetryManager\n\n this.serverTelemetryManager = this.config.serverTelemetryManager;\n TrustedAuthority.setTrustedAuthoritiesFromConfig(this.config.authOptions.knownAuthorities, this.config.authOptions.cloudDiscoveryMetadata);\n this.authority = this.config.authOptions.authority;\n }\n /**\r\n * Creates default headers for requests to token endpoint\r\n */\n\n\n BaseClient.prototype.createDefaultTokenRequestHeaders = function () {\n var headers = this.createDefaultLibraryHeaders();\n headers[HeaderNames.CONTENT_TYPE] = Constants.URL_FORM_CONTENT_TYPE;\n\n if (this.serverTelemetryManager) {\n headers[HeaderNames.X_CLIENT_CURR_TELEM] = this.serverTelemetryManager.generateCurrentRequestHeaderValue();\n headers[HeaderNames.X_CLIENT_LAST_TELEM] = this.serverTelemetryManager.generateLastRequestHeaderValue();\n }\n\n return headers;\n };\n /**\r\n * addLibraryData\r\n */\n\n\n BaseClient.prototype.createDefaultLibraryHeaders = function () {\n var headers = {}; // client info headers\n\n headers[AADServerParamKeys.X_CLIENT_SKU] = this.config.libraryInfo.sku;\n headers[AADServerParamKeys.X_CLIENT_VER] = this.config.libraryInfo.version;\n headers[AADServerParamKeys.X_CLIENT_OS] = this.config.libraryInfo.os;\n headers[AADServerParamKeys.X_CLIENT_CPU] = this.config.libraryInfo.cpu;\n return headers;\n };\n /**\r\n * Http post to token endpoint\r\n * @param tokenEndpoint\r\n * @param queryString\r\n * @param headers\r\n */\n\n\n BaseClient.prototype.executePostToTokenEndpoint = function (tokenEndpoint, queryString, headers) {\n return __awaiter$1(this, void 0, void 0, function () {\n var response;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.networkClient.sendPostRequestAsync(tokenEndpoint, {\n body: queryString,\n headers: headers\n })];\n\n case 1:\n response = _a.sent();\n\n if (this.config.serverTelemetryManager && response.status < 500 && response.status !== 429) {\n // Telemetry data successfully logged by server, clear Telemetry cache\n this.config.serverTelemetryManager.clearTelemetryCache();\n }\n\n return [2\n /*return*/\n , response];\n }\n });\n });\n };\n\n return BaseClient;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Validates server consumable params from the \"request\" objects\r\n */\n\n\nvar RequestValidator =\n/** @class */\nfunction () {\n function RequestValidator() {}\n /**\r\n * Utility to check if the `redirectUri` in the request is a non-null value\r\n * @param redirectUri\r\n */\n\n\n RequestValidator.validateRedirectUri = function (redirectUri) {\n if (StringUtils.isEmpty(redirectUri)) {\n throw ClientConfigurationError.createRedirectUriEmptyError();\n }\n };\n /**\r\n * Utility to validate prompt sent by the user in the request\r\n * @param prompt\r\n */\n\n\n RequestValidator.validatePrompt = function (prompt) {\n if ([PromptValue.LOGIN, PromptValue.SELECT_ACCOUNT, PromptValue.CONSENT, PromptValue.NONE].indexOf(prompt) < 0) {\n throw ClientConfigurationError.createInvalidPromptError(prompt);\n }\n };\n\n RequestValidator.validateClaims = function (claims) {\n try {\n JSON.parse(claims);\n } catch (e) {\n throw ClientConfigurationError.createInvalidClaimsRequestError();\n }\n };\n /**\r\n * Utility to validate code_challenge and code_challenge_method\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\n\n\n RequestValidator.validateCodeChallengeParams = function (codeChallenge, codeChallengeMethod) {\n if (StringUtils.isEmpty(codeChallenge) || StringUtils.isEmpty(codeChallengeMethod)) {\n throw ClientConfigurationError.createInvalidCodeChallengeParamsError();\n } else {\n this.validateCodeChallengeMethod(codeChallengeMethod);\n }\n };\n /**\r\n * Utility to validate code_challenge_method\r\n * @param codeChallengeMethod\r\n */\n\n\n RequestValidator.validateCodeChallengeMethod = function (codeChallengeMethod) {\n if ([CodeChallengeMethodValues.PLAIN, CodeChallengeMethodValues.S256].indexOf(codeChallengeMethod) < 0) {\n throw ClientConfigurationError.createInvalidCodeChallengeMethodError();\n }\n };\n /**\r\n * Removes unnecessary or duplicate query parameters from extraQueryParameters\r\n * @param request\r\n */\n\n\n RequestValidator.sanitizeEQParams = function (eQParams, queryParams) {\n if (!eQParams) {\n return null;\n } // Remove any query parameters already included in SSO params\n\n\n queryParams.forEach(function (value, key) {\n if (eQParams[key]) {\n delete eQParams[key];\n }\n });\n return eQParams;\n };\n\n return RequestValidator;\n}();\n/*\r\n* Copyright (c) Microsoft Corporation. All rights reserved.\r\n* Licensed under the MIT License.\r\n*/\n\n\nvar RequestParameterBuilder =\n/** @class */\nfunction () {\n function RequestParameterBuilder() {\n this.parameters = new Map();\n }\n /**\r\n * add response_type = code\r\n */\n\n\n RequestParameterBuilder.prototype.addResponseTypeCode = function () {\n this.parameters.set(AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(Constants.CODE_RESPONSE_TYPE));\n };\n /**\r\n * add response_mode. defaults to query.\r\n * @param responseMode\r\n */\n\n\n RequestParameterBuilder.prototype.addResponseMode = function (responseMode) {\n this.parameters.set(AADServerParamKeys.RESPONSE_MODE, encodeURIComponent(responseMode ? responseMode : ResponseMode.QUERY));\n };\n /**\r\n * add scopes\r\n * @param scopeSet\r\n */\n\n\n RequestParameterBuilder.prototype.addScopes = function (scopeSet) {\n this.parameters.set(AADServerParamKeys.SCOPE, encodeURIComponent(scopeSet.printScopes()));\n };\n /**\r\n * add clientId\r\n * @param clientId\r\n */\n\n\n RequestParameterBuilder.prototype.addClientId = function (clientId) {\n this.parameters.set(AADServerParamKeys.CLIENT_ID, encodeURIComponent(clientId));\n };\n /**\r\n * add redirect_uri\r\n * @param redirectUri\r\n */\n\n\n RequestParameterBuilder.prototype.addRedirectUri = function (redirectUri) {\n RequestValidator.validateRedirectUri(redirectUri);\n this.parameters.set(AADServerParamKeys.REDIRECT_URI, encodeURIComponent(redirectUri));\n };\n /**\r\n * add domain_hint\r\n * @param domainHint\r\n */\n\n\n RequestParameterBuilder.prototype.addDomainHint = function (domainHint) {\n this.parameters.set(SSOTypes.DOMAIN_HINT, encodeURIComponent(domainHint));\n };\n /**\r\n * add login_hint\r\n * @param loginHint\r\n */\n\n\n RequestParameterBuilder.prototype.addLoginHint = function (loginHint) {\n this.parameters.set(SSOTypes.LOGIN_HINT, encodeURIComponent(loginHint));\n };\n /**\r\n * add sid\r\n * @param sid\r\n */\n\n\n RequestParameterBuilder.prototype.addSid = function (sid) {\n this.parameters.set(SSOTypes.SID, encodeURIComponent(sid));\n };\n /**\r\n * add claims\r\n * @param claims\r\n */\n\n\n RequestParameterBuilder.prototype.addClaims = function (claims, clientCapabilities) {\n var mergedClaims = this.addClientCapabilitiesToClaims(claims, clientCapabilities);\n RequestValidator.validateClaims(mergedClaims);\n this.parameters.set(AADServerParamKeys.CLAIMS, encodeURIComponent(mergedClaims));\n };\n /**\r\n * add correlationId\r\n * @param correlationId\r\n */\n\n\n RequestParameterBuilder.prototype.addCorrelationId = function (correlationId) {\n this.parameters.set(AADServerParamKeys.CLIENT_REQUEST_ID, encodeURIComponent(correlationId));\n };\n /**\r\n * add library info query params\r\n * @param libraryInfo\r\n */\n\n\n RequestParameterBuilder.prototype.addLibraryInfo = function (libraryInfo) {\n // Telemetry Info\n this.parameters.set(AADServerParamKeys.X_CLIENT_SKU, libraryInfo.sku);\n this.parameters.set(AADServerParamKeys.X_CLIENT_VER, libraryInfo.version);\n this.parameters.set(AADServerParamKeys.X_CLIENT_OS, libraryInfo.os);\n this.parameters.set(AADServerParamKeys.X_CLIENT_CPU, libraryInfo.cpu);\n };\n /**\r\n * add prompt\r\n * @param prompt\r\n */\n\n\n RequestParameterBuilder.prototype.addPrompt = function (prompt) {\n RequestValidator.validatePrompt(prompt);\n this.parameters.set(\"\" + AADServerParamKeys.PROMPT, encodeURIComponent(prompt));\n };\n /**\r\n * add state\r\n * @param state\r\n */\n\n\n RequestParameterBuilder.prototype.addState = function (state) {\n if (!StringUtils.isEmpty(state)) {\n this.parameters.set(AADServerParamKeys.STATE, encodeURIComponent(state));\n }\n };\n /**\r\n * add nonce\r\n * @param nonce\r\n */\n\n\n RequestParameterBuilder.prototype.addNonce = function (nonce) {\n this.parameters.set(AADServerParamKeys.NONCE, encodeURIComponent(nonce));\n };\n /**\r\n * add code_challenge and code_challenge_method\r\n * - throw if either of them are not passed\r\n * @param codeChallenge\r\n * @param codeChallengeMethod\r\n */\n\n\n RequestParameterBuilder.prototype.addCodeChallengeParams = function (codeChallenge, codeChallengeMethod) {\n RequestValidator.validateCodeChallengeParams(codeChallenge, codeChallengeMethod);\n\n if (codeChallenge && codeChallengeMethod) {\n this.parameters.set(AADServerParamKeys.CODE_CHALLENGE, encodeURIComponent(codeChallenge));\n this.parameters.set(AADServerParamKeys.CODE_CHALLENGE_METHOD, encodeURIComponent(codeChallengeMethod));\n } else {\n throw ClientConfigurationError.createInvalidCodeChallengeParamsError();\n }\n };\n /**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\n\n\n RequestParameterBuilder.prototype.addAuthorizationCode = function (code) {\n this.parameters.set(AADServerParamKeys.CODE, encodeURIComponent(code));\n };\n /**\r\n * add the `authorization_code` passed by the user to exchange for a token\r\n * @param code\r\n */\n\n\n RequestParameterBuilder.prototype.addDeviceCode = function (code) {\n this.parameters.set(AADServerParamKeys.DEVICE_CODE, encodeURIComponent(code));\n };\n /**\r\n * add the `refreshToken` passed by the user\r\n * @param refreshToken\r\n */\n\n\n RequestParameterBuilder.prototype.addRefreshToken = function (refreshToken) {\n this.parameters.set(AADServerParamKeys.REFRESH_TOKEN, encodeURIComponent(refreshToken));\n };\n /**\r\n * add the `code_verifier` passed by the user to exchange for a token\r\n * @param codeVerifier\r\n */\n\n\n RequestParameterBuilder.prototype.addCodeVerifier = function (codeVerifier) {\n this.parameters.set(AADServerParamKeys.CODE_VERIFIER, encodeURIComponent(codeVerifier));\n };\n /**\r\n * add client_secret\r\n * @param clientSecret\r\n */\n\n\n RequestParameterBuilder.prototype.addClientSecret = function (clientSecret) {\n this.parameters.set(AADServerParamKeys.CLIENT_SECRET, encodeURIComponent(clientSecret));\n };\n /**\r\n * add clientAssertion for confidential client flows\r\n * @param clientAssertion\r\n */\n\n\n RequestParameterBuilder.prototype.addClientAssertion = function (clientAssertion) {\n this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION, encodeURIComponent(clientAssertion));\n };\n /**\r\n * add clientAssertionType for confidential client flows\r\n * @param clientAssertionType\r\n */\n\n\n RequestParameterBuilder.prototype.addClientAssertionType = function (clientAssertionType) {\n this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION_TYPE, encodeURIComponent(clientAssertionType));\n };\n /**\r\n * add grant type\r\n * @param grantType\r\n */\n\n\n RequestParameterBuilder.prototype.addGrantType = function (grantType) {\n this.parameters.set(AADServerParamKeys.GRANT_TYPE, encodeURIComponent(grantType));\n };\n /**\r\n * add client info\r\n *\r\n */\n\n\n RequestParameterBuilder.prototype.addClientInfo = function () {\n this.parameters.set(ClientInfo, \"1\");\n };\n /**\r\n * add extraQueryParams\r\n * @param eQparams\r\n */\n\n\n RequestParameterBuilder.prototype.addExtraQueryParameters = function (eQparams) {\n var _this = this;\n\n RequestValidator.sanitizeEQParams(eQparams, this.parameters);\n Object.keys(eQparams).forEach(function (key) {\n _this.parameters.set(key, eQparams[key]);\n });\n };\n\n RequestParameterBuilder.prototype.addClientCapabilitiesToClaims = function (claims, clientCapabilities) {\n var mergedClaims; // Parse provided claims into JSON object or initialize empty object\n\n if (StringUtils.isEmpty(claims)) {\n mergedClaims = {};\n } else {\n try {\n mergedClaims = JSON.parse(claims);\n } catch (e) {\n throw ClientConfigurationError.createInvalidClaimsRequestError();\n }\n }\n\n if (clientCapabilities && clientCapabilities.length > 0) {\n if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {\n // Add access_token key to claims object\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};\n } // Add xms_cc claim with provided clientCapabilities to access_token key\n\n\n mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = {\n values: clientCapabilities\n };\n }\n\n return JSON.stringify(mergedClaims);\n };\n /**\r\n * Utility to create a URL from the params map\r\n */\n\n\n RequestParameterBuilder.prototype.createQueryString = function () {\n var queryParameterArray = new Array();\n this.parameters.forEach(function (value, key) {\n queryParameterArray.push(key + \"=\" + value);\n });\n return queryParameterArray.join(\"&\");\n };\n\n return RequestParameterBuilder;\n}();\n/**\r\n * Error thrown when there is an error with the server code, for example, unavailability.\r\n */\n\n\nvar ServerError =\n/** @class */\nfunction (_super) {\n __extends$1(ServerError, _super);\n\n function ServerError(errorCode, errorMessage, subError) {\n var _this = _super.call(this, errorCode, errorMessage) || this;\n\n _this.name = \"ServerError\";\n _this.subError = subError;\n Object.setPrototypeOf(_this, ServerError.prototype);\n return _this;\n }\n\n return ServerError;\n}(AuthError);\n/**\r\n * Id Token representation class. Parses id token string and generates claims object.\r\n */\n\n\nvar IdToken =\n/** @class */\nfunction () {\n function IdToken(rawIdToken, crypto) {\n if (StringUtils.isEmpty(rawIdToken)) {\n throw ClientAuthError.createIdTokenNullOrEmptyError(rawIdToken);\n }\n\n this.rawIdToken = rawIdToken;\n this.claims = IdToken.extractIdToken(rawIdToken, crypto);\n }\n /**\r\n * Extract IdToken by decoding the RAWIdToken\r\n *\r\n * @param encodedIdToken\r\n */\n\n\n IdToken.extractIdToken = function (encodedIdToken, crypto) {\n // id token will be decoded to get the username\n var decodedToken = StringUtils.decodeJwt(encodedIdToken);\n\n if (!decodedToken) {\n return null;\n }\n\n try {\n var base64IdTokenPayload = decodedToken.JWSPayload; // base64Decode() should throw an error if there is an issue\n\n var base64Decoded = crypto.base64Decode(base64IdTokenPayload);\n return JSON.parse(base64Decoded);\n } catch (err) {\n throw ClientAuthError.createIdTokenParsingError(err);\n }\n };\n\n return IdToken;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Utility class which exposes functions for managing date and time operations.\r\n */\n\n\nvar TimeUtils =\n/** @class */\nfunction () {\n function TimeUtils() {}\n /**\r\n * return the current time in Unix time (seconds).\r\n */\n\n\n TimeUtils.nowSeconds = function () {\n // Date.getTime() returns in milliseconds.\n return Math.round(new Date().getTime() / 1000.0);\n };\n /**\r\n * check if a token is expired based on given UTC time in seconds.\r\n * @param expiresOn\r\n */\n\n\n TimeUtils.isTokenExpired = function (expiresOn, offset) {\n // check for access token expiry\n var expirationSec = Number(expiresOn) || 0;\n var offsetCurrentTimeSec = TimeUtils.nowSeconds() + offset; // If current time + offset is greater than token expiration time, then token is expired.\n\n return offsetCurrentTimeSec > expirationSec;\n };\n\n return TimeUtils;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Authority types supported by MSAL.\r\n */\n\n\nvar AuthorityType;\n\n(function (AuthorityType) {\n AuthorityType[AuthorityType[\"Default\"] = 0] = \"Default\";\n AuthorityType[AuthorityType[\"Adfs\"] = 1] = \"Adfs\";\n})(AuthorityType || (AuthorityType = {}));\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar IdTokenEntity =\n/** @class */\nfunction (_super) {\n __extends$1(IdTokenEntity, _super);\n\n function IdTokenEntity() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\r\n * Create IdTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\n\n\n IdTokenEntity.createIdTokenEntity = function (homeAccountId, environment, idToken, clientId, tenantId) {\n var idTokenEntity = new IdTokenEntity();\n idTokenEntity.credentialType = CredentialType.ID_TOKEN;\n idTokenEntity.homeAccountId = homeAccountId;\n idTokenEntity.environment = environment;\n idTokenEntity.clientId = clientId;\n idTokenEntity.secret = idToken;\n idTokenEntity.realm = tenantId;\n return idTokenEntity;\n };\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\n\n\n IdTokenEntity.isIdTokenEntity = function (entity) {\n return entity.hasOwnProperty(\"homeAccountId\") && entity.hasOwnProperty(\"environment\") && entity.hasOwnProperty(\"credentialType\") && entity.hasOwnProperty(\"realm\") && entity.hasOwnProperty(\"clientId\") && entity.hasOwnProperty(\"secret\") && entity[\"credentialType\"] === CredentialType.ID_TOKEN;\n };\n\n return IdTokenEntity;\n}(CredentialEntity);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar AccessTokenEntity =\n/** @class */\nfunction (_super) {\n __extends$1(AccessTokenEntity, _super);\n\n function AccessTokenEntity() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\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 */\n\n\n AccessTokenEntity.createAccessTokenEntity = function (homeAccountId, environment, accessToken, clientId, tenantId, scopes, expiresOn, extExpiresOn) {\n var atEntity = new AccessTokenEntity();\n atEntity.homeAccountId = homeAccountId;\n atEntity.credentialType = CredentialType.ACCESS_TOKEN;\n atEntity.secret = accessToken;\n var currentTime = TimeUtils.nowSeconds();\n atEntity.cachedAt = currentTime.toString(); // Token expiry time.\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.\n\n atEntity.expiresOn = expiresOn.toString();\n atEntity.extendedExpiresOn = extExpiresOn.toString();\n atEntity.environment = environment;\n atEntity.clientId = clientId;\n atEntity.realm = tenantId;\n atEntity.target = scopes;\n return atEntity;\n };\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\n\n\n AccessTokenEntity.isAccessTokenEntity = function (entity) {\n return entity.hasOwnProperty(\"homeAccountId\") && entity.hasOwnProperty(\"environment\") && entity.hasOwnProperty(\"credentialType\") && entity.hasOwnProperty(\"realm\") && entity.hasOwnProperty(\"clientId\") && entity.hasOwnProperty(\"secret\") && entity.hasOwnProperty(\"target\") && entity[\"credentialType\"] === CredentialType.ACCESS_TOKEN;\n };\n\n return AccessTokenEntity;\n}(CredentialEntity);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar RefreshTokenEntity =\n/** @class */\nfunction (_super) {\n __extends$1(RefreshTokenEntity, _super);\n\n function RefreshTokenEntity() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\r\n * Create RefreshTokenEntity\r\n * @param homeAccountId\r\n * @param authenticationResult\r\n * @param clientId\r\n * @param authority\r\n */\n\n\n RefreshTokenEntity.createRefreshTokenEntity = function (homeAccountId, environment, refreshToken, clientId, familyId) {\n var rtEntity = new RefreshTokenEntity();\n rtEntity.clientId = clientId;\n rtEntity.credentialType = CredentialType.REFRESH_TOKEN;\n rtEntity.environment = environment;\n rtEntity.homeAccountId = homeAccountId;\n rtEntity.secret = refreshToken;\n if (familyId) rtEntity.familyId = familyId;\n return rtEntity;\n };\n /**\r\n * Validates an entity: checks for all expected params\r\n * @param entity\r\n */\n\n\n RefreshTokenEntity.isRefreshTokenEntity = function (entity) {\n return entity.hasOwnProperty(\"homeAccountId\") && entity.hasOwnProperty(\"environment\") && entity.hasOwnProperty(\"credentialType\") && entity.hasOwnProperty(\"clientId\") && entity.hasOwnProperty(\"secret\") && entity[\"credentialType\"] === CredentialType.REFRESH_TOKEN;\n };\n\n return RefreshTokenEntity;\n}(CredentialEntity);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * InteractionRequiredAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\n\n\nvar InteractionRequiredAuthErrorMessage = [\"interaction_required\", \"consent_required\", \"login_required\"];\nvar InteractionRequiredAuthSubErrorMessage = [\"message_only\", \"additional_action\", \"basic_action\", \"user_password_expired\", \"consent_required\"];\n/**\r\n * Error thrown when user interaction is required at the auth server.\r\n */\n\nvar InteractionRequiredAuthError =\n/** @class */\nfunction (_super) {\n __extends$1(InteractionRequiredAuthError, _super);\n\n function InteractionRequiredAuthError(errorCode, errorMessage, subError) {\n var _this = _super.call(this, errorCode, errorMessage, subError) || this;\n\n _this.name = \"InteractionRequiredAuthError\";\n Object.setPrototypeOf(_this, InteractionRequiredAuthError.prototype);\n return _this;\n }\n\n InteractionRequiredAuthError.isInteractionRequiredError = function (errorCode, errorString, subError) {\n var isInteractionRequiredErrorCode = !StringUtils.isEmpty(errorCode) && InteractionRequiredAuthErrorMessage.indexOf(errorCode) > -1;\n var isInteractionRequiredSubError = !StringUtils.isEmpty(subError) && InteractionRequiredAuthSubErrorMessage.indexOf(subError) > -1;\n var isInteractionRequiredErrorDesc = !StringUtils.isEmpty(errorString) && InteractionRequiredAuthErrorMessage.some(function (irErrorCode) {\n return errorString.indexOf(irErrorCode) > -1;\n });\n return isInteractionRequiredErrorCode || isInteractionRequiredErrorDesc || isInteractionRequiredSubError;\n };\n\n return InteractionRequiredAuthError;\n}(ServerError);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n\nvar CacheRecord =\n/** @class */\nfunction () {\n function CacheRecord(accountEntity, idTokenEntity, accessTokenEntity, refreshTokenEntity) {\n this.account = accountEntity;\n this.idToken = idTokenEntity;\n this.accessToken = accessTokenEntity;\n this.refreshToken = refreshTokenEntity;\n }\n\n return CacheRecord;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Class which provides helpers for OAuth 2.0 protocol specific values\r\n */\n\n\nvar ProtocolUtils =\n/** @class */\nfunction () {\n function ProtocolUtils() {}\n /**\r\n * Appends user state with random guid, or returns random guid.\r\n * @param userState\r\n * @param randomGuid\r\n */\n\n\n ProtocolUtils.setRequestState = function (cryptoObj, userState, meta) {\n var libraryState = ProtocolUtils.generateLibraryState(cryptoObj, meta);\n return !StringUtils.isEmpty(userState) ? \"\" + libraryState + Constants.RESOURCE_DELIM + userState : libraryState;\n };\n /**\r\n * Generates the state value used by the common library.\r\n * @param randomGuid\r\n * @param cryptoObj\r\n */\n\n\n ProtocolUtils.generateLibraryState = function (cryptoObj, meta) {\n if (!cryptoObj) {\n throw ClientAuthError.createNoCryptoObjectError(\"generateLibraryState\");\n } // Create a state object containing a unique id and the timestamp of the request creation\n\n\n var stateObj = {\n id: cryptoObj.createNewGuid(),\n ts: TimeUtils.nowSeconds()\n };\n\n if (meta) {\n stateObj.meta = meta;\n }\n\n var stateString = JSON.stringify(stateObj);\n return cryptoObj.base64Encode(stateString);\n };\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 */\n\n\n ProtocolUtils.parseRequestState = function (cryptoObj, state) {\n if (!cryptoObj) {\n throw ClientAuthError.createNoCryptoObjectError(\"parseRequestState\");\n }\n\n if (StringUtils.isEmpty(state)) {\n throw ClientAuthError.createInvalidStateError(state, \"Null, undefined or empty state\");\n }\n\n try {\n // Split the state between library state and user passed state and decode them separately\n var splitState = decodeURIComponent(state).split(Constants.RESOURCE_DELIM);\n var libraryState = splitState[0];\n var userState = splitState.length > 1 ? splitState.slice(1).join(Constants.RESOURCE_DELIM) : \"\";\n var libraryStateString = cryptoObj.base64Decode(libraryState);\n var libraryStateObj = JSON.parse(libraryStateString);\n return {\n userRequestState: !StringUtils.isEmpty(userState) ? userState : \"\",\n libraryState: libraryStateObj\n };\n } catch (e) {\n throw ClientAuthError.createInvalidStateError(state, e);\n }\n };\n\n return ProtocolUtils;\n}();\n/**\r\n * Class that handles response parsing.\r\n */\n\n\nvar ResponseHandler =\n/** @class */\nfunction () {\n function ResponseHandler(clientId, cacheStorage, cryptoObj, logger) {\n this.clientId = clientId;\n this.cacheStorage = cacheStorage;\n this.cryptoObj = cryptoObj;\n this.logger = logger;\n }\n /**\r\n * Function which validates server authorization code response.\r\n * @param serverResponseHash\r\n * @param cachedState\r\n * @param cryptoObj\r\n */\n\n\n ResponseHandler.prototype.validateServerAuthorizationCodeResponse = function (serverResponseHash, cachedState, cryptoObj) {\n if (decodeURIComponent(serverResponseHash.state) !== decodeURIComponent(cachedState)) {\n throw ClientAuthError.createStateMismatchError();\n } // Check for error\n\n\n if (serverResponseHash.error || serverResponseHash.error_description || serverResponseHash.suberror) {\n if (InteractionRequiredAuthError.isInteractionRequiredError(serverResponseHash.error, serverResponseHash.error_description, serverResponseHash.suberror)) {\n throw new InteractionRequiredAuthError(serverResponseHash.error, serverResponseHash.error_description, serverResponseHash.suberror);\n }\n\n throw new ServerError(serverResponseHash.error, serverResponseHash.error_description, serverResponseHash.suberror);\n }\n\n if (serverResponseHash.client_info) {\n buildClientInfo(serverResponseHash.client_info, cryptoObj);\n }\n };\n /**\r\n * Function which validates server authorization token response.\r\n * @param serverResponse\r\n */\n\n\n ResponseHandler.prototype.validateTokenResponse = function (serverResponse) {\n // Check for error\n if (serverResponse.error || serverResponse.error_description || serverResponse.suberror) {\n if (InteractionRequiredAuthError.isInteractionRequiredError(serverResponse.error, serverResponse.error_description, serverResponse.suberror)) {\n throw new InteractionRequiredAuthError(serverResponse.error, serverResponse.error_description, serverResponse.suberror);\n }\n\n var errString = serverResponse.error_codes + \" - [\" + serverResponse.timestamp + \"]: \" + serverResponse.error_description + \" - Correlation ID: \" + serverResponse.correlation_id + \" - Trace ID: \" + serverResponse.trace_id;\n throw new ServerError(serverResponse.error, errString);\n }\n };\n /**\r\n * Returns a constructed token response based on given string. Also manages the cache updates and cleanups.\r\n * @param serverTokenResponse\r\n * @param authority\r\n */\n\n\n ResponseHandler.prototype.handleServerTokenResponse = function (serverTokenResponse, authority, cachedNonce, cachedState, requestScopes) {\n // generate homeAccountId\n if (serverTokenResponse.client_info) {\n this.clientInfo = buildClientInfo(serverTokenResponse.client_info, this.cryptoObj);\n\n if (!StringUtils.isEmpty(this.clientInfo.uid) && !StringUtils.isEmpty(this.clientInfo.utid)) {\n this.homeAccountIdentifier = this.clientInfo.uid + \".\" + this.clientInfo.utid;\n }\n } else {\n this.homeAccountIdentifier = \"\";\n }\n\n var idTokenObj = null;\n\n if (!StringUtils.isEmpty(serverTokenResponse.id_token)) {\n // create an idToken object (not entity)\n idTokenObj = new IdToken(serverTokenResponse.id_token, this.cryptoObj); // token nonce check (TODO: Add a warning if no nonce is given?)\n\n if (!StringUtils.isEmpty(cachedNonce)) {\n if (idTokenObj.claims.nonce !== cachedNonce) {\n throw ClientAuthError.createNonceMismatchError();\n }\n }\n } // save the response tokens\n\n\n var requestStateObj = null;\n\n if (!StringUtils.isEmpty(cachedState)) {\n requestStateObj = ProtocolUtils.parseRequestState(this.cryptoObj, cachedState);\n }\n\n var cacheRecord = this.generateCacheRecord(serverTokenResponse, idTokenObj, authority, requestStateObj && requestStateObj.libraryState, requestScopes);\n this.cacheStorage.saveCacheRecord(cacheRecord);\n return ResponseHandler.generateAuthenticationResult(cacheRecord, idTokenObj, false, requestStateObj);\n };\n /**\r\n * Generates CacheRecord\r\n * @param serverTokenResponse\r\n * @param idTokenObj\r\n * @param authority\r\n */\n\n\n ResponseHandler.prototype.generateCacheRecord = function (serverTokenResponse, idTokenObj, authority, libraryState, requestScopes) {\n var reqEnvironment = authority.canonicalAuthorityUrlComponents.HostNameAndPort;\n var env = TrustedAuthority.getCloudDiscoveryMetadata(reqEnvironment) ? TrustedAuthority.getCloudDiscoveryMetadata(reqEnvironment).preferred_cache : \"\";\n\n if (StringUtils.isEmpty(env)) {\n throw ClientAuthError.createInvalidCacheEnvironmentError();\n } // IdToken\n\n\n var cachedIdToken = null;\n var cachedAccount = null;\n\n if (!StringUtils.isEmpty(serverTokenResponse.id_token)) {\n cachedIdToken = IdTokenEntity.createIdTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.id_token, this.clientId, idTokenObj.claims.tid);\n cachedAccount = this.generateAccountEntity(serverTokenResponse, idTokenObj, authority);\n } // AccessToken\n\n\n var cachedAccessToken = null;\n\n if (!StringUtils.isEmpty(serverTokenResponse.access_token)) {\n // If scopes not returned in server response, use request scopes\n var responseScopes = serverTokenResponse.scope ? ScopeSet.fromString(serverTokenResponse.scope) : new ScopeSet(requestScopes || []); // Expiration calculation\n\n var currentTime = TimeUtils.nowSeconds(); // If the request timestamp was sent in the library state, use that timestamp to calculate expiration. Otherwise, use current time.\n\n var timestamp = libraryState ? libraryState.ts : currentTime;\n var tokenExpirationSeconds = timestamp + serverTokenResponse.expires_in;\n var extendedTokenExpirationSeconds = tokenExpirationSeconds + serverTokenResponse.ext_expires_in;\n cachedAccessToken = AccessTokenEntity.createAccessTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.access_token, this.clientId, idTokenObj ? idTokenObj.claims.tid : authority.tenant, responseScopes.printScopesLowerCase(), tokenExpirationSeconds, extendedTokenExpirationSeconds);\n } // refreshToken\n\n\n var cachedRefreshToken = null;\n\n if (!StringUtils.isEmpty(serverTokenResponse.refresh_token)) {\n cachedRefreshToken = RefreshTokenEntity.createRefreshTokenEntity(this.homeAccountIdentifier, env, serverTokenResponse.refresh_token, this.clientId, serverTokenResponse.foci);\n }\n\n return new CacheRecord(cachedAccount, cachedIdToken, cachedAccessToken, cachedRefreshToken);\n };\n /**\r\n * Generate Account\r\n * @param serverTokenResponse\r\n * @param idToken\r\n * @param authority\r\n */\n\n\n ResponseHandler.prototype.generateAccountEntity = function (serverTokenResponse, idToken, authority) {\n var authorityType = authority.authorityType; // ADFS does not require client_info in the response\n\n if (authorityType === AuthorityType.Adfs) {\n return AccountEntity.createADFSAccount(authority, idToken);\n }\n\n if (StringUtils.isEmpty(serverTokenResponse.client_info)) {\n throw ClientAuthError.createClientInfoEmptyError(serverTokenResponse.client_info);\n }\n\n return AccountEntity.createAccount(serverTokenResponse.client_info, authority, idToken, this.cryptoObj);\n };\n /**\r\n * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache.\r\n *\r\n * Optionally takes a state string that is set as-is in the response.\r\n *\r\n * @param cacheRecord\r\n * @param idTokenObj\r\n * @param fromTokenCache\r\n * @param stateString\r\n */\n\n\n ResponseHandler.generateAuthenticationResult = function (cacheRecord, idTokenObj, fromTokenCache, requestState) {\n var accessToken = \"\";\n var responseScopes = [];\n var expiresOn = null;\n var extExpiresOn = null;\n var familyId = null;\n\n if (cacheRecord.accessToken) {\n accessToken = cacheRecord.accessToken.secret;\n responseScopes = ScopeSet.fromString(cacheRecord.accessToken.target).asArray();\n expiresOn = new Date(Number(cacheRecord.accessToken.expiresOn) * 1000);\n extExpiresOn = new Date(Number(cacheRecord.accessToken.extendedExpiresOn) * 1000);\n }\n\n if (cacheRecord.refreshToken) {\n familyId = cacheRecord.refreshToken.familyId || null;\n }\n\n var uid = idTokenObj ? idTokenObj.claims.oid || idTokenObj.claims.sub : \"\";\n var tid = idTokenObj ? idTokenObj.claims.tid : \"\";\n return {\n uniqueId: uid,\n tenantId: tid,\n scopes: responseScopes,\n account: cacheRecord.account ? cacheRecord.account.getAccountInfo() : null,\n idToken: idTokenObj ? idTokenObj.rawIdToken : \"\",\n idTokenClaims: idTokenObj ? idTokenObj.claims : null,\n accessToken: accessToken,\n fromCache: fromTokenCache,\n expiresOn: expiresOn,\n extExpiresOn: extExpiresOn,\n familyId: familyId,\n state: requestState ? requestState.userRequestState : \"\"\n };\n };\n\n return ResponseHandler;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Oauth2.0 Authorization Code client\r\n */\n\n\nvar AuthorizationCodeClient =\n/** @class */\nfunction (_super) {\n __extends$1(AuthorizationCodeClient, _super);\n\n function AuthorizationCodeClient(configuration) {\n return _super.call(this, configuration) || this;\n }\n /**\r\n * Creates the URL of the authorization request letting the user input credentials and consent to the\r\n * application. The URL target the /authorize endpoint of the authority configured in the\r\n * application object.\r\n *\r\n * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI\r\n * sent in the request and should contain an authorization code, which can then be used to acquire tokens via\r\n * acquireToken(AuthorizationCodeRequest)\r\n * @param request\r\n */\n\n\n AuthorizationCodeClient.prototype.getAuthCodeUrl = function (request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var queryString;\n return __generator$1(this, function (_a) {\n queryString = this.createAuthCodeUrlQueryString(request);\n return [2\n /*return*/\n , this.authority.authorizationEndpoint + \"?\" + queryString];\n });\n });\n };\n /**\r\n * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the\r\n * authorization_code_grant\r\n * @param request\r\n */\n\n\n AuthorizationCodeClient.prototype.acquireToken = function (request, cachedNonce, cachedState) {\n return __awaiter$1(this, void 0, void 0, function () {\n var response, responseHandler, tokenResponse;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.logger.info(\"in acquireToken call\");\n\n if (!request || StringUtils.isEmpty(request.code)) {\n throw ClientAuthError.createTokenRequestCannotBeMadeError();\n }\n\n return [4\n /*yield*/\n , this.executeTokenRequest(this.authority, request)];\n\n case 1:\n response = _a.sent();\n responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger); // Validate response. This function throws a server error if an error is returned by the server.\n\n responseHandler.validateTokenResponse(response.body);\n tokenResponse = responseHandler.handleServerTokenResponse(response.body, this.authority, cachedNonce, cachedState);\n return [2\n /*return*/\n , tokenResponse];\n }\n });\n });\n };\n /**\r\n * Handles the hash fragment response from public client code request. Returns a code response used by\r\n * the client to exchange for a token in acquireToken.\r\n * @param hashFragment\r\n */\n\n\n AuthorizationCodeClient.prototype.handleFragmentResponse = function (hashFragment, cachedState) {\n // Handle responses.\n var responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger); // Create UrlString object to remove leading # using getHash()\n\n var hashUrlString = new UrlString(hashFragment); // Deserialize hash fragment response parameters.\n\n var serverParams = UrlString.getDeserializedHash(hashUrlString.getHash()); // Get code response\n\n responseHandler.validateServerAuthorizationCodeResponse(serverParams, cachedState, this.cryptoUtils);\n return serverParams.code;\n };\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param authorityUri\r\n */\n\n\n AuthorizationCodeClient.prototype.getLogoutUri = function (logoutRequest) {\n // Throw error if logoutRequest is null/undefined\n if (!logoutRequest) {\n throw ClientConfigurationError.createEmptyLogoutRequestError();\n }\n\n if (logoutRequest.account) {\n // Clear given account.\n this.cacheManager.removeAccount(AccountEntity.generateAccountCacheKey(logoutRequest.account));\n } else {\n // Clear all accounts and tokens\n this.cacheManager.clear();\n } // Get postLogoutRedirectUri.\n\n\n var postLogoutUriParam = logoutRequest.postLogoutRedirectUri ? \"?\" + AADServerParamKeys.POST_LOGOUT_URI + \"=\" + encodeURIComponent(logoutRequest.postLogoutRedirectUri) : \"\";\n var correlationIdParam = logoutRequest.correlationId ? \"&\" + AADServerParamKeys.CLIENT_REQUEST_ID + \"=\" + encodeURIComponent(logoutRequest.correlationId) : \"\"; // Construct logout URI.\n\n var logoutUri = \"\" + this.authority.endSessionEndpoint + postLogoutUriParam + correlationIdParam;\n return logoutUri;\n };\n /**\r\n * Executes POST request to token endpoint\r\n * @param authority\r\n * @param request\r\n */\n\n\n AuthorizationCodeClient.prototype.executeTokenRequest = function (authority, request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var requestBody, headers;\n return __generator$1(this, function (_a) {\n requestBody = this.createTokenRequestBody(request);\n headers = this.createDefaultTokenRequestHeaders();\n return [2\n /*return*/\n , this.executePostToTokenEndpoint(authority.tokenEndpoint, requestBody, headers)];\n });\n });\n };\n /**\r\n * Generates a map for all the params to be sent to the service\r\n * @param request\r\n */\n\n\n AuthorizationCodeClient.prototype.createTokenRequestBody = function (request) {\n var parameterBuilder = new RequestParameterBuilder();\n parameterBuilder.addClientId(this.config.authOptions.clientId); // validate the redirectUri (to be a non null value)\n\n parameterBuilder.addRedirectUri(request.redirectUri);\n var scopeSet = new ScopeSet(request.scopes || []);\n parameterBuilder.addScopes(scopeSet); // add code: user set, not validated\n\n parameterBuilder.addAuthorizationCode(request.code); // add code_verifier if passed\n\n if (request.codeVerifier) {\n parameterBuilder.addCodeVerifier(request.codeVerifier);\n }\n\n if (this.config.clientCredentials.clientSecret) {\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\n }\n\n if (this.config.clientCredentials.clientAssertion) {\n var clientAssertion = this.config.clientCredentials.clientAssertion;\n parameterBuilder.addClientAssertion(clientAssertion.assertion);\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\n }\n\n parameterBuilder.addGrantType(GrantType.AUTHORIZATION_CODE_GRANT);\n parameterBuilder.addClientInfo();\n var correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\n parameterBuilder.addCorrelationId(correlationId);\n\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\n }\n\n return parameterBuilder.createQueryString();\n };\n /**\r\n * This API validates the `AuthorizationCodeUrlRequest` and creates a URL\r\n * @param request\r\n */\n\n\n AuthorizationCodeClient.prototype.createAuthCodeUrlQueryString = function (request) {\n var parameterBuilder = new RequestParameterBuilder();\n parameterBuilder.addClientId(this.config.authOptions.clientId);\n var scopeSet = new ScopeSet(request.scopes || []);\n\n if (request.extraScopesToConsent) {\n scopeSet.appendScopes(request.extraScopesToConsent);\n }\n\n parameterBuilder.addScopes(scopeSet); // validate the redirectUri (to be a non null value)\n\n parameterBuilder.addRedirectUri(request.redirectUri); // generate the correlationId if not set by the user and add\n\n var correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\n parameterBuilder.addCorrelationId(correlationId); // add response_mode. If not passed in it defaults to query.\n\n parameterBuilder.addResponseMode(request.responseMode); // add response_type = code\n\n parameterBuilder.addResponseTypeCode(); // add library info parameters\n\n parameterBuilder.addLibraryInfo(this.config.libraryInfo); // add client_info=1\n\n parameterBuilder.addClientInfo();\n\n if (request.codeChallenge) {\n parameterBuilder.addCodeChallengeParams(request.codeChallenge, request.codeChallengeMethod);\n }\n\n if (request.prompt) {\n parameterBuilder.addPrompt(request.prompt);\n }\n\n if (request.loginHint) {\n parameterBuilder.addLoginHint(request.loginHint);\n }\n\n if (request.domainHint) {\n parameterBuilder.addDomainHint(request.domainHint);\n }\n\n if (request.sid) {\n parameterBuilder.addSid(request.sid);\n }\n\n if (request.nonce) {\n parameterBuilder.addNonce(request.nonce);\n }\n\n if (request.state) {\n parameterBuilder.addState(request.state);\n }\n\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\n }\n\n if (request.extraQueryParameters) {\n parameterBuilder.addExtraQueryParameters(request.extraQueryParameters);\n }\n\n return parameterBuilder.createQueryString();\n };\n\n return AuthorizationCodeClient;\n}(BaseClient);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * OAuth2.0 Device code client\r\n */\n\n\nvar DeviceCodeClient =\n/** @class */\nfunction (_super) {\n __extends$1(DeviceCodeClient, _super);\n\n function DeviceCodeClient(configuration) {\n return _super.call(this, configuration) || this;\n }\n /**\r\n * Gets device code from device code endpoint, calls back to with device code response, and\r\n * polls token endpoint to exchange device code for tokens\r\n * @param request\r\n */\n\n\n DeviceCodeClient.prototype.acquireToken = function (request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var deviceCodeResponse, response, responseHandler, tokenResponse;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.getDeviceCode(request)];\n\n case 1:\n deviceCodeResponse = _a.sent();\n request.deviceCodeCallback(deviceCodeResponse);\n return [4\n /*yield*/\n , this.acquireTokenWithDeviceCode(request, deviceCodeResponse)];\n\n case 2:\n response = _a.sent();\n responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger); // Validate response. This function throws a server error if an error is returned by the server.\n\n responseHandler.validateTokenResponse(response);\n tokenResponse = responseHandler.handleServerTokenResponse(response, this.authority);\n return [2\n /*return*/\n , tokenResponse];\n }\n });\n });\n };\n /**\r\n * Creates device code request and executes http GET\r\n * @param request\r\n */\n\n\n DeviceCodeClient.prototype.getDeviceCode = function (request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var queryString, headers;\n return __generator$1(this, function (_a) {\n queryString = this.createQueryString(request);\n headers = this.createDefaultLibraryHeaders();\n return [2\n /*return*/\n , this.executePostRequestToDeviceCodeEndpoint(this.authority.deviceCodeEndpoint, queryString, headers)];\n });\n });\n };\n /**\r\n * Executes POST request to device code endpoint\r\n * @param deviceCodeEndpoint\r\n * @param queryString\r\n * @param headers\r\n */\n\n\n DeviceCodeClient.prototype.executePostRequestToDeviceCodeEndpoint = function (deviceCodeEndpoint, queryString, headers) {\n return __awaiter$1(this, void 0, void 0, function () {\n var _a, userCode, deviceCode, verificationUri, expiresIn, interval, message;\n\n return __generator$1(this, function (_b) {\n switch (_b.label) {\n case 0:\n return [4\n /*yield*/\n , this.networkClient.sendPostRequestAsync(deviceCodeEndpoint, {\n body: queryString,\n headers: headers\n })];\n\n case 1:\n _a = _b.sent().body, userCode = _a.user_code, deviceCode = _a.device_code, verificationUri = _a.verification_uri, expiresIn = _a.expires_in, interval = _a.interval, message = _a.message;\n return [2\n /*return*/\n , {\n userCode: userCode,\n deviceCode: deviceCode,\n verificationUri: verificationUri,\n expiresIn: expiresIn,\n interval: interval,\n message: message\n }];\n }\n });\n });\n };\n /**\r\n * Create device code endpoint query parameters and returns string\r\n */\n\n\n DeviceCodeClient.prototype.createQueryString = function (request) {\n var parameterBuilder = new RequestParameterBuilder();\n var scopeSet = new ScopeSet(request.scopes || []);\n parameterBuilder.addScopes(scopeSet);\n parameterBuilder.addClientId(this.config.authOptions.clientId);\n\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\n }\n\n return parameterBuilder.createQueryString();\n };\n /**\r\n * Creates token request with device code response and polls token endpoint at interval set by the device code\r\n * response\r\n * @param request\r\n * @param deviceCodeResponse\r\n */\n\n\n DeviceCodeClient.prototype.acquireTokenWithDeviceCode = function (request, deviceCodeResponse) {\n return __awaiter$1(this, void 0, void 0, function () {\n var requestBody, headers, deviceCodeExpirationTime, pollingIntervalMilli;\n\n var _this = this;\n\n return __generator$1(this, function (_a) {\n requestBody = this.createTokenRequestBody(request, deviceCodeResponse);\n headers = this.createDefaultTokenRequestHeaders();\n deviceCodeExpirationTime = TimeUtils.nowSeconds() + deviceCodeResponse.expiresIn;\n pollingIntervalMilli = deviceCodeResponse.interval * 1000; // Poll token endpoint while (device code is not expired AND operation has not been cancelled by\n // setting CancellationToken.cancel = true). POST request is sent at interval set by pollingIntervalMilli\n\n return [2\n /*return*/\n , new Promise(function (resolve, reject) {\n var intervalId = setInterval(function () {\n return __awaiter$1(_this, void 0, void 0, function () {\n var response, error_1;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 5,, 6]);\n\n if (!request.cancel) return [3\n /*break*/\n , 1];\n this.logger.error(\"Token request cancelled by setting DeviceCodeRequest.cancel = true\");\n clearInterval(intervalId);\n reject(ClientAuthError.createDeviceCodeCancelledError());\n return [3\n /*break*/\n , 4];\n\n case 1:\n if (!(TimeUtils.nowSeconds() > deviceCodeExpirationTime)) return [3\n /*break*/\n , 2];\n this.logger.error(\"Device code expired. Expiration time of device code was \" + deviceCodeExpirationTime);\n clearInterval(intervalId);\n reject(ClientAuthError.createDeviceCodeExpiredError());\n return [3\n /*break*/\n , 4];\n\n case 2:\n return [4\n /*yield*/\n , this.executePostToTokenEndpoint(this.authority.tokenEndpoint, requestBody, headers)];\n\n case 3:\n response = _a.sent();\n\n if (response.body && response.body.error == Constants.AUTHORIZATION_PENDING) {\n // user authorization is pending. Sleep for polling interval and try again\n this.logger.info(response.body.error_description);\n } else {\n clearInterval(intervalId);\n resolve(response.body);\n }\n\n _a.label = 4;\n\n case 4:\n return [3\n /*break*/\n , 6];\n\n case 5:\n error_1 = _a.sent();\n clearInterval(intervalId);\n reject(error_1);\n return [3\n /*break*/\n , 6];\n\n case 6:\n return [2\n /*return*/\n ];\n }\n });\n });\n }, pollingIntervalMilli);\n })];\n });\n });\n };\n /**\r\n * Creates query parameters and converts to string.\r\n * @param request\r\n * @param deviceCodeResponse\r\n */\n\n\n DeviceCodeClient.prototype.createTokenRequestBody = function (request, deviceCodeResponse) {\n var requestParameters = new RequestParameterBuilder();\n var scopeSet = new ScopeSet(request.scopes || []);\n requestParameters.addScopes(scopeSet);\n requestParameters.addClientId(this.config.authOptions.clientId);\n requestParameters.addGrantType(GrantType.DEVICE_CODE_GRANT);\n requestParameters.addDeviceCode(deviceCodeResponse.deviceCode);\n var correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\n requestParameters.addCorrelationId(correlationId);\n requestParameters.addClientInfo();\n\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\n requestParameters.addClaims(request.claims, this.config.authOptions.clientCapabilities);\n }\n\n return requestParameters.createQueryString();\n };\n\n return DeviceCodeClient;\n}(BaseClient);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * OAuth2.0 refresh token client\r\n */\n\n\nvar RefreshTokenClient =\n/** @class */\nfunction (_super) {\n __extends$1(RefreshTokenClient, _super);\n\n function RefreshTokenClient(configuration) {\n return _super.call(this, configuration) || this;\n }\n\n RefreshTokenClient.prototype.acquireToken = function (request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var response, responseHandler, tokenResponse;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.executeTokenRequest(request, this.authority)];\n\n case 1:\n response = _a.sent();\n responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger);\n responseHandler.validateTokenResponse(response.body);\n tokenResponse = responseHandler.handleServerTokenResponse(response.body, this.authority);\n return [2\n /*return*/\n , tokenResponse];\n }\n });\n });\n };\n\n RefreshTokenClient.prototype.executeTokenRequest = function (request, authority) {\n return __awaiter$1(this, void 0, void 0, function () {\n var requestBody, headers;\n return __generator$1(this, function (_a) {\n requestBody = this.createTokenRequestBody(request);\n headers = this.createDefaultTokenRequestHeaders();\n return [2\n /*return*/\n , this.executePostToTokenEndpoint(authority.tokenEndpoint, requestBody, headers)];\n });\n });\n };\n\n RefreshTokenClient.prototype.createTokenRequestBody = function (request) {\n var parameterBuilder = new RequestParameterBuilder();\n parameterBuilder.addClientId(this.config.authOptions.clientId);\n var scopeSet = new ScopeSet(request.scopes || []);\n parameterBuilder.addScopes(scopeSet);\n parameterBuilder.addGrantType(GrantType.REFRESH_TOKEN_GRANT);\n parameterBuilder.addClientInfo();\n var correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\n parameterBuilder.addCorrelationId(correlationId);\n parameterBuilder.addRefreshToken(request.refreshToken);\n\n if (this.config.clientCredentials.clientSecret) {\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\n }\n\n if (this.config.clientCredentials.clientAssertion) {\n var clientAssertion = this.config.clientCredentials.clientAssertion;\n parameterBuilder.addClientAssertion(clientAssertion.assertion);\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\n }\n\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\n }\n\n return parameterBuilder.createQueryString();\n };\n\n return RefreshTokenClient;\n}(BaseClient);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * OAuth2.0 client credential grant\r\n */\n\n\nvar ClientCredentialClient =\n/** @class */\nfunction (_super) {\n __extends$1(ClientCredentialClient, _super);\n\n function ClientCredentialClient(configuration) {\n return _super.call(this, configuration) || this;\n }\n\n ClientCredentialClient.prototype.acquireToken = function (request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var cachedAuthenticationResult;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n this.scopeSet = new ScopeSet(request.scopes || []);\n if (!request.skipCache) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , this.executeTokenRequest(request, this.authority)];\n\n case 1:\n return [2\n /*return*/\n , _a.sent()];\n\n case 2:\n cachedAuthenticationResult = this.getCachedAuthenticationResult();\n if (!(cachedAuthenticationResult != null)) return [3\n /*break*/\n , 3];\n return [2\n /*return*/\n , cachedAuthenticationResult];\n\n case 3:\n return [4\n /*yield*/\n , this.executeTokenRequest(request, this.authority)];\n\n case 4:\n return [2\n /*return*/\n , _a.sent()];\n }\n });\n });\n };\n\n ClientCredentialClient.prototype.getCachedAuthenticationResult = function () {\n var cachedAccessToken = this.readAccessTokenFromCache();\n\n if (!cachedAccessToken || TimeUtils.isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) {\n return null;\n }\n\n return ResponseHandler.generateAuthenticationResult({\n account: null,\n accessToken: cachedAccessToken,\n idToken: null,\n refreshToken: null\n }, null, true);\n };\n\n ClientCredentialClient.prototype.readAccessTokenFromCache = function () {\n var accessTokenFilter = {\n homeAccountId: \"\",\n environment: this.authority.canonicalAuthorityUrlComponents.HostNameAndPort,\n credentialType: CredentialType.ACCESS_TOKEN,\n clientId: this.config.authOptions.clientId,\n realm: this.authority.tenant,\n target: this.scopeSet.printScopesLowerCase()\n };\n var credentialCache = this.cacheManager.getCredentialsFilteredBy(accessTokenFilter);\n var accessTokens = Object.keys(credentialCache.accessTokens).map(function (key) {\n return credentialCache.accessTokens[key];\n });\n\n if (accessTokens.length < 1) {\n return null;\n }\n\n return accessTokens[0];\n };\n\n ClientCredentialClient.prototype.executeTokenRequest = function (request, authority) {\n return __awaiter$1(this, void 0, void 0, function () {\n var requestBody, headers, response, responseHandler, tokenResponse;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n requestBody = this.createTokenRequestBody(request);\n headers = this.createDefaultTokenRequestHeaders();\n return [4\n /*yield*/\n , this.executePostToTokenEndpoint(authority.tokenEndpoint, requestBody, headers)];\n\n case 1:\n response = _a.sent();\n responseHandler = new ResponseHandler(this.config.authOptions.clientId, this.cacheManager, this.cryptoUtils, this.logger);\n responseHandler.validateTokenResponse(response.body);\n tokenResponse = responseHandler.handleServerTokenResponse(response.body, this.authority, null, null, request.scopes);\n return [2\n /*return*/\n , tokenResponse];\n }\n });\n });\n };\n\n ClientCredentialClient.prototype.createTokenRequestBody = function (request) {\n var parameterBuilder = new RequestParameterBuilder();\n parameterBuilder.addClientId(this.config.authOptions.clientId);\n parameterBuilder.addScopes(this.scopeSet);\n parameterBuilder.addGrantType(GrantType.CLIENT_CREDENTIALS_GRANT);\n var correlationId = request.correlationId || this.config.cryptoInterface.createNewGuid();\n parameterBuilder.addCorrelationId(correlationId);\n\n if (this.config.clientCredentials.clientSecret) {\n parameterBuilder.addClientSecret(this.config.clientCredentials.clientSecret);\n }\n\n if (this.config.clientCredentials.clientAssertion) {\n var clientAssertion = this.config.clientCredentials.clientAssertion;\n parameterBuilder.addClientAssertion(clientAssertion.assertion);\n parameterBuilder.addClientAssertionType(clientAssertion.assertionType);\n }\n\n if (!StringUtils.isEmpty(request.claims) || this.config.authOptions.clientCapabilities && this.config.authOptions.clientCapabilities.length > 0) {\n parameterBuilder.addClaims(request.claims, this.config.authOptions.clientCapabilities);\n }\n\n return parameterBuilder.createQueryString();\n };\n\n return ClientCredentialClient;\n}(BaseClient);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n\nvar SilentFlowClient =\n/** @class */\nfunction (_super) {\n __extends$1(SilentFlowClient, _super);\n\n function SilentFlowClient(configuration) {\n return _super.call(this, configuration) || this;\n }\n /**\r\n * Retrieves a token from cache if it is still valid, or uses the cached refresh token to renew\r\n * the given token and returns the renewed token\r\n * @param request\r\n */\n\n\n SilentFlowClient.prototype.acquireToken = function (request) {\n return __awaiter$1(this, void 0, void 0, function () {\n var requestScopes, accountKey, cachedAccount, homeAccountId, environment, cachedAccessToken, cachedRefreshToken, refreshTokenClient, refreshTokenRequest, cachedIdToken, idTokenObj;\n return __generator$1(this, function (_a) {\n // Cannot renew token if no request object is given.\n if (!request) {\n throw ClientConfigurationError.createEmptyTokenRequestError();\n } // We currently do not support silent flow for account === null use cases; This will be revisited for confidential flow usecases\n\n\n if (!request.account) {\n throw ClientAuthError.createNoAccountInSilentRequestError();\n }\n\n requestScopes = new ScopeSet(request.scopes || []);\n accountKey = AccountEntity.generateAccountCacheKey(request.account);\n cachedAccount = this.cacheManager.getAccount(accountKey);\n homeAccountId = cachedAccount.homeAccountId;\n environment = cachedAccount.environment;\n cachedAccessToken = this.readAccessTokenFromCache(homeAccountId, environment, requestScopes, cachedAccount.realm);\n cachedRefreshToken = this.readRefreshTokenFromCache(homeAccountId, environment); // Check if refresh is forced, claims are being requested or if tokens are expired. If neither are true, return a token response with the found token entry.\n\n if (this.isRefreshRequired(request, cachedAccessToken)) {\n // no refresh Token\n if (!cachedRefreshToken) {\n throw ClientAuthError.createNoTokensFoundError();\n }\n\n refreshTokenClient = new RefreshTokenClient(this.config);\n refreshTokenRequest = _assign$(_assign$({}, request), {\n refreshToken: cachedRefreshToken.secret\n });\n return [2\n /*return*/\n , refreshTokenClient.acquireToken(refreshTokenRequest)];\n } // Return tokens from cache\n\n\n if (this.config.serverTelemetryManager) {\n this.config.serverTelemetryManager.incrementCacheHits();\n }\n\n cachedIdToken = this.readIdTokenFromCache(homeAccountId, environment, cachedAccount.realm);\n idTokenObj = new IdToken(cachedIdToken.secret, this.config.cryptoInterface);\n return [2\n /*return*/\n , ResponseHandler.generateAuthenticationResult({\n account: cachedAccount,\n accessToken: cachedAccessToken,\n idToken: cachedIdToken,\n refreshToken: cachedRefreshToken\n }, idTokenObj, true)];\n });\n });\n };\n\n SilentFlowClient.prototype.isRefreshRequired = function (request, cachedAccessToken) {\n if (request.forceRefresh || request.claims) {\n // Must refresh due to request parameters\n return true;\n } else if (!cachedAccessToken || TimeUtils.isTokenExpired(cachedAccessToken.expiresOn, this.config.systemOptions.tokenRenewalOffsetSeconds)) {\n // Must refresh due to expired or non-existent access_token\n return true;\n }\n\n return false;\n };\n /**\r\n * fetches idToken from cache if present\r\n * @param request\r\n */\n\n\n SilentFlowClient.prototype.readIdTokenFromCache = function (homeAccountId, environment, inputRealm) {\n var idTokenKey = CredentialEntity.generateCredentialCacheKey(homeAccountId, environment, CredentialType.ID_TOKEN, this.config.authOptions.clientId, inputRealm);\n return this.cacheManager.getCredential(idTokenKey);\n };\n /**\r\n * fetches accessToken from cache if present\r\n * @param request\r\n * @param scopes\r\n */\n\n\n SilentFlowClient.prototype.readAccessTokenFromCache = function (homeAccountId, environment, scopes, inputRealm) {\n var accessTokenFilter = {\n homeAccountId: homeAccountId,\n environment: environment,\n credentialType: CredentialType.ACCESS_TOKEN,\n clientId: this.config.authOptions.clientId,\n realm: inputRealm,\n target: scopes.printScopesLowerCase()\n };\n var credentialCache = this.cacheManager.getCredentialsFilteredBy(accessTokenFilter);\n var accessTokens = Object.keys(credentialCache.accessTokens).map(function (key) {\n return credentialCache.accessTokens[key];\n });\n if (accessTokens.length > 1) ;else if (accessTokens.length < 1) {\n return null;\n }\n return accessTokens[0];\n };\n /**\r\n * fetches refreshToken from cache if present\r\n * @param request\r\n */\n\n\n SilentFlowClient.prototype.readRefreshTokenFromCache = function (homeAccountId, environment) {\n var refreshTokenKey = CredentialEntity.generateCredentialCacheKey(homeAccountId, environment, CredentialType.REFRESH_TOKEN, this.config.authOptions.clientId);\n return this.cacheManager.getCredential(refreshTokenKey);\n };\n\n return SilentFlowClient;\n}(BaseClient);\n/**\r\n * The authority class validates the authority URIs used by the user, and retrieves the OpenID Configuration Data from the\r\n * endpoint. It will store the pertinent config data in this object for use during token calls.\r\n */\n\n\nvar Authority =\n/** @class */\nfunction () {\n function Authority(authority, networkInterface) {\n this.canonicalAuthority = authority;\n\n this._canonicalAuthority.validateAsUri();\n\n this.networkInterface = networkInterface;\n }\n\n Object.defineProperty(Authority.prototype, \"authorityType\", {\n // See above for AuthorityType\n get: function get() {\n var pathSegments = this.canonicalAuthorityUrlComponents.PathSegments;\n\n if (pathSegments.length && pathSegments[0].toLowerCase() === Constants.ADFS) {\n return AuthorityType.Adfs;\n }\n\n return AuthorityType.Default;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"canonicalAuthority\", {\n /**\r\n * A URL that is the authority set by the developer\r\n */\n get: function get() {\n return this._canonicalAuthority.urlString;\n },\n\n /**\r\n * Sets canonical authority.\r\n */\n set: function set(url) {\n this._canonicalAuthority = new UrlString(url);\n\n this._canonicalAuthority.validateAsUri();\n\n this._canonicalAuthorityUrlComponents = null;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"canonicalAuthorityUrlComponents\", {\n /**\r\n * Get authority components.\r\n */\n get: function get() {\n if (!this._canonicalAuthorityUrlComponents) {\n this._canonicalAuthorityUrlComponents = this._canonicalAuthority.getUrlComponents();\n }\n\n return this._canonicalAuthorityUrlComponents;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"tenant\", {\n /**\r\n * Get tenant for authority.\r\n */\n get: function get() {\n return this.canonicalAuthorityUrlComponents.PathSegments[0];\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"authorizationEndpoint\", {\n /**\r\n * OAuth /authorize endpoint for requests\r\n */\n get: function get() {\n if (this.discoveryComplete()) {\n return this.replaceTenant(this.tenantDiscoveryResponse.authorization_endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"tokenEndpoint\", {\n /**\r\n * OAuth /token endpoint for requests\r\n */\n get: function get() {\n if (this.discoveryComplete()) {\n return this.replaceTenant(this.tenantDiscoveryResponse.token_endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"deviceCodeEndpoint\", {\n get: function get() {\n if (this.discoveryComplete()) {\n return this.tenantDiscoveryResponse.token_endpoint.replace(\"/token\", \"/devicecode\");\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"endSessionEndpoint\", {\n /**\r\n * OAuth logout endpoint for requests\r\n */\n get: function get() {\n if (this.discoveryComplete()) {\n return this.replaceTenant(this.tenantDiscoveryResponse.end_session_endpoint);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(Authority.prototype, \"selfSignedJwtAudience\", {\n /**\r\n * OAuth issuer for requests\r\n */\n get: function get() {\n if (this.discoveryComplete()) {\n return this.replaceTenant(this.tenantDiscoveryResponse.issuer);\n } else {\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(\"Discovery incomplete.\");\n }\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Replaces tenant in url path with current tenant. Defaults to common.\r\n * @param urlString\r\n */\n\n Authority.prototype.replaceTenant = function (urlString) {\n return urlString.replace(/{tenant}|{tenantid}/g, this.tenant);\n };\n\n Object.defineProperty(Authority.prototype, \"defaultOpenIdConfigurationEndpoint\", {\n /**\r\n * The default open id configuration endpoint for any canonical authority.\r\n */\n get: function get() {\n if (this.authorityType === AuthorityType.Adfs) {\n return this.canonicalAuthority + \".well-known/openid-configuration\";\n }\n\n return this.canonicalAuthority + \"v2.0/.well-known/openid-configuration\";\n },\n enumerable: true,\n configurable: true\n });\n /**\r\n * Boolean that returns whethr or not tenant discovery has been completed.\r\n */\n\n Authority.prototype.discoveryComplete = function () {\n return !!this.tenantDiscoveryResponse;\n };\n /**\r\n * Gets OAuth endpoints from the given OpenID configuration endpoint.\r\n * @param openIdConfigurationEndpoint\r\n */\n\n\n Authority.prototype.discoverEndpoints = function (openIdConfigurationEndpoint) {\n return __awaiter$1(this, void 0, void 0, function () {\n return __generator$1(this, function (_a) {\n return [2\n /*return*/\n , this.networkInterface.sendGetRequestAsync(openIdConfigurationEndpoint)];\n });\n });\n };\n\n Object.defineProperty(Authority.prototype, \"aadInstanceDiscoveryEndpointUrl\", {\n // Default AAD Instance Discovery Endpoint\n get: function get() {\n return \"\" + Constants.AAD_INSTANCE_DISCOVERY_ENDPT + this.canonicalAuthority + \"oauth2/v2.0/authorize\";\n },\n enumerable: true,\n configurable: true\n });\n\n Authority.prototype.validateAndSetPreferredNetwork = function () {\n return __awaiter$1(this, void 0, void 0, function () {\n var host, preferredNetwork;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n host = this.canonicalAuthorityUrlComponents.HostNameAndPort;\n if (!(TrustedAuthority.getTrustedHostList().length === 0)) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , TrustedAuthority.setTrustedAuthoritiesFromNetwork(this._canonicalAuthority, this.networkInterface)];\n\n case 1:\n _a.sent();\n\n _a.label = 2;\n\n case 2:\n if (!TrustedAuthority.IsInTrustedHostList(host)) {\n throw ClientConfigurationError.createUntrustedAuthorityError();\n }\n\n preferredNetwork = TrustedAuthority.getCloudDiscoveryMetadata(host).preferred_network;\n\n if (host !== preferredNetwork) {\n this.canonicalAuthority = this.canonicalAuthority.replace(host, preferredNetwork);\n }\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Perform endpoint discovery to discover the /authorize, /token and logout endpoints.\r\n */\n\n\n Authority.prototype.resolveEndpointsAsync = function () {\n return __awaiter$1(this, void 0, void 0, function () {\n var openIdConfigEndpoint, response;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.validateAndSetPreferredNetwork()];\n\n case 1:\n _a.sent();\n\n openIdConfigEndpoint = this.defaultOpenIdConfigurationEndpoint;\n return [4\n /*yield*/\n , this.discoverEndpoints(openIdConfigEndpoint)];\n\n case 2:\n response = _a.sent();\n this.tenantDiscoveryResponse = response.body;\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n return Authority;\n}();\n\nvar AuthorityFactory =\n/** @class */\nfunction () {\n function AuthorityFactory() {}\n /**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\r\n *\r\n * Also performs endpoint discovery.\r\n *\r\n * @param authorityUri\r\n * @param networkClient\r\n */\n\n\n AuthorityFactory.createDiscoveredInstance = function (authorityUri, networkClient) {\n return __awaiter$1(this, void 0, void 0, function () {\n var acquireTokenAuthority, e_1;\n return __generator$1(this, function (_a) {\n switch (_a.label) {\n case 0:\n acquireTokenAuthority = AuthorityFactory.createInstance(authorityUri, networkClient);\n\n if (acquireTokenAuthority.discoveryComplete()) {\n return [2\n /*return*/\n , acquireTokenAuthority];\n }\n\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 3,, 4]);\n\n return [4\n /*yield*/\n , acquireTokenAuthority.resolveEndpointsAsync()];\n\n case 2:\n _a.sent();\n\n return [2\n /*return*/\n , acquireTokenAuthority];\n\n case 3:\n e_1 = _a.sent();\n throw ClientAuthError.createEndpointDiscoveryIncompleteError(e_1);\n\n case 4:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Create an authority object of the correct type based on the url\r\n * Performs basic authority validation - checks to see if the authority is of a valid type (i.e. aad, b2c, adfs)\r\n *\r\n * Does not perform endpoint discovery.\r\n *\r\n * @param authorityUrl\r\n * @param networkInterface\r\n */\n\n\n AuthorityFactory.createInstance = function (authorityUrl, networkInterface) {\n // Throw error if authority url is empty\n if (StringUtils.isEmpty(authorityUrl)) {\n throw ClientConfigurationError.createUrlEmptyError();\n }\n\n return new Authority(authorityUrl, networkInterface);\n };\n\n return AuthorityFactory;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n\nvar ServerTelemetryManager =\n/** @class */\nfunction () {\n function ServerTelemetryManager(telemetryRequest, cacheManager) {\n this.cacheManager = cacheManager;\n this.apiId = telemetryRequest.apiId;\n this.correlationId = telemetryRequest.correlationId;\n this.forceRefresh = telemetryRequest.forceRefresh || false;\n this.telemetryCacheKey = SERVER_TELEM_CONSTANTS.CACHE_KEY + Separators.CACHE_KEY_SEPARATOR + telemetryRequest.clientId;\n } // API to add MSER Telemetry to request\n\n\n ServerTelemetryManager.prototype.generateCurrentRequestHeaderValue = function () {\n var forceRefreshInt = this.forceRefresh ? 1 : 0;\n var request = \"\" + this.apiId + SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR + forceRefreshInt;\n var platformFields = \"\"; // TODO: Determine what we want to include\n\n return [SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, request, platformFields].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\n }; // API to add MSER Telemetry for the last failed request\n\n\n ServerTelemetryManager.prototype.generateLastRequestHeaderValue = function () {\n var lastRequests = this.getLastRequests();\n var failedRequests = lastRequests.failedRequests.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\n var errors = lastRequests.errors.join(SERVER_TELEM_CONSTANTS.VALUE_SEPARATOR);\n var platformFields = lastRequests.errorCount;\n return [SERVER_TELEM_CONSTANTS.SCHEMA_VERSION, lastRequests.cacheHits, failedRequests, errors, platformFields].join(SERVER_TELEM_CONSTANTS.CATEGORY_SEPARATOR);\n }; // API to cache token failures for MSER data capture\n\n\n ServerTelemetryManager.prototype.cacheFailedRequest = function (error) {\n var lastRequests = this.getLastRequests();\n lastRequests.failedRequests.push(this.apiId, this.correlationId);\n lastRequests.errors.push(error.errorCode);\n lastRequests.errorCount += 1;\n\n if (lastRequests.errors.length > SERVER_TELEM_CONSTANTS.FAILURE_LIMIT) {\n // Prevent request headers from becoming too large due to excessive failures\n lastRequests.failedRequests.shift(); // Remove apiId\n\n lastRequests.failedRequests.shift(); // Remove correlationId\n\n lastRequests.errors.shift();\n }\n\n this.cacheManager.setItem(this.telemetryCacheKey, lastRequests, CacheSchemaType.TELEMETRY);\n return;\n };\n\n ServerTelemetryManager.prototype.incrementCacheHits = function () {\n var lastRequests = this.getLastRequests();\n lastRequests.cacheHits += 1;\n this.cacheManager.setItem(this.telemetryCacheKey, lastRequests, CacheSchemaType.TELEMETRY);\n return lastRequests.cacheHits;\n };\n\n ServerTelemetryManager.prototype.getLastRequests = function () {\n var initialValue = {\n failedRequests: [],\n errors: [],\n errorCount: 0,\n cacheHits: 0\n };\n var lastRequests = this.cacheManager.getItem(this.telemetryCacheKey, CacheSchemaType.TELEMETRY);\n return lastRequests || initialValue;\n };\n\n ServerTelemetryManager.prototype.clearTelemetryCache = function () {\n this.cacheManager.removeItem(this.telemetryCacheKey);\n };\n\n return ServerTelemetryManager;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Constants\r\n */\n\n\nvar BrowserConstants = {\n // Local storage constant string\n CACHE_LOCATION_LOCAL: \"localStorage\",\n // Session storage constant string\n CACHE_LOCATION_SESSION: \"sessionStorage\",\n // Interaction status key (only used for browsers)\n INTERACTION_STATUS_KEY: \"interaction.status\",\n // Interaction in progress cache value\n INTERACTION_IN_PROGRESS_VALUE: \"interaction_in_progress\",\n // Invalid grant error code\n INVALID_GRANT_ERROR: \"invalid_grant\",\n // Default popup window width\n POPUP_WIDTH: 483,\n // Default popup window height\n POPUP_HEIGHT: 600,\n // Default popup monitor poll interval in milliseconds\n POLL_INTERVAL_MS: 50,\n // msal-browser SKU\n MSAL_SKU: \"msal.js.browser\"\n};\n/**\r\n * HTTP Request types supported by MSAL.\r\n */\n\nvar HTTP_REQUEST_TYPE;\n\n(function (HTTP_REQUEST_TYPE) {\n HTTP_REQUEST_TYPE[\"GET\"] = \"GET\";\n HTTP_REQUEST_TYPE[\"POST\"] = \"POST\";\n})(HTTP_REQUEST_TYPE || (HTTP_REQUEST_TYPE = {}));\n/**\r\n * Temporary cache keys for MSAL, deleted after any request.\r\n */\n\n\nvar TemporaryCacheKeys;\n\n(function (TemporaryCacheKeys) {\n TemporaryCacheKeys[\"AUTHORITY\"] = \"authority\";\n TemporaryCacheKeys[\"ACQUIRE_TOKEN_ACCOUNT\"] = \"acquireToken.account\";\n TemporaryCacheKeys[\"SESSION_STATE\"] = \"session.state\";\n TemporaryCacheKeys[\"REQUEST_STATE\"] = \"request.state\";\n TemporaryCacheKeys[\"NONCE_IDTOKEN\"] = \"nonce.id_token\";\n TemporaryCacheKeys[\"ORIGIN_URI\"] = \"request.origin\";\n TemporaryCacheKeys[\"RENEW_STATUS\"] = \"token.renew.status\";\n TemporaryCacheKeys[\"URL_HASH\"] = \"urlHash\";\n TemporaryCacheKeys[\"REQUEST_PARAMS\"] = \"request.params\";\n TemporaryCacheKeys[\"SCOPES\"] = \"scopes\";\n})(TemporaryCacheKeys || (TemporaryCacheKeys = {}));\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 */\n\n\nvar ApiId;\n\n(function (ApiId) {\n ApiId[ApiId[\"acquireTokenRedirect\"] = 861] = \"acquireTokenRedirect\";\n ApiId[ApiId[\"acquireTokenPopup\"] = 862] = \"acquireTokenPopup\";\n ApiId[ApiId[\"ssoSilent\"] = 863] = \"ssoSilent\";\n ApiId[ApiId[\"acquireTokenSilent_authCode\"] = 864] = \"acquireTokenSilent_authCode\";\n ApiId[ApiId[\"handleRedirectPromise\"] = 865] = \"handleRedirectPromise\";\n ApiId[ApiId[\"acquireTokenSilent_silentFlow\"] = 61] = \"acquireTokenSilent_silentFlow\";\n})(ApiId || (ApiId = {}));\n/*\r\n * Interaction type of the API - used for state and telemetry\r\n */\n\n\nvar InteractionType;\n\n(function (InteractionType) {\n InteractionType[\"REDIRECT\"] = \"redirect\";\n InteractionType[\"POPUP\"] = \"popup\";\n InteractionType[\"SILENT\"] = \"silent\";\n})(InteractionType || (InteractionType = {}));\n\nvar DEFAULT_REQUEST = {\n scopes: [Constants.OPENID_SCOPE, Constants.PROFILE_SCOPE]\n};\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 */\n\nvar FetchClient =\n/** @class */\nfunction () {\n function FetchClient() {}\n /**\r\n * Fetch Client for REST endpoints - Get request\r\n * @param url\r\n * @param headers\r\n * @param body\r\n */\n\n\n FetchClient.prototype.sendGetRequestAsync = function (url, options) {\n return __awaiter(this, void 0, void 0, function () {\n var response, _a;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n return [4\n /*yield*/\n , fetch(url, {\n method: HTTP_REQUEST_TYPE.GET,\n headers: this.getFetchHeaders(options)\n })];\n\n case 1:\n response = _b.sent();\n _a = {\n headers: this.getHeaderDict(response.headers)\n };\n return [4\n /*yield*/\n , response.json()];\n\n case 2:\n return [2\n /*return*/\n , (_a.body = _b.sent(), _a.status = response.status, _a)];\n }\n });\n });\n };\n /**\r\n * Fetch Client for REST endpoints - Post request\r\n * @param url\r\n * @param headers\r\n * @param body\r\n */\n\n\n FetchClient.prototype.sendPostRequestAsync = function (url, options) {\n return __awaiter(this, void 0, void 0, function () {\n var reqBody, response, _a;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n reqBody = options && options.body || \"\";\n return [4\n /*yield*/\n , fetch(url, {\n method: HTTP_REQUEST_TYPE.POST,\n headers: this.getFetchHeaders(options),\n body: reqBody\n })];\n\n case 1:\n response = _b.sent();\n _a = {\n headers: this.getHeaderDict(response.headers)\n };\n return [4\n /*yield*/\n , response.json()];\n\n case 2:\n return [2\n /*return*/\n , (_a.body = _b.sent(), _a.status = response.status, _a)];\n }\n });\n });\n };\n /**\r\n * Get Fetch API Headers object from string map\r\n * @param inputHeaders\r\n */\n\n\n FetchClient.prototype.getFetchHeaders = function (options) {\n var headers = new Headers();\n\n if (!(options && options.headers)) {\n return headers;\n }\n\n Object.keys(options.headers).forEach(function (key) {\n headers.append(key, options.headers[key]);\n });\n return headers;\n };\n\n FetchClient.prototype.getHeaderDict = function (headers) {\n var headerDict = {};\n headers.forEach(function (value, key) {\n headerDict[key] = value;\n });\n return headerDict;\n };\n\n return FetchClient;\n}();\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\n\n\nvar BrowserAuthErrorMessage = {\n noWindowObjectError: {\n code: \"no_window_object\",\n desc: \"No window object detected.\"\n },\n pkceNotGenerated: {\n code: \"pkce_not_created\",\n desc: \"The PKCE code challenge and verifier could not be generated.\"\n },\n cryptoDoesNotExist: {\n code: \"crypto_nonexistent\",\n desc: \"The crypto object or function is not available.\"\n },\n httpMethodNotImplementedError: {\n code: \"http_method_not_implemented\",\n desc: \"The HTTP method given has not been implemented in this library.\"\n },\n emptyNavigateUriError: {\n code: \"empty_navigate_uri\",\n desc: \"Navigation URI is empty. Please check stack trace for more info.\"\n },\n hashEmptyError: {\n code: \"hash_empty_error\",\n desc: \"Hash value cannot be processed because it is empty.\"\n },\n interactionInProgress: {\n code: \"interaction_in_progress\",\n desc: \"Interaction is currently in progress. Please ensure that this interaction has been completed before calling an interactive API.\"\n },\n popUpWindowError: {\n code: \"popup_window_error\",\n desc: \"Error opening popup window. This can happen if you are using IE or if popups are blocked in the browser.\"\n },\n emptyWindowError: {\n code: \"empty_window_error\",\n desc: \"window.open returned null or undefined window object.\"\n },\n userCancelledError: {\n code: \"user_cancelled\",\n desc: \"User cancelled the flow.\"\n },\n monitorWindowTimeoutError: {\n code: \"monitor_window_timeout\",\n desc: \"Token acquisition in popup failed due to timeout.\"\n },\n redirectInIframeError: {\n code: \"redirect_in_iframe\",\n desc: \"Code flow is not supported inside an iframe. Please ensure you are using MSAL.js in a top frame of the window if using the redirect APIs, or use the popup APIs.\"\n },\n blockTokenRequestsInHiddenIframeError: {\n code: \"block_iframe_reload\",\n desc: \"Request was blocked inside an iframe because MSAL detected an authentication response. Please ensure monitorWindowForHash was called.\"\n },\n iframeClosedPrematurelyError: {\n code: \"iframe_closed_prematurely\",\n desc: \"The iframe being monitored was closed prematurely.\"\n },\n silentSSOInsufficientInfoError: {\n code: \"silent_sso_error\",\n desc: \"Silent SSO could not be completed - insufficient information was provided. Please provide either a loginHint or sid.\"\n },\n silentPromptValueError: {\n code: \"silent_prompt_value_error\",\n desc: \"The value given for the prompt value is not valid for silent requests - must be set to 'none'.\"\n },\n tokenRequestCacheError: {\n code: \"token_request_cache_error\",\n desc: \"The token request could not be fetched from the cache correctly.\"\n },\n invalidCacheType: {\n code: \"invalid_cache_type\",\n desc: \"Invalid cache type\"\n }\n};\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\n\nvar BrowserAuthError =\n/** @class */\nfunction (_super) {\n __extends(BrowserAuthError, _super);\n\n function BrowserAuthError(errorCode, errorMessage) {\n var _this = _super.call(this, errorCode, errorMessage) || this;\n\n Object.setPrototypeOf(_this, BrowserAuthError.prototype);\n _this.name = \"BrowserAuthError\";\n return _this;\n }\n /**\r\n * Creates error thrown when no window object can be found.\r\n */\n\n\n BrowserAuthError.createNoWindowObjectError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.noWindowObjectError.code, BrowserAuthErrorMessage.noWindowObjectError.desc);\n };\n /**\r\n * Creates an error thrown when PKCE is not implemented.\r\n * @param errDetail\r\n */\n\n\n BrowserAuthError.createPkceNotGeneratedError = function (errDetail) {\n return new BrowserAuthError(BrowserAuthErrorMessage.pkceNotGenerated.code, BrowserAuthErrorMessage.pkceNotGenerated.desc + \" Detail:\" + errDetail);\n };\n /**\r\n * Creates an error thrown when the crypto object is unavailable.\r\n * @param errDetail\r\n */\n\n\n BrowserAuthError.createCryptoNotAvailableError = function (errDetail) {\n return new BrowserAuthError(BrowserAuthErrorMessage.cryptoDoesNotExist.code, BrowserAuthErrorMessage.cryptoDoesNotExist.desc + \" Detail:\" + errDetail);\n };\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 */\n\n\n BrowserAuthError.createHttpMethodNotImplementedError = function (method) {\n return new BrowserAuthError(BrowserAuthErrorMessage.httpMethodNotImplementedError.code, BrowserAuthErrorMessage.httpMethodNotImplementedError.desc + \" Given Method: \" + method);\n };\n /**\r\n * Creates an error thrown when the navigation URI is empty.\r\n */\n\n\n BrowserAuthError.createEmptyNavigationUriError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.emptyNavigateUriError.code, BrowserAuthErrorMessage.emptyNavigateUriError.desc);\n };\n /**\r\n * Creates an error thrown when the hash string value is unexpectedly empty.\r\n * @param hashValue\r\n */\n\n\n BrowserAuthError.createEmptyHashError = function (hashValue) {\n return new BrowserAuthError(BrowserAuthErrorMessage.hashEmptyError.code, BrowserAuthErrorMessage.hashEmptyError.desc + \" Given Url: \" + hashValue);\n };\n /**\r\n * Creates an error thrown when a browser interaction (redirect or popup) is in progress.\r\n */\n\n\n BrowserAuthError.createInteractionInProgressError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.interactionInProgress.code, BrowserAuthErrorMessage.interactionInProgress.desc);\n };\n /**\r\n * Creates an error thrown when the popup window could not be opened.\r\n * @param errDetail\r\n */\n\n\n BrowserAuthError.createPopupWindowError = function (errDetail) {\n var errorMessage = BrowserAuthErrorMessage.popUpWindowError.desc;\n errorMessage = !StringUtils.isEmpty(errDetail) ? errorMessage + \" Details: \" + errDetail : errorMessage;\n return new BrowserAuthError(BrowserAuthErrorMessage.popUpWindowError.code, errorMessage);\n };\n /**\r\n * Creates an error thrown when window.open returns an empty window object.\r\n * @param errDetail\r\n */\n\n\n BrowserAuthError.createEmptyWindowCreatedError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.emptyWindowError.code, BrowserAuthErrorMessage.emptyWindowError.desc);\n };\n /**\r\n * Creates an error thrown when the user closes a popup.\r\n */\n\n\n BrowserAuthError.createUserCancelledError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.userCancelledError.code, BrowserAuthErrorMessage.userCancelledError.desc);\n };\n /**\r\n * Creates an error thrown when monitorWindowFromHash times out for a given popup.\r\n * @param urlNavigate\r\n */\n\n\n BrowserAuthError.createMonitorWindowTimeoutError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.monitorWindowTimeoutError.code, BrowserAuthErrorMessage.monitorWindowTimeoutError.desc);\n };\n /**\r\n * Creates an error thrown when navigateWindow is called inside an iframe.\r\n * @param windowParentCheck\r\n */\n\n\n BrowserAuthError.createRedirectInIframeError = function (windowParentCheck) {\n return new BrowserAuthError(BrowserAuthErrorMessage.redirectInIframeError.code, BrowserAuthErrorMessage.redirectInIframeError.desc + \" (window.parent !== window) => \" + windowParentCheck);\n };\n /**\r\n * Creates an error thrown when an auth reload is done inside an iframe.\r\n */\n\n\n BrowserAuthError.createBlockReloadInHiddenIframeError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.blockTokenRequestsInHiddenIframeError.code, BrowserAuthErrorMessage.blockTokenRequestsInHiddenIframeError.desc);\n };\n /**\r\n * Creates an error thrown when an iframe is found to be closed before the timeout is reached.\r\n */\n\n\n BrowserAuthError.createIframeClosedPrematurelyError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.iframeClosedPrematurelyError.code, BrowserAuthErrorMessage.iframeClosedPrematurelyError.desc);\n };\n /**\r\n * Creates an error thrown when the login_hint, sid or account object is not provided in the ssoSilent API.\r\n */\n\n\n BrowserAuthError.createSilentSSOInsufficientInfoError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.silentSSOInsufficientInfoError.code, BrowserAuthErrorMessage.silentSSOInsufficientInfoError.desc);\n };\n /**\r\n * Creates an error thrown when a given prompt value is invalid for silent requests.\r\n */\n\n\n BrowserAuthError.createSilentPromptValueError = function (givenPrompt) {\n return new BrowserAuthError(BrowserAuthErrorMessage.silentPromptValueError.code, BrowserAuthErrorMessage.silentPromptValueError.desc + \" Given value: \" + givenPrompt);\n };\n /**\r\n * Creates an error thrown when the token request could not be retrieved from the cache\r\n * @param errDetail\r\n */\n\n\n BrowserAuthError.createTokenRequestCacheError = function (errDetail) {\n return new BrowserAuthError(BrowserAuthErrorMessage.tokenRequestCacheError.code, BrowserAuthErrorMessage.tokenRequestCacheError.desc + \" Error Detail: \" + errDetail);\n };\n /**\r\n * Creates an error thrown if cache type is invalid.\r\n */\n\n\n BrowserAuthError.createInvalidCacheTypeError = function () {\n return new BrowserAuthError(BrowserAuthErrorMessage.invalidCacheType.code, \"\" + BrowserAuthErrorMessage.invalidCacheType.desc);\n };\n\n return BrowserAuthError;\n}(AuthError);\n/**\r\n * This client implements the XMLHttpRequest class to send GET and POST requests.\r\n */\n\n\nvar XhrClient =\n/** @class */\nfunction () {\n function XhrClient() {}\n /**\r\n * XhrClient for REST endpoints - Get request\r\n * @param url\r\n * @param headers\r\n * @param body\r\n */\n\n\n XhrClient.prototype.sendGetRequestAsync = function (url, options) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , this.sendRequestAsync(url, HTTP_REQUEST_TYPE.GET, options)];\n });\n });\n };\n /**\r\n * XhrClient for REST endpoints - Post request\r\n * @param url\r\n * @param headers\r\n * @param body\r\n */\n\n\n XhrClient.prototype.sendPostRequestAsync = function (url, options) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , this.sendRequestAsync(url, HTTP_REQUEST_TYPE.POST, options)];\n });\n });\n };\n /**\r\n * Helper for XhrClient requests.\r\n * @param url\r\n * @param method\r\n * @param options\r\n */\n\n\n XhrClient.prototype.sendRequestAsync = function (url, method, options) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n var xhr = new XMLHttpRequest();\n xhr.open(method, url,\n /* async: */\n true);\n\n _this.setXhrHeaders(xhr, options);\n\n xhr.onload = function () {\n if (xhr.status < 200 || xhr.status >= 300) {\n reject(xhr.responseText);\n }\n\n try {\n var jsonResponse = JSON.parse(xhr.responseText);\n var networkResponse = {\n headers: _this.getHeaderDict(xhr),\n body: jsonResponse,\n status: xhr.status\n };\n resolve(networkResponse);\n } catch (e) {\n reject(xhr.responseText);\n }\n };\n\n xhr.onerror = function () {\n reject(xhr.status);\n };\n\n if (method === \"POST\" && options.body) {\n xhr.send(options.body);\n } else if (method === \"GET\") {\n xhr.send();\n } else {\n throw BrowserAuthError.createHttpMethodNotImplementedError(method);\n }\n });\n };\n /**\r\n * Helper to set XHR headers for request.\r\n * @param xhr\r\n * @param options\r\n */\n\n\n XhrClient.prototype.setXhrHeaders = function (xhr, options) {\n if (options && options.headers) {\n Object.keys(options.headers).forEach(function (key) {\n xhr.setRequestHeader(key, options.headers[key]);\n });\n }\n };\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 */\n\n\n XhrClient.prototype.getHeaderDict = function (xhr) {\n var headerString = xhr.getAllResponseHeaders();\n var headerArr = headerString.trim().split(/[\\r\\n]+/);\n var headerDict = {};\n headerArr.forEach(function (value) {\n var parts = value.split(\": \");\n var headerName = parts.shift();\n var headerVal = parts.join(\": \");\n headerDict[headerName] = headerVal;\n });\n return headerDict;\n };\n\n return XhrClient;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Utility class for browser specific functions\r\n */\n\n\nvar BrowserUtils =\n/** @class */\nfunction () {\n function BrowserUtils() {} // #region Window Navigation and URL management\n\n /**\r\n * Used to redirect the browser to the STS authorization endpoint\r\n * @param {string} urlNavigate - URL of the authorization endpoint\r\n * @param {boolean} noHistory - boolean flag, uses .replace() instead of .assign() if true\r\n */\n\n\n BrowserUtils.navigateWindow = function (urlNavigate, noHistory) {\n if (noHistory) {\n window.location.replace(urlNavigate);\n } else {\n window.location.assign(urlNavigate);\n }\n };\n /**\r\n * Clears hash from window url.\r\n */\n\n\n BrowserUtils.clearHash = function () {\n window.location.hash = \"\";\n };\n /**\r\n * Replaces current hash with hash from provided url\r\n */\n\n\n BrowserUtils.replaceHash = function (url) {\n var urlParts = url.split(\"#\");\n urlParts.shift(); // Remove part before the hash\n\n window.location.hash = urlParts.length > 0 ? urlParts.join(\"#\") : \"\";\n };\n /**\r\n * Returns boolean of whether the current window is in an iframe or not.\r\n */\n\n\n BrowserUtils.isInIframe = function () {\n return window.parent !== window;\n }; // #endregion\n\n /**\r\n * Returns current window URL as redirect uri\r\n */\n\n\n BrowserUtils.getCurrentUri = function () {\n return window.location.href.split(\"?\")[0].split(\"#\")[0];\n };\n /**\r\n * Gets the homepage url for the current window location.\r\n */\n\n\n BrowserUtils.getHomepage = function () {\n var currentUrl = new UrlString(window.location.href);\n var urlComponents = currentUrl.getUrlComponents();\n return urlComponents.Protocol + \"//\" + urlComponents.HostNameAndPort + \"/\";\n };\n /**\r\n * Returns best compatible network client object.\r\n */\n\n\n BrowserUtils.getBrowserNetworkClient = function () {\n if (window.fetch) {\n return new FetchClient();\n } else {\n return new XhrClient();\n }\n };\n /**\r\n * Throws error if we have completed an auth and are\r\n * attempting another auth request inside an iframe.\r\n */\n\n\n BrowserUtils.blockReloadInHiddenIframes = function () {\n var isResponseHash = UrlString.hashContainsKnownProperties(window.location.hash); // return an error if called from the hidden iframe created by the msal js silent calls\n\n if (isResponseHash && BrowserUtils.isInIframe()) {\n throw BrowserAuthError.createBlockReloadInHiddenIframeError();\n }\n };\n /**\r\n * Returns boolean of whether current browser is an Internet Explorer or Edge browser.\r\n */\n\n\n BrowserUtils.detectIEOrEdge = function () {\n var ua = window.navigator.userAgent;\n var msie = ua.indexOf(\"MSIE \");\n var msie11 = ua.indexOf(\"Trident/\");\n var msedge = ua.indexOf(\"Edge/\");\n var isIE = msie > 0 || msie11 > 0;\n var isEdge = msedge > 0;\n return isIE || isEdge;\n };\n\n return BrowserUtils;\n}(); // Default timeout for popup windows and iframes in milliseconds\n\n\nvar DEFAULT_POPUP_TIMEOUT_MS = 60000;\nvar DEFAULT_IFRAME_TIMEOUT_MS = 6000; // Default auth options for browser\n\nvar DEFAULT_AUTH_OPTIONS$1 = {\n clientId: \"\",\n authority: \"\" + Constants.DEFAULT_AUTHORITY,\n knownAuthorities: [],\n cloudDiscoveryMetadata: \"\",\n redirectUri: \"\",\n postLogoutRedirectUri: \"\",\n navigateToLoginRequestUrl: true,\n clientCapabilities: []\n}; // Default cache options for browser\n\nvar DEFAULT_CACHE_OPTIONS = {\n cacheLocation: BrowserConstants.CACHE_LOCATION_SESSION,\n storeAuthStateInCookie: false\n}; // Default logger options for browser\n\nvar DEFAULT_LOGGER_OPTIONS = {\n loggerCallback: function loggerCallback() {},\n piiLoggingEnabled: false\n}; // Default system options for browser\n\nvar DEFAULT_BROWSER_SYSTEM_OPTIONS = _assign(_assign({}, DEFAULT_SYSTEM_OPTIONS), {\n loggerOptions: DEFAULT_LOGGER_OPTIONS,\n networkClient: BrowserUtils.getBrowserNetworkClient(),\n windowHashTimeout: DEFAULT_POPUP_TIMEOUT_MS,\n iframeHashTimeout: DEFAULT_IFRAME_TIMEOUT_MS,\n loadFrameTimeout: BrowserUtils.detectIEOrEdge() ? 500 : 0,\n asyncPopups: false\n});\n/**\r\n * MSAL function that sets the default options when not explicitly configured from app developer\r\n *\r\n * @param auth\r\n * @param cache\r\n * @param system\r\n *\r\n * @returns Configuration object\r\n */\n\n\nfunction buildConfiguration(_a) {\n var userInputAuth = _a.auth,\n userInputCache = _a.cache,\n userInputSystem = _a.system;\n var overlayedConfig = {\n auth: _assign(_assign({}, DEFAULT_AUTH_OPTIONS$1), userInputAuth),\n cache: _assign(_assign({}, DEFAULT_CACHE_OPTIONS), userInputCache),\n system: _assign(_assign({}, DEFAULT_BROWSER_SYSTEM_OPTIONS), userInputSystem)\n };\n return overlayedConfig;\n}\n/**\r\n * BrowserAuthErrorMessage class containing string constants used by error codes and messages.\r\n */\n\n\nvar BrowserConfigurationAuthErrorMessage = {\n redirectUriNotSet: {\n code: \"redirect_uri_empty\",\n desc: \"A redirect URI is required for all calls, and none has been set.\"\n },\n postLogoutUriNotSet: {\n code: \"post_logout_uri_empty\",\n desc: \"A post logout redirect has not been set.\"\n },\n storageNotSupportedError: {\n code: \"storage_not_supported\",\n desc: \"Given storage configuration option was not supported.\"\n },\n noRedirectCallbacksSet: {\n code: \"no_redirect_callbacks\",\n desc: \"No redirect callbacks have been set. Please call setRedirectCallbacks() with the appropriate function arguments before continuing. \" + \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\n },\n invalidCallbackObject: {\n code: \"invalid_callback_object\",\n desc: \"The object passed for the callback was invalid. \" + \"More information is available here: https://github.com/AzureAD/microsoft-authentication-library-for-js/wiki/MSAL-basics.\"\n }\n};\n/**\r\n * Browser library error class thrown by the MSAL.js library for SPAs\r\n */\n\nvar BrowserConfigurationAuthError =\n/** @class */\nfunction (_super) {\n __extends(BrowserConfigurationAuthError, _super);\n\n function BrowserConfigurationAuthError(errorCode, errorMessage) {\n var _this = _super.call(this, errorCode, errorMessage) || this;\n\n _this.name = \"BrowserConfigurationAuthError\";\n Object.setPrototypeOf(_this, BrowserConfigurationAuthError.prototype);\n return _this;\n }\n /**\r\n * Creates an error thrown when the redirect uri is empty (not set by caller)\r\n */\n\n\n BrowserConfigurationAuthError.createRedirectUriEmptyError = function () {\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.redirectUriNotSet.code, BrowserConfigurationAuthErrorMessage.redirectUriNotSet.desc);\n };\n /**\r\n * Creates an error thrown when the post-logout redirect uri is empty (not set by caller)\r\n */\n\n\n BrowserConfigurationAuthError.createPostLogoutRedirectUriEmptyError = function () {\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.code, BrowserConfigurationAuthErrorMessage.postLogoutUriNotSet.desc);\n };\n /**\r\n * Creates error thrown when given storage location is not supported.\r\n * @param givenStorageLocation\r\n */\n\n\n BrowserConfigurationAuthError.createStorageNotSupportedError = function (givenStorageLocation) {\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.storageNotSupportedError.code, BrowserConfigurationAuthErrorMessage.storageNotSupportedError.desc + \" Given Location: \" + givenStorageLocation);\n };\n /**\r\n * Creates error thrown when callback object is invalid.\r\n * @param callbackObject\r\n */\n\n\n BrowserConfigurationAuthError.createInvalidCallbackObjectError = function (callbackObject) {\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.invalidCallbackObject.code, BrowserConfigurationAuthErrorMessage.invalidCallbackObject.desc + \" Given value for callback function: \" + callbackObject);\n };\n /**\r\n * Creates error thrown when redirect callbacks are not set before calling loginRedirect() or acquireTokenRedirect().\r\n */\n\n\n BrowserConfigurationAuthError.createRedirectCallbacksNotSetError = function () {\n return new BrowserConfigurationAuthError(BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.code, BrowserConfigurationAuthErrorMessage.noRedirectCallbacksSet.desc);\n };\n\n return BrowserConfigurationAuthError;\n}(AuthError); // Cookie life calculation (hours * minutes * seconds * ms)\n\n\nvar COOKIE_LIFE_MULTIPLIER = 24 * 60 * 60 * 1000;\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 */\n\nvar BrowserStorage =\n/** @class */\nfunction (_super) {\n __extends(BrowserStorage, _super);\n\n function BrowserStorage(clientId, cacheConfig) {\n var _this = _super.call(this) || this; // Validate cache location\n\n\n _this.validateWindowStorage(cacheConfig.cacheLocation);\n\n _this.cacheConfig = cacheConfig;\n _this.windowStorage = window[_this.cacheConfig.cacheLocation];\n _this.clientId = clientId; // Migrate any cache entries from older versions of MSAL.\n\n _this.migrateCacheEntries();\n\n return _this;\n }\n /**\r\n * Validates the the given cache location string is an expected value:\r\n * - localStorage\r\n * - sessionStorage (default)\r\n * Also validates if given cacheLocation is supported on the browser.\r\n * @param cacheLocation\r\n */\n\n\n BrowserStorage.prototype.validateWindowStorage = function (cacheLocation) {\n if (typeof window === \"undefined\" || !window) {\n throw BrowserAuthError.createNoWindowObjectError();\n }\n\n if (cacheLocation !== BrowserConstants.CACHE_LOCATION_LOCAL && cacheLocation !== BrowserConstants.CACHE_LOCATION_SESSION) {\n throw BrowserConfigurationAuthError.createStorageNotSupportedError(cacheLocation);\n }\n\n var storageSupported = !!window[cacheLocation];\n\n if (!storageSupported) {\n throw BrowserConfigurationAuthError.createStorageNotSupportedError(cacheLocation);\n }\n };\n /**\r\n * Migrate all old cache entries to new schema. No rollback supported.\r\n * @param storeAuthStateInCookie\r\n */\n\n\n BrowserStorage.prototype.migrateCacheEntries = function () {\n var _this = this;\n\n var idTokenKey = Constants.CACHE_PREFIX + \".\" + PersistentCacheKeys.ID_TOKEN;\n var clientInfoKey = Constants.CACHE_PREFIX + \".\" + PersistentCacheKeys.CLIENT_INFO;\n var errorKey = Constants.CACHE_PREFIX + \".\" + PersistentCacheKeys.ERROR;\n var errorDescKey = Constants.CACHE_PREFIX + \".\" + PersistentCacheKeys.ERROR_DESC;\n var idTokenValue = this.windowStorage.getItem(idTokenKey);\n var clientInfoValue = this.windowStorage.getItem(clientInfoKey);\n var errorValue = this.windowStorage.getItem(errorKey);\n var errorDescValue = this.windowStorage.getItem(errorDescKey);\n var values = [idTokenValue, clientInfoValue, errorValue, errorDescValue];\n var keysToMigrate = [PersistentCacheKeys.ID_TOKEN, PersistentCacheKeys.CLIENT_INFO, PersistentCacheKeys.ERROR, PersistentCacheKeys.ERROR_DESC];\n keysToMigrate.forEach(function (cacheKey, index) {\n return _this.migrateCacheEntry(cacheKey, values[index]);\n });\n };\n /**\r\n * Utility function to help with migration.\r\n * @param newKey\r\n * @param value\r\n * @param storeAuthStateInCookie\r\n */\n\n\n BrowserStorage.prototype.migrateCacheEntry = function (newKey, value) {\n if (value) {\n this.setItem(this.generateCacheKey(newKey), value, CacheSchemaType.TEMPORARY);\n }\n };\n /**\r\n * Parses key as JSON object, JSON.parse() will throw an error.\r\n * @param key\r\n */\n\n\n BrowserStorage.prototype.validateObjectKey = function (key) {\n JSON.parse(key);\n };\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 */\n\n\n BrowserStorage.prototype.setItem = function (key, value, type) {\n // save the cacheItem\n switch (type) {\n case CacheSchemaType.ACCOUNT:\n case CacheSchemaType.CREDENTIAL:\n case CacheSchemaType.APP_METADATA:\n this.windowStorage.setItem(key, JSON.stringify(value));\n break;\n\n case CacheSchemaType.TEMPORARY:\n {\n var stringVal = value;\n this.windowStorage.setItem(key, stringVal);\n\n if (this.cacheConfig.storeAuthStateInCookie) {\n this.setItemCookie(key, stringVal);\n }\n\n break;\n }\n\n case CacheSchemaType.TELEMETRY:\n {\n this.windowStorage.setItem(key, JSON.stringify(value));\n break;\n }\n\n default:\n {\n throw BrowserAuthError.createInvalidCacheTypeError();\n }\n }\n };\n /**\r\n * Gets cache item with given key.\r\n * Will retrieve frm cookies if storeAuthStateInCookie is set to true.\r\n * @param key\r\n */\n\n\n BrowserStorage.prototype.getItem = function (key, type) {\n var value = this.windowStorage.getItem(key);\n\n if (StringUtils.isEmpty(value)) {\n return null;\n }\n\n switch (type) {\n case CacheSchemaType.ACCOUNT:\n {\n var account = new AccountEntity();\n return CacheManager.toObject(account, JSON.parse(value));\n }\n\n case CacheSchemaType.CREDENTIAL:\n {\n var credentialType = CredentialEntity.getCredentialType(key);\n\n switch (credentialType) {\n case CredentialType.ID_TOKEN:\n {\n var idTokenEntity = new IdTokenEntity();\n return CacheManager.toObject(idTokenEntity, JSON.parse(value));\n }\n\n case CredentialType.ACCESS_TOKEN:\n {\n var accessTokenEntity = new AccessTokenEntity();\n return CacheManager.toObject(accessTokenEntity, JSON.parse(value));\n }\n\n case CredentialType.REFRESH_TOKEN:\n {\n var refreshTokenEntity = new RefreshTokenEntity();\n return CacheManager.toObject(refreshTokenEntity, JSON.parse(value));\n }\n }\n }\n\n case CacheSchemaType.APP_METADATA:\n {\n return JSON.parse(value);\n }\n\n case CacheSchemaType.TEMPORARY:\n {\n var itemCookie = this.getItemCookie(key);\n\n if (this.cacheConfig.storeAuthStateInCookie) {\n return itemCookie;\n }\n\n return value;\n }\n\n case CacheSchemaType.TELEMETRY:\n {\n return JSON.parse(value);\n }\n\n default:\n {\n throw BrowserAuthError.createInvalidCacheTypeError();\n }\n }\n };\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 */\n\n\n BrowserStorage.prototype.removeItem = function (key) {\n this.windowStorage.removeItem(key);\n\n if (this.cacheConfig.storeAuthStateInCookie) {\n this.clearItemCookie(key);\n }\n\n return true;\n };\n /**\r\n * Checks whether key is in cache.\r\n * @param key\r\n */\n\n\n BrowserStorage.prototype.containsKey = function (key) {\n return this.windowStorage.hasOwnProperty(key);\n };\n /**\r\n * Gets all keys in window.\r\n */\n\n\n BrowserStorage.prototype.getKeys = function () {\n return Object.keys(this.windowStorage);\n };\n /**\r\n * Clears all cache entries created by MSAL (except tokens).\r\n */\n\n\n BrowserStorage.prototype.clear = function () {\n this.removeAllAccounts();\n this.removeAppMetadata();\n var key;\n\n for (key in this.windowStorage) {\n // Check if key contains msal prefix; For now, we are clearing all the cache items created by MSAL.js\n if (this.windowStorage.hasOwnProperty(key) && (key.indexOf(Constants.CACHE_PREFIX) !== -1 || key.indexOf(this.clientId) !== -1)) {\n this.removeItem(key);\n }\n }\n };\n /**\r\n * Add value to cookies\r\n * @param cookieName\r\n * @param cookieValue\r\n * @param expires\r\n */\n\n\n BrowserStorage.prototype.setItemCookie = function (cookieName, cookieValue, expires) {\n var cookieStr = encodeURIComponent(cookieName) + \"=\" + encodeURIComponent(cookieValue) + \";path=/;\";\n\n if (expires) {\n var expireTime = this.getCookieExpirationTime(expires);\n cookieStr += \"expires=\" + expireTime + \";\";\n }\n\n document.cookie = cookieStr;\n };\n /**\r\n * Get one item by key from cookies\r\n * @param cookieName\r\n */\n\n\n BrowserStorage.prototype.getItemCookie = function (cookieName) {\n var name = encodeURIComponent(cookieName) + \"=\";\n var cookieList = document.cookie.split(\";\");\n\n for (var i = 0; i < cookieList.length; i++) {\n var cookie = cookieList[i];\n\n while (cookie.charAt(0) === \" \") {\n cookie = cookie.substring(1);\n }\n\n if (cookie.indexOf(name) === 0) {\n return decodeURIComponent(cookie.substring(name.length, cookie.length));\n }\n }\n\n return \"\";\n };\n /**\r\n * Clear an item in the cookies by key\r\n * @param cookieName\r\n */\n\n\n BrowserStorage.prototype.clearItemCookie = function (cookieName) {\n this.setItemCookie(cookieName, \"\", -1);\n };\n /**\r\n * Clear all msal cookies\r\n */\n\n\n BrowserStorage.prototype.clearMsalCookie = function (state) {\n var nonceKey = state ? TemporaryCacheKeys.NONCE_IDTOKEN + \"|\" + state : TemporaryCacheKeys.NONCE_IDTOKEN;\n this.clearItemCookie(this.generateCacheKey(nonceKey));\n this.clearItemCookie(this.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE));\n this.clearItemCookie(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI));\n };\n /**\r\n * Get cookie expiration time\r\n * @param cookieLifeDays\r\n */\n\n\n BrowserStorage.prototype.getCookieExpirationTime = function (cookieLifeDays) {\n var today = new Date();\n var expr = new Date(today.getTime() + cookieLifeDays * COOKIE_LIFE_MULTIPLIER);\n return expr.toUTCString();\n };\n /**\r\n * Gets the cache object referenced by the browser\r\n */\n\n\n BrowserStorage.prototype.getCache = function () {\n return this.windowStorage;\n };\n /**\r\n * interface compat, we cannot overwrite browser cache; Functionality is supported by individual entities in browser\r\n */\n\n\n BrowserStorage.prototype.setCache = function () {// sets nothing\n };\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 */\n\n\n BrowserStorage.prototype.generateCacheKey = function (key) {\n try {\n // Defined schemas do not need the key migrated\n this.validateObjectKey(key);\n return key;\n } catch (e) {\n if (StringUtils.startsWith(key, Constants.CACHE_PREFIX) || StringUtils.startsWith(key, PersistentCacheKeys.ADAL_ID_TOKEN)) {\n return key;\n }\n\n return Constants.CACHE_PREFIX + \".\" + this.clientId + \".\" + key;\n }\n };\n /**\r\n * Create authorityKey to cache authority\r\n * @param state\r\n */\n\n\n BrowserStorage.prototype.generateAuthorityKey = function (state) {\n return \"\" + TemporaryCacheKeys.AUTHORITY + Constants.RESOURCE_DELIM + state;\n };\n /**\r\n * Create Nonce key to cache nonce\r\n * @param state\r\n */\n\n\n BrowserStorage.prototype.generateNonceKey = function (state) {\n return \"\" + TemporaryCacheKeys.NONCE_IDTOKEN + Constants.RESOURCE_DELIM + state;\n };\n /**\r\n * Sets the cacheKey for and stores the authority information in cache\r\n * @param state\r\n * @param authority\r\n */\n\n\n BrowserStorage.prototype.setAuthorityCache = function (authority, state) {\n // Cache authorityKey\n var authorityKey = this.generateAuthorityKey(state);\n this.setItem(this.generateCacheKey(authorityKey), authority, CacheSchemaType.TEMPORARY);\n };\n /**\r\n * Gets the cached authority based on the cached state. Returns empty if no cached state found.\r\n */\n\n\n BrowserStorage.prototype.getCachedAuthority = function () {\n var state = this.getItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE), CacheSchemaType.TEMPORARY);\n\n if (!state) {\n return null;\n }\n\n return this.getItem(this.generateCacheKey(this.generateAuthorityKey(state)), CacheSchemaType.TEMPORARY);\n };\n /**\r\n * Updates account, authority, and state in cache\r\n * @param serverAuthenticationRequest\r\n * @param account\r\n */\n\n\n BrowserStorage.prototype.updateCacheEntries = function (state, nonce, authorityInstance) {\n // Cache the request state\n this.setItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE), state, CacheSchemaType.TEMPORARY); // Cache the nonce\n\n this.setItem(this.generateCacheKey(this.generateNonceKey(state)), nonce, CacheSchemaType.TEMPORARY); // Cache authorityKey\n\n this.setAuthorityCache(authorityInstance, state);\n };\n /**\r\n * Reset all temporary cache items\r\n * @param state\r\n */\n\n\n BrowserStorage.prototype.resetRequestCache = function (state) {\n var _this = this; // check state and remove associated cache items\n\n\n this.getKeys().forEach(function (key) {\n if (!StringUtils.isEmpty(state) && key.indexOf(state) !== -1) {\n _this.removeItem(key);\n }\n }); // delete generic interactive request parameters\n\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE));\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS));\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI));\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.URL_HASH));\n };\n\n BrowserStorage.prototype.cleanRequest = function () {\n // Interaction is completed - remove interaction status.\n this.removeItem(this.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY));\n var cachedState = this.getItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE), CacheSchemaType.TEMPORARY);\n this.resetRequestCache(cachedState || \"\");\n };\n\n BrowserStorage.prototype.cacheCodeRequest = function (authCodeRequest, browserCrypto) {\n this.setItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS), browserCrypto.base64Encode(JSON.stringify(authCodeRequest)), CacheSchemaType.TEMPORARY);\n };\n /**\r\n * Gets the token exchange parameters from the cache. Throws an error if nothing is found.\r\n */\n\n\n BrowserStorage.prototype.getCachedRequest = function (state, browserCrypto) {\n try {\n // Get token request from cache and parse as TokenExchangeParameters.\n var encodedTokenRequest = this.getItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS), CacheSchemaType.TEMPORARY);\n var parsedRequest = JSON.parse(browserCrypto.base64Decode(encodedTokenRequest));\n this.removeItem(this.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS)); // Get cached authority and use if no authority is cached with request.\n\n if (StringUtils.isEmpty(parsedRequest.authority)) {\n var authorityKey = this.generateAuthorityKey(state);\n var cachedAuthority = this.getItem(this.generateCacheKey(authorityKey), CacheSchemaType.TEMPORARY);\n parsedRequest.authority = cachedAuthority;\n }\n\n return parsedRequest;\n } catch (err) {\n throw BrowserAuthError.createTokenRequestCacheError(err);\n }\n };\n\n return BrowserStorage;\n}(CacheManager);\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Utility class for math specific functions in browser.\r\n */\n\n\nvar MathUtils =\n/** @class */\nfunction () {\n function MathUtils() {}\n /**\r\n * Decimal to Hex\r\n *\r\n * @param num\r\n */\n\n\n MathUtils.decimalToHex = function (num) {\n var hex = num.toString(16);\n\n while (hex.length < 2) {\n hex = \"0\" + hex;\n }\n\n return hex;\n };\n\n return MathUtils;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n\nvar GuidGenerator =\n/** @class */\nfunction () {\n function GuidGenerator(cryptoObj) {\n this.cryptoObj = cryptoObj;\n }\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 */\n\n\n GuidGenerator.prototype.generateGuid = function () {\n try {\n var buffer = new Uint8Array(16);\n this.cryptoObj.getRandomValues(buffer); // 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).\n\n buffer[6] |= 0x40; // buffer[6] | 01000000 will set the 6 bit to 1.\n\n buffer[6] &= 0x4f; // buffer[6] & 01001111 will set the 4, 5, and 7 bit to 0 such that bits 4-7 == 0100 = \"4\".\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.\n\n buffer[8] |= 0x80; // buffer[8] | 10000000 will set the 7 bit to 1.\n\n buffer[8] &= 0xbf; // buffer[8] & 10111111 will set the 6 bit to 0.\n\n return MathUtils.decimalToHex(buffer[0]) + MathUtils.decimalToHex(buffer[1]) + MathUtils.decimalToHex(buffer[2]) + MathUtils.decimalToHex(buffer[3]) + \"-\" + MathUtils.decimalToHex(buffer[4]) + MathUtils.decimalToHex(buffer[5]) + \"-\" + MathUtils.decimalToHex(buffer[6]) + MathUtils.decimalToHex(buffer[7]) + \"-\" + MathUtils.decimalToHex(buffer[8]) + MathUtils.decimalToHex(buffer[9]) + \"-\" + MathUtils.decimalToHex(buffer[10]) + MathUtils.decimalToHex(buffer[11]) + MathUtils.decimalToHex(buffer[12]) + MathUtils.decimalToHex(buffer[13]) + MathUtils.decimalToHex(buffer[14]) + MathUtils.decimalToHex(buffer[15]);\n } catch (err) {\n var guidHolder = \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\";\n var hex = \"0123456789abcdef\";\n var r = 0;\n var guidResponse = \"\";\n\n for (var i = 0; i < 36; i++) {\n if (guidHolder[i] !== \"-\" && guidHolder[i] !== \"4\") {\n // each x and y needs to be random\n r = Math.random() * 16 | 0;\n }\n\n if (guidHolder[i] === \"x\") {\n guidResponse += hex[r];\n } else if (guidHolder[i] === \"y\") {\n // clock-seq-and-reserved first hex is filtered and remaining hex values are random\n r &= 0x3; // bit and with 0011 to set pos 2 to zero ?0??\n\n r |= 0x8; // set pos 3 to 1 as 1???\n\n guidResponse += hex[r];\n } else {\n guidResponse += guidHolder[i];\n }\n }\n\n return guidResponse;\n }\n };\n /**\r\n * verifies if a string is GUID\r\n * @param guid\r\n */\n\n\n GuidGenerator.isGuid = function (guid) {\n var 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;\n return regexGuid.test(guid);\n };\n\n return GuidGenerator;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar BrowserStringUtils =\n/** @class */\nfunction () {\n function BrowserStringUtils() {}\n /**\r\n * Converts string to Uint8Array\r\n * @param sDOMStr\r\n */\n\n\n BrowserStringUtils.stringToUtf8Arr = function (sDOMStr) {\n var nChr;\n var nArrLen = 0;\n var nStrLen = sDOMStr.length;\n /* mapping... */\n\n for (var nMapIdx = 0; nMapIdx < nStrLen; nMapIdx++) {\n nChr = sDOMStr.charCodeAt(nMapIdx);\n nArrLen += nChr < 0x80 ? 1 : nChr < 0x800 ? 2 : nChr < 0x10000 ? 3 : nChr < 0x200000 ? 4 : nChr < 0x4000000 ? 5 : 6;\n }\n\n var aBytes = new Uint8Array(nArrLen);\n /* transcription... */\n\n for (var nIdx = 0, nChrIdx = 0; nIdx < nArrLen; nChrIdx++) {\n nChr = sDOMStr.charCodeAt(nChrIdx);\n\n if (nChr < 128) {\n /* one byte */\n aBytes[nIdx++] = nChr;\n } else if (nChr < 0x800) {\n /* two bytes */\n aBytes[nIdx++] = 192 + (nChr >>> 6);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x10000) {\n /* three bytes */\n aBytes[nIdx++] = 224 + (nChr >>> 12);\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x200000) {\n /* four bytes */\n aBytes[nIdx++] = 240 + (nChr >>> 18);\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else if (nChr < 0x4000000) {\n /* five bytes */\n aBytes[nIdx++] = 248 + (nChr >>> 24);\n aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n } else\n /* if (nChr <= 0x7fffffff) */\n {\n /* six bytes */\n aBytes[nIdx++] = 252 + (nChr >>> 30);\n aBytes[nIdx++] = 128 + (nChr >>> 24 & 63);\n aBytes[nIdx++] = 128 + (nChr >>> 18 & 63);\n aBytes[nIdx++] = 128 + (nChr >>> 12 & 63);\n aBytes[nIdx++] = 128 + (nChr >>> 6 & 63);\n aBytes[nIdx++] = 128 + (nChr & 63);\n }\n }\n\n return aBytes;\n };\n /**\r\n * Converts Uint8Array to a string\r\n * @param aBytes\r\n */\n\n\n BrowserStringUtils.utf8ArrToString = function (aBytes) {\n var sView = \"\";\n\n for (var nPart = void 0, nLen = aBytes.length, nIdx = 0; nIdx < nLen; nIdx++) {\n nPart = aBytes[nIdx];\n sView += String.fromCharCode(nPart > 251 && nPart < 254 && nIdx + 5 < nLen ?\n /* six bytes */\n\n /* (nPart - 252 << 30) may be not so safe in ECMAScript! So...: */\n (nPart - 252) * 1073741824 + (aBytes[++nIdx] - 128 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 : nPart > 247 && nPart < 252 && nIdx + 4 < nLen ?\n /* five bytes */\n (nPart - 248 << 24) + (aBytes[++nIdx] - 128 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 : nPart > 239 && nPart < 248 && nIdx + 3 < nLen ?\n /* four bytes */\n (nPart - 240 << 18) + (aBytes[++nIdx] - 128 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 : nPart > 223 && nPart < 240 && nIdx + 2 < nLen ?\n /* three bytes */\n (nPart - 224 << 12) + (aBytes[++nIdx] - 128 << 6) + aBytes[++nIdx] - 128 : nPart > 191 && nPart < 224 && nIdx + 1 < nLen ?\n /* two bytes */\n (nPart - 192 << 6) + aBytes[++nIdx] - 128 :\n /* nPart < 127 ? */\n\n /* one byte */\n nPart);\n }\n\n return sView;\n };\n\n return BrowserStringUtils;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar Base64Encode =\n/** @class */\nfunction () {\n function Base64Encode() {}\n /**\r\n * Returns URL Safe b64 encoded string from a plaintext string.\r\n * @param input\r\n */\n\n\n Base64Encode.prototype.urlEncode = function (input) {\n return encodeURIComponent(this.encode(input).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\"));\n };\n /**\r\n * Returns URL Safe b64 encoded string from an int8Array.\r\n * @param inputArr\r\n */\n\n\n Base64Encode.prototype.urlEncodeArr = function (inputArr) {\n return this.base64EncArr(inputArr).replace(/=/g, \"\").replace(/\\+/g, \"-\").replace(/\\//g, \"_\");\n };\n /**\r\n * Returns b64 encoded string from plaintext string.\r\n * @param input\r\n */\n\n\n Base64Encode.prototype.encode = function (input) {\n var inputUtf8Arr = BrowserStringUtils.stringToUtf8Arr(input);\n return this.base64EncArr(inputUtf8Arr);\n };\n /**\r\n * Base64 encode byte array\r\n * @param aBytes\r\n */\n\n\n Base64Encode.prototype.base64EncArr = function (aBytes) {\n var eqLen = (3 - aBytes.length % 3) % 3;\n var sB64Enc = \"\";\n\n for (var nMod3 = void 0, nLen = aBytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; nIdx++) {\n nMod3 = nIdx % 3;\n /* Uncomment the following line in order to split the output in lines 76-character long: */\n\n /*\r\n if (nIdx > 0 && (nIdx * 4 / 3) % 76 === 0) { sB64Enc += \"\\r\\n\"; }\r\n */\n\n nUint24 |= aBytes[nIdx] << (16 >>> nMod3 & 24);\n\n if (nMod3 === 2 || aBytes.length - nIdx === 1) {\n sB64Enc += String.fromCharCode(this.uint6ToB64(nUint24 >>> 18 & 63), this.uint6ToB64(nUint24 >>> 12 & 63), this.uint6ToB64(nUint24 >>> 6 & 63), this.uint6ToB64(nUint24 & 63));\n nUint24 = 0;\n }\n }\n\n return eqLen === 0 ? sB64Enc : sB64Enc.substring(0, sB64Enc.length - eqLen) + (eqLen === 1 ? \"=\" : \"==\");\n };\n /**\r\n * Base64 string to array encoding helper\r\n * @param nUint6\r\n */\n\n\n Base64Encode.prototype.uint6ToB64 = function (nUint6) {\n return nUint6 < 26 ? nUint6 + 65 : nUint6 < 52 ? nUint6 + 71 : nUint6 < 62 ? nUint6 - 4 : nUint6 === 62 ? 43 : nUint6 === 63 ? 47 : 65;\n };\n\n return Base64Encode;\n}();\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\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 */\n\n\nvar Base64Decode =\n/** @class */\nfunction () {\n function Base64Decode() {}\n /**\r\n * Returns a URL-safe plaintext decoded string from b64 encoded input.\r\n * @param input\r\n */\n\n\n Base64Decode.prototype.decode = function (input) {\n var encodedString = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n\n switch (encodedString.length % 4) {\n case 0:\n break;\n\n case 2:\n encodedString += \"==\";\n break;\n\n case 3:\n encodedString += \"=\";\n break;\n\n default:\n throw new Error(\"Invalid base64 string\");\n }\n\n var inputUtf8Arr = this.base64DecToArr(encodedString);\n return decodeURIComponent(BrowserStringUtils.utf8ArrToString(inputUtf8Arr));\n };\n /**\r\n * Decodes base64 into Uint8Array\r\n * @param base64String\r\n * @param nBlockSize\r\n */\n\n\n Base64Decode.prototype.base64DecToArr = function (base64String, nBlockSize) {\n var sB64Enc = base64String.replace(/[^A-Za-z0-9\\+\\/]/g, \"\");\n var nInLen = sB64Enc.length;\n var nOutLen = nBlockSize ? Math.ceil((nInLen * 3 + 1 >>> 2) / nBlockSize) * nBlockSize : nInLen * 3 + 1 >>> 2;\n var aBytes = new Uint8Array(nOutLen);\n\n for (var nMod3 = void 0, nMod4 = void 0, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {\n nMod4 = nInIdx & 3;\n nUint24 |= this.b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;\n\n if (nMod4 === 3 || nInLen - nInIdx === 1) {\n for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {\n aBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;\n }\n\n nUint24 = 0;\n }\n }\n\n return aBytes;\n };\n /**\r\n * Base64 string to array decoding helper\r\n * @param charNum\r\n */\n\n\n Base64Decode.prototype.b64ToUint6 = function (charNum) {\n return charNum > 64 && charNum < 91 ? charNum - 65 : charNum > 96 && charNum < 123 ? charNum - 71 : charNum > 47 && charNum < 58 ? charNum + 4 : charNum === 43 ? 62 : charNum === 47 ? 63 : 0;\n };\n\n return Base64Decode;\n}(); // Constant byte array length\n\n\nvar RANDOM_BYTE_ARR_LENGTH = 32;\n/**\r\n * Class which exposes APIs to generate PKCE codes and code verifiers.\r\n */\n\nvar PkceGenerator =\n/** @class */\nfunction () {\n function PkceGenerator(cryptoObj) {\n this.base64Encode = new Base64Encode();\n this.cryptoObj = cryptoObj;\n }\n /**\r\n * Generates PKCE Codes. See the RFC for more information: https://tools.ietf.org/html/rfc7636\r\n */\n\n\n PkceGenerator.prototype.generateCodes = function () {\n return __awaiter(this, void 0, void 0, function () {\n var codeVerifier, codeChallenge;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n codeVerifier = this.generateCodeVerifier();\n return [4\n /*yield*/\n , this.generateCodeChallengeFromVerifier(codeVerifier)];\n\n case 1:\n codeChallenge = _a.sent();\n return [2\n /*return*/\n , {\n verifier: codeVerifier,\n challenge: codeChallenge\n }];\n }\n });\n });\n };\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 */\n\n\n PkceGenerator.prototype.generateCodeVerifier = function () {\n try {\n // Generate random values as utf-8\n var buffer = new Uint8Array(RANDOM_BYTE_ARR_LENGTH);\n this.cryptoObj.getRandomValues(buffer); // encode verifier as base64\n\n var pkceCodeVerifierB64 = this.base64Encode.urlEncodeArr(buffer);\n return pkceCodeVerifierB64;\n } catch (e) {\n throw BrowserAuthError.createPkceNotGeneratedError(e);\n }\n };\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 */\n\n\n PkceGenerator.prototype.generateCodeChallengeFromVerifier = function (pkceCodeVerifier) {\n return __awaiter(this, void 0, void 0, function () {\n var pkceHashedCodeVerifier, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2,, 3]);\n\n return [4\n /*yield*/\n , this.cryptoObj.sha256Digest(pkceCodeVerifier)];\n\n case 1:\n pkceHashedCodeVerifier = _a.sent(); // encode hash as base64\n\n return [2\n /*return*/\n , this.base64Encode.urlEncodeArr(new Uint8Array(pkceHashedCodeVerifier))];\n\n case 2:\n e_1 = _a.sent();\n throw BrowserAuthError.createPkceNotGeneratedError(e_1);\n\n case 3:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n return PkceGenerator;\n}(); // SHA-256 hashing algorithm\n\n\nvar HASH_ALG = \"SHA-256\";\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 */\n\nvar BrowserCrypto =\n/** @class */\nfunction () {\n function BrowserCrypto() {\n if (!this.hasCryptoAPI()) {\n throw BrowserAuthError.createCryptoNotAvailableError(\"Browser crypto or msCrypto object not available.\");\n }\n }\n /**\r\n * Returns a sha-256 hash of the given dataString as an ArrayBuffer.\r\n * @param dataString\r\n */\n\n\n BrowserCrypto.prototype.sha256Digest = function (dataString) {\n return __awaiter(this, void 0, void 0, function () {\n var data;\n return __generator(this, function (_a) {\n data = BrowserStringUtils.stringToUtf8Arr(dataString);\n return [2\n /*return*/\n , this.hasIECrypto() ? this.getMSCryptoDigest(HASH_ALG, data) : this.getSubtleCryptoDigest(HASH_ALG, data)];\n });\n });\n };\n /**\r\n * Populates buffer with cryptographically random values.\r\n * @param dataBuffer\r\n */\n\n\n BrowserCrypto.prototype.getRandomValues = function (dataBuffer) {\n var cryptoObj = window[\"msCrypto\"] || window.crypto;\n\n if (!cryptoObj.getRandomValues) {\n throw BrowserAuthError.createCryptoNotAvailableError(\"getRandomValues does not exist.\");\n }\n\n cryptoObj.getRandomValues(dataBuffer);\n };\n /**\r\n * Checks whether IE crypto (AKA msCrypto) is available.\r\n */\n\n\n BrowserCrypto.prototype.hasIECrypto = function () {\n return !!window[\"msCrypto\"];\n };\n /**\r\n * Check whether browser crypto is available.\r\n */\n\n\n BrowserCrypto.prototype.hasBrowserCrypto = function () {\n return !!window.crypto;\n };\n /**\r\n * Check whether IE crypto or other browser cryptography is available.\r\n */\n\n\n BrowserCrypto.prototype.hasCryptoAPI = function () {\n return this.hasIECrypto() || this.hasBrowserCrypto();\n };\n /**\r\n * Helper function for SHA digest.\r\n * @param algorithm\r\n * @param data\r\n */\n\n\n BrowserCrypto.prototype.getSubtleCryptoDigest = function (algorithm, data) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , window.crypto.subtle.digest(algorithm, data)];\n });\n });\n };\n /**\r\n * Helper function for SHA digest.\r\n * @param algorithm\r\n * @param data\r\n */\n\n\n BrowserCrypto.prototype.getMSCryptoDigest = function (algorithm, data) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , new Promise(function (resolve, reject) {\n var digestOperation = window[\"msCrypto\"].subtle.digest(algorithm, data.buffer);\n digestOperation.addEventListener(\"complete\", function (e) {\n resolve(e.target.result);\n });\n digestOperation.addEventListener(\"error\", function (error) {\n reject(error);\n });\n })];\n });\n });\n };\n\n return BrowserCrypto;\n}();\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 */\n\n\nvar CryptoOps =\n/** @class */\nfunction () {\n function CryptoOps() {\n // Browser crypto needs to be validated first before any other classes can be set.\n this.browserCrypto = new BrowserCrypto();\n this.b64Encode = new Base64Encode();\n this.b64Decode = new Base64Decode();\n this.guidGenerator = new GuidGenerator(this.browserCrypto);\n this.pkceGenerator = new PkceGenerator(this.browserCrypto);\n }\n /**\r\n * Creates a new random GUID - used to populate state and nonce.\r\n * @returns string (GUID)\r\n */\n\n\n CryptoOps.prototype.createNewGuid = function () {\n return this.guidGenerator.generateGuid();\n };\n /**\r\n * Encodes input string to base64.\r\n * @param input\r\n */\n\n\n CryptoOps.prototype.base64Encode = function (input) {\n return this.b64Encode.encode(input);\n };\n /**\r\n * Decodes input string from base64.\r\n * @param input\r\n */\n\n\n CryptoOps.prototype.base64Decode = function (input) {\n return this.b64Decode.decode(input);\n };\n /**\r\n * Generates PKCE codes used in Authorization Code Flow.\r\n */\n\n\n CryptoOps.prototype.generatePkceCodes = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , this.pkceGenerator.generateCodes()];\n });\n });\n };\n\n return CryptoOps;\n}();\n/**\r\n * Abstract class which defines operations for a browser interaction handling class.\r\n */\n\n\nvar InteractionHandler =\n/** @class */\nfunction () {\n function InteractionHandler(authCodeModule, storageImpl) {\n this.authModule = authCodeModule;\n this.browserStorage = storageImpl;\n }\n /**\r\n * Function to handle response parameters from hash.\r\n * @param locationHash\r\n */\n\n\n InteractionHandler.prototype.handleCodeResponse = function (locationHash) {\n return __awaiter(this, void 0, void 0, function () {\n var requestState, authCode, cachedNonceKey, cachedNonce, tokenResponse;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Check that location hash isn't empty.\n if (StringUtils.isEmpty(locationHash)) {\n throw BrowserAuthError.createEmptyHashError(locationHash);\n }\n\n requestState = this.browserStorage.getItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE), CacheSchemaType.TEMPORARY);\n authCode = this.authModule.handleFragmentResponse(locationHash, requestState);\n cachedNonceKey = this.browserStorage.generateNonceKey(requestState);\n cachedNonce = this.browserStorage.getItem(this.browserStorage.generateCacheKey(cachedNonceKey), CacheSchemaType.TEMPORARY); // Assign code to request\n\n this.authCodeRequest.code = authCode;\n return [4\n /*yield*/\n , this.authModule.acquireToken(this.authCodeRequest, cachedNonce, requestState)];\n\n case 1:\n tokenResponse = _a.sent();\n this.browserStorage.cleanRequest();\n return [2\n /*return*/\n , tokenResponse];\n }\n });\n });\n };\n\n return InteractionHandler;\n}();\n\nvar RedirectHandler =\n/** @class */\nfunction (_super) {\n __extends(RedirectHandler, _super);\n\n function RedirectHandler() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n /**\r\n * Redirects window to given URL.\r\n * @param urlNavigate\r\n */\n\n\n RedirectHandler.prototype.initiateAuthRequest = function (requestUrl, authCodeRequest, redirectStartPage, browserCrypto) {\n // Navigate if valid URL\n if (!StringUtils.isEmpty(requestUrl)) {\n // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true\n if (redirectStartPage) {\n this.browserStorage.setItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI), redirectStartPage, CacheSchemaType.TEMPORARY);\n } // Set interaction status in the library.\n\n\n this.browserStorage.setItem(this.browserStorage.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY), BrowserConstants.INTERACTION_IN_PROGRESS_VALUE, CacheSchemaType.TEMPORARY);\n this.browserStorage.cacheCodeRequest(authCodeRequest, browserCrypto);\n this.authModule.logger.infoPii(\"Navigate to:\" + requestUrl);\n var isIframedApp = BrowserUtils.isInIframe();\n\n if (isIframedApp) {\n // If we are not in top frame, we shouldn't redirect. This is also handled by the service.\n throw BrowserAuthError.createRedirectInIframeError(isIframedApp);\n } // Navigate window to request URL\n\n\n BrowserUtils.navigateWindow(requestUrl);\n } else {\n // Throw error if request URL is empty.\n this.authModule.logger.info(\"Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n } // Return this window handle. Not used for redirect, but needed for API definition.\n\n\n return window;\n };\n /**\r\n * Handle authorization code response in the window.\r\n * @param hash\r\n */\n\n\n RedirectHandler.prototype.handleCodeResponse = function (locationHash, browserCrypto) {\n return __awaiter(this, void 0, void 0, function () {\n var requestState, authCode, cachedNonceKey, cachedNonce, tokenResponse;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Check that location hash isn't empty.\n if (StringUtils.isEmpty(locationHash)) {\n throw BrowserAuthError.createEmptyHashError(locationHash);\n } // Interaction is completed - remove interaction status.\n\n\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY));\n requestState = this.browserStorage.getItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.REQUEST_STATE), CacheSchemaType.TEMPORARY);\n authCode = this.authModule.handleFragmentResponse(locationHash, requestState);\n cachedNonceKey = this.browserStorage.generateNonceKey(requestState);\n cachedNonce = this.browserStorage.getItem(this.browserStorage.generateCacheKey(cachedNonceKey), CacheSchemaType.TEMPORARY);\n this.authCodeRequest = this.browserStorage.getCachedRequest(requestState, browserCrypto);\n this.authCodeRequest.code = authCode;\n return [4\n /*yield*/\n , this.authModule.acquireToken(this.authCodeRequest, cachedNonce, requestState)];\n\n case 1:\n tokenResponse = _a.sent();\n this.browserStorage.cleanRequest();\n return [2\n /*return*/\n , tokenResponse];\n }\n });\n });\n };\n\n return RedirectHandler;\n}(InteractionHandler);\n/**\r\n * This class implements the interaction handler base class for browsers. It is written specifically for handling\r\n * popup window scenarios. It includes functions for monitoring the popup window for a hash.\r\n */\n\n\nvar PopupHandler =\n/** @class */\nfunction (_super) {\n __extends(PopupHandler, _super);\n\n function PopupHandler(authCodeModule, storageImpl) {\n var _this = _super.call(this, authCodeModule, storageImpl) || this; // Properly sets this reference for the unload event.\n\n\n _this.unloadWindow = _this.unloadWindow.bind(_this);\n return _this;\n }\n /**\r\n * Opens a popup window with given request Url.\r\n * @param requestUrl\r\n */\n\n\n PopupHandler.prototype.initiateAuthRequest = function (requestUrl, authCodeRequest, popup) {\n // Check that request url is not empty.\n if (!StringUtils.isEmpty(requestUrl)) {\n // Save auth code request\n this.authCodeRequest = authCodeRequest; // Set interaction status in the library.\n\n this.browserStorage.setItem(this.browserStorage.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY), BrowserConstants.INTERACTION_IN_PROGRESS_VALUE, CacheSchemaType.TEMPORARY);\n this.authModule.logger.infoPii(\"Navigate to:\" + requestUrl); // Open the popup window to requestUrl.\n\n return this.openPopup(requestUrl, popup);\n } else {\n // Throw error if request URL is empty.\n this.authModule.logger.error(\"Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n }\n };\n /**\r\n * Monitors a window until it loads a url with a known hash, or hits a specified timeout.\r\n * @param popupWindow - window that is being monitored\r\n * @param timeout - milliseconds until timeout\r\n * @param urlNavigate - url that was navigated to\r\n */\n\n\n PopupHandler.prototype.monitorPopupForHash = function (popupWindow, timeout) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n var maxTicks = timeout / BrowserConstants.POLL_INTERVAL_MS;\n var ticks = 0;\n var intervalId = setInterval(function () {\n if (popupWindow.closed) {\n // Window is closed\n _this.cleanPopup();\n\n clearInterval(intervalId);\n reject(BrowserAuthError.createUserCancelledError());\n return;\n }\n\n var href;\n\n try {\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\n href = popupWindow.location.href;\n } catch (e) {} // Don't process blank pages or cross domain\n\n\n if (StringUtils.isEmpty(href) || href === \"about:blank\") {\n return;\n } // Only run clock when we are on same domain\n\n\n ticks++;\n var contentHash = popupWindow.location.hash;\n\n if (UrlString.hashContainsKnownProperties(contentHash)) {\n // Success case\n _this.cleanPopup(popupWindow);\n\n clearInterval(intervalId);\n resolve(contentHash);\n return;\n } else if (ticks > maxTicks) {\n // Timeout error\n _this.cleanPopup(popupWindow);\n\n clearInterval(intervalId);\n reject(BrowserAuthError.createMonitorWindowTimeoutError());\n return;\n }\n }, BrowserConstants.POLL_INTERVAL_MS);\n });\n };\n /**\r\n * @hidden\r\n *\r\n * Configures popup window for login.\r\n *\r\n * @param urlNavigate\r\n * @param title\r\n * @param popUpWidth\r\n * @param popUpHeight\r\n * @ignore\r\n * @hidden\r\n */\n\n\n PopupHandler.prototype.openPopup = function (urlNavigate, popup) {\n try {\n var popupWindow = void 0; // Popup window passed in, setting url to navigate to\n\n if (popup) {\n popupWindow = popup;\n popupWindow.location.assign(urlNavigate);\n } else if (typeof popup === \"undefined\") {\n // Popup will be undefined if it was not passed in\n popupWindow = PopupHandler.openSizedPopup(urlNavigate);\n } // Popup will be null if popups are blocked\n\n\n if (!popupWindow) {\n throw BrowserAuthError.createEmptyWindowCreatedError();\n }\n\n if (popupWindow.focus) {\n popupWindow.focus();\n }\n\n this.currentWindow = popupWindow;\n window.addEventListener(\"beforeunload\", this.unloadWindow);\n return popupWindow;\n } catch (e) {\n this.authModule.logger.error(\"error opening popup \" + e.message);\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY));\n throw BrowserAuthError.createPopupWindowError(e.toString());\n }\n };\n\n PopupHandler.openSizedPopup = function (urlNavigate) {\n if (urlNavigate === void 0) {\n urlNavigate = \"about:blank\";\n }\n /**\r\n * adding winLeft and winTop to account for dual monitor\r\n * using screenLeft and screenTop for IE8 and earlier\r\n */\n\n\n var winLeft = window.screenLeft ? window.screenLeft : window.screenX;\n var winTop = window.screenTop ? window.screenTop : window.screenY;\n /**\r\n * window.innerWidth displays browser window\"s height and width excluding toolbars\r\n * using document.documentElement.clientWidth for IE8 and earlier\r\n */\n\n var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\n var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight;\n var left = Math.max(0, width / 2 - BrowserConstants.POPUP_WIDTH / 2 + winLeft);\n var top = Math.max(0, height / 2 - BrowserConstants.POPUP_HEIGHT / 2 + winTop);\n return window.open(urlNavigate, Constants.LIBRARY_NAME, \"width=\" + BrowserConstants.POPUP_WIDTH + \", height=\" + BrowserConstants.POPUP_HEIGHT + \", top=\" + top + \", left=\" + left);\n };\n /**\r\n * Event callback to unload main window.\r\n */\n\n\n PopupHandler.prototype.unloadWindow = function (e) {\n this.browserStorage.cleanRequest();\n this.currentWindow.close(); // Guarantees browser unload will happen, so no other errors will be thrown.\n\n delete e[\"returnValue\"];\n };\n /**\r\n * Closes popup, removes any state vars created during popup calls.\r\n * @param popupWindow\r\n */\n\n\n PopupHandler.prototype.cleanPopup = function (popupWindow) {\n if (popupWindow) {\n // Close window.\n popupWindow.close();\n } // Remove window unload function\n\n\n window.removeEventListener(\"beforeunload\", this.unloadWindow); // Interaction is completed - remove interaction status.\n\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY));\n };\n\n return PopupHandler;\n}(InteractionHandler);\n\nvar SilentHandler =\n/** @class */\nfunction (_super) {\n __extends(SilentHandler, _super);\n\n function SilentHandler(authCodeModule, storageImpl, configuredLoadFrameTimeout) {\n var _this = _super.call(this, authCodeModule, storageImpl) || this;\n\n _this.loadFrameTimeout = configuredLoadFrameTimeout;\n return _this;\n }\n /**\r\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\r\n * @param urlNavigate\r\n * @param userRequestScopes\r\n */\n\n\n SilentHandler.prototype.initiateAuthRequest = function (requestUrl, authCodeRequest, userRequestScopes) {\n return __awaiter(this, void 0, void 0, function () {\n var frameName, _a;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (StringUtils.isEmpty(requestUrl)) {\n // Throw error if request URL is empty.\n this.authModule.logger.info(\"Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n } // Save auth code request\n\n\n this.authCodeRequest = authCodeRequest;\n frameName = userRequestScopes ? \"msalTokenFrame\" + userRequestScopes : \"msalTokenFrame\";\n if (!this.loadFrameTimeout) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , this.loadFrame(requestUrl, frameName)];\n\n case 1:\n _a = _b.sent();\n return [3\n /*break*/\n , 3];\n\n case 2:\n _a = this.loadFrameSync(requestUrl, frameName);\n _b.label = 3;\n\n case 3:\n return [2\n /*return*/\n , _a];\n }\n });\n });\n };\n /**\r\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\r\n * @param iframe\r\n * @param timeout\r\n */\n\n\n SilentHandler.prototype.monitorIframeForHash = function (iframe, timeout) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n /*\r\n * Polling for iframes can be purely timing based,\r\n * since we don't need to account for interaction.\r\n */\n var nowMark = window.performance.now();\n var timeoutMark = nowMark + timeout;\n var intervalId = setInterval(function () {\n if (window.performance.now() > timeoutMark) {\n _this.removeHiddenIframe(iframe);\n\n clearInterval(intervalId);\n reject(BrowserAuthError.createMonitorWindowTimeoutError());\n return;\n }\n\n var href;\n\n try {\n /*\r\n * Will throw if cross origin,\r\n * which should be caught and ignored\r\n * since we need the interval to keep running while on STS UI.\r\n */\n href = iframe.contentWindow.location.href;\n } catch (e) {}\n\n if (StringUtils.isEmpty(href)) {\n return;\n }\n\n var contentHash = iframe.contentWindow.location.hash;\n\n if (UrlString.hashContainsKnownProperties(contentHash)) {\n // Success case\n _this.removeHiddenIframe(iframe);\n\n clearInterval(intervalId);\n resolve(contentHash);\n return;\n }\n }, BrowserConstants.POLL_INTERVAL_MS);\n });\n };\n /**\r\n * @hidden\r\n * Loads iframe with authorization endpoint URL\r\n * @ignore\r\n */\n\n\n SilentHandler.prototype.loadFrame = function (urlNavigate, frameName) {\n /*\r\n * This trick overcomes iframe navigation in IE\r\n * IE does not load the page consistently in iframe\r\n */\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n setTimeout(function () {\n var frameHandle = _this.loadFrameSync(urlNavigate, frameName);\n\n if (!frameHandle) {\n reject(\"Unable to load iframe with name: \" + frameName);\n return;\n }\n\n resolve(frameHandle);\n }, _this.loadFrameTimeout);\n });\n };\n /**\r\n * @hidden\r\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\r\n * @param urlNavigate\r\n * @param frameName\r\n * @param logger\r\n */\n\n\n SilentHandler.prototype.loadFrameSync = function (urlNavigate, frameName) {\n var frameHandle = this.getHiddenIframe(frameName); // returning to handle null in loadFrame, also to avoid null object access errors\n\n if (!frameHandle) {\n return null;\n } else if (frameHandle.src === \"\" || frameHandle.src === \"about:blank\") {\n frameHandle.src = urlNavigate;\n }\n\n return frameHandle;\n };\n /**\r\n * @hidden\r\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\r\n * @ignore\r\n */\n\n\n SilentHandler.prototype.getHiddenIframe = function (iframeId) {\n if (typeof iframeId === \"undefined\") {\n return null;\n }\n\n var authFrame = document.getElementById(iframeId);\n\n if (!authFrame) {\n if (document.createElement && document.documentElement && window.navigator.userAgent.indexOf(\"MSIE 5.0\") === -1) {\n var ifr = document.createElement(\"iframe\");\n ifr.setAttribute(\"id\", iframeId);\n ifr.style.visibility = \"hidden\";\n ifr.style.position = \"absolute\";\n ifr.style.width = ifr.style.height = \"0\";\n ifr.style.border = \"0\";\n ifr.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin allow-forms\");\n authFrame = document.getElementsByTagName(\"body\")[0].appendChild(ifr);\n } else if (document.body && document.body.insertAdjacentHTML) {\n document.body.insertAdjacentHTML(\"beforeend\", \"\");\n }\n\n if (window.frames && window.frames[iframeId]) {\n authFrame = window.frames[iframeId];\n }\n }\n\n return authFrame;\n };\n /**\r\n * @hidden\r\n * Removes a hidden iframe from the page.\r\n * @ignore\r\n */\n\n\n SilentHandler.prototype.removeHiddenIframe = function (iframe) {\n if (document.body === iframe.parentNode) {\n document.body.removeChild(iframe);\n }\n };\n\n return SilentHandler;\n}(InteractionHandler);\n\nvar version$1 = \"2.1.0\";\n/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\nvar BrowserProtocolUtils =\n/** @class */\nfunction () {\n function BrowserProtocolUtils() {}\n /**\r\n * Extracts the BrowserStateObject from the state string.\r\n * @param browserCrypto\r\n * @param state\r\n */\n\n\n BrowserProtocolUtils.extractBrowserRequestState = function (browserCrypto, state) {\n if (StringUtils.isEmpty(state)) {\n return null;\n }\n\n try {\n var requestStateObj = ProtocolUtils.parseRequestState(browserCrypto, state);\n return requestStateObj.libraryState.meta;\n } catch (e) {\n throw ClientAuthError.createInvalidStateError(state, e);\n }\n };\n\n return BrowserProtocolUtils;\n}();\n/**\r\n * The PublicClientApplication class is the object exposed by the library to perform authentication and authorization functions in Single Page Applications\r\n * to obtain JWT tokens as described in the OAuth 2.0 Authorization Code Flow with PKCE specification.\r\n */\n\n\nvar PublicClientApplication =\n/** @class */\nfunction () {\n /**\r\n * @constructor\r\n * Constructor for the PublicClientApplication used to instantiate the PublicClientApplication object\r\n *\r\n * Important attributes in the Configuration object for auth are:\r\n * - clientID: the application ID of your application. You can obtain one by registering your application with our Application registration portal : https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredAppsPreview\r\n * - authority: the authority URL for your application.\r\n * - redirect_uri: the uri of your application registered in the portal.\r\n *\r\n * In Azure AD, authority is a URL indicating the Azure active directory that MSAL uses to obtain tokens.\r\n * It is of the form https://login.microsoftonline.com/{Enter_the_Tenant_Info_Here}\r\n * If your application supports Accounts in one organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with the Tenant Id or Tenant name (for example, contoso.microsoft.com).\r\n * If your application supports Accounts in any organizational directory, replace \"Enter_the_Tenant_Info_Here\" value with organizations.\r\n * If your application supports Accounts in any organizational directory and personal Microsoft accounts, replace \"Enter_the_Tenant_Info_Here\" value with common.\r\n * To restrict support to Personal Microsoft accounts only, replace \"Enter_the_Tenant_Info_Here\" value with consumers.\r\n *\r\n * In Azure B2C, authority is of the form https://{instance}/tfp/{tenant}/{policyName}/\r\n * Full B2C functionality will be available in this library in future versions.\r\n *\r\n * @param {@link (Configuration:type)} configuration object for the MSAL PublicClientApplication instance\r\n */\n function PublicClientApplication(configuration) {\n // Set the configuration.\n this.config = buildConfiguration(configuration); // Initialize the crypto class.\n\n this.browserCrypto = new CryptoOps(); // Initialize the network module class.\n\n this.networkClient = this.config.system.networkClient; // Initialize the browser storage class.\n\n this.browserStorage = new BrowserStorage(this.config.auth.clientId, this.config.cache); // Initialize logger\n\n this.logger = new Logger(this.config.system.loggerOptions); // Initialize default authority instance\n\n TrustedAuthority.setTrustedAuthoritiesFromConfig(this.config.auth.knownAuthorities, this.config.auth.cloudDiscoveryMetadata);\n this.defaultAuthority = null;\n } // #region Redirect Flow\n\n /**\r\n * Event handler function which allows users to fire events after the PublicClientApplication object\r\n * has loaded during redirect flows. This should be invoked on all page loads involved in redirect\r\n * auth flows.\r\n * @returns {Promise.} token response or null. If the return value is null, then no auth redirect was detected.\r\n */\n\n\n PublicClientApplication.prototype.handleRedirectPromise = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , this.handleRedirectResponse()];\n });\n });\n };\n /**\r\n * Checks if navigateToLoginRequestUrl is set, and:\r\n * - if true, performs logic to cache and navigate\r\n * - if false, handles hash string and parses response\r\n */\n\n\n PublicClientApplication.prototype.handleRedirectResponse = function () {\n return __awaiter(this, void 0, void 0, function () {\n var responseHash, loginRequestUrl, loginRequestUrlNormalized, currentUrlNormalized, hashKey, homepage;\n return __generator(this, function (_a) {\n responseHash = this.getRedirectResponseHash();\n\n if (StringUtils.isEmpty(responseHash)) {\n // Not a recognized server response hash or hash not associated with a redirect request\n return [2\n /*return*/\n , null];\n }\n\n loginRequestUrl = this.browserStorage.getItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI), CacheSchemaType.TEMPORARY);\n loginRequestUrlNormalized = UrlString.removeHashFromUrl(loginRequestUrl || \"\");\n currentUrlNormalized = UrlString.removeHashFromUrl(window.location.href);\n\n if (loginRequestUrlNormalized === currentUrlNormalized && this.config.auth.navigateToLoginRequestUrl) {\n if (loginRequestUrl.indexOf(\"#\") > -1) {\n // Replace current hash with non-msal hash, if present\n BrowserUtils.replaceHash(loginRequestUrl);\n } // We are on the page we need to navigate to - handle hash\n\n\n return [2\n /*return*/\n , this.handleHash(responseHash)];\n } else if (!this.config.auth.navigateToLoginRequestUrl) {\n return [2\n /*return*/\n , this.handleHash(responseHash)];\n } else if (!BrowserUtils.isInIframe()) {\n hashKey = this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH);\n this.browserStorage.setItem(hashKey, responseHash, CacheSchemaType.TEMPORARY);\n\n if (!loginRequestUrl || loginRequestUrl === \"null\") {\n homepage = BrowserUtils.getHomepage(); // Cache the homepage under ORIGIN_URI to ensure cached hash is processed on homepage\n\n this.browserStorage.setItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.ORIGIN_URI), homepage, CacheSchemaType.TEMPORARY);\n this.logger.warning(\"Unable to get valid login request url from cache, redirecting to home page\");\n BrowserUtils.navigateWindow(homepage, true);\n } else {\n // Navigate to page that initiated the redirect request\n BrowserUtils.navigateWindow(loginRequestUrl, true);\n }\n }\n\n return [2\n /*return*/\n , null];\n });\n });\n };\n /**\r\n * Gets the response hash for a redirect request\r\n * Returns null if interactionType in the state value is not \"redirect\" or the hash does not contain known properties\r\n * @returns {string}\r\n */\n\n\n PublicClientApplication.prototype.getRedirectResponseHash = function () {\n // Get current location hash from window or cache.\n var hash = window.location.hash;\n var isResponseHash = UrlString.hashContainsKnownProperties(hash);\n var cachedHash = this.browserStorage.getItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH), CacheSchemaType.TEMPORARY);\n this.browserStorage.removeItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.URL_HASH));\n var responseHash = isResponseHash ? hash : cachedHash;\n\n if (responseHash) {\n // Deserialize hash fragment response parameters.\n var serverParams = UrlString.getDeserializedHash(responseHash);\n var platformStateObj = BrowserProtocolUtils.extractBrowserRequestState(this.browserCrypto, serverParams.state);\n\n if (platformStateObj.interactionType !== InteractionType.REDIRECT) {\n return null;\n } else {\n BrowserUtils.clearHash();\n return responseHash;\n }\n }\n\n this.browserStorage.cleanRequest();\n return null;\n };\n /**\r\n * Checks if hash exists and handles in window.\r\n * @param responseHash\r\n * @param interactionHandler\r\n */\n\n\n PublicClientApplication.prototype.handleHash = function (responseHash) {\n return __awaiter(this, void 0, void 0, function () {\n var encodedTokenRequest, cachedRequest, serverTelemetryManager, currentAuthority, authClient, interactionHandler, e_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n encodedTokenRequest = this.browserStorage.getItem(this.browserStorage.generateCacheKey(TemporaryCacheKeys.REQUEST_PARAMS), CacheSchemaType.TEMPORARY);\n cachedRequest = JSON.parse(this.browserCrypto.base64Decode(encodedTokenRequest));\n serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.handleRedirectPromise, cachedRequest.correlationId);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 4,, 5]);\n\n currentAuthority = this.browserStorage.getCachedAuthority();\n return [4\n /*yield*/\n , this.createAuthCodeClient(serverTelemetryManager, currentAuthority)];\n\n case 2:\n authClient = _a.sent();\n interactionHandler = new RedirectHandler(authClient, this.browserStorage);\n return [4\n /*yield*/\n , interactionHandler.handleCodeResponse(responseHash, this.browserCrypto)];\n\n case 3:\n return [2\n /*return*/\n , _a.sent()];\n\n case 4:\n e_1 = _a.sent();\n serverTelemetryManager.cacheFailedRequest(e_1);\n this.browserStorage.cleanRequest();\n throw e_1;\n\n case 5:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Use when initiating the login process by redirecting the user's browser to the authorization endpoint. This function redirects the page, so\r\n * any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param {@link (RedirectRequest:type)}\r\n */\n\n\n PublicClientApplication.prototype.loginRedirect = function (request) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2\n /*return*/\n , this.acquireTokenRedirect(request || DEFAULT_REQUEST)];\n });\n });\n };\n /**\r\n * Use when you want to obtain an access_token for your API by redirecting the user's browser window to the authorization endpoint. This function redirects\r\n * the page, so any code that follows this function will not execute.\r\n *\r\n * IMPORTANT: It is NOT recommended to have code that is dependent on the resolution of the Promise. This function will navigate away from the current\r\n * browser window. It currently returns a Promise in order to reflect the asynchronous nature of the code running in this function.\r\n *\r\n * @param {@link (RedirectRequest:type)}\r\n */\n\n\n PublicClientApplication.prototype.acquireTokenRedirect = function (request) {\n return __awaiter(this, void 0, void 0, function () {\n var validRequest, serverTelemetryManager, authCodeRequest, authClient, interactionHandler, navigateUrl, redirectStartPage, e_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n validRequest = this.preflightInteractiveRequest(request, InteractionType.REDIRECT);\n serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenRedirect, validRequest.correlationId);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 5,, 6]);\n\n return [4\n /*yield*/\n , this.initializeAuthorizationCodeRequest(validRequest)];\n\n case 2:\n authCodeRequest = _a.sent();\n return [4\n /*yield*/\n , this.createAuthCodeClient(serverTelemetryManager, validRequest.authority)];\n\n case 3:\n authClient = _a.sent();\n interactionHandler = new RedirectHandler(authClient, this.browserStorage);\n return [4\n /*yield*/\n , authClient.getAuthCodeUrl(validRequest)];\n\n case 4:\n navigateUrl = _a.sent();\n redirectStartPage = request && request.redirectStartPage || window.location.href; // Show the UI once the url has been created. Response will come back in the hash, which will be handled in the handleRedirectCallback function.\n\n interactionHandler.initiateAuthRequest(navigateUrl, authCodeRequest, redirectStartPage, this.browserCrypto);\n return [3\n /*break*/\n , 6];\n\n case 5:\n e_2 = _a.sent();\n serverTelemetryManager.cacheFailedRequest(e_2);\n this.browserStorage.cleanRequest();\n throw e_2;\n\n case 6:\n return [2\n /*return*/\n ];\n }\n });\n });\n }; // #endregion\n // #region Popup Flow\n\n /**\r\n * Use when initiating the login process via opening a popup window in the user's browser\r\n *\r\n * @param {@link (PopupRequest:type)}\r\n *\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\n\n\n PublicClientApplication.prototype.loginPopup = function (request) {\n return this.acquireTokenPopup(request || DEFAULT_REQUEST);\n };\n /**\r\n * Use when you want to obtain an access_token for your API via opening a popup window in the user's browser\r\n * @param {@link (PopupRequest:type)}\r\n *\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\n\n\n PublicClientApplication.prototype.acquireTokenPopup = function (request) {\n // asyncPopups flag is true. Acquires token without first opening popup. Popup will be opened later asynchronously.\n if (this.config.system.asyncPopups) {\n return this.acquireTokenPopupAsync(request);\n } else {\n // asyncPopups flag is set to false. Opens popup before acquiring token.\n var popup = PopupHandler.openSizedPopup();\n return this.acquireTokenPopupAsync(request, popup);\n }\n };\n /**\r\n * Helper which obtains an access_token for your API via opening a popup window in the user's browser\r\n * @param {@link (PopupRequest:type)}\r\n *\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\n\n\n PublicClientApplication.prototype.acquireTokenPopupAsync = function (request, popup) {\n return __awaiter(this, void 0, void 0, function () {\n var validRequest, serverTelemetryManager, authCodeRequest, authClient, navigateUrl, interactionHandler, popupWindow, hash, e_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n validRequest = this.preflightInteractiveRequest(request, InteractionType.POPUP);\n serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenPopup, validRequest.correlationId);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 7,, 8]);\n\n return [4\n /*yield*/\n , this.initializeAuthorizationCodeRequest(validRequest)];\n\n case 2:\n authCodeRequest = _a.sent();\n return [4\n /*yield*/\n , this.createAuthCodeClient(serverTelemetryManager, validRequest.authority)];\n\n case 3:\n authClient = _a.sent();\n return [4\n /*yield*/\n , authClient.getAuthCodeUrl(validRequest)];\n\n case 4:\n navigateUrl = _a.sent();\n interactionHandler = new PopupHandler(authClient, this.browserStorage);\n popupWindow = interactionHandler.initiateAuthRequest(navigateUrl, authCodeRequest, popup);\n return [4\n /*yield*/\n , interactionHandler.monitorPopupForHash(popupWindow, this.config.system.windowHashTimeout)];\n\n case 5:\n hash = _a.sent();\n return [4\n /*yield*/\n , interactionHandler.handleCodeResponse(hash)];\n\n case 6:\n // Handle response from hash string.\n return [2\n /*return*/\n , _a.sent()];\n\n case 7:\n e_3 = _a.sent();\n serverTelemetryManager.cacheFailedRequest(e_3);\n this.browserStorage.cleanRequest();\n throw e_3;\n\n case 8:\n return [2\n /*return*/\n ];\n }\n });\n });\n }; // #endregion\n // #region Silent Flow\n\n /**\r\n * This function uses a hidden iframe to fetch an authorization code from the eSTS. There are cases where this may not work:\r\n * - Any browser using a form of Intelligent Tracking Prevention\r\n * - If there is not an established session with the service\r\n *\r\n * In these cases, the request must be done inside a popup or full frame redirect.\r\n *\r\n * For the cases where interaction is required, you cannot send a request with prompt=none.\r\n *\r\n * If your refresh token has expired, you can use this function to fetch a new set of tokens silently as long as\r\n * you session on the server still exists.\r\n * @param {@link AuthorizationUrlRequest}\r\n *\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n */\n\n\n PublicClientApplication.prototype.ssoSilent = function (request) {\n return __awaiter(this, void 0, void 0, function () {\n var silentRequest, serverTelemetryManager, authCodeRequest, scopeString, authClient, navigateUrl, e_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // block the reload if it occurred inside a hidden iframe\n BrowserUtils.blockReloadInHiddenIframes(); // Check that we have some SSO data\n\n if (StringUtils.isEmpty(request.loginHint) && StringUtils.isEmpty(request.sid)) {\n throw BrowserAuthError.createSilentSSOInsufficientInfoError();\n } // Check that prompt is set to none, throw error if it is set to anything else.\n\n\n if (request.prompt && request.prompt !== PromptValue.NONE) {\n throw BrowserAuthError.createSilentPromptValueError(request.prompt);\n }\n\n silentRequest = this.initializeAuthorizationRequest(_assign(_assign({}, request), {\n prompt: PromptValue.NONE\n }), InteractionType.SILENT);\n serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.ssoSilent, silentRequest.correlationId);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 6,, 7]);\n\n return [4\n /*yield*/\n , this.initializeAuthorizationCodeRequest(silentRequest)];\n\n case 2:\n authCodeRequest = _a.sent();\n scopeString = silentRequest.scopes ? silentRequest.scopes.join(\" \") : \"\";\n return [4\n /*yield*/\n , this.createAuthCodeClient(serverTelemetryManager, silentRequest.authority)];\n\n case 3:\n authClient = _a.sent();\n return [4\n /*yield*/\n , authClient.getAuthCodeUrl(silentRequest)];\n\n case 4:\n navigateUrl = _a.sent();\n return [4\n /*yield*/\n , this.silentTokenHelper(navigateUrl, authCodeRequest, authClient, scopeString)];\n\n case 5:\n return [2\n /*return*/\n , _a.sent()];\n\n case 6:\n e_4 = _a.sent();\n serverTelemetryManager.cacheFailedRequest(e_4);\n this.browserStorage.cleanRequest();\n throw e_4;\n\n case 7:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Use this function to obtain a token before every call to the API / resource provider\r\n *\r\n * MSAL return's a cached token when available\r\n * Or it send's a request to the STS to obtain a new token using a refresh token.\r\n *\r\n * @param {@link (SilentRequest:type)}\r\n *\r\n * To renew idToken, please pass clientId as the only scope in the Authentication Parameters\r\n * @returns {Promise.} - a promise that is fulfilled when this function has completed, or rejected if an error was raised. Returns the {@link AuthResponse} object\r\n *\r\n */\n\n\n PublicClientApplication.prototype.acquireTokenSilent = function (request) {\n return __awaiter(this, void 0, void 0, function () {\n var silentRequest, serverTelemetryManager, silentAuthClient, e_5, isServerError, isInteractionRequiredError, isInvalidGrantError, silentAuthUrlRequest, authCodeRequest, authClient, navigateUrl, scopeString, e_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // block the reload if it occurred inside a hidden iframe\n BrowserUtils.blockReloadInHiddenIframes();\n silentRequest = _assign(_assign({}, request), this.initializeBaseRequest(request));\n serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_silentFlow, silentRequest.correlationId);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 4,, 12]);\n\n return [4\n /*yield*/\n , this.createSilentFlowClient(serverTelemetryManager, silentRequest.authority)];\n\n case 2:\n silentAuthClient = _a.sent();\n return [4\n /*yield*/\n , silentAuthClient.acquireToken(silentRequest)];\n\n case 3:\n // Send request to renew token. Auth module will throw errors if token cannot be renewed.\n return [2\n /*return*/\n , _a.sent()];\n\n case 4:\n e_5 = _a.sent();\n serverTelemetryManager.cacheFailedRequest(e_5);\n isServerError = e_5 instanceof ServerError;\n isInteractionRequiredError = e_5 instanceof InteractionRequiredAuthError;\n isInvalidGrantError = e_5.errorCode === BrowserConstants.INVALID_GRANT_ERROR;\n if (!(isServerError && isInvalidGrantError && !isInteractionRequiredError)) return [3\n /*break*/\n , 11];\n silentAuthUrlRequest = this.initializeAuthorizationRequest(_assign(_assign({}, silentRequest), {\n redirectUri: request.redirectUri,\n prompt: PromptValue.NONE\n }), InteractionType.SILENT);\n serverTelemetryManager = this.initializeServerTelemetryManager(ApiId.acquireTokenSilent_authCode, silentAuthUrlRequest.correlationId);\n _a.label = 5;\n\n case 5:\n _a.trys.push([5, 10,, 11]);\n\n return [4\n /*yield*/\n , this.initializeAuthorizationCodeRequest(silentAuthUrlRequest)];\n\n case 6:\n authCodeRequest = _a.sent();\n return [4\n /*yield*/\n , this.createAuthCodeClient(serverTelemetryManager, silentAuthUrlRequest.authority)];\n\n case 7:\n authClient = _a.sent();\n return [4\n /*yield*/\n , authClient.getAuthCodeUrl(silentAuthUrlRequest)];\n\n case 8:\n navigateUrl = _a.sent();\n scopeString = silentAuthUrlRequest.scopes ? silentAuthUrlRequest.scopes.join(\" \") : \"\";\n return [4\n /*yield*/\n , this.silentTokenHelper(navigateUrl, authCodeRequest, authClient, scopeString)];\n\n case 9:\n return [2\n /*return*/\n , _a.sent()];\n\n case 10:\n e_6 = _a.sent();\n serverTelemetryManager.cacheFailedRequest(e_6);\n this.browserStorage.cleanRequest();\n throw e_6;\n\n case 11:\n throw e_5;\n\n case 12:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\r\n * Helper which acquires an authorization code silently using a hidden iframe from given url\r\n * using the scopes requested as part of the id, and exchanges the code for a set of OAuth tokens.\r\n * @param navigateUrl\r\n * @param userRequestScopes\r\n */\n\n\n PublicClientApplication.prototype.silentTokenHelper = function (navigateUrl, authCodeRequest, authClient, userRequestScopes) {\n return __awaiter(this, void 0, void 0, function () {\n var silentHandler, msalFrame, hash;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n silentHandler = new SilentHandler(authClient, this.browserStorage, this.config.system.loadFrameTimeout);\n return [4\n /*yield*/\n , silentHandler.initiateAuthRequest(navigateUrl, authCodeRequest, userRequestScopes)];\n\n case 1:\n msalFrame = _a.sent();\n return [4\n /*yield*/\n , silentHandler.monitorIframeForHash(msalFrame, this.config.system.iframeHashTimeout)];\n\n case 2:\n hash = _a.sent(); // Handle response from hash string\n\n return [2\n /*return*/\n , silentHandler.handleCodeResponse(hash)];\n }\n });\n });\n }; // #endregion\n // #region Logout\n\n /**\r\n * Use to log out the current user, and redirect the user to the postLogoutRedirectUri.\r\n * Default behaviour is to redirect the user to `window.location.href`.\r\n * @param {@link (EndSessionRequest:type)}\r\n */\n\n\n PublicClientApplication.prototype.logout = function (logoutRequest) {\n return __awaiter(this, void 0, void 0, function () {\n var validLogoutRequest, authClient, logoutUri;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n validLogoutRequest = this.initializeLogoutRequest(logoutRequest);\n return [4\n /*yield*/\n , this.createAuthCodeClient(null, validLogoutRequest && validLogoutRequest.authority)];\n\n case 1:\n authClient = _a.sent();\n logoutUri = authClient.getLogoutUri(validLogoutRequest);\n BrowserUtils.navigateWindow(logoutUri);\n return [2\n /*return*/\n ];\n }\n });\n });\n }; // #endregion\n // #region Account APIs\n\n /**\r\n * Returns all accounts that MSAL currently has data for.\r\n * (the account object is created at the time of successful login)\r\n * or empty array when no accounts are found\r\n * @returns {@link AccountInfo[]} - Array of account objects in cache\r\n */\n\n\n PublicClientApplication.prototype.getAllAccounts = function () {\n return this.browserStorage.getAllAccounts();\n };\n /**\r\n * Returns the signed in account matching username.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found.\r\n * This API is provided for convenience but getAccountById should be used for best reliability\r\n * @returns {@link AccountInfo} - the account object stored in MSAL\r\n */\n\n\n PublicClientApplication.prototype.getAccountByUsername = function (userName) {\n var allAccounts = this.getAllAccounts();\n\n if (!StringUtils.isEmpty(userName) && allAccounts && allAccounts.length) {\n return allAccounts.filter(function (accountObj) {\n return accountObj.username.toLowerCase() === userName.toLowerCase();\n })[0] || null;\n } else {\n return null;\n }\n };\n /**\r\n * Returns the signed in account matching homeAccountId.\r\n * (the account object is created at the time of successful login)\r\n * or null when no matching account is found\r\n * @returns {@link AccountInfo} - the account object stored in MSAL\r\n */\n\n\n PublicClientApplication.prototype.getAccountByHomeId = function (homeAccountId) {\n var allAccounts = this.getAllAccounts();\n\n if (!StringUtils.isEmpty(homeAccountId) && allAccounts && allAccounts.length) {\n return allAccounts.filter(function (accountObj) {\n return accountObj.homeAccountId === homeAccountId;\n })[0] || null;\n } else {\n return null;\n }\n }; // #endregion\n // #region Helpers\n\n /**\r\n *\r\n * Use to get the redirect uri configured in MSAL or null.\r\n * @returns {string} redirect URL\r\n *\r\n */\n\n\n PublicClientApplication.prototype.getRedirectUri = function (requestRedirectUri) {\n return requestRedirectUri || this.config.auth.redirectUri || BrowserUtils.getCurrentUri();\n };\n /**\r\n * Use to get the post logout redirect uri configured in MSAL or null.\r\n *\r\n * @returns {string} post logout redirect URL\r\n */\n\n\n PublicClientApplication.prototype.getPostLogoutRedirectUri = function (requestPostLogoutRedirectUri) {\n return requestPostLogoutRedirectUri || this.config.auth.postLogoutRedirectUri || BrowserUtils.getCurrentUri();\n };\n /**\r\n * Used to get a discovered version of the default authority.\r\n */\n\n\n PublicClientApplication.prototype.getDiscoveredDefaultAuthority = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!!this.defaultAuthority) return [3\n /*break*/\n , 2];\n _a = this;\n return [4\n /*yield*/\n , AuthorityFactory.createDiscoveredInstance(this.config.auth.authority, this.config.system.networkClient)];\n\n case 1:\n _a.defaultAuthority = _b.sent();\n _b.label = 2;\n\n case 2:\n return [2\n /*return*/\n , this.defaultAuthority];\n }\n });\n });\n };\n /**\r\n * Helper to check whether interaction is in progress.\r\n */\n\n\n PublicClientApplication.prototype.interactionInProgress = function () {\n // Check whether value in cache is present and equal to expected value\n return this.browserStorage.getItem(this.browserStorage.generateCacheKey(BrowserConstants.INTERACTION_STATUS_KEY), CacheSchemaType.TEMPORARY) === BrowserConstants.INTERACTION_IN_PROGRESS_VALUE;\n };\n /**\r\n * Creates an Authorization Code Client with the given authority, or the default authority.\r\n * @param authorityUrl\r\n */\n\n\n PublicClientApplication.prototype.createAuthCodeClient = function (serverTelemetryManager, authorityUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var clientConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.getClientConfiguration(serverTelemetryManager, authorityUrl)];\n\n case 1:\n clientConfig = _a.sent();\n return [2\n /*return*/\n , new AuthorizationCodeClient(clientConfig)];\n }\n });\n });\n };\n /**\r\n * Creates an Silent Flow Client with the given authority, or the default authority.\r\n * @param authorityUrl\r\n */\n\n\n PublicClientApplication.prototype.createSilentFlowClient = function (serverTelemetryManager, authorityUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var clientConfig;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.getClientConfiguration(serverTelemetryManager, authorityUrl)];\n\n case 1:\n clientConfig = _a.sent();\n return [2\n /*return*/\n , new SilentFlowClient(clientConfig)];\n }\n });\n });\n };\n /**\r\n * Creates a Client Configuration object with the given request authority, or the default authority.\r\n * @param requestAuthority\r\n */\n\n\n PublicClientApplication.prototype.getClientConfiguration = function (serverTelemetryManager, requestAuthority) {\n return __awaiter(this, void 0, void 0, function () {\n var discoveredAuthority, _a;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(!StringUtils.isEmpty(requestAuthority) && requestAuthority !== this.config.auth.authority)) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , AuthorityFactory.createDiscoveredInstance(requestAuthority, this.config.system.networkClient)];\n\n case 1:\n _a = _b.sent();\n return [3\n /*break*/\n , 4];\n\n case 2:\n return [4\n /*yield*/\n , this.getDiscoveredDefaultAuthority()];\n\n case 3:\n _a = _b.sent();\n _b.label = 4;\n\n case 4:\n discoveredAuthority = _a;\n return [2\n /*return*/\n , {\n authOptions: {\n clientId: this.config.auth.clientId,\n authority: discoveredAuthority,\n knownAuthorities: this.config.auth.knownAuthorities,\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\n clientCapabilities: this.config.auth.clientCapabilities\n },\n systemOptions: {\n tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds\n },\n loggerOptions: {\n loggerCallback: this.config.system.loggerOptions.loggerCallback,\n piiLoggingEnabled: this.config.system.loggerOptions.piiLoggingEnabled\n },\n cryptoInterface: this.browserCrypto,\n networkInterface: this.networkClient,\n storageInterface: this.browserStorage,\n serverTelemetryManager: serverTelemetryManager,\n libraryInfo: {\n sku: BrowserConstants.MSAL_SKU,\n version: version$1,\n cpu: \"\",\n os: \"\"\n }\n }];\n }\n });\n });\n };\n /**\r\n * Helper to validate app environment before making a request.\r\n */\n\n\n PublicClientApplication.prototype.preflightInteractiveRequest = function (request, interactionType) {\n // block the reload if it occurred inside a hidden iframe\n BrowserUtils.blockReloadInHiddenIframes(); // Check if interaction is in progress. Throw error if true.\n\n if (this.interactionInProgress()) {\n throw BrowserAuthError.createInteractionInProgressError();\n }\n\n return this.initializeAuthorizationRequest(request, interactionType);\n };\n /**\r\n * Initializer function for all request APIs\r\n * @param request\r\n */\n\n\n PublicClientApplication.prototype.initializeBaseRequest = function (request) {\n var validatedRequest = _assign({}, request);\n\n if (StringUtils.isEmpty(validatedRequest.authority)) {\n validatedRequest.authority = this.config.auth.authority;\n }\n\n validatedRequest.correlationId = request && request.correlationId || this.browserCrypto.createNewGuid();\n return validatedRequest;\n };\n\n PublicClientApplication.prototype.initializeServerTelemetryManager = function (apiId, correlationId, forceRefresh) {\n var telemetryPayload = {\n clientId: this.config.auth.clientId,\n correlationId: correlationId,\n apiId: apiId,\n forceRefresh: forceRefresh || false\n };\n return new ServerTelemetryManager(telemetryPayload, this.browserStorage);\n };\n /**\r\n * Generates a request that will contain the openid and profile scopes.\r\n * @param request\r\n */\n\n\n PublicClientApplication.prototype.setDefaultScopes = function (request) {\n return _assign(_assign({}, request), {\n scopes: __spreadArrays(request && request.scopes || [], DEFAULT_REQUEST.scopes)\n });\n };\n /**\r\n * Helper to initialize required request parameters for interactive APIs and ssoSilent()\r\n * @param request\r\n */\n\n\n PublicClientApplication.prototype.initializeAuthorizationRequest = function (request, interactionType) {\n var validatedRequest = _assign({}, request);\n\n validatedRequest.redirectUri = this.getRedirectUri(validatedRequest.redirectUri); // Check for ADAL SSO\n\n if (StringUtils.isEmpty(validatedRequest.loginHint)) {\n // Only check for adal token if no SSO params are being used\n var adalIdTokenString = this.browserStorage.getItem(PersistentCacheKeys.ADAL_ID_TOKEN, CacheSchemaType.TEMPORARY);\n\n if (!StringUtils.isEmpty(adalIdTokenString)) {\n var adalIdToken = new IdToken(adalIdTokenString, this.browserCrypto);\n this.browserStorage.removeItem(PersistentCacheKeys.ADAL_ID_TOKEN);\n\n if (adalIdToken.claims && adalIdToken.claims.upn) {\n validatedRequest.loginHint = adalIdToken.claims.upn;\n }\n }\n }\n\n var browserState = {\n interactionType: interactionType\n };\n validatedRequest.state = ProtocolUtils.setRequestState(this.browserCrypto, request && request.state || \"\", browserState);\n\n if (StringUtils.isEmpty(validatedRequest.nonce)) {\n validatedRequest.nonce = this.browserCrypto.createNewGuid();\n }\n\n validatedRequest.responseMode = ResponseMode.FRAGMENT;\n validatedRequest = _assign(_assign({}, validatedRequest), this.initializeBaseRequest(validatedRequest));\n this.browserStorage.updateCacheEntries(validatedRequest.state, validatedRequest.nonce, validatedRequest.authority);\n return _assign(_assign({}, validatedRequest), this.setDefaultScopes(validatedRequest));\n };\n /**\r\n * Generates an auth code request tied to the url request.\r\n * @param request\r\n */\n\n\n PublicClientApplication.prototype.initializeAuthorizationCodeRequest = function (request) {\n return __awaiter(this, void 0, void 0, function () {\n var generatedPkceParams, authCodeRequest;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n return [4\n /*yield*/\n , this.browserCrypto.generatePkceCodes()];\n\n case 1:\n generatedPkceParams = _a.sent();\n authCodeRequest = _assign(_assign({}, request), {\n redirectUri: request.redirectUri,\n code: \"\",\n codeVerifier: generatedPkceParams.verifier\n });\n request.codeChallenge = generatedPkceParams.challenge;\n request.codeChallengeMethod = Constants.S256_CODE_CHALLENGE_METHOD;\n return [2\n /*return*/\n , authCodeRequest];\n }\n });\n });\n };\n /**\r\n * Initializer for the logout request.\r\n * @param logoutRequest\r\n */\n\n\n PublicClientApplication.prototype.initializeLogoutRequest = function (logoutRequest) {\n var validLogoutRequest = _assign({}, logoutRequest);\n\n if (StringUtils.isEmpty(validLogoutRequest.authority)) {\n validLogoutRequest.authority = this.config.auth.authority;\n }\n\n validLogoutRequest.correlationId = validLogoutRequest && validLogoutRequest.correlationId || this.browserCrypto.createNewGuid();\n validLogoutRequest.postLogoutRedirectUri = this.getPostLogoutRedirectUri(logoutRequest ? logoutRequest.postLogoutRedirectUri : \"\");\n return validLogoutRequest;\n };\n\n return PublicClientApplication;\n}();\n\nexport { AuthError, AuthErrorMessage, BrowserAuthError, BrowserAuthErrorMessage, BrowserConfigurationAuthError, BrowserConfigurationAuthErrorMessage, InteractionRequiredAuthError, LogLevel, Logger, PublicClientApplication };"],"sourceRoot":""}