@azure/msal-browser 3.19.1 → 3.21.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/dist/app/IPublicClientApplication.d.ts +53 -53
- package/dist/app/IPublicClientApplication.mjs +105 -105
- package/dist/app/PublicClientApplication.d.ts +293 -293
- package/dist/app/PublicClientApplication.mjs +364 -364
- package/dist/app/PublicClientNext.d.ts +276 -276
- package/dist/app/PublicClientNext.mjs +354 -354
- package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
- package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
- package/dist/broker/nativeBroker/NativeRequest.d.ts +45 -45
- package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
- package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
- package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
- package/dist/cache/AccountManager.d.ts +48 -48
- package/dist/cache/AccountManager.mjs +126 -126
- package/dist/cache/AsyncMemoryStorage.d.ts +50 -50
- package/dist/cache/AsyncMemoryStorage.mjs +131 -131
- package/dist/cache/BrowserCacheManager.d.ts +410 -385
- package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
- package/dist/cache/BrowserCacheManager.mjs +1364 -1294
- package/dist/cache/BrowserCacheManager.mjs.map +1 -1
- package/dist/cache/BrowserStorage.d.ts +11 -11
- package/dist/cache/BrowserStorage.mjs +32 -32
- package/dist/cache/DatabaseStorage.d.ts +56 -56
- package/dist/cache/DatabaseStorage.mjs +200 -200
- package/dist/cache/IAsyncStorage.d.ts +27 -27
- package/dist/cache/ITokenCache.d.ts +11 -11
- package/dist/cache/IWindowStorage.d.ts +27 -27
- package/dist/cache/MemoryStorage.d.ts +11 -11
- package/dist/cache/MemoryStorage.mjs +31 -31
- package/dist/cache/TokenCache.d.ts +77 -77
- package/dist/cache/TokenCache.mjs +195 -195
- package/dist/config/Configuration.d.ts +213 -208
- package/dist/config/Configuration.d.ts.map +1 -1
- package/dist/config/Configuration.mjs +128 -128
- package/dist/config/Configuration.mjs.map +1 -1
- package/dist/controllers/ControllerFactory.d.ts +5 -5
- package/dist/controllers/ControllerFactory.mjs +25 -25
- package/dist/controllers/IController.d.ts +60 -60
- package/dist/controllers/NestedAppAuthController.d.ts +202 -202
- package/dist/controllers/NestedAppAuthController.mjs +473 -473
- package/dist/controllers/StandardController.d.ts +405 -405
- package/dist/controllers/StandardController.d.ts.map +1 -1
- package/dist/controllers/StandardController.mjs +1334 -1316
- package/dist/controllers/StandardController.mjs.map +1 -1
- package/dist/controllers/UnknownOperatingContextController.d.ts +86 -86
- package/dist/controllers/UnknownOperatingContextController.mjs +256 -256
- package/dist/crypto/BrowserCrypto.d.ts +52 -52
- package/dist/crypto/BrowserCrypto.mjs +151 -151
- package/dist/crypto/CryptoOps.d.ts +74 -74
- package/dist/crypto/CryptoOps.mjs +176 -176
- package/dist/crypto/PkceGenerator.d.ts +8 -8
- package/dist/crypto/PkceGenerator.mjs +54 -54
- package/dist/crypto/SignedHttpRequest.d.ts +30 -30
- package/dist/crypto/SignedHttpRequest.mjs +39 -39
- package/dist/encode/Base64Decode.d.ts +9 -9
- package/dist/encode/Base64Decode.mjs +36 -36
- package/dist/encode/Base64Encode.d.ts +19 -19
- package/dist/encode/Base64Encode.mjs +43 -43
- package/dist/error/BrowserAuthError.d.ts +256 -255
- package/dist/error/BrowserAuthError.d.ts.map +1 -1
- package/dist/error/BrowserAuthError.mjs +265 -264
- package/dist/error/BrowserAuthError.mjs.map +1 -1
- package/dist/error/BrowserAuthErrorCodes.d.ts +47 -46
- package/dist/error/BrowserAuthErrorCodes.d.ts.map +1 -1
- package/dist/error/BrowserAuthErrorCodes.mjs +53 -52
- package/dist/error/BrowserAuthErrorCodes.mjs.map +1 -1
- package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
- package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
- package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
- package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
- package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
- package/dist/error/NativeAuthError.d.ts +29 -29
- package/dist/error/NativeAuthError.mjs +60 -60
- package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
- package/dist/error/NativeAuthErrorCodes.mjs +6 -6
- package/dist/error/NestedAppAuthError.d.ts +14 -14
- package/dist/error/NestedAppAuthError.mjs +23 -23
- package/dist/event/EventHandler.d.ts +41 -41
- package/dist/event/EventHandler.mjs +125 -125
- package/dist/event/EventMessage.d.ts +25 -25
- package/dist/event/EventMessage.mjs +68 -68
- package/dist/event/EventType.d.ts +29 -29
- package/dist/event/EventType.mjs +32 -32
- package/dist/index.d.ts +40 -40
- package/dist/index.mjs +1 -1
- package/dist/interaction_client/BaseInteractionClient.d.ts +50 -50
- package/dist/interaction_client/BaseInteractionClient.mjs +106 -106
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
- package/dist/interaction_client/NativeInteractionClient.d.ts +151 -143
- package/dist/interaction_client/NativeInteractionClient.d.ts.map +1 -1
- package/dist/interaction_client/NativeInteractionClient.mjs +624 -584
- package/dist/interaction_client/NativeInteractionClient.mjs.map +1 -1
- package/dist/interaction_client/PopupClient.d.ts +118 -105
- package/dist/interaction_client/PopupClient.d.ts.map +1 -1
- package/dist/interaction_client/PopupClient.mjs +460 -434
- package/dist/interaction_client/PopupClient.mjs.map +1 -1
- package/dist/interaction_client/RedirectClient.d.ts +50 -50
- package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
- package/dist/interaction_client/RedirectClient.mjs +349 -317
- package/dist/interaction_client/RedirectClient.mjs.map +1 -1
- package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
- package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
- package/dist/interaction_client/SilentCacheClient.d.ts +16 -16
- package/dist/interaction_client/SilentCacheClient.mjs +42 -42
- package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
- package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
- package/dist/interaction_client/SilentIframeClient.mjs +111 -101
- package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
- package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
- package/dist/interaction_client/SilentRefreshClient.mjs +47 -47
- package/dist/interaction_client/StandardInteractionClient.d.ts +48 -48
- package/dist/interaction_client/StandardInteractionClient.mjs +199 -199
- package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
- package/dist/interaction_handler/InteractionHandler.mjs +93 -93
- package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
- package/dist/interaction_handler/RedirectHandler.d.ts.map +1 -1
- package/dist/interaction_handler/RedirectHandler.mjs +135 -134
- package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
- package/dist/interaction_handler/SilentHandler.d.ts +13 -13
- package/dist/interaction_handler/SilentHandler.mjs +134 -134
- package/dist/naa/AccountInfo.d.ts +11 -11
- package/dist/naa/AuthBridge.d.ts +8 -8
- package/dist/naa/AuthResult.d.ts +6 -6
- package/dist/naa/BridgeAccountContext.d.ts +12 -12
- package/dist/naa/BridgeCapabilities.d.ts +3 -3
- package/dist/naa/BridgeError.d.ts +9 -9
- package/dist/naa/BridgeError.mjs +7 -7
- package/dist/naa/BridgeProxy.d.ts +67 -67
- package/dist/naa/BridgeProxy.d.ts.map +1 -1
- package/dist/naa/BridgeProxy.mjs +153 -148
- package/dist/naa/BridgeProxy.mjs.map +1 -1
- package/dist/naa/BridgeRequest.d.ts +7 -7
- package/dist/naa/BridgeRequestEnvelope.d.ts +12 -12
- package/dist/naa/BridgeResponseEnvelope.d.ts +13 -13
- package/dist/naa/BridgeStatusCode.d.ts +11 -11
- package/dist/naa/BridgeStatusCode.mjs +14 -14
- package/dist/naa/IBridgeProxy.d.ts +10 -10
- package/dist/naa/InitContext.d.ts +8 -8
- package/dist/naa/TokenRequest.d.ts +18 -18
- package/dist/naa/TokenResponse.d.ts +13 -13
- package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +35 -35
- package/dist/naa/mapping/NestedAppAuthAdapter.mjs +179 -179
- package/dist/navigation/INavigationClient.d.ts +16 -16
- package/dist/navigation/NavigationClient.d.ts +22 -22
- package/dist/navigation/NavigationClient.mjs +40 -40
- package/dist/navigation/NavigationOptions.d.ts +12 -12
- package/dist/network/FetchClient.d.ts +26 -26
- package/dist/network/FetchClient.mjs +99 -99
- package/dist/operatingcontext/BaseOperatingContext.d.ts +41 -41
- package/dist/operatingcontext/BaseOperatingContext.mjs +94 -94
- package/dist/operatingcontext/NestedAppOperatingContext.d.ts +34 -34
- package/dist/operatingcontext/NestedAppOperatingContext.mjs +71 -71
- package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
- package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
- package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
- package/dist/packageMetadata.d.ts +2 -2
- package/dist/packageMetadata.mjs +4 -4
- package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
- package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
- package/dist/request/ClearCacheRequest.d.ts +10 -10
- package/dist/request/EndSessionPopupRequest.d.ts +18 -18
- package/dist/request/EndSessionRequest.d.ts +15 -15
- package/dist/request/InitializeApplicationRequest.d.ts +8 -8
- package/dist/request/PopupRequest.d.ts +34 -34
- package/dist/request/PopupWindowAttributes.d.ts +15 -15
- package/dist/request/RedirectRequest.d.ts +40 -35
- package/dist/request/RedirectRequest.d.ts.map +1 -1
- package/dist/request/RequestHelpers.d.ts +13 -13
- package/dist/request/RequestHelpers.mjs +53 -53
- package/dist/request/SilentRequest.d.ts +33 -33
- package/dist/request/SsoSilentRequest.d.ts +29 -29
- package/dist/response/AuthenticationResult.d.ts +4 -4
- package/dist/response/ResponseHandler.d.ts +7 -7
- package/dist/response/ResponseHandler.mjs +36 -36
- package/dist/telemetry/BrowserPerformanceClient.d.ts +38 -34
- package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
- package/dist/telemetry/BrowserPerformanceClient.mjs +163 -163
- package/dist/telemetry/BrowserPerformanceClient.mjs.map +1 -1
- package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
- package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
- package/dist/utils/BrowserConstants.d.ts +182 -180
- package/dist/utils/BrowserConstants.d.ts.map +1 -1
- package/dist/utils/BrowserConstants.mjs +214 -212
- package/dist/utils/BrowserConstants.mjs.map +1 -1
- package/dist/utils/BrowserProtocolUtils.d.ts +11 -11
- package/dist/utils/BrowserProtocolUtils.mjs +21 -21
- package/dist/utils/BrowserUtils.d.ts +75 -75
- package/dist/utils/BrowserUtils.mjs +157 -157
- package/lib/msal-browser.cjs +19028 -18759
- package/lib/msal-browser.cjs.map +1 -1
- package/lib/msal-browser.js +19028 -18759
- package/lib/msal-browser.js.map +1 -1
- package/lib/msal-browser.min.js +65 -65
- package/package.json +2 -2
- package/src/cache/BrowserCacheManager.ts +95 -0
- package/src/config/Configuration.ts +9 -1
- package/src/controllers/StandardController.ts +30 -12
- package/src/error/BrowserAuthError.ts +2 -0
- package/src/error/BrowserAuthErrorCodes.ts +1 -0
- package/src/interaction_client/NativeInteractionClient.ts +105 -54
- package/src/interaction_client/PopupClient.ts +202 -117
- package/src/interaction_client/RedirectClient.ts +62 -2
- package/src/interaction_client/SilentIframeClient.ts +41 -3
- package/src/interaction_handler/RedirectHandler.ts +1 -0
- package/src/naa/BridgeProxy.ts +7 -2
- package/src/packageMetadata.ts +1 -1
- package/src/request/RedirectRequest.ts +5 -0
- package/src/telemetry/BrowserPerformanceClient.ts +1 -1
- package/src/utils/BrowserConstants.ts +2 -0
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"type": "git",
|
|
11
11
|
"url": "https://github.com/AzureAD/microsoft-authentication-library-for-js.git"
|
|
12
12
|
},
|
|
13
|
-
"version": "3.
|
|
13
|
+
"version": "3.21.0",
|
|
14
14
|
"description": "Microsoft Authentication Library for js",
|
|
15
15
|
"keywords": [
|
|
16
16
|
"implicit",
|
|
@@ -104,6 +104,6 @@
|
|
|
104
104
|
"typescript": "^4.9.5"
|
|
105
105
|
},
|
|
106
106
|
"dependencies": {
|
|
107
|
-
"@azure/msal-common": "14.
|
|
107
|
+
"@azure/msal-common": "14.14.1"
|
|
108
108
|
}
|
|
109
109
|
}
|
|
@@ -1552,6 +1552,9 @@ export class BrowserCacheManager extends CacheManager {
|
|
|
1552
1552
|
this.removeTemporaryItem(
|
|
1553
1553
|
this.generateCacheKey(TemporaryCacheKeys.NATIVE_REQUEST)
|
|
1554
1554
|
);
|
|
1555
|
+
this.removeTemporaryItem(
|
|
1556
|
+
this.generateCacheKey(TemporaryCacheKeys.REDIRECT_REQUEST)
|
|
1557
|
+
);
|
|
1555
1558
|
this.setInteractionInProgress(false);
|
|
1556
1559
|
}
|
|
1557
1560
|
|
|
@@ -1613,6 +1616,98 @@ export class BrowserCacheManager extends CacheManager {
|
|
|
1613
1616
|
this.setInteractionInProgress(false);
|
|
1614
1617
|
}
|
|
1615
1618
|
|
|
1619
|
+
/**
|
|
1620
|
+
* Create request retry key to cache retry status
|
|
1621
|
+
*/
|
|
1622
|
+
generateRequestRetriedKey(): string {
|
|
1623
|
+
return `${Constants.CACHE_PREFIX}.${TemporaryCacheKeys.REQUEST_RETRY}.${this.clientId}`;
|
|
1624
|
+
}
|
|
1625
|
+
|
|
1626
|
+
/**
|
|
1627
|
+
* Gets the request retry value from the cache
|
|
1628
|
+
*/
|
|
1629
|
+
getRequestRetried(): number | null {
|
|
1630
|
+
const requestRetriedKey = this.generateRequestRetriedKey();
|
|
1631
|
+
const cachedRetryNumber = this.getTemporaryCache(requestRetriedKey);
|
|
1632
|
+
if (!cachedRetryNumber) {
|
|
1633
|
+
return null;
|
|
1634
|
+
}
|
|
1635
|
+
return parseInt(cachedRetryNumber);
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
/**
|
|
1639
|
+
* Sets the request retry value to "retried" in the cache
|
|
1640
|
+
*/
|
|
1641
|
+
setRequestRetried(): void {
|
|
1642
|
+
this.logger.trace("BrowserCacheManager.setRequestRetried called");
|
|
1643
|
+
const requestRetriedKey = this.generateRequestRetriedKey();
|
|
1644
|
+
this.setTemporaryCache(requestRetriedKey, "1", false);
|
|
1645
|
+
}
|
|
1646
|
+
|
|
1647
|
+
/**
|
|
1648
|
+
* Removes all request retry values in the cache
|
|
1649
|
+
*/
|
|
1650
|
+
removeRequestRetried(): void {
|
|
1651
|
+
const requestRetriedKey = this.generateRequestRetriedKey();
|
|
1652
|
+
this.removeTemporaryItem(requestRetriedKey);
|
|
1653
|
+
}
|
|
1654
|
+
|
|
1655
|
+
/**
|
|
1656
|
+
* Caches the redirectRequest in the cache
|
|
1657
|
+
* @param redirectRequest
|
|
1658
|
+
*/
|
|
1659
|
+
cacheRedirectRequest(redirectRequest: RedirectRequest): void {
|
|
1660
|
+
this.logger.trace("BrowserCacheManager.cacheRedirectRequest called");
|
|
1661
|
+
const { ...restParams } = redirectRequest;
|
|
1662
|
+
delete restParams.onRedirectNavigate;
|
|
1663
|
+
const encodedValue = JSON.stringify(restParams);
|
|
1664
|
+
|
|
1665
|
+
this.setTemporaryCache(
|
|
1666
|
+
TemporaryCacheKeys.REDIRECT_REQUEST,
|
|
1667
|
+
encodedValue,
|
|
1668
|
+
true
|
|
1669
|
+
);
|
|
1670
|
+
}
|
|
1671
|
+
|
|
1672
|
+
/**
|
|
1673
|
+
* Gets redirect request from the cache. Logs an error and returns undefined if nothing is found.
|
|
1674
|
+
*/
|
|
1675
|
+
getCachedRedirectRequest(): RedirectRequest | undefined {
|
|
1676
|
+
this.logger.trace(
|
|
1677
|
+
"BrowserCacheManager.getCachedRedirectRequest called"
|
|
1678
|
+
);
|
|
1679
|
+
const cachedRedirectRequest = this.getTemporaryCache(
|
|
1680
|
+
TemporaryCacheKeys.REDIRECT_REQUEST,
|
|
1681
|
+
true
|
|
1682
|
+
);
|
|
1683
|
+
if (!cachedRedirectRequest) {
|
|
1684
|
+
this.logger.error(`No cached redirect request found.`);
|
|
1685
|
+
} else {
|
|
1686
|
+
this.removeTemporaryItem(
|
|
1687
|
+
this.generateCacheKey(TemporaryCacheKeys.REDIRECT_REQUEST)
|
|
1688
|
+
);
|
|
1689
|
+
let parsedRequest: RedirectRequest;
|
|
1690
|
+
try {
|
|
1691
|
+
parsedRequest = JSON.parse(
|
|
1692
|
+
cachedRedirectRequest
|
|
1693
|
+
) as RedirectRequest;
|
|
1694
|
+
} catch (e) {
|
|
1695
|
+
this.logger.errorPii(
|
|
1696
|
+
`Attempted to parse: ${cachedRedirectRequest}`
|
|
1697
|
+
);
|
|
1698
|
+
this.logger.error(
|
|
1699
|
+
`Parsing cached redirect request threw with error: ${e}`
|
|
1700
|
+
);
|
|
1701
|
+
return;
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
if (parsedRequest) {
|
|
1705
|
+
return parsedRequest;
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
return;
|
|
1709
|
+
}
|
|
1710
|
+
|
|
1616
1711
|
cacheCodeRequest(authCodeRequest: CommonAuthorizationCodeRequest): void {
|
|
1617
1712
|
this.logger.trace("BrowserCacheManager.cacheCodeRequest called");
|
|
1618
1713
|
|
|
@@ -99,11 +99,19 @@ export type BrowserAuthOptions = {
|
|
|
99
99
|
* @deprecated This flag is deprecated and will be removed in the next major version. createNestablePublicClientApplication should be used instead.
|
|
100
100
|
*/
|
|
101
101
|
supportsNestedAppAuth?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Callback that will be passed the url that MSAL will navigate to in redirect flows. Returning false in the callback will stop navigation.
|
|
104
|
+
*/
|
|
105
|
+
onRedirectNavigate?: (url: string) => boolean | void;
|
|
102
106
|
};
|
|
103
107
|
|
|
104
108
|
/** @internal */
|
|
105
|
-
export type InternalAuthOptions =
|
|
109
|
+
export type InternalAuthOptions = Omit<
|
|
110
|
+
Required<BrowserAuthOptions>,
|
|
111
|
+
"onRedirectNavigate"
|
|
112
|
+
> & {
|
|
106
113
|
OIDCOptions: Required<OIDCOptions>;
|
|
114
|
+
onRedirectNavigate?: (url: string) => boolean | void;
|
|
107
115
|
};
|
|
108
116
|
|
|
109
117
|
/**
|
|
@@ -584,19 +584,37 @@ export class StandardController implements IController {
|
|
|
584
584
|
scenarioId: request.scenarioId,
|
|
585
585
|
});
|
|
586
586
|
|
|
587
|
+
// Override on request only if set, as onRedirectNavigate field is deprecated
|
|
587
588
|
const onRedirectNavigateCb = request.onRedirectNavigate;
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
589
|
+
if (onRedirectNavigateCb) {
|
|
590
|
+
request.onRedirectNavigate = (url: string) => {
|
|
591
|
+
const navigate =
|
|
592
|
+
typeof onRedirectNavigateCb === "function"
|
|
593
|
+
? onRedirectNavigateCb(url)
|
|
594
|
+
: undefined;
|
|
595
|
+
if (navigate !== false) {
|
|
596
|
+
atrMeasurement.end({ success: true });
|
|
597
|
+
} else {
|
|
598
|
+
atrMeasurement.discard();
|
|
599
|
+
}
|
|
600
|
+
return navigate;
|
|
601
|
+
};
|
|
602
|
+
} else {
|
|
603
|
+
const configOnRedirectNavigateCb =
|
|
604
|
+
this.config.auth.onRedirectNavigate;
|
|
605
|
+
this.config.auth.onRedirectNavigate = (url: string) => {
|
|
606
|
+
const navigate =
|
|
607
|
+
typeof configOnRedirectNavigateCb === "function"
|
|
608
|
+
? configOnRedirectNavigateCb(url)
|
|
609
|
+
: undefined;
|
|
610
|
+
if (navigate !== false) {
|
|
611
|
+
atrMeasurement.end({ success: true });
|
|
612
|
+
} else {
|
|
613
|
+
atrMeasurement.discard();
|
|
614
|
+
}
|
|
615
|
+
return navigate;
|
|
616
|
+
};
|
|
617
|
+
}
|
|
600
618
|
|
|
601
619
|
// If logged in, emit acquire token events
|
|
602
620
|
const isLoggedIn = this.getAllAccounts().length > 0;
|
|
@@ -92,6 +92,8 @@ export const BrowserAuthErrorMessages = {
|
|
|
92
92
|
"Invalid base64 encoded string.",
|
|
93
93
|
[BrowserAuthErrorCodes.invalidPopTokenRequest]:
|
|
94
94
|
"Invalid PoP token request. The request should not have both a popKid value and signPopToken set to true.",
|
|
95
|
+
[BrowserAuthErrorCodes.failedToRetry]:
|
|
96
|
+
"Unable to retry failed auth code redemption due to usage of the onRedirectNavigate request parameter. Please set onRedirectNavigate on the PublicClientApplication configuration instead or call loginRedirect again.",
|
|
95
97
|
};
|
|
96
98
|
|
|
97
99
|
/**
|
|
@@ -56,3 +56,4 @@ export const uninitializedPublicClientApplication =
|
|
|
56
56
|
export const nativePromptNotSupported = "native_prompt_not_supported";
|
|
57
57
|
export const invalidBase64String = "invalid_base64_string";
|
|
58
58
|
export const invalidPopTokenRequest = "invalid_pop_token_request";
|
|
59
|
+
export const failedToRetry = "failed_to_retry";
|
|
@@ -36,6 +36,7 @@ import {
|
|
|
36
36
|
CacheHelpers,
|
|
37
37
|
buildAccountToCache,
|
|
38
38
|
InProgressPerformanceEvent,
|
|
39
|
+
ServerTelemetryManager,
|
|
39
40
|
} from "@azure/msal-common";
|
|
40
41
|
import { BaseInteractionClient } from "./BaseInteractionClient";
|
|
41
42
|
import { BrowserConfiguration } from "../config/Configuration";
|
|
@@ -50,6 +51,7 @@ import {
|
|
|
50
51
|
ApiId,
|
|
51
52
|
TemporaryCacheKeys,
|
|
52
53
|
NativeConstants,
|
|
54
|
+
BrowserConstants,
|
|
53
55
|
} from "../utils/BrowserConstants";
|
|
54
56
|
import {
|
|
55
57
|
NativeExtensionRequestBody,
|
|
@@ -72,6 +74,7 @@ import {
|
|
|
72
74
|
import { SilentCacheClient } from "./SilentCacheClient";
|
|
73
75
|
import { AuthenticationResult } from "../response/AuthenticationResult";
|
|
74
76
|
import { base64Decode } from "../encode/Base64Decode";
|
|
77
|
+
import { version } from "../packageMetadata";
|
|
75
78
|
|
|
76
79
|
const BrokerServerParamKeys = {
|
|
77
80
|
BROKER_CLIENT_ID: "brk_client_id",
|
|
@@ -84,6 +87,8 @@ export class NativeInteractionClient extends BaseInteractionClient {
|
|
|
84
87
|
protected nativeMessageHandler: NativeMessageHandler;
|
|
85
88
|
protected silentCacheClient: SilentCacheClient;
|
|
86
89
|
protected nativeStorageManager: BrowserCacheManager;
|
|
90
|
+
protected skus: string;
|
|
91
|
+
protected serverTelemetryManager: ServerTelemetryManager;
|
|
87
92
|
|
|
88
93
|
constructor(
|
|
89
94
|
config: BrowserConfiguration,
|
|
@@ -125,6 +130,35 @@ export class NativeInteractionClient extends BaseInteractionClient {
|
|
|
125
130
|
provider,
|
|
126
131
|
correlationId
|
|
127
132
|
);
|
|
133
|
+
this.serverTelemetryManager = this.initializeServerTelemetryManager(
|
|
134
|
+
this.apiId
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
const extensionName =
|
|
138
|
+
this.nativeMessageHandler.getExtensionId() ===
|
|
139
|
+
NativeConstants.PREFERRED_EXTENSION_ID
|
|
140
|
+
? "chrome"
|
|
141
|
+
: this.nativeMessageHandler.getExtensionId()?.length
|
|
142
|
+
? "unknown"
|
|
143
|
+
: undefined;
|
|
144
|
+
this.skus = ServerTelemetryManager.makeExtraSkuString({
|
|
145
|
+
libraryName: BrowserConstants.MSAL_SKU,
|
|
146
|
+
libraryVersion: version,
|
|
147
|
+
extensionName: extensionName,
|
|
148
|
+
extensionVersion: this.nativeMessageHandler.getExtensionVersion(),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Adds SKUs to request extra query parameters
|
|
154
|
+
* @param request {NativeTokenRequest}
|
|
155
|
+
* @private
|
|
156
|
+
*/
|
|
157
|
+
private addRequestSKUs(request: NativeTokenRequest) {
|
|
158
|
+
request.extraParameters = {
|
|
159
|
+
...request.extraParameters,
|
|
160
|
+
[AADServerParamKeys.X_CLIENT_EXTRA_SKU]: this.skus,
|
|
161
|
+
};
|
|
128
162
|
}
|
|
129
163
|
|
|
130
164
|
/**
|
|
@@ -147,64 +181,73 @@ export class NativeInteractionClient extends BaseInteractionClient {
|
|
|
147
181
|
);
|
|
148
182
|
const reqTimestamp = TimeUtils.nowSeconds();
|
|
149
183
|
|
|
150
|
-
// initialize native request
|
|
151
|
-
const nativeRequest = await this.initializeNativeRequest(request);
|
|
152
|
-
|
|
153
|
-
// check if the tokens can be retrieved from internal cache
|
|
154
184
|
try {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
nativeRequest
|
|
158
|
-
);
|
|
159
|
-
nativeATMeasurement.end({
|
|
160
|
-
success: true,
|
|
161
|
-
isNativeBroker: false, // Should be true only when the result is coming directly from the broker
|
|
162
|
-
fromCache: true,
|
|
163
|
-
});
|
|
164
|
-
return result;
|
|
165
|
-
} catch (e) {
|
|
166
|
-
// continue with a native call for any and all errors
|
|
167
|
-
this.logger.info(
|
|
168
|
-
"MSAL internal Cache does not contain tokens, proceed to make a native call"
|
|
169
|
-
);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const { ...nativeTokenRequest } = nativeRequest;
|
|
173
|
-
|
|
174
|
-
// fall back to native calls
|
|
175
|
-
const messageBody: NativeExtensionRequestBody = {
|
|
176
|
-
method: NativeExtensionMethod.GetToken,
|
|
177
|
-
request: nativeTokenRequest,
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
const response: object = await this.nativeMessageHandler.sendMessage(
|
|
181
|
-
messageBody
|
|
182
|
-
);
|
|
183
|
-
const validatedResponse: NativeResponse =
|
|
184
|
-
this.validateNativeResponse(response);
|
|
185
|
+
// initialize native request
|
|
186
|
+
const nativeRequest = await this.initializeNativeRequest(request);
|
|
185
187
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
188
|
+
// check if the tokens can be retrieved from internal cache
|
|
189
|
+
try {
|
|
190
|
+
const result = await this.acquireTokensFromCache(
|
|
191
|
+
this.accountId,
|
|
192
|
+
nativeRequest
|
|
193
|
+
);
|
|
192
194
|
nativeATMeasurement.end({
|
|
193
195
|
success: true,
|
|
194
|
-
isNativeBroker: true
|
|
195
|
-
|
|
196
|
+
isNativeBroker: false, // Should be true only when the result is coming directly from the broker
|
|
197
|
+
fromCache: true,
|
|
196
198
|
});
|
|
197
199
|
return result;
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
200
|
+
} catch (e) {
|
|
201
|
+
// continue with a native call for any and all errors
|
|
202
|
+
this.logger.info(
|
|
203
|
+
"MSAL internal Cache does not contain tokens, proceed to make a native call"
|
|
204
|
+
);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const { ...nativeTokenRequest } = nativeRequest;
|
|
208
|
+
|
|
209
|
+
// fall back to native calls
|
|
210
|
+
const messageBody: NativeExtensionRequestBody = {
|
|
211
|
+
method: NativeExtensionMethod.GetToken,
|
|
212
|
+
request: nativeTokenRequest,
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const response: object =
|
|
216
|
+
await this.nativeMessageHandler.sendMessage(messageBody);
|
|
217
|
+
const validatedResponse: NativeResponse =
|
|
218
|
+
this.validateNativeResponse(response);
|
|
219
|
+
|
|
220
|
+
return await this.handleNativeResponse(
|
|
221
|
+
validatedResponse,
|
|
222
|
+
nativeRequest,
|
|
223
|
+
reqTimestamp
|
|
224
|
+
)
|
|
225
|
+
.then((result: AuthenticationResult) => {
|
|
226
|
+
nativeATMeasurement.end({
|
|
227
|
+
success: true,
|
|
228
|
+
isNativeBroker: true,
|
|
229
|
+
requestId: result.requestId,
|
|
230
|
+
});
|
|
231
|
+
this.serverTelemetryManager.clearNativeBrokerErrorCode();
|
|
232
|
+
return result;
|
|
233
|
+
})
|
|
234
|
+
.catch((error: AuthError) => {
|
|
235
|
+
nativeATMeasurement.end({
|
|
236
|
+
success: false,
|
|
237
|
+
errorCode: error.errorCode,
|
|
238
|
+
subErrorCode: error.subError,
|
|
239
|
+
isNativeBroker: true,
|
|
240
|
+
});
|
|
241
|
+
throw error;
|
|
205
242
|
});
|
|
206
|
-
|
|
207
|
-
|
|
243
|
+
} catch (e) {
|
|
244
|
+
if (e instanceof NativeAuthError) {
|
|
245
|
+
this.serverTelemetryManager.setNativeBrokerErrorCode(
|
|
246
|
+
e.errorCode
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
throw e;
|
|
250
|
+
}
|
|
208
251
|
}
|
|
209
252
|
|
|
210
253
|
/**
|
|
@@ -307,8 +350,13 @@ export class NativeInteractionClient extends BaseInteractionClient {
|
|
|
307
350
|
this.validateNativeResponse(response);
|
|
308
351
|
} catch (e) {
|
|
309
352
|
// Only throw fatal errors here to allow application to fallback to regular redirect. Otherwise proceed and the error will be thrown in handleRedirectPromise
|
|
310
|
-
if (e instanceof NativeAuthError
|
|
311
|
-
|
|
353
|
+
if (e instanceof NativeAuthError) {
|
|
354
|
+
this.serverTelemetryManager.setNativeBrokerErrorCode(
|
|
355
|
+
e.errorCode
|
|
356
|
+
);
|
|
357
|
+
if (isFatalNativeAuthError(e)) {
|
|
358
|
+
throw e;
|
|
359
|
+
}
|
|
312
360
|
}
|
|
313
361
|
}
|
|
314
362
|
this.browserStorage.setTemporaryCache(
|
|
@@ -399,7 +447,9 @@ export class NativeInteractionClient extends BaseInteractionClient {
|
|
|
399
447
|
reqTimestamp
|
|
400
448
|
);
|
|
401
449
|
this.browserStorage.setInteractionInProgress(false);
|
|
402
|
-
|
|
450
|
+
const res = await result;
|
|
451
|
+
this.serverTelemetryManager.clearNativeBrokerErrorCode();
|
|
452
|
+
return res;
|
|
403
453
|
} catch (e) {
|
|
404
454
|
this.browserStorage.setInteractionInProgress(false);
|
|
405
455
|
throw e;
|
|
@@ -980,6 +1030,7 @@ export class NativeInteractionClient extends BaseInteractionClient {
|
|
|
980
1030
|
// SPAs require whole string to be passed to broker
|
|
981
1031
|
validatedRequest.reqCnf = reqCnfData;
|
|
982
1032
|
}
|
|
1033
|
+
this.addRequestSKUs(validatedRequest);
|
|
983
1034
|
|
|
984
1035
|
return validatedRequest;
|
|
985
1036
|
}
|