@azure/msal-browser 2.32.2 → 2.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/_virtual/_tslib.js +1 -1
- package/dist/app/ClientApplication.d.ts +3 -0
- package/dist/app/ClientApplication.d.ts.map +1 -1
- package/dist/app/ClientApplication.js +75 -26
- package/dist/app/ClientApplication.js.map +1 -1
- package/dist/app/IPublicClientApplication.js +1 -1
- package/dist/app/PublicClientApplication.d.ts +2 -0
- package/dist/app/PublicClientApplication.d.ts.map +1 -1
- package/dist/app/PublicClientApplication.js +37 -15
- package/dist/app/PublicClientApplication.js.map +1 -1
- package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +10 -7
- package/dist/broker/nativeBroker/NativeMessageHandler.d.ts.map +1 -1
- package/dist/broker/nativeBroker/NativeMessageHandler.js +18 -8
- package/dist/broker/nativeBroker/NativeMessageHandler.js.map +1 -1
- package/dist/cache/AsyncMemoryStorage.js +1 -1
- package/dist/cache/BrowserCacheManager.js +1 -1
- package/dist/cache/BrowserStorage.js +1 -1
- package/dist/cache/CryptoKeyStore.js +1 -1
- package/dist/cache/DatabaseStorage.js +1 -1
- package/dist/cache/MemoryStorage.js +1 -1
- package/dist/cache/TokenCache.js +1 -1
- package/dist/config/Configuration.js +1 -1
- package/dist/crypto/BrowserCrypto.js +1 -1
- package/dist/crypto/CryptoOps.js +1 -1
- package/dist/crypto/GuidGenerator.js +1 -1
- package/dist/crypto/ModernBrowserCrypto.js +1 -1
- package/dist/crypto/MsBrowserCrypto.js +1 -1
- package/dist/crypto/MsrBrowserCrypto.js +1 -1
- package/dist/crypto/PkceGenerator.js +1 -1
- package/dist/crypto/SignedHttpRequest.js +1 -1
- package/dist/encode/Base64Decode.js +1 -1
- package/dist/encode/Base64Encode.js +1 -1
- package/dist/error/BrowserAuthError.d.ts +8 -0
- package/dist/error/BrowserAuthError.d.ts.map +1 -1
- package/dist/error/BrowserAuthError.js +11 -1
- package/dist/error/BrowserAuthError.js.map +1 -1
- package/dist/error/BrowserConfigurationAuthError.js +1 -1
- package/dist/error/NativeAuthError.js +1 -1
- package/dist/event/EventHandler.js +1 -1
- package/dist/event/EventMessage.js +1 -1
- package/dist/event/EventType.js +1 -1
- package/dist/index.cjs.js +1683 -979
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/interaction_client/BaseInteractionClient.d.ts.map +1 -1
- package/dist/interaction_client/BaseInteractionClient.js +3 -2
- package/dist/interaction_client/BaseInteractionClient.js.map +1 -1
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.js +1 -1
- package/dist/interaction_client/NativeInteractionClient.d.ts +66 -3
- package/dist/interaction_client/NativeInteractionClient.d.ts.map +1 -1
- package/dist/interaction_client/NativeInteractionClient.js +174 -68
- package/dist/interaction_client/NativeInteractionClient.js.map +1 -1
- package/dist/interaction_client/PopupClient.d.ts.map +1 -1
- package/dist/interaction_client/PopupClient.js +9 -2
- package/dist/interaction_client/PopupClient.js.map +1 -1
- package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
- package/dist/interaction_client/RedirectClient.js +13 -5
- package/dist/interaction_client/RedirectClient.js.map +1 -1
- package/dist/interaction_client/SilentAuthCodeClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentAuthCodeClient.js +7 -3
- package/dist/interaction_client/SilentAuthCodeClient.js.map +1 -1
- package/dist/interaction_client/SilentCacheClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentCacheClient.js +7 -2
- package/dist/interaction_client/SilentCacheClient.js.map +1 -1
- package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentIframeClient.js +21 -4
- package/dist/interaction_client/SilentIframeClient.js.map +1 -1
- package/dist/interaction_client/SilentRefreshClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentRefreshClient.js +9 -3
- package/dist/interaction_client/SilentRefreshClient.js.map +1 -1
- package/dist/interaction_client/StandardInteractionClient.d.ts.map +1 -1
- package/dist/interaction_client/StandardInteractionClient.js +16 -5
- package/dist/interaction_client/StandardInteractionClient.js.map +1 -1
- package/dist/interaction_handler/InteractionHandler.d.ts +3 -2
- package/dist/interaction_handler/InteractionHandler.d.ts.map +1 -1
- package/dist/interaction_handler/InteractionHandler.js +12 -4
- package/dist/interaction_handler/InteractionHandler.js.map +1 -1
- package/dist/interaction_handler/RedirectHandler.d.ts +2 -2
- package/dist/interaction_handler/RedirectHandler.d.ts.map +1 -1
- package/dist/interaction_handler/RedirectHandler.js +3 -3
- package/dist/interaction_handler/RedirectHandler.js.map +1 -1
- package/dist/interaction_handler/SilentHandler.d.ts +2 -2
- package/dist/interaction_handler/SilentHandler.d.ts.map +1 -1
- package/dist/interaction_handler/SilentHandler.js +13 -15
- package/dist/interaction_handler/SilentHandler.js.map +1 -1
- package/dist/internals.d.ts +5 -0
- package/dist/internals.d.ts.map +1 -1
- package/dist/internals.js +4 -1
- package/dist/internals.js.map +1 -1
- package/dist/navigation/NavigationClient.js +1 -1
- package/dist/network/FetchClient.js +1 -1
- package/dist/network/XhrClient.js +1 -1
- package/dist/packageMetadata.d.ts +1 -1
- package/dist/packageMetadata.js +2 -2
- package/dist/packageMetadata.js.map +1 -1
- package/dist/request/EndSessionPopupRequest.d.ts +1 -1
- package/dist/request/EndSessionPopupRequest.d.ts.map +1 -1
- package/dist/request/EndSessionRequest.d.ts +1 -1
- package/dist/request/EndSessionRequest.d.ts.map +1 -1
- package/dist/telemetry/BrowserPerformanceClient.d.ts +20 -1
- package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/BrowserPerformanceClient.js +80 -3
- package/dist/telemetry/BrowserPerformanceClient.js.map +1 -1
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +14 -5
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts.map +1 -1
- package/dist/telemetry/BrowserPerformanceMeasurement.js +36 -4
- package/dist/telemetry/BrowserPerformanceMeasurement.js.map +1 -1
- package/dist/utils/BrowserConstants.js +1 -1
- package/dist/utils/BrowserProtocolUtils.js +1 -1
- package/dist/utils/BrowserStringUtils.js +1 -1
- package/dist/utils/BrowserUtils.js +1 -1
- package/dist/utils/MathUtils.js +1 -1
- package/lib/msal-browser.js +1683 -979
- package/lib/msal-browser.js.map +1 -1
- package/lib/msal-browser.min.js +43 -44
- package/package.json +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @azure/msal-browser v2.
|
|
1
|
+
/*! @azure/msal-browser v2.34.0 2023-03-07 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { __extends, __awaiter, __generator, __assign } from '../_virtual/_tslib.js';
|
|
4
|
-
import { UrlString, Constants,
|
|
4
|
+
import { UrlString, Constants, PerformanceEvents, AuthorizationCodeClient, Authority, AuthorityFactory, ResponseMode, StringUtils, ProtocolUtils } from '@azure/msal-common';
|
|
5
5
|
import { BaseInteractionClient } from './BaseInteractionClient.js';
|
|
6
6
|
import { BrowserConstants } from '../utils/BrowserConstants.js';
|
|
7
7
|
import { version } from '../packageMetadata.js';
|
|
@@ -31,6 +31,7 @@ var StandardInteractionClient = /** @class */ (function (_super) {
|
|
|
31
31
|
return __generator(this, function (_a) {
|
|
32
32
|
switch (_a.label) {
|
|
33
33
|
case 0:
|
|
34
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, request.correlationId);
|
|
34
35
|
this.logger.verbose("initializeAuthorizationRequest called", request.correlationId);
|
|
35
36
|
return [4 /*yield*/, this.browserCrypto.generatePkceCodes()];
|
|
36
37
|
case 1:
|
|
@@ -131,10 +132,14 @@ var StandardInteractionClient = /** @class */ (function (_super) {
|
|
|
131
132
|
var clientConfig;
|
|
132
133
|
return __generator(this, function (_a) {
|
|
133
134
|
switch (_a.label) {
|
|
134
|
-
case 0:
|
|
135
|
+
case 0:
|
|
136
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.correlationId);
|
|
137
|
+
// Create auth module.
|
|
138
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);
|
|
139
|
+
return [4 /*yield*/, this.getClientConfiguration(serverTelemetryManager, authorityUrl, requestAzureCloudOptions)];
|
|
135
140
|
case 1:
|
|
136
141
|
clientConfig = _a.sent();
|
|
137
|
-
return [2 /*return*/, new AuthorizationCodeClient(clientConfig)];
|
|
142
|
+
return [2 /*return*/, new AuthorizationCodeClient(clientConfig, this.performanceClient)];
|
|
138
143
|
}
|
|
139
144
|
});
|
|
140
145
|
});
|
|
@@ -151,7 +156,9 @@ var StandardInteractionClient = /** @class */ (function (_super) {
|
|
|
151
156
|
return __generator(this, function (_a) {
|
|
152
157
|
switch (_a.label) {
|
|
153
158
|
case 0:
|
|
159
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);
|
|
154
160
|
this.logger.verbose("getClientConfiguration called", this.correlationId);
|
|
161
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);
|
|
155
162
|
return [4 /*yield*/, this.getDiscoveredAuthority(requestAuthority, requestAzureCloudOptions)];
|
|
156
163
|
case 1:
|
|
157
164
|
discoveredAuthority = _a.sent();
|
|
@@ -219,6 +226,7 @@ var StandardInteractionClient = /** @class */ (function (_super) {
|
|
|
219
226
|
return __generator(this, function (_b) {
|
|
220
227
|
switch (_b.label) {
|
|
221
228
|
case 0:
|
|
229
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);
|
|
222
230
|
this.logger.verbose("getDiscoveredAuthority called", this.correlationId);
|
|
223
231
|
getAuthorityMeasurement = (_a = this.performanceClient) === null || _a === void 0 ? void 0 : _a.startMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);
|
|
224
232
|
authorityOptions = {
|
|
@@ -231,7 +239,8 @@ var StandardInteractionClient = /** @class */ (function (_super) {
|
|
|
231
239
|
userAuthority = requestAuthority ? requestAuthority : this.config.auth.authority;
|
|
232
240
|
builtAuthority = Authority.generateAuthority(userAuthority, requestAzureCloudOptions || this.config.auth.azureCloudOptions);
|
|
233
241
|
this.logger.verbose("Creating discovered authority with configured authority", this.correlationId);
|
|
234
|
-
|
|
242
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, this.correlationId);
|
|
243
|
+
return [4 /*yield*/, AuthorityFactory.createDiscoveredInstance(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger, this.performanceClient, this.correlationId)
|
|
235
244
|
.then(function (result) {
|
|
236
245
|
getAuthorityMeasurement.endMeasurement({
|
|
237
246
|
success: true,
|
|
@@ -262,12 +271,14 @@ var StandardInteractionClient = /** @class */ (function (_super) {
|
|
|
262
271
|
return __generator(this, function (_b) {
|
|
263
272
|
switch (_b.label) {
|
|
264
273
|
case 0:
|
|
274
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.correlationId);
|
|
265
275
|
this.logger.verbose("initializeAuthorizationRequest called", this.correlationId);
|
|
266
276
|
redirectUri = this.getRedirectUri(request.redirectUri);
|
|
267
277
|
browserState = {
|
|
268
278
|
interactionType: interactionType
|
|
269
279
|
};
|
|
270
280
|
state = ProtocolUtils.setRequestState(this.browserCrypto, (request && request.state) || Constants.EMPTY_STRING, browserState);
|
|
281
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeBaseRequest, this.correlationId);
|
|
271
282
|
_a = [{}];
|
|
272
283
|
return [4 /*yield*/, this.initializeBaseRequest(request)];
|
|
273
284
|
case 1:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardInteractionClient.js","sources":["../../src/interaction_client/StandardInteractionClient.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ServerTelemetryManager, CommonAuthorizationCodeRequest, Constants, AuthorizationCodeClient, ClientConfiguration, AuthorityOptions, Authority, AuthorityFactory, ServerAuthorizationCodeResponse, UrlString, CommonEndSessionRequest, ProtocolUtils, ResponseMode, StringUtils, IdTokenClaims, AccountInfo, AzureCloudOptions, PerformanceEvents, AuthError} from \"@azure/msal-common\";\nimport { BaseInteractionClient } from \"./BaseInteractionClient\";\nimport { AuthorizationUrlRequest } from \"../request/AuthorizationUrlRequest\";\nimport { BrowserConstants, InteractionType } from \"../utils/BrowserConstants\";\nimport { version } from \"../packageMetadata\";\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\nimport { BrowserProtocolUtils, BrowserStateObject } from \"../utils/BrowserProtocolUtils\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest\";\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\nimport { RedirectRequest } from \"../request/RedirectRequest\";\nimport { PopupRequest } from \"../request/PopupRequest\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\n\n/**\n * Defines the class structure and helper functions used by the \"standard\", non-brokered auth flows (popup, redirect, silent (RT), silent (iframe))\n */\nexport abstract class StandardInteractionClient extends BaseInteractionClient {\n /**\n * Generates an auth code request tied to the url request.\n * @param request\n */\n protected async initializeAuthorizationCodeRequest(request: AuthorizationUrlRequest): Promise<CommonAuthorizationCodeRequest> {\n this.logger.verbose(\"initializeAuthorizationRequest called\", request.correlationId);\n const generatedPkceParams = await this.browserCrypto.generatePkceCodes();\n\n const authCodeRequest: CommonAuthorizationCodeRequest = {\n ...request,\n redirectUri: request.redirectUri,\n code: Constants.EMPTY_STRING,\n codeVerifier: generatedPkceParams.verifier\n };\n\n request.codeChallenge = generatedPkceParams.challenge;\n request.codeChallengeMethod = Constants.S256_CODE_CHALLENGE_METHOD;\n\n return authCodeRequest;\n }\n\n /**\n * Initializer for the logout request.\n * @param logoutRequest\n */\n protected initializeLogoutRequest(logoutRequest?: EndSessionRequest): CommonEndSessionRequest {\n this.logger.verbose(\"initializeLogoutRequest called\", logoutRequest?.correlationId);\n\n const validLogoutRequest: CommonEndSessionRequest = {\n correlationId: this.correlationId || this.browserCrypto.createNewGuid(),\n ...logoutRequest\n };\n\n /**\n * Set logout_hint to be login_hint from ID Token Claims if present\n * and logoutHint attribute wasn't manually set in logout request\n */\n if (logoutRequest) {\n // If logoutHint isn't set and an account was passed in, try to extract logoutHint from ID Token Claims\n if (!logoutRequest.logoutHint) {\n if(logoutRequest.account) {\n const logoutHint = this.getLogoutHintFromIdTokenClaims(logoutRequest.account);\n if (logoutHint) {\n this.logger.verbose(\"Setting logoutHint to login_hint ID Token Claim value for the account provided\");\n validLogoutRequest.logoutHint = logoutHint;\n }\n } else {\n this.logger.verbose(\"logoutHint was not set and account was not passed into logout request, logoutHint will not be set\");\n }\n } else {\n this.logger.verbose(\"logoutHint has already been set in logoutRequest\");\n }\n } else {\n this.logger.verbose(\"logoutHint will not be set since no logout request was configured\");\n }\n\n /*\n * Only set redirect uri if logout request isn't provided or the set uri isn't null.\n * Otherwise, use passed uri, config, or current page.\n */\n if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) {\n if (logoutRequest && logoutRequest.postLogoutRedirectUri) {\n this.logger.verbose(\"Setting postLogoutRedirectUri to uri set on logout request\", validLogoutRequest.correlationId);\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(logoutRequest.postLogoutRedirectUri, BrowserUtils.getCurrentUri());\n } else if (this.config.auth.postLogoutRedirectUri === null) {\n this.logger.verbose(\"postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect\", validLogoutRequest.correlationId);\n } else if (this.config.auth.postLogoutRedirectUri) {\n this.logger.verbose(\"Setting postLogoutRedirectUri to configured uri\", validLogoutRequest.correlationId);\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri, BrowserUtils.getCurrentUri());\n } else {\n this.logger.verbose(\"Setting postLogoutRedirectUri to current page\", validLogoutRequest.correlationId);\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(BrowserUtils.getCurrentUri(), BrowserUtils.getCurrentUri());\n }\n } else {\n this.logger.verbose(\"postLogoutRedirectUri passed as null, not setting post logout redirect uri\", validLogoutRequest.correlationId);\n }\n\n return validLogoutRequest;\n }\n\n /**\n * Parses login_hint ID Token Claim out of AccountInfo object to be used as\n * logout_hint in end session request.\n * @param account\n */\n protected getLogoutHintFromIdTokenClaims(account: AccountInfo): string | null {\n const idTokenClaims: IdTokenClaims | undefined = account.idTokenClaims;\n if (idTokenClaims) {\n if (idTokenClaims.login_hint) {\n return idTokenClaims.login_hint;\n } else {\n this.logger.verbose(\"The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request\");\n }\n } else {\n this.logger.verbose(\"The provided account does not contain ID Token Claims, logoutHint will not be added to logout request\");\n }\n\n return null;\n }\n\n /**\n * Creates an Authorization Code Client with the given authority, or the default authority.\n * @param serverTelemetryManager\n * @param authorityUrl\n */\n protected async createAuthCodeClient(serverTelemetryManager: ServerTelemetryManager, authorityUrl?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise<AuthorizationCodeClient> {\n // Create auth module.\n const clientConfig = await this.getClientConfiguration(serverTelemetryManager, authorityUrl, requestAzureCloudOptions);\n return new AuthorizationCodeClient(clientConfig);\n }\n\n /**\n * Creates a Client Configuration object with the given request authority, or the default authority.\n * @param serverTelemetryManager\n * @param requestAuthority\n * @param requestCorrelationId\n */\n protected async getClientConfiguration(serverTelemetryManager: ServerTelemetryManager, requestAuthority?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise<ClientConfiguration> {\n this.logger.verbose(\"getClientConfiguration called\", this.correlationId);\n const discoveredAuthority = await this.getDiscoveredAuthority(requestAuthority, requestAzureCloudOptions);\n const logger= this.config.system.loggerOptions;\n\n return {\n authOptions: {\n clientId: this.config.auth.clientId,\n authority: discoveredAuthority,\n clientCapabilities: this.config.auth.clientCapabilities\n },\n systemOptions: {\n tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds,\n preventCorsPreflight: true\n },\n loggerOptions: {\n loggerCallback: logger.loggerCallback,\n piiLoggingEnabled: logger.piiLoggingEnabled,\n logLevel: logger.logLevel,\n correlationId: this.correlationId\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,\n cpu: Constants.EMPTY_STRING,\n os: Constants.EMPTY_STRING\n },\n telemetry: this.config.telemetry\n };\n }\n \n /**\n * @param hash\n * @param interactionType\n */\n protected validateAndExtractStateFromHash(serverParams: ServerAuthorizationCodeResponse, interactionType: InteractionType, requestCorrelationId?: string): string {\n this.logger.verbose(\"validateAndExtractStateFromHash called\", requestCorrelationId);\n if (!serverParams.state) {\n throw BrowserAuthError.createHashDoesNotContainStateError();\n }\n\n const platformStateObj = BrowserProtocolUtils.extractBrowserRequestState(this.browserCrypto, serverParams.state);\n if (!platformStateObj) {\n throw BrowserAuthError.createUnableToParseStateError();\n }\n\n if (platformStateObj.interactionType !== interactionType) {\n throw BrowserAuthError.createStateInteractionTypeMismatchError();\n }\n\n this.logger.verbose(\"Returning state from hash\", requestCorrelationId);\n return serverParams.state;\n }\n\n /**\n * Used to get a discovered version of the default authority.\n * @param requestAuthority\n * @param requestCorrelationId\n */\n protected async getDiscoveredAuthority(requestAuthority?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise<Authority> {\n this.logger.verbose(\"getDiscoveredAuthority called\", this.correlationId);\n const getAuthorityMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\n const authorityOptions: AuthorityOptions = {\n protocolMode: this.config.auth.protocolMode,\n knownAuthorities: this.config.auth.knownAuthorities,\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\n authorityMetadata: this.config.auth.authorityMetadata,\n skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache\n };\n\n // build authority string based on auth params, precedence - azureCloudInstance + tenant >> authority\n const userAuthority = requestAuthority ? requestAuthority : this.config.auth.authority;\n\n // fall back to the authority from config\n const builtAuthority = Authority.generateAuthority(userAuthority, requestAzureCloudOptions || this.config.auth.azureCloudOptions);\n this.logger.verbose(\"Creating discovered authority with configured authority\", this.correlationId);\n return await AuthorityFactory.createDiscoveredInstance(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger)\n .then((result: Authority) => {\n getAuthorityMeasurement.endMeasurement({\n success: true,\n });\n\n return result;\n })\n .catch((error:AuthError) => {\n getAuthorityMeasurement.endMeasurement({\n errorCode: error.errorCode,\n subErrorCode: error.subError,\n success: false\n });\n\n throw error;\n });\n }\n\n /**\n * Helper to initialize required request parameters for interactive APIs and ssoSilent()\n * @param request\n * @param interactionType\n */\n protected async initializeAuthorizationRequest(request: RedirectRequest|PopupRequest|SsoSilentRequest, interactionType: InteractionType): Promise<AuthorizationUrlRequest> {\n this.logger.verbose(\"initializeAuthorizationRequest called\", this.correlationId);\n const redirectUri = this.getRedirectUri(request.redirectUri);\n const browserState: BrowserStateObject = {\n interactionType: interactionType\n };\n const state = ProtocolUtils.setRequestState(\n this.browserCrypto,\n (request && request.state)|| Constants.EMPTY_STRING,\n browserState\n );\n\n const validatedRequest: AuthorizationUrlRequest = {\n ...await this.initializeBaseRequest(request),\n redirectUri: redirectUri,\n state: state,\n nonce: request.nonce || this.browserCrypto.createNewGuid(),\n responseMode: ResponseMode.FRAGMENT\n };\n\n const account = request.account || this.browserStorage.getActiveAccount();\n if (account) {\n this.logger.verbose(\"Setting validated request account\", this.correlationId);\n this.logger.verbosePii(`Setting validated request account: ${account.homeAccountId}`, this.correlationId);\n validatedRequest.account = account;\n }\n\n // Check for ADAL/MSAL v1 SSO\n if (StringUtils.isEmpty(validatedRequest.loginHint) && !account) {\n const legacyLoginHint = this.browserStorage.getLegacyLoginHint();\n if (legacyLoginHint) {\n validatedRequest.loginHint = legacyLoginHint;\n }\n }\n\n return validatedRequest;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StandardInteractionClient.js","sources":["../../src/interaction_client/StandardInteractionClient.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ServerTelemetryManager, CommonAuthorizationCodeRequest, Constants, AuthorizationCodeClient, ClientConfiguration, AuthorityOptions, Authority, AuthorityFactory, ServerAuthorizationCodeResponse, UrlString, CommonEndSessionRequest, ProtocolUtils, ResponseMode, StringUtils, IdTokenClaims, AccountInfo, AzureCloudOptions, PerformanceEvents, AuthError} from \"@azure/msal-common\";\nimport { BaseInteractionClient } from \"./BaseInteractionClient\";\nimport { AuthorizationUrlRequest } from \"../request/AuthorizationUrlRequest\";\nimport { BrowserConstants, InteractionType } from \"../utils/BrowserConstants\";\nimport { version } from \"../packageMetadata\";\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\nimport { BrowserProtocolUtils, BrowserStateObject } from \"../utils/BrowserProtocolUtils\";\nimport { EndSessionRequest } from \"../request/EndSessionRequest\";\nimport { BrowserUtils } from \"../utils/BrowserUtils\";\nimport { RedirectRequest } from \"../request/RedirectRequest\";\nimport { PopupRequest } from \"../request/PopupRequest\";\nimport { SsoSilentRequest } from \"../request/SsoSilentRequest\";\n\n/**\n * Defines the class structure and helper functions used by the \"standard\", non-brokered auth flows (popup, redirect, silent (RT), silent (iframe))\n */\nexport abstract class StandardInteractionClient extends BaseInteractionClient {\n /**\n * Generates an auth code request tied to the url request.\n * @param request\n */\n protected async initializeAuthorizationCodeRequest(request: AuthorizationUrlRequest): Promise<CommonAuthorizationCodeRequest> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationCodeRequest, request.correlationId);\n this.logger.verbose(\"initializeAuthorizationRequest called\", request.correlationId);\n const generatedPkceParams = await this.browserCrypto.generatePkceCodes();\n\n const authCodeRequest: CommonAuthorizationCodeRequest = {\n ...request,\n redirectUri: request.redirectUri,\n code: Constants.EMPTY_STRING,\n codeVerifier: generatedPkceParams.verifier\n };\n\n request.codeChallenge = generatedPkceParams.challenge;\n request.codeChallengeMethod = Constants.S256_CODE_CHALLENGE_METHOD;\n\n return authCodeRequest;\n }\n\n /**\n * Initializer for the logout request.\n * @param logoutRequest\n */\n protected initializeLogoutRequest(logoutRequest?: EndSessionRequest): CommonEndSessionRequest {\n this.logger.verbose(\"initializeLogoutRequest called\", logoutRequest?.correlationId);\n\n const validLogoutRequest: CommonEndSessionRequest = {\n correlationId: this.correlationId || this.browserCrypto.createNewGuid(),\n ...logoutRequest\n };\n\n /**\n * Set logout_hint to be login_hint from ID Token Claims if present\n * and logoutHint attribute wasn't manually set in logout request\n */\n if (logoutRequest) {\n // If logoutHint isn't set and an account was passed in, try to extract logoutHint from ID Token Claims\n if (!logoutRequest.logoutHint) {\n if(logoutRequest.account) {\n const logoutHint = this.getLogoutHintFromIdTokenClaims(logoutRequest.account);\n if (logoutHint) {\n this.logger.verbose(\"Setting logoutHint to login_hint ID Token Claim value for the account provided\");\n validLogoutRequest.logoutHint = logoutHint;\n }\n } else {\n this.logger.verbose(\"logoutHint was not set and account was not passed into logout request, logoutHint will not be set\");\n }\n } else {\n this.logger.verbose(\"logoutHint has already been set in logoutRequest\");\n }\n } else {\n this.logger.verbose(\"logoutHint will not be set since no logout request was configured\");\n }\n\n /*\n * Only set redirect uri if logout request isn't provided or the set uri isn't null.\n * Otherwise, use passed uri, config, or current page.\n */\n if (!logoutRequest || logoutRequest.postLogoutRedirectUri !== null) {\n if (logoutRequest && logoutRequest.postLogoutRedirectUri) {\n this.logger.verbose(\"Setting postLogoutRedirectUri to uri set on logout request\", validLogoutRequest.correlationId);\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(logoutRequest.postLogoutRedirectUri, BrowserUtils.getCurrentUri());\n } else if (this.config.auth.postLogoutRedirectUri === null) {\n this.logger.verbose(\"postLogoutRedirectUri configured as null and no uri set on request, not passing post logout redirect\", validLogoutRequest.correlationId);\n } else if (this.config.auth.postLogoutRedirectUri) {\n this.logger.verbose(\"Setting postLogoutRedirectUri to configured uri\", validLogoutRequest.correlationId);\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(this.config.auth.postLogoutRedirectUri, BrowserUtils.getCurrentUri());\n } else {\n this.logger.verbose(\"Setting postLogoutRedirectUri to current page\", validLogoutRequest.correlationId);\n validLogoutRequest.postLogoutRedirectUri = UrlString.getAbsoluteUrl(BrowserUtils.getCurrentUri(), BrowserUtils.getCurrentUri());\n }\n } else {\n this.logger.verbose(\"postLogoutRedirectUri passed as null, not setting post logout redirect uri\", validLogoutRequest.correlationId);\n }\n\n return validLogoutRequest;\n }\n\n /**\n * Parses login_hint ID Token Claim out of AccountInfo object to be used as\n * logout_hint in end session request.\n * @param account\n */\n protected getLogoutHintFromIdTokenClaims(account: AccountInfo): string | null {\n const idTokenClaims: IdTokenClaims | undefined = account.idTokenClaims;\n if (idTokenClaims) {\n if (idTokenClaims.login_hint) {\n return idTokenClaims.login_hint;\n } else {\n this.logger.verbose(\"The ID Token Claims tied to the provided account do not contain a login_hint claim, logoutHint will not be added to logout request\");\n }\n } else {\n this.logger.verbose(\"The provided account does not contain ID Token Claims, logoutHint will not be added to logout request\");\n }\n\n return null;\n }\n\n /**\n * Creates an Authorization Code Client with the given authority, or the default authority.\n * @param serverTelemetryManager\n * @param authorityUrl\n */\n protected async createAuthCodeClient(serverTelemetryManager: ServerTelemetryManager, authorityUrl?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise<AuthorizationCodeClient> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientCreateAuthCodeClient, this.correlationId);\n // Create auth module.\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\n const clientConfig = await this.getClientConfiguration(serverTelemetryManager, authorityUrl, requestAzureCloudOptions);\n return new AuthorizationCodeClient(clientConfig, this.performanceClient);\n }\n\n /**\n * Creates a Client Configuration object with the given request authority, or the default authority.\n * @param serverTelemetryManager\n * @param requestAuthority\n * @param requestCorrelationId\n */\n protected async getClientConfiguration(serverTelemetryManager: ServerTelemetryManager, requestAuthority?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise<ClientConfiguration> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetClientConfiguration, this.correlationId);\n this.logger.verbose(\"getClientConfiguration called\", this.correlationId);\n this.performanceClient.setPreQueueTime(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\n const discoveredAuthority = await this.getDiscoveredAuthority(requestAuthority, requestAzureCloudOptions);\n const logger= this.config.system.loggerOptions;\n\n return {\n authOptions: {\n clientId: this.config.auth.clientId,\n authority: discoveredAuthority,\n clientCapabilities: this.config.auth.clientCapabilities\n },\n systemOptions: {\n tokenRenewalOffsetSeconds: this.config.system.tokenRenewalOffsetSeconds,\n preventCorsPreflight: true\n },\n loggerOptions: {\n loggerCallback: logger.loggerCallback,\n piiLoggingEnabled: logger.piiLoggingEnabled,\n logLevel: logger.logLevel,\n correlationId: this.correlationId\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,\n cpu: Constants.EMPTY_STRING,\n os: Constants.EMPTY_STRING\n },\n telemetry: this.config.telemetry\n };\n }\n \n /**\n * @param hash\n * @param interactionType\n */\n protected validateAndExtractStateFromHash(serverParams: ServerAuthorizationCodeResponse, interactionType: InteractionType, requestCorrelationId?: string): string {\n this.logger.verbose(\"validateAndExtractStateFromHash called\", requestCorrelationId);\n if (!serverParams.state) {\n throw BrowserAuthError.createHashDoesNotContainStateError();\n }\n\n const platformStateObj = BrowserProtocolUtils.extractBrowserRequestState(this.browserCrypto, serverParams.state);\n if (!platformStateObj) {\n throw BrowserAuthError.createUnableToParseStateError();\n }\n\n if (platformStateObj.interactionType !== interactionType) {\n throw BrowserAuthError.createStateInteractionTypeMismatchError();\n }\n\n this.logger.verbose(\"Returning state from hash\", requestCorrelationId);\n return serverParams.state;\n }\n\n /**\n * Used to get a discovered version of the default authority.\n * @param requestAuthority\n * @param requestCorrelationId\n */\n protected async getDiscoveredAuthority(requestAuthority?: string, requestAzureCloudOptions?: AzureCloudOptions): Promise<Authority> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\n this.logger.verbose(\"getDiscoveredAuthority called\", this.correlationId);\n const getAuthorityMeasurement = this.performanceClient?.startMeasurement(PerformanceEvents.StandardInteractionClientGetDiscoveredAuthority, this.correlationId);\n const authorityOptions: AuthorityOptions = {\n protocolMode: this.config.auth.protocolMode,\n knownAuthorities: this.config.auth.knownAuthorities,\n cloudDiscoveryMetadata: this.config.auth.cloudDiscoveryMetadata,\n authorityMetadata: this.config.auth.authorityMetadata,\n skipAuthorityMetadataCache: this.config.auth.skipAuthorityMetadataCache\n };\n\n // build authority string based on auth params, precedence - azureCloudInstance + tenant >> authority\n const userAuthority = requestAuthority ? requestAuthority : this.config.auth.authority;\n\n // fall back to the authority from config\n const builtAuthority = Authority.generateAuthority(userAuthority, requestAzureCloudOptions || this.config.auth.azureCloudOptions);\n this.logger.verbose(\"Creating discovered authority with configured authority\", this.correlationId);\n this.performanceClient.setPreQueueTime(PerformanceEvents.AuthorityFactoryCreateDiscoveredInstance, this.correlationId);\n return await AuthorityFactory.createDiscoveredInstance(builtAuthority, this.config.system.networkClient, this.browserStorage, authorityOptions, this.logger, this.performanceClient, this.correlationId)\n .then((result: Authority) => {\n getAuthorityMeasurement.endMeasurement({\n success: true,\n });\n\n return result;\n })\n .catch((error:AuthError) => {\n getAuthorityMeasurement.endMeasurement({\n errorCode: error.errorCode,\n subErrorCode: error.subError,\n success: false\n });\n\n throw error;\n });\n }\n\n /**\n * Helper to initialize required request parameters for interactive APIs and ssoSilent()\n * @param request\n * @param interactionType\n */\n protected async initializeAuthorizationRequest(request: RedirectRequest|PopupRequest|SsoSilentRequest, interactionType: InteractionType): Promise<AuthorizationUrlRequest> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.StandardInteractionClientInitializeAuthorizationRequest, this.correlationId);\n this.logger.verbose(\"initializeAuthorizationRequest called\", this.correlationId);\n const redirectUri = this.getRedirectUri(request.redirectUri);\n const browserState: BrowserStateObject = {\n interactionType: interactionType\n };\n const state = ProtocolUtils.setRequestState(\n this.browserCrypto,\n (request && request.state)|| Constants.EMPTY_STRING,\n browserState\n );\n\n this.performanceClient.setPreQueueTime(PerformanceEvents.InitializeBaseRequest, this.correlationId);\n const validatedRequest: AuthorizationUrlRequest = {\n ...await this.initializeBaseRequest(request),\n redirectUri: redirectUri,\n state: state,\n nonce: request.nonce || this.browserCrypto.createNewGuid(),\n responseMode: ResponseMode.FRAGMENT\n };\n\n const account = request.account || this.browserStorage.getActiveAccount();\n if (account) {\n this.logger.verbose(\"Setting validated request account\", this.correlationId);\n this.logger.verbosePii(`Setting validated request account: ${account.homeAccountId}`, this.correlationId);\n validatedRequest.account = account;\n }\n\n // Check for ADAL/MSAL v1 SSO\n if (StringUtils.isEmpty(validatedRequest.loginHint) && !account) {\n const legacyLoginHint = this.browserStorage.getLegacyLoginHint();\n if (legacyLoginHint) {\n validatedRequest.loginHint = legacyLoginHint;\n }\n }\n\n return validatedRequest;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthorizationCodePayload, CommonAuthorizationCodeRequest, AuthenticationResult, AuthorizationCodeClient, Authority, INetworkModule, CcsCredential, Logger } from "@azure/msal-common";
|
|
1
|
+
import { AuthorizationCodePayload, CommonAuthorizationCodeRequest, AuthenticationResult, AuthorizationCodeClient, Authority, INetworkModule, CcsCredential, Logger, IPerformanceClient } from "@azure/msal-common";
|
|
2
2
|
import { BrowserCacheManager } from "../cache/BrowserCacheManager";
|
|
3
3
|
export declare type InteractionParams = {};
|
|
4
4
|
/**
|
|
@@ -9,7 +9,8 @@ export declare class InteractionHandler {
|
|
|
9
9
|
protected browserStorage: BrowserCacheManager;
|
|
10
10
|
protected authCodeRequest: CommonAuthorizationCodeRequest;
|
|
11
11
|
protected logger: Logger;
|
|
12
|
-
|
|
12
|
+
protected performanceClient: IPerformanceClient;
|
|
13
|
+
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, performanceClient: IPerformanceClient);
|
|
13
14
|
/**
|
|
14
15
|
* Function to handle response parameters from hash.
|
|
15
16
|
* @param locationHash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractionHandler.d.ts","sourceRoot":"","sources":["../../src/interaction_handler/InteractionHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAe,8BAA8B,EAAE,oBAAoB,EAAE,uBAAuB,EAAoB,SAAS,EAAE,cAAc,EAAmB,aAAa,EAAE,MAAM,EAAe,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"InteractionHandler.d.ts","sourceRoot":"","sources":["../../src/interaction_handler/InteractionHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAe,8BAA8B,EAAE,oBAAoB,EAAE,uBAAuB,EAAoB,SAAS,EAAE,cAAc,EAAmB,aAAa,EAAE,MAAM,EAAe,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAEnS,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAInE,oBAAY,iBAAiB,GAAG,EAAE,CAAC;AAEnC;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,SAAS,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC9C,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC;IAC9C,SAAS,CAAC,eAAe,EAAE,8BAA8B,CAAC;IAC1D,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;gBAEpC,cAAc,EAAE,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,kBAAkB;IAQ7L;;;OAGG;IACG,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA+BzJ;;;;;;;OAOG;IACG,4BAA4B,CAAC,gBAAgB,EAAE,wBAAwB,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,GAAE,OAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAgDhN;;;;;OAKG;cACa,4BAA4B,CAAC,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/I;;OAEG;IACH,SAAS,CAAC,mBAAmB,IAAI,aAAa,GAAG,IAAI;CAaxD"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @azure/msal-browser v2.
|
|
1
|
+
/*! @azure/msal-browser v2.34.0 2023-03-07 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { __awaiter, __generator } from '../_virtual/_tslib.js';
|
|
4
|
-
import { StringUtils, ClientAuthError, ServerError, AuthorityFactory } from '@azure/msal-common';
|
|
4
|
+
import { PerformanceEvents, StringUtils, ClientAuthError, ServerError, AuthorityFactory } from '@azure/msal-common';
|
|
5
5
|
import { BrowserAuthError, BrowserAuthErrorMessage } from '../error/BrowserAuthError.js';
|
|
6
6
|
import { TemporaryCacheKeys } from '../utils/BrowserConstants.js';
|
|
7
7
|
|
|
@@ -13,11 +13,12 @@ import { TemporaryCacheKeys } from '../utils/BrowserConstants.js';
|
|
|
13
13
|
* Abstract class which defines operations for a browser interaction handling class.
|
|
14
14
|
*/
|
|
15
15
|
var InteractionHandler = /** @class */ (function () {
|
|
16
|
-
function InteractionHandler(authCodeModule, storageImpl, authCodeRequest, logger) {
|
|
16
|
+
function InteractionHandler(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
|
|
17
17
|
this.authModule = authCodeModule;
|
|
18
18
|
this.browserStorage = storageImpl;
|
|
19
19
|
this.authCodeRequest = authCodeRequest;
|
|
20
20
|
this.logger = logger;
|
|
21
|
+
this.performanceClient = performanceClient;
|
|
21
22
|
}
|
|
22
23
|
/**
|
|
23
24
|
* Function to handle response parameters from hash.
|
|
@@ -27,6 +28,7 @@ var InteractionHandler = /** @class */ (function () {
|
|
|
27
28
|
return __awaiter(this, void 0, void 0, function () {
|
|
28
29
|
var stateKey, requestState, authCodeResponse;
|
|
29
30
|
return __generator(this, function (_a) {
|
|
31
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromHash, this.authCodeRequest.correlationId);
|
|
30
32
|
this.logger.verbose("InteractionHandler.handleCodeResponse called");
|
|
31
33
|
// Check that location hash isn't empty.
|
|
32
34
|
if (StringUtils.isEmpty(locationHash)) {
|
|
@@ -49,6 +51,7 @@ var InteractionHandler = /** @class */ (function () {
|
|
|
49
51
|
throw e;
|
|
50
52
|
}
|
|
51
53
|
}
|
|
54
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);
|
|
52
55
|
return [2 /*return*/, this.handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule)];
|
|
53
56
|
});
|
|
54
57
|
});
|
|
@@ -68,6 +71,7 @@ var InteractionHandler = /** @class */ (function () {
|
|
|
68
71
|
return __generator(this, function (_a) {
|
|
69
72
|
switch (_a.label) {
|
|
70
73
|
case 0:
|
|
74
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);
|
|
71
75
|
this.logger.trace("InteractionHandler.handleCodeResponseFromServer called");
|
|
72
76
|
stateKey = this.browserStorage.generateStateKey(state);
|
|
73
77
|
requestState = this.browserStorage.getTemporaryCache(stateKey);
|
|
@@ -79,6 +83,7 @@ var InteractionHandler = /** @class */ (function () {
|
|
|
79
83
|
// Assign code to request
|
|
80
84
|
this.authCodeRequest.code = authCodeResponse.code;
|
|
81
85
|
if (!authCodeResponse.cloud_instance_host_name) return [3 /*break*/, 2];
|
|
86
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);
|
|
82
87
|
return [4 /*yield*/, this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule)];
|
|
83
88
|
case 1:
|
|
84
89
|
_a.sent();
|
|
@@ -99,6 +104,8 @@ var InteractionHandler = /** @class */ (function () {
|
|
|
99
104
|
this.authCodeRequest.ccsCredential = cachedCcsCred;
|
|
100
105
|
}
|
|
101
106
|
}
|
|
107
|
+
// Acquire token with retrieved code.
|
|
108
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.AuthClientAcquireToken, this.authCodeRequest.correlationId);
|
|
102
109
|
return [4 /*yield*/, this.authModule.acquireToken(this.authCodeRequest, authCodeResponse)];
|
|
103
110
|
case 3:
|
|
104
111
|
tokenResponse = _a.sent();
|
|
@@ -120,8 +127,9 @@ var InteractionHandler = /** @class */ (function () {
|
|
|
120
127
|
return __generator(this, function (_a) {
|
|
121
128
|
switch (_a.label) {
|
|
122
129
|
case 0:
|
|
130
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);
|
|
123
131
|
cloudInstanceAuthorityUri = "https://" + cloudInstanceHostname + "/" + authority.tenant + "/";
|
|
124
|
-
return [4 /*yield*/, AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger)];
|
|
132
|
+
return [4 /*yield*/, AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger, this.performanceClient, this.authCodeRequest.correlationId)];
|
|
125
133
|
case 1:
|
|
126
134
|
cloudInstanceAuthority = _a.sent();
|
|
127
135
|
this.authModule.updateAuthority(cloudInstanceAuthority);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InteractionHandler.js","sources":["../../src/interaction_handler/InteractionHandler.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorizationCodePayload, StringUtils, CommonAuthorizationCodeRequest, AuthenticationResult, AuthorizationCodeClient, AuthorityFactory, Authority, INetworkModule, ClientAuthError, CcsCredential, Logger, ServerError } from \"@azure/msal-common\";\n\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\nimport { TemporaryCacheKeys } from \"../utils/BrowserConstants\";\n\nexport type InteractionParams = {};\n\n/**\n * Abstract class which defines operations for a browser interaction handling class.\n */\nexport class InteractionHandler {\n\n protected authModule: AuthorizationCodeClient;\n protected browserStorage: BrowserCacheManager;\n protected authCodeRequest: CommonAuthorizationCodeRequest;\n protected logger: Logger;\n\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger) {\n this.authModule = authCodeModule;\n this.browserStorage = storageImpl;\n this.authCodeRequest = authCodeRequest;\n this.logger = logger;\n }\n\n /**\n * Function to handle response parameters from hash.\n * @param locationHash\n */\n async handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise<AuthenticationResult> {\n this.logger.verbose(\"InteractionHandler.handleCodeResponse called\");\n // Check that location hash isn't empty.\n if (StringUtils.isEmpty(locationHash)) {\n throw BrowserAuthError.createEmptyHashError(locationHash);\n }\n\n // Handle code response.\n const stateKey = this.browserStorage.generateStateKey(state);\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\n if (!requestState) {\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\n }\n\n let authCodeResponse;\n try {\n authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);\n } catch (e) {\n if (e instanceof ServerError && e.subError === BrowserAuthErrorMessage.userCancelledError.code) {\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\n throw BrowserAuthError.createUserCancelledError();\n } else {\n throw e;\n }\n }\n\n return this.handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule);\n }\n\n /**\n * Process auth code response from AAD\n * @param authCodeResponse \n * @param state \n * @param authority \n * @param networkModule \n * @returns \n */\n async handleCodeResponseFromServer(authCodeResponse: AuthorizationCodePayload, state: string, authority: Authority, networkModule: INetworkModule, validateNonce: boolean = true): Promise<AuthenticationResult> {\n this.logger.trace(\"InteractionHandler.handleCodeResponseFromServer called\");\n\n // Handle code response.\n const stateKey = this.browserStorage.generateStateKey(state);\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\n if (!requestState) {\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\n }\n\n // Get cached items\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\n\n // Assign code to request\n this.authCodeRequest.code = authCodeResponse.code;\n\n // Check for new cloud instance\n if (authCodeResponse.cloud_instance_host_name) {\n await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);\n }\n\n // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)\n if (validateNonce) {\n authCodeResponse.nonce = cachedNonce || undefined;\n }\n\n authCodeResponse.state = requestState;\n\n // Add CCS parameters if available\n if (authCodeResponse.client_info) {\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\n } else {\n const cachedCcsCred = this.checkCcsCredentials();\n if (cachedCcsCred) {\n this.authCodeRequest.ccsCredential = cachedCcsCred;\n }\n }\n\n // Acquire token with retrieved code.\n const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);\n this.browserStorage.cleanRequestByState(state);\n return tokenResponse;\n }\n\n /**\n * Updates authority based on cloudInstanceHostname\n * @param cloudInstanceHostname \n * @param authority \n * @param networkModule \n */\n protected async updateTokenEndpointAuthority(cloudInstanceHostname: string, authority: Authority, networkModule: INetworkModule): Promise<void> {\n const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${authority.tenant}/`;\n const cloudInstanceAuthority = await AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger);\n this.authModule.updateAuthority(cloudInstanceAuthority);\n }\n\n /**\n * Looks up ccs creds in the cache\n */\n protected checkCcsCredentials(): CcsCredential | null {\n // Look up ccs credential in temp cache\n const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);\n if (cachedCcsCred) {\n try {\n return JSON.parse(cachedCcsCred) as CcsCredential;\n } catch (e) {\n this.authModule.logger.error(\"Cache credential could not be parsed\");\n this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);\n }\n }\n return null;\n }\n}\n"],"names":[],"mappings":";;;;;;;AAAA;;;;AAaA;;;;IAUI,4BAAY,cAAuC,EAAE,WAAgC,EAAE,eAA+C,EAAE,MAAc;QAClJ,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC;QACjC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;KACxB;;;;;IAMK,uDAA0B,GAAhC,UAAiC,YAAoB,EAAE,KAAa,EAAE,SAAoB,EAAE,aAA6B;;;;gBACrH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,8CAA8C,CAAC,CAAC;;gBAEpE,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;oBACnC,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;iBAC7D;gBAGK,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;gBACvD,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACrE,IAAI,CAAC,YAAY,EAAE;oBACf,MAAM,eAAe,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;iBAClE;gBAGD,IAAI;oBACA,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;iBACzF;gBAAC,OAAO,CAAC,EAAE;oBACR,IAAI,CAAC,YAAY,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,EAAE;;wBAE5F,MAAM,gBAAgB,CAAC,wBAAwB,EAAE,CAAC;qBACrD;yBAAM;wBACH,MAAM,CAAC,CAAC;qBACX;iBACJ;gBAED,sBAAO,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,CAAC,EAAC;;;KAC/F;;;;;;;;;IAUK,yDAA4B,GAAlC,UAAmC,gBAA0C,EAAE,KAAa,EAAE,SAAoB,EAAE,aAA6B,EAAE,aAA6B;QAA7B,8BAAA,EAAA,oBAA6B;;;;;;wBAC5K,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;wBAGtE,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;wBACvD,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;wBACrE,IAAI,CAAC,YAAY,EAAE;4BACf,MAAM,eAAe,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;yBAClE;wBAGK,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;wBAC9D,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;wBAGpE,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;6BAG9C,gBAAgB,CAAC,wBAAwB,EAAzC,wBAAyC;wBACzC,qBAAM,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,SAAS,EAAE,aAAa,CAAC,EAAA;;wBAA5G,SAA4G,CAAC;;;;wBAIjH,IAAI,aAAa,EAAE;4BACf,gBAAgB,CAAC,KAAK,GAAG,WAAW,IAAI,SAAS,CAAC;yBACrD;wBAED,gBAAgB,CAAC,KAAK,GAAG,YAAY,CAAC;;wBAGtC,IAAI,gBAAgB,CAAC,WAAW,EAAE;4BAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC;yBAClE;6BAAM;4BACG,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;4BACjD,IAAI,aAAa,EAAE;gCACf,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,aAAa,CAAC;6BACtD;yBACJ;wBAGqB,qBAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA;;wBAA1F,aAAa,GAAG,SAA0E;wBAChG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;wBAC/C,sBAAO,aAAa,EAAC;;;;KACxB;;;;;;;IAQe,yDAA4B,GAA5C,UAA6C,qBAA6B,EAAE,SAAoB,EAAE,aAA6B;;;;;;wBACrH,yBAAyB,GAAG,aAAW,qBAAqB,SAAI,SAAS,CAAC,MAAM,MAAG,CAAC;wBAC3D,qBAAM,gBAAgB,CAAC,wBAAwB,CAAC,yBAAyB,EAAE,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAA;;wBAAvK,sBAAsB,GAAG,SAA8I;wBAC7K,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,sBAAsB,CAAC,CAAC;;;;;KAC3D;;;;IAKS,gDAAmB,GAA7B;;QAEI,IAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACrG,IAAI,aAAa,EAAE;YACf,IAAI;gBACA,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,CAAkB,CAAC;aACrD;YAAC,OAAO,CAAC,EAAE;gBACR,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACrE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,2CAAyC,aAAe,CAAC,CAAC;aAC7F;SACJ;QACD,OAAO,IAAI,CAAC;KACf;IACL,yBAAC;AAAD,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"InteractionHandler.js","sources":["../../src/interaction_handler/InteractionHandler.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorizationCodePayload, StringUtils, CommonAuthorizationCodeRequest, AuthenticationResult, AuthorizationCodeClient, AuthorityFactory, Authority, INetworkModule, ClientAuthError, CcsCredential, Logger, ServerError, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\n\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\nimport { TemporaryCacheKeys } from \"../utils/BrowserConstants\";\n\nexport type InteractionParams = {};\n\n/**\n * Abstract class which defines operations for a browser interaction handling class.\n */\nexport class InteractionHandler {\n\n protected authModule: AuthorizationCodeClient;\n protected browserStorage: BrowserCacheManager;\n protected authCodeRequest: CommonAuthorizationCodeRequest;\n protected logger: Logger;\n protected performanceClient: IPerformanceClient;\n\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, performanceClient: IPerformanceClient) {\n this.authModule = authCodeModule;\n this.browserStorage = storageImpl;\n this.authCodeRequest = authCodeRequest;\n this.logger = logger;\n this.performanceClient = performanceClient;\n }\n\n /**\n * Function to handle response parameters from hash.\n * @param locationHash\n */\n async handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise<AuthenticationResult> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromHash, this.authCodeRequest.correlationId);\n this.logger.verbose(\"InteractionHandler.handleCodeResponse called\");\n // Check that location hash isn't empty.\n if (StringUtils.isEmpty(locationHash)) {\n throw BrowserAuthError.createEmptyHashError(locationHash);\n }\n\n // Handle code response.\n const stateKey = this.browserStorage.generateStateKey(state);\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\n if (!requestState) {\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\n }\n\n let authCodeResponse;\n try {\n authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);\n } catch (e) {\n if (e instanceof ServerError && e.subError === BrowserAuthErrorMessage.userCancelledError.code) {\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\n throw BrowserAuthError.createUserCancelledError();\n } else {\n throw e;\n }\n }\n\n this.performanceClient.setPreQueueTime(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);\n return this.handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule);\n }\n\n /**\n * Process auth code response from AAD\n * @param authCodeResponse \n * @param state \n * @param authority \n * @param networkModule \n * @returns \n */\n async handleCodeResponseFromServer(authCodeResponse: AuthorizationCodePayload, state: string, authority: Authority, networkModule: INetworkModule, validateNonce: boolean = true): Promise<AuthenticationResult> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);\n this.logger.trace(\"InteractionHandler.handleCodeResponseFromServer called\");\n\n // Handle code response.\n const stateKey = this.browserStorage.generateStateKey(state);\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\n if (!requestState) {\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\n }\n\n // Get cached items\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\n\n // Assign code to request\n this.authCodeRequest.code = authCodeResponse.code;\n\n // Check for new cloud instance\n if (authCodeResponse.cloud_instance_host_name) {\n this.performanceClient.setPreQueueTime(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);\n await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);\n }\n\n // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)\n if (validateNonce) {\n authCodeResponse.nonce = cachedNonce || undefined;\n }\n\n authCodeResponse.state = requestState;\n\n // Add CCS parameters if available\n if (authCodeResponse.client_info) {\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\n } else {\n const cachedCcsCred = this.checkCcsCredentials();\n if (cachedCcsCred) {\n this.authCodeRequest.ccsCredential = cachedCcsCred;\n }\n }\n\n // Acquire token with retrieved code.\n this.performanceClient.setPreQueueTime(PerformanceEvents.AuthClientAcquireToken, this.authCodeRequest.correlationId);\n const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);\n this.browserStorage.cleanRequestByState(state);\n return tokenResponse;\n }\n\n /**\n * Updates authority based on cloudInstanceHostname\n * @param cloudInstanceHostname \n * @param authority \n * @param networkModule \n */\n protected async updateTokenEndpointAuthority(cloudInstanceHostname: string, authority: Authority, networkModule: INetworkModule): Promise<void> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);\n const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${authority.tenant}/`;\n const cloudInstanceAuthority = await AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger, this.performanceClient, this.authCodeRequest.correlationId);\n this.authModule.updateAuthority(cloudInstanceAuthority);\n }\n\n /**\n * Looks up ccs creds in the cache\n */\n protected checkCcsCredentials(): CcsCredential | null {\n // Look up ccs credential in temp cache\n const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);\n if (cachedCcsCred) {\n try {\n return JSON.parse(cachedCcsCred) as CcsCredential;\n } catch (e) {\n this.authModule.logger.error(\"Cache credential could not be parsed\");\n this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);\n }\n }\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AuthorizationCodeClient, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, Logger } from "@azure/msal-common";
|
|
1
|
+
import { AuthorizationCodeClient, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, Logger, IPerformanceClient } from "@azure/msal-common";
|
|
2
2
|
import { BrowserCacheManager } from "../cache/BrowserCacheManager";
|
|
3
3
|
import { InteractionHandler, InteractionParams } from "./InteractionHandler";
|
|
4
4
|
import { INavigationClient } from "../navigation/INavigationClient";
|
|
@@ -10,7 +10,7 @@ export declare type RedirectParams = InteractionParams & {
|
|
|
10
10
|
};
|
|
11
11
|
export declare class RedirectHandler extends InteractionHandler {
|
|
12
12
|
private browserCrypto;
|
|
13
|
-
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto);
|
|
13
|
+
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto, performanceClient: IPerformanceClient);
|
|
14
14
|
/**
|
|
15
15
|
* Redirects window to given URL.
|
|
16
16
|
* @param urlNavigate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectHandler.d.ts","sourceRoot":"","sources":["../../src/interaction_handler/RedirectHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAe,8BAA8B,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,cAAc,EAAmB,MAAM,EAAe,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"RedirectHandler.d.ts","sourceRoot":"","sources":["../../src/interaction_handler/RedirectHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,uBAAuB,EAAe,8BAA8B,EAAE,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,cAAc,EAAmB,MAAM,EAAe,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAG9N,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGpE,oBAAY,cAAc,GAAG,iBAAiB,GAAG;IAC7C,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;CACxD,CAAC;AAEF,qBAAa,eAAgB,SAAQ,kBAAkB;IAEnD,OAAO,CAAC,aAAa,CAAU;gBAEnB,cAAc,EAAE,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,kBAAkB;IAKrN;;;OAGG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CpF;;;OAGG;IACG,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;CA6D5J"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! @azure/msal-browser v2.
|
|
1
|
+
/*! @azure/msal-browser v2.34.0 2023-03-07 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { __extends, __awaiter, __generator } from '../_virtual/_tslib.js';
|
|
4
4
|
import { StringUtils, ClientAuthError, ServerError } from '@azure/msal-common';
|
|
@@ -12,8 +12,8 @@ import { InteractionHandler } from './InteractionHandler.js';
|
|
|
12
12
|
*/
|
|
13
13
|
var RedirectHandler = /** @class */ (function (_super) {
|
|
14
14
|
__extends(RedirectHandler, _super);
|
|
15
|
-
function RedirectHandler(authCodeModule, storageImpl, authCodeRequest, logger, browserCrypto) {
|
|
16
|
-
var _this = _super.call(this, authCodeModule, storageImpl, authCodeRequest, logger) || this;
|
|
15
|
+
function RedirectHandler(authCodeModule, storageImpl, authCodeRequest, logger, browserCrypto, performanceClient) {
|
|
16
|
+
var _this = _super.call(this, authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) || this;
|
|
17
17
|
_this.browserCrypto = browserCrypto;
|
|
18
18
|
return _this;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RedirectHandler.js","sources":["../../src/interaction_handler/RedirectHandler.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorizationCodeClient, StringUtils, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, ClientAuthError, Logger, ServerError } from \"@azure/msal-common\";\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\nimport { ApiId, TemporaryCacheKeys } from \"../utils/BrowserConstants\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\nimport { InteractionHandler, InteractionParams } from \"./InteractionHandler\";\nimport { INavigationClient } from \"../navigation/INavigationClient\";\nimport { NavigationOptions } from \"../navigation/NavigationOptions\";\n\nexport type RedirectParams = InteractionParams & {\n navigationClient: INavigationClient;\n redirectTimeout: number;\n redirectStartPage: string;\n onRedirectNavigate?: (url: string) => void | boolean;\n};\n\nexport class RedirectHandler extends InteractionHandler {\n\n private browserCrypto: ICrypto;\n\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto) {\n super(authCodeModule, storageImpl, authCodeRequest, logger);\n this.browserCrypto = browserCrypto;\n }\n\n /**\n * Redirects window to given URL.\n * @param urlNavigate\n */\n async initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise<void> {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest called\");\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 (params.redirectStartPage) {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page\");\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);\n }\n\n // Set interaction status in the library.\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);\n this.browserStorage.cacheCodeRequest(this.authCodeRequest, this.browserCrypto);\n this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.acquireTokenRedirect,\n timeout: params.redirectTimeout,\n noHistory: false\n };\n \n // If onRedirectNavigate is implemented, invoke it and provide requestUrl\n if (typeof params.onRedirectNavigate === \"function\") {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback\");\n const navigate = params.onRedirectNavigate(requestUrl);\n\n // Returning false from onRedirectNavigate will stop navigation\n if (navigate !== false) {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating\");\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\n return;\n } else {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation\");\n return;\n }\n } else {\n // Navigate window to request URL\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Navigating window to navigate url\");\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\n return;\n }\n } else {\n // Throw error if request URL is empty.\n this.logger.info(\"RedirectHandler.initiateAuthRequest: Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n }\n }\n\n /**\n * Handle authorization code response in the window.\n * @param hash\n */\n async handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise<AuthenticationResult> {\n this.logger.verbose(\"RedirectHandler.handleCodeResponse called\");\n\n // Check that location hash isn't empty.\n if (StringUtils.isEmpty(locationHash)) {\n throw BrowserAuthError.createEmptyHashError(locationHash);\n }\n\n // Interaction is completed - remove interaction status.\n this.browserStorage.setInteractionInProgress(false);\n\n // Handle code response.\n const stateKey = this.browserStorage.generateStateKey(state);\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\n if (!requestState) {\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\n }\n\n let authCodeResponse;\n try {\n authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);\n } catch (e) {\n if (e instanceof ServerError && e.subError === BrowserAuthErrorMessage.userCancelledError.code) {\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\n throw BrowserAuthError.createUserCancelledError();\n } else {\n throw e;\n }\n }\n\n // Get cached items\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\n\n // Assign code to request\n this.authCodeRequest.code = authCodeResponse.code;\n\n // Check for new cloud instance\n if (authCodeResponse.cloud_instance_host_name) {\n await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);\n }\n\n authCodeResponse.nonce = cachedNonce || undefined;\n authCodeResponse.state = requestState;\n\n // Add CCS parameters if available\n if (authCodeResponse.client_info) {\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\n } else {\n const cachedCcsCred = this.checkCcsCredentials();\n if (cachedCcsCred) {\n this.authCodeRequest.ccsCredential = cachedCcsCred;\n }\n }\n\n // Acquire token with retrieved code.\n const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);\n\n this.browserStorage.cleanRequestByState(state);\n return tokenResponse;\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAAA;;;;;IAoBqC,mCAAkB;IAInD,yBAAY,cAAuC,EAAE,WAAgC,EAAE,eAA+C,EAAE,MAAc,EAAE,aAAsB;QAA9K,YACI,kBAAM,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,CAAC,SAE9D;QADG,KAAI,CAAC,aAAa,GAAG,aAAa,CAAC;;KACtC;;;;;IAMK,6CAAmB,GAAzB,UAA0B,UAAkB,EAAE,MAAsB;;;;;;wBAChE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;6BAE9D,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAhC,wBAAgC;;wBAEhC,IAAI,MAAM,CAAC,iBAAiB,EAAE;4BAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gFAAgF,CAAC,CAAC;4BACtG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;yBACxG;;wBAGD,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,cAAc,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;wBACnH,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;wBAC/E,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,uDAAqD,UAAY,CAAC,CAAC;wBACjF,iBAAiB,GAAsB;4BACzC,KAAK,EAAE,KAAK,CAAC,oBAAoB;4BACjC,OAAO,EAAE,MAAM,CAAC,eAAe;4BAC/B,SAAS,EAAE,KAAK;yBACnB,CAAC;8BAGE,OAAO,MAAM,CAAC,kBAAkB,KAAK,UAAU,CAAA,EAA/C,wBAA+C;wBAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;wBAC3F,QAAQ,GAAG,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;8BAGnD,QAAQ,KAAK,KAAK,CAAA,EAAlB,wBAAkB;wBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,0FAA0F,CAAC,CAAC;wBAChH,qBAAM,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAA;;wBAA7E,SAA6E,CAAC;wBAC9E,sBAAO;;wBAEP,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,6FAA6F,CAAC,CAAC;wBACnH,sBAAO;;;;wBAIX,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wEAAwE,CAAC,CAAC;wBAC9F,qBAAM,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAA;;wBAA7E,SAA6E,CAAC;wBAC9E,sBAAO;;;;wBAIX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;wBAC/E,MAAM,gBAAgB,CAAC,6BAA6B,EAAE,CAAC;;;;;KAE9D;;;;;IAMK,oDAA0B,GAAhC,UAAiC,YAAoB,EAAE,KAAa,EAAE,SAAoB,EAAE,aAA6B;;;;;;wBACrH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,2CAA2C,CAAC,CAAC;;wBAGjE,IAAI,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;4BACnC,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;yBAC7D;;wBAGD,IAAI,CAAC,cAAc,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;wBAG9C,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;wBACvD,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;wBACrE,IAAI,CAAC,YAAY,EAAE;4BACf,MAAM,eAAe,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAC;yBAClE;wBAGD,IAAI;4BACA,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;yBACzF;wBAAC,OAAO,CAAC,EAAE;4BACR,IAAI,CAAC,YAAY,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,uBAAuB,CAAC,kBAAkB,CAAC,IAAI,EAAE;;gCAE5F,MAAM,gBAAgB,CAAC,wBAAwB,EAAE,CAAC;6BACrD;iCAAM;gCACH,MAAM,CAAC,CAAC;6BACX;yBACJ;wBAGK,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;wBAC9D,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;;wBAGpE,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC;6BAG9C,gBAAgB,CAAC,wBAAwB,EAAzC,wBAAyC;wBACzC,qBAAM,IAAI,CAAC,4BAA4B,CAAC,gBAAgB,CAAC,wBAAwB,EAAE,SAAS,EAAE,aAAa,CAAC,EAAA;;wBAA5G,SAA4G,CAAC;;;wBAGjH,gBAAgB,CAAC,KAAK,GAAG,WAAW,IAAI,SAAS,CAAC;wBAClD,gBAAgB,CAAC,KAAK,GAAG,YAAY,CAAC;;wBAGtC,IAAI,gBAAgB,CAAC,WAAW,EAAE;4BAC9B,IAAI,CAAC,eAAe,CAAC,UAAU,GAAG,gBAAgB,CAAC,WAAW,CAAC;yBAClE;6BAAM;4BACG,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;4BACjD,IAAI,aAAa,EAAE;gCACf,IAAI,CAAC,eAAe,CAAC,aAAa,GAAG,aAAa,CAAC;6BACtD;yBACJ;wBAGqB,qBAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAAA;;wBAA1F,aAAa,GAAG,SAA0E;wBAEhG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;wBAC/C,sBAAO,aAAa,EAAC;;;;KACxB;IACL,sBAAC;AAAD,CA7HA,CAAqC,kBAAkB;;;;"}
|
|
1
|
+
{"version":3,"file":"RedirectHandler.js","sources":["../../src/interaction_handler/RedirectHandler.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { AuthorizationCodeClient, StringUtils, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, ClientAuthError, Logger, ServerError, IPerformanceClient } from \"@azure/msal-common\";\nimport { BrowserAuthError, BrowserAuthErrorMessage } from \"../error/BrowserAuthError\";\nimport { ApiId, TemporaryCacheKeys } from \"../utils/BrowserConstants\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\nimport { InteractionHandler, InteractionParams } from \"./InteractionHandler\";\nimport { INavigationClient } from \"../navigation/INavigationClient\";\nimport { NavigationOptions } from \"../navigation/NavigationOptions\";\n\nexport type RedirectParams = InteractionParams & {\n navigationClient: INavigationClient;\n redirectTimeout: number;\n redirectStartPage: string;\n onRedirectNavigate?: (url: string) => void | boolean;\n};\n\nexport class RedirectHandler extends InteractionHandler {\n\n private browserCrypto: ICrypto;\n\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto, performanceClient: IPerformanceClient) {\n super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);\n this.browserCrypto = browserCrypto;\n }\n\n /**\n * Redirects window to given URL.\n * @param urlNavigate\n */\n async initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise<void> {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest called\");\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 (params.redirectStartPage) {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page\");\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);\n }\n\n // Set interaction status in the library.\n this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);\n this.browserStorage.cacheCodeRequest(this.authCodeRequest, this.browserCrypto);\n this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);\n const navigationOptions: NavigationOptions = {\n apiId: ApiId.acquireTokenRedirect,\n timeout: params.redirectTimeout,\n noHistory: false\n };\n \n // If onRedirectNavigate is implemented, invoke it and provide requestUrl\n if (typeof params.onRedirectNavigate === \"function\") {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback\");\n const navigate = params.onRedirectNavigate(requestUrl);\n\n // Returning false from onRedirectNavigate will stop navigation\n if (navigate !== false) {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating\");\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\n return;\n } else {\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation\");\n return;\n }\n } else {\n // Navigate window to request URL\n this.logger.verbose(\"RedirectHandler.initiateAuthRequest: Navigating window to navigate url\");\n await params.navigationClient.navigateExternal(requestUrl, navigationOptions);\n return;\n }\n } else {\n // Throw error if request URL is empty.\n this.logger.info(\"RedirectHandler.initiateAuthRequest: Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n }\n }\n\n /**\n * Handle authorization code response in the window.\n * @param hash\n */\n async handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise<AuthenticationResult> {\n this.logger.verbose(\"RedirectHandler.handleCodeResponse called\");\n\n // Check that location hash isn't empty.\n if (StringUtils.isEmpty(locationHash)) {\n throw BrowserAuthError.createEmptyHashError(locationHash);\n }\n\n // Interaction is completed - remove interaction status.\n this.browserStorage.setInteractionInProgress(false);\n\n // Handle code response.\n const stateKey = this.browserStorage.generateStateKey(state);\n const requestState = this.browserStorage.getTemporaryCache(stateKey);\n if (!requestState) {\n throw ClientAuthError.createStateNotFoundError(\"Cached State\");\n }\n\n let authCodeResponse;\n try {\n authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);\n } catch (e) {\n if (e instanceof ServerError && e.subError === BrowserAuthErrorMessage.userCancelledError.code) {\n // Translate server error caused by user closing native prompt to corresponding first class MSAL error\n throw BrowserAuthError.createUserCancelledError();\n } else {\n throw e;\n }\n }\n\n // Get cached items\n const nonceKey = this.browserStorage.generateNonceKey(requestState);\n const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);\n\n // Assign code to request\n this.authCodeRequest.code = authCodeResponse.code;\n\n // Check for new cloud instance\n if (authCodeResponse.cloud_instance_host_name) {\n await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);\n }\n\n authCodeResponse.nonce = cachedNonce || undefined;\n authCodeResponse.state = requestState;\n\n // Add CCS parameters if available\n if (authCodeResponse.client_info) {\n this.authCodeRequest.clientInfo = authCodeResponse.client_info;\n } else {\n const cachedCcsCred = this.checkCcsCredentials();\n if (cachedCcsCred) {\n this.authCodeRequest.ccsCredential = cachedCcsCred;\n }\n }\n\n // Acquire token with retrieved code.\n const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);\n\n this.browserStorage.cleanRequestByState(state);\n return tokenResponse;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { CommonAuthorizationCodeRequest, AuthorizationCodeClient, Logger } from "@azure/msal-common";
|
|
1
|
+
import { CommonAuthorizationCodeRequest, AuthorizationCodeClient, Logger, IPerformanceClient } from "@azure/msal-common";
|
|
2
2
|
import { InteractionHandler } from "./InteractionHandler";
|
|
3
3
|
import { BrowserCacheManager } from "../cache/BrowserCacheManager";
|
|
4
4
|
import { BrowserSystemOptions } from "../config/Configuration";
|
|
5
5
|
export declare class SilentHandler extends InteractionHandler {
|
|
6
6
|
private navigateFrameWait;
|
|
7
7
|
private pollIntervalMilliseconds;
|
|
8
|
-
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required<Pick<BrowserSystemOptions, "navigateFrameWait" | "pollIntervalMilliseconds"
|
|
8
|
+
constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required<Pick<BrowserSystemOptions, "navigateFrameWait" | "pollIntervalMilliseconds">>, performanceClient: IPerformanceClient);
|
|
9
9
|
/**
|
|
10
10
|
* Creates a hidden iframe to given URL using user-requested scopes as an id.
|
|
11
11
|
* @param urlNavigate
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SilentHandler.d.ts","sourceRoot":"","sources":["../../src/interaction_handler/SilentHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,8BAA8B,EAAE,uBAAuB,EAAa,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"SilentHandler.d.ts","sourceRoot":"","sources":["../../src/interaction_handler/SilentHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,8BAA8B,EAAE,uBAAuB,EAAa,MAAM,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAC/K,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAA6B,MAAM,yBAAyB,CAAC;AAE1F,qBAAa,aAAc,SAAQ,kBAAkB;IAEjD,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,wBAAwB,CAAS;gBAE7B,cAAc,EAAE,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,8BAA8B,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,oBAAoB,EAAE,mBAAmB,GAAG,0BAA0B,CAAC,CAAC,EAAE,iBAAiB,EAAE,kBAAkB;IAMpS;;;;OAIG;IACG,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBzE;;;;OAIG;IACH,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkDjF;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAwBjB;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IAQrB;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;CAK7B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/*! @azure/msal-browser v2.
|
|
1
|
+
/*! @azure/msal-browser v2.34.0 2023-03-07 */
|
|
2
2
|
'use strict';
|
|
3
3
|
import { __extends, __awaiter, __generator } from '../_virtual/_tslib.js';
|
|
4
|
-
import { StringUtils, Constants, UrlString } from '@azure/msal-common';
|
|
4
|
+
import { PerformanceEvents, StringUtils, Constants, UrlString } from '@azure/msal-common';
|
|
5
5
|
import { InteractionHandler } from './InteractionHandler.js';
|
|
6
6
|
import { BrowserAuthError } from '../error/BrowserAuthError.js';
|
|
7
7
|
import { DEFAULT_IFRAME_TIMEOUT_MS } from '../config/Configuration.js';
|
|
@@ -12,8 +12,8 @@ import { DEFAULT_IFRAME_TIMEOUT_MS } from '../config/Configuration.js';
|
|
|
12
12
|
*/
|
|
13
13
|
var SilentHandler = /** @class */ (function (_super) {
|
|
14
14
|
__extends(SilentHandler, _super);
|
|
15
|
-
function SilentHandler(authCodeModule, storageImpl, authCodeRequest, logger, systemOptions) {
|
|
16
|
-
var _this = _super.call(this, authCodeModule, storageImpl, authCodeRequest, logger) || this;
|
|
15
|
+
function SilentHandler(authCodeModule, storageImpl, authCodeRequest, logger, systemOptions, performanceClient) {
|
|
16
|
+
var _this = _super.call(this, authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) || this;
|
|
17
17
|
_this.navigateFrameWait = systemOptions.navigateFrameWait;
|
|
18
18
|
_this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;
|
|
19
19
|
return _this;
|
|
@@ -25,24 +25,20 @@ var SilentHandler = /** @class */ (function (_super) {
|
|
|
25
25
|
*/
|
|
26
26
|
SilentHandler.prototype.initiateAuthRequest = function (requestUrl) {
|
|
27
27
|
return __awaiter(this, void 0, void 0, function () {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
switch (_b.label) {
|
|
28
|
+
return __generator(this, function (_a) {
|
|
29
|
+
switch (_a.label) {
|
|
31
30
|
case 0:
|
|
31
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, this.authCodeRequest.correlationId);
|
|
32
32
|
if (StringUtils.isEmpty(requestUrl)) {
|
|
33
33
|
// Throw error if request URL is empty.
|
|
34
34
|
this.logger.info("Navigate url is empty");
|
|
35
35
|
throw BrowserAuthError.createEmptyNavigationUriError();
|
|
36
36
|
}
|
|
37
37
|
if (!this.navigateFrameWait) return [3 /*break*/, 2];
|
|
38
|
+
this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);
|
|
38
39
|
return [4 /*yield*/, this.loadFrame(requestUrl)];
|
|
39
|
-
case 1:
|
|
40
|
-
|
|
41
|
-
return [3 /*break*/, 3];
|
|
42
|
-
case 2:
|
|
43
|
-
_a = this.loadFrameSync(requestUrl);
|
|
44
|
-
_b.label = 3;
|
|
45
|
-
case 3: return [2 /*return*/, _a];
|
|
40
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
41
|
+
case 2: return [2 /*return*/, this.loadFrameSync(requestUrl)];
|
|
46
42
|
}
|
|
47
43
|
});
|
|
48
44
|
});
|
|
@@ -54,6 +50,7 @@ var SilentHandler = /** @class */ (function (_super) {
|
|
|
54
50
|
*/
|
|
55
51
|
SilentHandler.prototype.monitorIframeForHash = function (iframe, timeout) {
|
|
56
52
|
var _this = this;
|
|
53
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, this.authCodeRequest.correlationId);
|
|
57
54
|
return new Promise(function (resolve, reject) {
|
|
58
55
|
if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {
|
|
59
56
|
_this.logger.warning("system.loadFrameTimeout or system.iframeHashTimeout set to lower (" + timeout + "ms) than the default (" + DEFAULT_IFRAME_TIMEOUT_MS + "ms). This may result in timeouts.");
|
|
@@ -102,11 +99,12 @@ var SilentHandler = /** @class */ (function (_super) {
|
|
|
102
99
|
* @ignore
|
|
103
100
|
*/
|
|
104
101
|
SilentHandler.prototype.loadFrame = function (urlNavigate) {
|
|
102
|
+
var _this = this;
|
|
103
|
+
this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);
|
|
105
104
|
/*
|
|
106
105
|
* This trick overcomes iframe navigation in IE
|
|
107
106
|
* IE does not load the page consistently in iframe
|
|
108
107
|
*/
|
|
109
|
-
var _this = this;
|
|
110
108
|
return new Promise(function (resolve, reject) {
|
|
111
109
|
var frameHandle = _this.createHiddenIframe();
|
|
112
110
|
setTimeout(function () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SilentHandler.js","sources":["../../src/interaction_handler/SilentHandler.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UrlString, StringUtils, CommonAuthorizationCodeRequest, AuthorizationCodeClient, Constants, Logger } from \"@azure/msal-common\";\nimport { InteractionHandler } from \"./InteractionHandler\";\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\nimport { BrowserSystemOptions, DEFAULT_IFRAME_TIMEOUT_MS } from \"../config/Configuration\";\n\nexport class SilentHandler extends InteractionHandler {\n\n private navigateFrameWait: number;\n private pollIntervalMilliseconds: number;\n\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required<Pick<BrowserSystemOptions, \"navigateFrameWait\" | \"pollIntervalMilliseconds\">>) {\n super(authCodeModule, storageImpl, authCodeRequest, logger);\n this.navigateFrameWait = systemOptions.navigateFrameWait;\n this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;\n }\n\n /**\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\n * @param urlNavigate\n * @param userRequestScopes\n */\n async initiateAuthRequest(requestUrl: string): Promise<HTMLIFrameElement> {\n if (StringUtils.isEmpty(requestUrl)) {\n // Throw error if request URL is empty.\n this.logger.info(\"Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n }\n\n return this.navigateFrameWait ? await this.loadFrame(requestUrl) : this.loadFrameSync(requestUrl);\n }\n\n /**\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\n * @param iframe\n * @param timeout\n */\n monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number): Promise<string> {\n return new Promise((resolve, reject) => {\n if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {\n this.logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);\n }\n\n /*\n * Polling for iframes can be purely timing based,\n * since we don't need to account for interaction.\n */\n const nowMark = window.performance.now();\n const timeoutMark = nowMark + timeout;\n\n const intervalId = setInterval(() => {\n if (window.performance.now() > timeoutMark) {\n this.removeHiddenIframe(iframe);\n clearInterval(intervalId);\n reject(BrowserAuthError.createMonitorIframeTimeoutError());\n return;\n }\n\n let href: string = Constants.EMPTY_STRING;\n const contentWindow = iframe.contentWindow;\n try {\n /*\n * Will throw if cross origin,\n * which should be caught and ignored\n * since we need the interval to keep running while on STS UI.\n */\n href = contentWindow ? contentWindow.location.href : Constants.EMPTY_STRING;\n } catch (e) {}\n\n if (StringUtils.isEmpty(href)) {\n return;\n }\n\n const contentHash = contentWindow ? contentWindow.location.hash: Constants.EMPTY_STRING;\n if (UrlString.hashContainsKnownProperties(contentHash)) {\n // Success case\n this.removeHiddenIframe(iframe);\n clearInterval(intervalId);\n resolve(contentHash);\n return;\n }\n }, this.pollIntervalMilliseconds);\n });\n }\n\n /**\n * @hidden\n * Loads iframe with authorization endpoint URL\n * @ignore\n */\n private loadFrame(urlNavigate: string): Promise<HTMLIFrameElement> {\n /*\n * This trick overcomes iframe navigation in IE\n * IE does not load the page consistently in iframe\n */\n\n return new Promise((resolve, reject) => {\n const frameHandle = this.createHiddenIframe();\n\n setTimeout(() => {\n if (!frameHandle) {\n reject(\"Unable to load iframe\");\n return;\n }\n\n frameHandle.src = urlNavigate;\n\n resolve(frameHandle);\n }, this.navigateFrameWait);\n });\n }\n\n /**\n * @hidden\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\n * @param urlNavigate\n * @param frameName\n * @param logger\n */\n private loadFrameSync(urlNavigate: string): HTMLIFrameElement{\n const frameHandle = this.createHiddenIframe();\n\n frameHandle.src = urlNavigate;\n\n return frameHandle;\n }\n\n /**\n * @hidden\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\n * @ignore\n */\n private createHiddenIframe(): HTMLIFrameElement {\n const authFrame = document.createElement(\"iframe\");\n\n authFrame.style.visibility = \"hidden\";\n authFrame.style.position = \"absolute\";\n authFrame.style.width = authFrame.style.height = \"0\";\n authFrame.style.border = \"0\";\n authFrame.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin allow-forms\");\n document.getElementsByTagName(\"body\")[0].appendChild(authFrame);\n\n return authFrame;\n }\n\n /**\n * @hidden\n * Removes a hidden iframe from the page.\n * @ignore\n */\n private removeHiddenIframe(iframe: HTMLIFrameElement): void {\n if (document.body === iframe.parentNode) {\n document.body.removeChild(iframe);\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SilentHandler.js","sources":["../../src/interaction_handler/SilentHandler.ts"],"sourcesContent":["/*\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { UrlString, StringUtils, CommonAuthorizationCodeRequest, AuthorizationCodeClient, Constants, Logger, IPerformanceClient, PerformanceEvents } from \"@azure/msal-common\";\nimport { InteractionHandler } from \"./InteractionHandler\";\nimport { BrowserAuthError } from \"../error/BrowserAuthError\";\nimport { BrowserCacheManager } from \"../cache/BrowserCacheManager\";\nimport { BrowserSystemOptions, DEFAULT_IFRAME_TIMEOUT_MS } from \"../config/Configuration\";\n\nexport class SilentHandler extends InteractionHandler {\n\n private navigateFrameWait: number;\n private pollIntervalMilliseconds: number;\n\n constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required<Pick<BrowserSystemOptions, \"navigateFrameWait\" | \"pollIntervalMilliseconds\">>, performanceClient: IPerformanceClient) {\n super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);\n this.navigateFrameWait = systemOptions.navigateFrameWait;\n this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;\n }\n\n /**\n * Creates a hidden iframe to given URL using user-requested scopes as an id.\n * @param urlNavigate\n * @param userRequestScopes\n */\n async initiateAuthRequest(requestUrl: string): Promise<HTMLIFrameElement> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, this.authCodeRequest.correlationId);\n\n if (StringUtils.isEmpty(requestUrl)) {\n // Throw error if request URL is empty.\n this.logger.info(\"Navigate url is empty\");\n throw BrowserAuthError.createEmptyNavigationUriError();\n }\n\n if (this.navigateFrameWait) {\n this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);\n return await this.loadFrame(requestUrl);\n }\n return this.loadFrameSync(requestUrl);\n }\n\n /**\n * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.\n * @param iframe\n * @param timeout\n */\n monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number): Promise<string> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, this.authCodeRequest.correlationId);\n\n return new Promise((resolve, reject) => {\n if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {\n this.logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);\n }\n\n /*\n * Polling for iframes can be purely timing based,\n * since we don't need to account for interaction.\n */\n const nowMark = window.performance.now();\n const timeoutMark = nowMark + timeout;\n\n const intervalId = setInterval(() => {\n if (window.performance.now() > timeoutMark) {\n this.removeHiddenIframe(iframe);\n clearInterval(intervalId);\n reject(BrowserAuthError.createMonitorIframeTimeoutError());\n return;\n }\n\n let href: string = Constants.EMPTY_STRING;\n const contentWindow = iframe.contentWindow;\n try {\n /*\n * Will throw if cross origin,\n * which should be caught and ignored\n * since we need the interval to keep running while on STS UI.\n */\n href = contentWindow ? contentWindow.location.href : Constants.EMPTY_STRING;\n } catch (e) {}\n\n if (StringUtils.isEmpty(href)) {\n return;\n }\n\n const contentHash = contentWindow ? contentWindow.location.hash: Constants.EMPTY_STRING;\n if (UrlString.hashContainsKnownProperties(contentHash)) {\n // Success case\n this.removeHiddenIframe(iframe);\n clearInterval(intervalId);\n resolve(contentHash);\n return;\n }\n }, this.pollIntervalMilliseconds);\n });\n }\n\n /**\n * @hidden\n * Loads iframe with authorization endpoint URL\n * @ignore\n */\n private loadFrame(urlNavigate: string): Promise<HTMLIFrameElement> {\n this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);\n\n /*\n * This trick overcomes iframe navigation in IE\n * IE does not load the page consistently in iframe\n */\n\n return new Promise((resolve, reject) => {\n const frameHandle = this.createHiddenIframe();\n\n setTimeout(() => {\n if (!frameHandle) {\n reject(\"Unable to load iframe\");\n return;\n }\n\n frameHandle.src = urlNavigate;\n\n resolve(frameHandle);\n }, this.navigateFrameWait);\n });\n }\n\n /**\n * @hidden\n * Loads the iframe synchronously when the navigateTimeFrame is set to `0`\n * @param urlNavigate\n * @param frameName\n * @param logger\n */\n private loadFrameSync(urlNavigate: string): HTMLIFrameElement{\n const frameHandle = this.createHiddenIframe();\n\n frameHandle.src = urlNavigate;\n\n return frameHandle;\n }\n\n /**\n * @hidden\n * Creates a new hidden iframe or gets an existing one for silent token renewal.\n * @ignore\n */\n private createHiddenIframe(): HTMLIFrameElement {\n const authFrame = document.createElement(\"iframe\");\n\n authFrame.style.visibility = \"hidden\";\n authFrame.style.position = \"absolute\";\n authFrame.style.width = authFrame.style.height = \"0\";\n authFrame.style.border = \"0\";\n authFrame.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin allow-forms\");\n document.getElementsByTagName(\"body\")[0].appendChild(authFrame);\n\n return authFrame;\n }\n\n /**\n * @hidden\n * Removes a hidden iframe from the page.\n * @ignore\n */\n private removeHiddenIframe(iframe: HTMLIFrameElement): void {\n if (document.body === iframe.parentNode) {\n document.body.removeChild(iframe);\n }\n }\n}\n"],"names":[],"mappings":";;;;;;;;AAAA;;;;;IAWmC,iCAAkB;IAKjD,uBAAY,cAAuC,EAAE,WAAgC,EAAE,eAA+C,EAAE,MAAc,EAAE,aAAqG,EAAE,iBAAqC;QAApS,YACI,kBAAM,cAAc,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,CAAC,SAGjF;QAFG,KAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,CAAC;QACzD,KAAI,CAAC,wBAAwB,GAAG,aAAa,CAAC,wBAAwB,CAAC;;KAC1E;;;;;;IAOK,2CAAmB,GAAzB,UAA0B,UAAkB;;;;;wBACxC,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,gCAAgC,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;wBAEnI,IAAI,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;;4BAEjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;4BAC1C,MAAM,gBAAgB,CAAC,6BAA6B,EAAE,CAAC;yBAC1D;6BAEG,IAAI,CAAC,iBAAiB,EAAtB,wBAAsB;wBACtB,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;wBAC9G,qBAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,EAAA;4BAAvC,sBAAO,SAAgC,EAAC;4BAE5C,sBAAO,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAC;;;;KACzC;;;;;;IAOD,4CAAoB,GAApB,UAAqB,MAAyB,EAAE,OAAe;QAA/D,iBAgDC;QA/CG,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,iCAAiC,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAEpI,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAI,OAAO,GAAG,yBAAyB,EAAE;gBACrC,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,uEAAqE,OAAO,8BAAyB,yBAAyB,sCAAmC,CAAC,CAAC;aAC1L;;;;;YAMD,IAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACzC,IAAM,WAAW,GAAG,OAAO,GAAG,OAAO,CAAC;YAEtC,IAAM,UAAU,GAAG,WAAW,CAAC;gBAC3B,IAAI,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE;oBACxC,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBAChC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1B,MAAM,CAAC,gBAAgB,CAAC,+BAA+B,EAAE,CAAC,CAAC;oBAC3D,OAAO;iBACV;gBAED,IAAI,IAAI,GAAW,SAAS,CAAC,YAAY,CAAC;gBAC1C,IAAM,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC3C,IAAI;;;;;;oBAMA,IAAI,GAAG,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,GAAG,SAAS,CAAC,YAAY,CAAC;iBAC/E;gBAAC,OAAO,CAAC,EAAE,GAAE;gBAEd,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC3B,OAAO;iBACV;gBAED,IAAM,WAAW,GAAG,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,GAAE,SAAS,CAAC,YAAY,CAAC;gBACxF,IAAI,SAAS,CAAC,2BAA2B,CAAC,WAAW,CAAC,EAAE;;oBAEpD,KAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBAChC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC1B,OAAO,CAAC,WAAW,CAAC,CAAC;oBACrB,OAAO;iBACV;aACJ,EAAE,KAAI,CAAC,wBAAwB,CAAC,CAAC;SACrC,CAAC,CAAC;KACN;;;;;;IAOO,iCAAS,GAAjB,UAAkB,WAAmB;QAArC,iBAsBC;QArBG,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;;;;;QAOzH,OAAO,IAAI,OAAO,CAAC,UAAC,OAAO,EAAE,MAAM;YAC/B,IAAM,WAAW,GAAG,KAAI,CAAC,kBAAkB,EAAE,CAAC;YAE9C,UAAU,CAAC;gBACP,IAAI,CAAC,WAAW,EAAE;oBACd,MAAM,CAAC,uBAAuB,CAAC,CAAC;oBAChC,OAAO;iBACV;gBAED,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC;gBAE9B,OAAO,CAAC,WAAW,CAAC,CAAC;aACxB,EAAE,KAAI,CAAC,iBAAiB,CAAC,CAAC;SAC9B,CAAC,CAAC;KACN;;;;;;;;IASO,qCAAa,GAArB,UAAsB,WAAmB;QACrC,IAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE9C,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC;QAE9B,OAAO,WAAW,CAAC;KACtB;;;;;;IAOO,0CAAkB,GAA1B;QACI,IAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAEnD,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QACtC,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACtC,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QACrD,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC7B,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,6CAA6C,CAAC,CAAC;QACjF,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAEhE,OAAO,SAAS,CAAC;KACpB;;;;;;IAOO,0CAAkB,GAA1B,UAA2B,MAAyB;QAChD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,CAAC,UAAU,EAAE;YACrC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SACrC;KACJ;IACL,oBAAC;AAAD,CA/JA,CAAmC,kBAAkB;;;;"}
|
package/dist/internals.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { PopupClient } from "./interaction_client/PopupClient";
|
|
|
9
9
|
export { SilentIframeClient } from "./interaction_client/SilentIframeClient";
|
|
10
10
|
export { SilentCacheClient } from "./interaction_client/SilentCacheClient";
|
|
11
11
|
export { SilentRefreshClient } from "./interaction_client/SilentRefreshClient";
|
|
12
|
+
export { NativeInteractionClient } from "./interaction_client/NativeInteractionClient";
|
|
12
13
|
export { RedirectHandler } from "./interaction_handler/RedirectHandler";
|
|
13
14
|
export { EventHandler } from "./event/EventHandler";
|
|
14
15
|
export { NativeMessageHandler } from "./broker/nativeBroker/NativeMessageHandler";
|
|
@@ -16,4 +17,8 @@ export { BrowserStateObject } from "./utils/BrowserProtocolUtils";
|
|
|
16
17
|
export { BrowserConstants, TemporaryCacheKeys } from "./utils/BrowserConstants";
|
|
17
18
|
export { CryptoOps } from "./crypto/CryptoOps";
|
|
18
19
|
export { NativeAuthError } from "./error/NativeAuthError";
|
|
20
|
+
export { BrowserPerformanceClient } from "./telemetry/BrowserPerformanceClient";
|
|
21
|
+
export { BrowserPerformanceMeasurement } from "./telemetry/BrowserPerformanceMeasurement";
|
|
22
|
+
export { NativeTokenRequest } from "./broker/nativeBroker/NativeRequest";
|
|
23
|
+
export { NativeResponse, MATS } from "./broker/nativeBroker/NativeResponse";
|
|
19
24
|
//# sourceMappingURL=internals.d.ts.map
|