@azure/msal-browser 4.25.1 → 4.26.1
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.mjs +1 -1
- package/dist/app/PublicClientApplication.mjs +1 -1
- package/dist/app/PublicClientNext.mjs +1 -1
- package/dist/broker/nativeBroker/NativeStatusCodes.mjs +1 -1
- package/dist/broker/nativeBroker/PlatformAuthDOMHandler.mjs +1 -1
- package/dist/broker/nativeBroker/PlatformAuthExtensionHandler.mjs +1 -1
- package/dist/broker/nativeBroker/PlatformAuthProvider.mjs +1 -1
- package/dist/cache/AccountManager.mjs +1 -1
- package/dist/cache/AsyncMemoryStorage.mjs +1 -1
- package/dist/cache/BrowserCacheManager.d.ts +64 -7
- package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
- package/dist/cache/BrowserCacheManager.mjs +400 -141
- package/dist/cache/BrowserCacheManager.mjs.map +1 -1
- package/dist/cache/CacheHelpers.mjs +1 -1
- package/dist/cache/CacheKeys.d.ts +3 -3
- package/dist/cache/CacheKeys.mjs +4 -4
- package/dist/cache/CookieStorage.mjs +1 -1
- package/dist/cache/DatabaseStorage.mjs +1 -1
- package/dist/cache/EncryptedData.mjs +1 -1
- package/dist/cache/IWindowStorage.d.ts +1 -1
- package/dist/cache/IWindowStorage.d.ts.map +1 -1
- package/dist/cache/LocalStorage.d.ts +1 -1
- package/dist/cache/LocalStorage.d.ts.map +1 -1
- package/dist/cache/LocalStorage.mjs +21 -12
- package/dist/cache/LocalStorage.mjs.map +1 -1
- package/dist/cache/MemoryStorage.mjs +1 -1
- package/dist/cache/SessionStorage.mjs +1 -1
- package/dist/cache/TokenCache.d.ts.map +1 -1
- package/dist/cache/TokenCache.mjs +14 -13
- package/dist/cache/TokenCache.mjs.map +1 -1
- package/dist/config/Configuration.mjs +1 -1
- package/dist/controllers/ControllerFactory.mjs +1 -1
- package/dist/controllers/NestedAppAuthController.d.ts.map +1 -1
- package/dist/controllers/NestedAppAuthController.mjs +3 -3
- package/dist/controllers/NestedAppAuthController.mjs.map +1 -1
- package/dist/controllers/StandardController.d.ts.map +1 -1
- package/dist/controllers/StandardController.mjs +3 -3
- package/dist/controllers/StandardController.mjs.map +1 -1
- package/dist/controllers/UnknownOperatingContextController.mjs +1 -1
- package/dist/crypto/BrowserCrypto.mjs +1 -1
- package/dist/crypto/CryptoOps.mjs +1 -1
- package/dist/crypto/PkceGenerator.mjs +1 -1
- package/dist/crypto/SignedHttpRequest.mjs +1 -1
- package/dist/custom-auth-path/app/PublicClientApplication.mjs +1 -1
- package/dist/custom-auth-path/broker/nativeBroker/NativeStatusCodes.mjs +1 -1
- package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthDOMHandler.mjs +1 -1
- package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthExtensionHandler.mjs +1 -1
- package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthProvider.mjs +1 -1
- package/dist/custom-auth-path/cache/AccountManager.mjs +1 -1
- package/dist/custom-auth-path/cache/AsyncMemoryStorage.mjs +1 -1
- package/dist/custom-auth-path/cache/BrowserCacheManager.d.ts +64 -7
- package/dist/custom-auth-path/cache/BrowserCacheManager.d.ts.map +1 -1
- package/dist/custom-auth-path/cache/BrowserCacheManager.mjs +400 -141
- package/dist/custom-auth-path/cache/BrowserCacheManager.mjs.map +1 -1
- package/dist/custom-auth-path/cache/CacheHelpers.mjs +1 -1
- package/dist/custom-auth-path/cache/CacheKeys.d.ts +3 -3
- package/dist/custom-auth-path/cache/CacheKeys.mjs +4 -4
- package/dist/custom-auth-path/cache/CookieStorage.mjs +1 -1
- package/dist/custom-auth-path/cache/DatabaseStorage.mjs +1 -1
- package/dist/custom-auth-path/cache/EncryptedData.mjs +1 -1
- package/dist/custom-auth-path/cache/IWindowStorage.d.ts +1 -1
- package/dist/custom-auth-path/cache/IWindowStorage.d.ts.map +1 -1
- package/dist/custom-auth-path/cache/LocalStorage.d.ts +1 -1
- package/dist/custom-auth-path/cache/LocalStorage.d.ts.map +1 -1
- package/dist/custom-auth-path/cache/LocalStorage.mjs +21 -12
- package/dist/custom-auth-path/cache/LocalStorage.mjs.map +1 -1
- package/dist/custom-auth-path/cache/MemoryStorage.mjs +1 -1
- package/dist/custom-auth-path/cache/SessionStorage.mjs +1 -1
- package/dist/custom-auth-path/cache/TokenCache.d.ts.map +1 -1
- package/dist/custom-auth-path/cache/TokenCache.mjs +14 -13
- package/dist/custom-auth-path/cache/TokenCache.mjs.map +1 -1
- package/dist/custom-auth-path/config/Configuration.mjs +1 -1
- package/dist/custom-auth-path/controllers/ControllerFactory.mjs +1 -1
- package/dist/custom-auth-path/controllers/NestedAppAuthController.d.ts.map +1 -1
- package/dist/custom-auth-path/controllers/StandardController.d.ts.map +1 -1
- package/dist/custom-auth-path/controllers/StandardController.mjs +3 -3
- package/dist/custom-auth-path/controllers/StandardController.mjs.map +1 -1
- package/dist/custom-auth-path/crypto/BrowserCrypto.mjs +1 -1
- package/dist/custom-auth-path/crypto/CryptoOps.mjs +1 -1
- package/dist/custom-auth-path/crypto/PkceGenerator.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/CustomAuthConstants.d.ts +1 -1
- package/dist/custom-auth-path/custom_auth/CustomAuthConstants.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/CustomAuthPublicClientApplication.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/controller/CustomAuthStandardController.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/CustomAuthAuthority.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowErrorBase.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowResultBase.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowStateTypes.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/error_type/AuthMethodRegistrationError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/result/AuthMethodRegistrationChallengeMethodResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/result/AuthMethodRegistrationSubmitChallengeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/state/AuthMethodRegistrationCompletedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/state/AuthMethodRegistrationFailedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/state/AuthMethodRegistrationState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/error_type/MfaError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/result/MfaRequestChallengeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/result/MfaSubmitChallengeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/state/MfaCompletedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/state/MfaFailedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/state/MfaState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/CustomAuthApiError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/CustomAuthError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/HttpError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/HttpErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/InvalidArgumentError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/InvalidConfigurationError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/InvalidConfigurationErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/MethodNotImplementedError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/MsalCustomAuthError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/NoCachedAccountFoundError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/ParsedUrlError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/ParsedUrlErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/UnexpectedError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/UnsupportedEnvironmentError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/UserAccountAttributeError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/error/UserAlreadySignedInError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/interaction_client/CustomAuthInteractionClientBase.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/interaction_client/CustomAuthInterationClientFactory.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/interaction_client/jit/JitClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/interaction_client/jit/result/JitActionResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/interaction_client/mfa/MfaClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/interaction_client/mfa/result/MfaActionResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/BaseApiClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/CustomAuthApiClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/CustomAuthApiEndpoint.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/RegisterApiClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/ResetPasswordApiClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/SignInApiClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/SignupApiClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/types/ApiErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/types/ApiSuberrors.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/http_client/FetchHttpClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/network_client/http_client/IHttpClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/telemetry/PublicApiId.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/utils/ArgumentValidator.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/core/utils/UrlUtils.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/CustomAuthAccountData.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/error_type/GetAccountError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/result/GetAccessTokenResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/result/GetAccountResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/result/SignOutResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/state/GetAccessTokenState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/state/GetAccountState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/auth_flow/state/SignOutState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/get_account/interaction_client/CustomAuthSilentCacheClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/index.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/operating_context/CustomAuthOperatingContext.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/error_type/ResetPasswordError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordResendCodeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordStartResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordSubmitCodeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordSubmitPasswordResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordCodeRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordCompletedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordFailedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordPasswordRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/reset_password/interaction_client/ResetPasswordClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/SignInScenario.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/error_type/SignInError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInResendCodeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInSubmitCodeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInSubmitPasswordResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInCodeRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInCompletedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInContinuationState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInFailedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInPasswordRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/interaction_client/SignInClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_in/interaction_client/result/SignInActionResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/error_type/SignUpError.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpResendCodeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpSubmitAttributesResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpSubmitCodeResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpSubmitPasswordResult.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpAttributesRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpCodeRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpCompletedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpFailedState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpPasswordRequiredState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpState.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/interaction_client/SignUpClient.mjs +1 -1
- package/dist/custom-auth-path/custom_auth/sign_up/interaction_client/result/SignUpActionResult.mjs +1 -1
- package/dist/custom-auth-path/encode/Base64Decode.mjs +1 -1
- package/dist/custom-auth-path/encode/Base64Encode.mjs +1 -1
- package/dist/custom-auth-path/error/BrowserAuthError.mjs +1 -1
- package/dist/custom-auth-path/error/BrowserAuthErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/error/BrowserConfigurationAuthError.mjs +1 -1
- package/dist/custom-auth-path/error/BrowserConfigurationAuthErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/error/NativeAuthError.mjs +1 -1
- package/dist/custom-auth-path/error/NativeAuthErrorCodes.mjs +1 -1
- package/dist/custom-auth-path/event/EventHandler.mjs +1 -1
- package/dist/custom-auth-path/event/EventType.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/BaseInteractionClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.d.ts +1 -1
- package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
- package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.mjs +7 -7
- package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.mjs.map +1 -1
- package/dist/custom-auth-path/interaction_client/PopupClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/RedirectClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/SilentAuthCodeClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/SilentCacheClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/SilentIframeClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/SilentRefreshClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_client/StandardInteractionClient.mjs +1 -1
- package/dist/custom-auth-path/interaction_handler/InteractionHandler.mjs +1 -1
- package/dist/custom-auth-path/interaction_handler/SilentHandler.mjs +2 -1
- package/dist/custom-auth-path/interaction_handler/SilentHandler.mjs.map +1 -1
- package/dist/custom-auth-path/navigation/NavigationClient.mjs +1 -1
- package/dist/custom-auth-path/network/FetchClient.mjs +1 -1
- package/dist/custom-auth-path/operatingcontext/BaseOperatingContext.mjs +1 -1
- package/dist/custom-auth-path/operatingcontext/StandardOperatingContext.mjs +1 -1
- package/dist/custom-auth-path/packageMetadata.d.ts +1 -1
- package/dist/custom-auth-path/packageMetadata.mjs +2 -2
- package/dist/custom-auth-path/protocol/Authorize.mjs +1 -1
- package/dist/custom-auth-path/request/RequestHelpers.mjs +1 -1
- package/dist/custom-auth-path/response/ResponseHandler.mjs +1 -1
- package/dist/custom-auth-path/utils/BrowserConstants.mjs +1 -1
- package/dist/custom-auth-path/utils/BrowserProtocolUtils.mjs +1 -1
- package/dist/custom-auth-path/utils/BrowserUtils.mjs +1 -1
- package/dist/custom-auth-path/utils/Helpers.mjs +1 -1
- package/dist/custom-auth-path/utils/MsalFrameStatsUtils.mjs +1 -1
- package/dist/custom_auth/CustomAuthConstants.d.ts +1 -1
- package/dist/encode/Base64Decode.mjs +1 -1
- package/dist/encode/Base64Encode.mjs +1 -1
- package/dist/error/BrowserAuthError.mjs +1 -1
- package/dist/error/BrowserAuthErrorCodes.mjs +1 -1
- package/dist/error/BrowserConfigurationAuthError.mjs +1 -1
- package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +1 -1
- package/dist/error/NativeAuthError.mjs +1 -1
- package/dist/error/NativeAuthErrorCodes.mjs +1 -1
- package/dist/error/NestedAppAuthError.mjs +1 -1
- package/dist/event/EventHandler.mjs +1 -1
- package/dist/event/EventMessage.mjs +1 -1
- package/dist/event/EventType.mjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/interaction_client/BaseInteractionClient.mjs +1 -1
- package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
- package/dist/interaction_client/PlatformAuthInteractionClient.d.ts +1 -1
- package/dist/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
- package/dist/interaction_client/PlatformAuthInteractionClient.mjs +7 -7
- package/dist/interaction_client/PlatformAuthInteractionClient.mjs.map +1 -1
- package/dist/interaction_client/PopupClient.mjs +1 -1
- package/dist/interaction_client/RedirectClient.mjs +1 -1
- package/dist/interaction_client/SilentAuthCodeClient.mjs +1 -1
- package/dist/interaction_client/SilentCacheClient.mjs +1 -1
- package/dist/interaction_client/SilentIframeClient.mjs +1 -1
- package/dist/interaction_client/SilentRefreshClient.mjs +1 -1
- package/dist/interaction_client/StandardInteractionClient.mjs +1 -1
- package/dist/interaction_handler/InteractionHandler.mjs +1 -1
- package/dist/interaction_handler/SilentHandler.mjs +2 -1
- package/dist/interaction_handler/SilentHandler.mjs.map +1 -1
- package/dist/naa/BridgeError.mjs +1 -1
- package/dist/naa/BridgeProxy.mjs +1 -1
- package/dist/naa/BridgeStatusCode.mjs +1 -1
- package/dist/naa/mapping/NestedAppAuthAdapter.mjs +1 -1
- package/dist/navigation/NavigationClient.mjs +1 -1
- package/dist/network/FetchClient.mjs +1 -1
- package/dist/operatingcontext/BaseOperatingContext.mjs +1 -1
- package/dist/operatingcontext/NestedAppOperatingContext.mjs +1 -1
- package/dist/operatingcontext/StandardOperatingContext.mjs +1 -1
- package/dist/operatingcontext/UnknownOperatingContext.mjs +1 -1
- package/dist/packageMetadata.d.ts +1 -1
- package/dist/packageMetadata.mjs +2 -2
- package/dist/protocol/Authorize.mjs +1 -1
- package/dist/request/RequestHelpers.mjs +1 -1
- package/dist/response/ResponseHandler.mjs +1 -1
- package/dist/telemetry/BrowserPerformanceClient.mjs +1 -1
- package/dist/telemetry/BrowserPerformanceMeasurement.mjs +1 -1
- package/dist/utils/BrowserConstants.mjs +1 -1
- package/dist/utils/BrowserProtocolUtils.mjs +1 -1
- package/dist/utils/BrowserUtils.mjs +1 -1
- package/dist/utils/Helpers.mjs +1 -1
- package/dist/utils/MsalFrameStatsUtils.mjs +1 -1
- package/lib/custom-auth-path/msal-custom-auth.cjs +1238 -947
- package/lib/custom-auth-path/msal-custom-auth.cjs.map +1 -1
- package/lib/custom-auth-path/types/cache/BrowserCacheManager.d.ts +64 -7
- package/lib/custom-auth-path/types/cache/BrowserCacheManager.d.ts.map +1 -1
- package/lib/custom-auth-path/types/cache/CacheKeys.d.ts +3 -3
- package/lib/custom-auth-path/types/cache/IWindowStorage.d.ts +1 -1
- package/lib/custom-auth-path/types/cache/IWindowStorage.d.ts.map +1 -1
- package/lib/custom-auth-path/types/cache/LocalStorage.d.ts +1 -1
- package/lib/custom-auth-path/types/cache/LocalStorage.d.ts.map +1 -1
- package/lib/custom-auth-path/types/cache/TokenCache.d.ts.map +1 -1
- package/lib/custom-auth-path/types/controllers/NestedAppAuthController.d.ts.map +1 -1
- package/lib/custom-auth-path/types/controllers/StandardController.d.ts.map +1 -1
- package/lib/custom-auth-path/types/custom_auth/CustomAuthConstants.d.ts +1 -1
- package/lib/custom-auth-path/types/interaction_client/PlatformAuthInteractionClient.d.ts +1 -1
- package/lib/custom-auth-path/types/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
- package/lib/custom-auth-path/types/packageMetadata.d.ts +1 -1
- package/lib/msal-browser.cjs +947 -656
- package/lib/msal-browser.cjs.map +1 -1
- package/lib/msal-browser.js +947 -656
- package/lib/msal-browser.js.map +1 -1
- package/lib/msal-browser.min.js +67 -67
- package/lib/types/cache/BrowserCacheManager.d.ts +64 -7
- package/lib/types/cache/BrowserCacheManager.d.ts.map +1 -1
- package/lib/types/cache/CacheKeys.d.ts +3 -3
- package/lib/types/cache/IWindowStorage.d.ts +1 -1
- package/lib/types/cache/IWindowStorage.d.ts.map +1 -1
- package/lib/types/cache/LocalStorage.d.ts +1 -1
- package/lib/types/cache/LocalStorage.d.ts.map +1 -1
- package/lib/types/cache/TokenCache.d.ts.map +1 -1
- package/lib/types/controllers/NestedAppAuthController.d.ts.map +1 -1
- package/lib/types/controllers/StandardController.d.ts.map +1 -1
- package/lib/types/custom_auth/CustomAuthConstants.d.ts +1 -1
- package/lib/types/interaction_client/PlatformAuthInteractionClient.d.ts +1 -1
- package/lib/types/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
- package/lib/types/packageMetadata.d.ts +1 -1
- package/package.json +2 -2
- package/src/cache/BrowserCacheManager.ts +738 -225
- package/src/cache/CacheKeys.ts +3 -3
- package/src/cache/IWindowStorage.ts +2 -1
- package/src/cache/LocalStorage.ts +30 -17
- package/src/cache/TokenCache.ts +33 -12
- package/src/controllers/NestedAppAuthController.ts +3 -1
- package/src/controllers/StandardController.ts +3 -1
- package/src/interaction_client/PlatformAuthInteractionClient.ts +15 -5
- package/src/interaction_handler/SilentHandler.ts +1 -0
- package/src/packageMetadata.ts +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
/*! @azure/msal-browser v4.
|
|
1
|
+
/*! @azure/msal-browser v4.26.1 2025-11-06 */
|
|
2
2
|
'use strict';
|
|
3
|
-
import { CacheManager,
|
|
3
|
+
import { CacheManager, TimeUtils, CacheHelpers, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC, AuthToken, getTenantIdFromIdTokenClaims, buildTenantProfile, AccountEntity, createCacheError, CacheErrorCodes, invokeAsync, PerformanceEvents, Constants, PersistentCacheKeys, StringUtils, AuthenticationScheme, CacheError, DEFAULT_CRYPTO_IMPLEMENTATION, CredentialType } from '@azure/msal-common/browser';
|
|
4
4
|
import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
|
|
5
5
|
import { BrowserCacheLocation, InMemoryCacheKeys, TemporaryCacheKeys, INTERACTION_TYPE } from '../utils/BrowserConstants.mjs';
|
|
6
|
-
import { ACCOUNT_SCHEMA_VERSION, CREDENTIAL_SCHEMA_VERSION,
|
|
6
|
+
import { ACCOUNT_SCHEMA_VERSION, CREDENTIAL_SCHEMA_VERSION, VERSION_CACHE_KEY, getTokenKeysCacheKey, getAccountKeysCacheKey, PREFIX, CACHE_KEY_SEPARATOR } from './CacheKeys.mjs';
|
|
7
7
|
import { LocalStorage } from './LocalStorage.mjs';
|
|
8
8
|
import { SessionStorage } from './SessionStorage.mjs';
|
|
9
9
|
import { MemoryStorage } from './MemoryStorage.mjs';
|
|
@@ -51,108 +51,338 @@ class BrowserCacheManager extends CacheManager {
|
|
|
51
51
|
* Migrates any existing cache data from previous versions of MSAL.js into the current cache structure.
|
|
52
52
|
*/
|
|
53
53
|
async migrateExistingCache(correlationId) {
|
|
54
|
-
|
|
55
|
-
|
|
54
|
+
let accountKeys = getAccountKeys(this.browserStorage);
|
|
55
|
+
let tokenKeys = getTokenKeys(this.clientId, this.browserStorage);
|
|
56
56
|
this.performanceClient.addFields({
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
preMigrateAcntCount: accountKeys.length,
|
|
58
|
+
preMigrateATCount: tokenKeys.accessToken.length,
|
|
59
|
+
preMigrateITCount: tokenKeys.idToken.length,
|
|
60
|
+
preMigrateRTCount: tokenKeys.refreshToken.length,
|
|
61
61
|
}, correlationId);
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
for (let i = 0; i < ACCOUNT_SCHEMA_VERSION; i++) {
|
|
63
|
+
const credentialSchema = i; // For now account and credential schemas are the same, but may diverge in future
|
|
64
|
+
await this.removeStaleAccounts(i, credentialSchema, correlationId);
|
|
65
|
+
}
|
|
66
|
+
// Must migrate idTokens first to ensure we have KMSI info for the rest
|
|
67
|
+
for (let i = 0; i < CREDENTIAL_SCHEMA_VERSION; i++) {
|
|
68
|
+
const accountSchema = i; // For now account and credential schemas are the same, but may diverge in future
|
|
69
|
+
await this.migrateIdTokens(i, accountSchema, correlationId);
|
|
70
|
+
}
|
|
71
|
+
const kmsiMap = this.getKMSIValues();
|
|
72
|
+
for (let i = 0; i < CREDENTIAL_SCHEMA_VERSION; i++) {
|
|
73
|
+
await this.migrateAccessTokens(i, kmsiMap, correlationId);
|
|
74
|
+
await this.migrateRefreshTokens(i, kmsiMap, correlationId);
|
|
75
|
+
}
|
|
76
|
+
accountKeys = getAccountKeys(this.browserStorage);
|
|
77
|
+
tokenKeys = getTokenKeys(this.clientId, this.browserStorage);
|
|
64
78
|
this.performanceClient.addFields({
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
79
|
+
postMigrateAcntCount: accountKeys.length,
|
|
80
|
+
postMigrateATCount: tokenKeys.accessToken.length,
|
|
81
|
+
postMigrateITCount: tokenKeys.idToken.length,
|
|
82
|
+
postMigrateRTCount: tokenKeys.refreshToken.length,
|
|
69
83
|
}, correlationId);
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Parses entry, adds lastUpdatedAt if it doesn't exist, removes entry if expired or invalid
|
|
87
|
+
* @param key
|
|
88
|
+
* @param correlationId
|
|
89
|
+
* @returns
|
|
90
|
+
*/
|
|
91
|
+
async updateOldEntry(key, correlationId) {
|
|
92
|
+
const rawValue = this.browserStorage.getItem(key);
|
|
93
|
+
const parsedValue = this.validateAndParseJson(rawValue || "");
|
|
94
|
+
if (!parsedValue) {
|
|
95
|
+
this.browserStorage.removeItem(key);
|
|
96
|
+
return null;
|
|
78
97
|
}
|
|
79
|
-
|
|
80
|
-
|
|
98
|
+
if (!parsedValue.lastUpdatedAt) {
|
|
99
|
+
// Add lastUpdatedAt to the existing v0 entry if it doesnt exist so we know when it's safe to remove it
|
|
100
|
+
parsedValue.lastUpdatedAt = Date.now().toString();
|
|
101
|
+
this.setItem(key, JSON.stringify(parsedValue), correlationId);
|
|
102
|
+
}
|
|
103
|
+
else if (TimeUtils.isCacheExpired(parsedValue.lastUpdatedAt, this.cacheConfig.cacheRetentionDays)) {
|
|
104
|
+
this.browserStorage.removeItem(key);
|
|
105
|
+
this.performanceClient.incrementFields({ expiredCacheRemovedCount: 1 }, correlationId);
|
|
106
|
+
return null;
|
|
81
107
|
}
|
|
82
|
-
|
|
83
|
-
this.browserStorage.
|
|
108
|
+
const decryptedData = isEncrypted(parsedValue)
|
|
109
|
+
? await this.browserStorage.decryptData(key, parsedValue, correlationId)
|
|
110
|
+
: parsedValue;
|
|
111
|
+
if (!decryptedData || !CacheHelpers.isCredentialEntity(decryptedData)) {
|
|
112
|
+
this.performanceClient.incrementFields({ invalidCacheCount: 1 }, correlationId);
|
|
113
|
+
return null;
|
|
84
114
|
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
115
|
+
if ((CacheHelpers.isAccessTokenEntity(decryptedData) ||
|
|
116
|
+
CacheHelpers.isRefreshTokenEntity(decryptedData)) &&
|
|
117
|
+
decryptedData.expiresOn &&
|
|
118
|
+
TimeUtils.isTokenExpired(decryptedData.expiresOn, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC)) {
|
|
119
|
+
this.browserStorage.removeItem(key);
|
|
120
|
+
this.performanceClient.incrementFields({ expiredCacheRemovedCount: 1 }, correlationId);
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
return decryptedData;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Remove accounts from the cache for older schema versions if they have not been updated in the last cacheRetentionDays
|
|
127
|
+
* @param accountSchema
|
|
128
|
+
* @param credentialSchema
|
|
129
|
+
* @param correlationId
|
|
130
|
+
* @returns
|
|
131
|
+
*/
|
|
132
|
+
async removeStaleAccounts(accountSchema, credentialSchema, correlationId) {
|
|
133
|
+
const accountKeysToCheck = getAccountKeys(this.browserStorage, accountSchema);
|
|
134
|
+
if (accountKeysToCheck.length === 0) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
for (const accountKey of [...accountKeysToCheck]) {
|
|
138
|
+
this.performanceClient.incrementFields({ oldAcntCount: 1 }, correlationId);
|
|
139
|
+
const rawValue = this.browserStorage.getItem(accountKey);
|
|
140
|
+
const parsedValue = this.validateAndParseJson(rawValue || "");
|
|
141
|
+
if (!parsedValue) {
|
|
142
|
+
removeElementFromArray(accountKeysToCheck, accountKey);
|
|
98
143
|
continue;
|
|
99
144
|
}
|
|
100
|
-
if (!
|
|
101
|
-
// Add lastUpdatedAt to the existing
|
|
102
|
-
|
|
103
|
-
this.setItem(
|
|
145
|
+
if (!parsedValue.lastUpdatedAt) {
|
|
146
|
+
// Add lastUpdatedAt to the existing entry if it doesnt exist so we know when it's safe to remove it
|
|
147
|
+
parsedValue.lastUpdatedAt = Date.now().toString();
|
|
148
|
+
this.setItem(accountKey, JSON.stringify(parsedValue), correlationId);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
else if (TimeUtils.isCacheExpired(parsedValue.lastUpdatedAt, this.cacheConfig.cacheRetentionDays)) {
|
|
152
|
+
// Cache expired remove account and associated tokens
|
|
153
|
+
await this.removeAccountOldSchema(accountKey, parsedValue, credentialSchema, correlationId);
|
|
154
|
+
removeElementFromArray(accountKeysToCheck, accountKey);
|
|
104
155
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
156
|
+
}
|
|
157
|
+
this.setAccountKeys(accountKeysToCheck, correlationId, accountSchema);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Remove the given account and all associated tokens from the cache
|
|
161
|
+
* @param accountKey
|
|
162
|
+
* @param rawObject
|
|
163
|
+
* @param credentialSchema
|
|
164
|
+
* @param correlationId
|
|
165
|
+
*/
|
|
166
|
+
async removeAccountOldSchema(accountKey, rawObject, credentialSchema, correlationId) {
|
|
167
|
+
const decryptedData = isEncrypted(rawObject)
|
|
168
|
+
? (await this.browserStorage.decryptData(accountKey, rawObject, correlationId))
|
|
169
|
+
: rawObject;
|
|
170
|
+
const homeAccountId = decryptedData?.homeAccountId;
|
|
171
|
+
if (homeAccountId) {
|
|
172
|
+
const tokenKeys = this.getTokenKeys(credentialSchema);
|
|
173
|
+
[...tokenKeys.idToken]
|
|
174
|
+
.filter((key) => key.includes(homeAccountId))
|
|
175
|
+
.forEach((key) => {
|
|
176
|
+
this.browserStorage.removeItem(key);
|
|
177
|
+
removeElementFromArray(tokenKeys.idToken, key);
|
|
178
|
+
});
|
|
179
|
+
[...tokenKeys.accessToken]
|
|
180
|
+
.filter((key) => key.includes(homeAccountId))
|
|
181
|
+
.forEach((key) => {
|
|
182
|
+
this.browserStorage.removeItem(key);
|
|
183
|
+
removeElementFromArray(tokenKeys.accessToken, key);
|
|
184
|
+
});
|
|
185
|
+
[...tokenKeys.refreshToken]
|
|
186
|
+
.filter((key) => key.includes(homeAccountId))
|
|
187
|
+
.forEach((key) => {
|
|
188
|
+
this.browserStorage.removeItem(key);
|
|
189
|
+
removeElementFromArray(tokenKeys.refreshToken, key);
|
|
190
|
+
});
|
|
191
|
+
this.setTokenKeys(tokenKeys, correlationId, credentialSchema);
|
|
192
|
+
}
|
|
193
|
+
this.performanceClient.incrementFields({ expiredAcntRemovedCount: 1 }, correlationId);
|
|
194
|
+
this.browserStorage.removeItem(accountKey);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Gets key value pair mapping homeAccountId to KMSI value
|
|
198
|
+
* @returns
|
|
199
|
+
*/
|
|
200
|
+
getKMSIValues() {
|
|
201
|
+
const kmsiMap = {};
|
|
202
|
+
const tokenKeys = this.getTokenKeys().idToken;
|
|
203
|
+
for (const key of tokenKeys) {
|
|
204
|
+
const rawValue = this.browserStorage.getUserData(key);
|
|
205
|
+
if (rawValue) {
|
|
206
|
+
const idToken = JSON.parse(rawValue);
|
|
207
|
+
const claims = AuthToken.extractTokenClaims(idToken.secret, base64Decode);
|
|
208
|
+
if (claims) {
|
|
209
|
+
kmsiMap[idToken.homeAccountId] = AuthToken.isKmsi(claims);
|
|
112
210
|
}
|
|
113
|
-
|
|
114
|
-
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return kmsiMap;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Migrates id tokens from the old schema to the new schema, also migrates associated account object if it doesn't already exist in the new schema
|
|
217
|
+
* @param credentialSchema
|
|
218
|
+
* @param accountSchema
|
|
219
|
+
* @param correlationId
|
|
220
|
+
* @returns
|
|
221
|
+
*/
|
|
222
|
+
async migrateIdTokens(credentialSchema, accountSchema, correlationId) {
|
|
223
|
+
const credentialKeysToMigrate = getTokenKeys(this.clientId, this.browserStorage, credentialSchema);
|
|
224
|
+
if (credentialKeysToMigrate.idToken.length === 0) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
const currentCredentialKeys = getTokenKeys(this.clientId, this.browserStorage, CREDENTIAL_SCHEMA_VERSION);
|
|
228
|
+
const currentAccountKeys = getAccountKeys(this.browserStorage);
|
|
229
|
+
const previousAccountKeys = getAccountKeys(this.browserStorage, accountSchema);
|
|
230
|
+
for (const idTokenKey of [...credentialKeysToMigrate.idToken]) {
|
|
231
|
+
this.performanceClient.incrementFields({ oldITCount: 1 }, correlationId);
|
|
232
|
+
const oldSchemaData = (await this.updateOldEntry(idTokenKey, correlationId));
|
|
233
|
+
if (!oldSchemaData) {
|
|
234
|
+
removeElementFromArray(credentialKeysToMigrate.idToken, idTokenKey);
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const currentAccountKey = currentAccountKeys.find((key) => key.includes(oldSchemaData.homeAccountId));
|
|
238
|
+
const previousAccountKey = previousAccountKeys.find((key) => key.includes(oldSchemaData.homeAccountId));
|
|
239
|
+
let account = null;
|
|
240
|
+
if (currentAccountKey) {
|
|
241
|
+
account = this.getAccount(currentAccountKey, correlationId);
|
|
242
|
+
}
|
|
243
|
+
else if (previousAccountKey) {
|
|
244
|
+
const rawValue = this.browserStorage.getItem(previousAccountKey);
|
|
245
|
+
const parsedValue = this.validateAndParseJson(rawValue || "");
|
|
246
|
+
account =
|
|
247
|
+
parsedValue && isEncrypted(parsedValue)
|
|
248
|
+
? (await this.browserStorage.decryptData(previousAccountKey, parsedValue, correlationId))
|
|
249
|
+
: parsedValue;
|
|
250
|
+
}
|
|
251
|
+
if (!account) {
|
|
252
|
+
// Don't migrate idToken if we don't have an account for it
|
|
253
|
+
this.performanceClient.incrementFields({ skipITMigrateCount: 1 }, correlationId);
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
const claims = AuthToken.extractTokenClaims(oldSchemaData.secret, base64Decode);
|
|
257
|
+
const newIdTokenKey = this.generateCredentialKey(oldSchemaData);
|
|
258
|
+
const currentIdToken = this.getIdTokenCredential(newIdTokenKey, correlationId);
|
|
259
|
+
const oldTokenHasSignInState = Object.keys(claims).includes("signin_state");
|
|
260
|
+
const currentTokenHasSignInState = currentIdToken &&
|
|
261
|
+
Object.keys(AuthToken.extractTokenClaims(currentIdToken.secret, base64Decode) || {}).includes("signin_state");
|
|
262
|
+
/**
|
|
263
|
+
* Only migrate if:
|
|
264
|
+
* 1. Token doesn't yet exist in current schema
|
|
265
|
+
* 2. Old schema token has been updated more recently than the current one AND migrating it won't result in loss of KMSI state
|
|
266
|
+
*/
|
|
267
|
+
if (!currentIdToken ||
|
|
268
|
+
(oldSchemaData.lastUpdatedAt > currentIdToken.lastUpdatedAt &&
|
|
269
|
+
(oldTokenHasSignInState || !currentTokenHasSignInState))) {
|
|
270
|
+
const tenantProfiles = account.tenantProfiles || [];
|
|
271
|
+
const tenantId = getTenantIdFromIdTokenClaims(claims) || account.realm;
|
|
272
|
+
if (tenantId &&
|
|
273
|
+
!tenantProfiles.find((tenantProfile) => {
|
|
274
|
+
return tenantProfile.tenantId === tenantId;
|
|
275
|
+
})) {
|
|
276
|
+
const newTenantProfile = buildTenantProfile(account.homeAccountId, account.localAccountId, tenantId, claims);
|
|
277
|
+
tenantProfiles.push(newTenantProfile);
|
|
115
278
|
}
|
|
279
|
+
account.tenantProfiles = tenantProfiles;
|
|
280
|
+
const newAccountKey = this.generateAccountKey(AccountEntity.getAccountInfo(account));
|
|
281
|
+
const kmsi = AuthToken.isKmsi(claims);
|
|
282
|
+
await this.setUserData(newAccountKey, JSON.stringify(account), correlationId, account.lastUpdatedAt, kmsi);
|
|
283
|
+
if (!currentAccountKeys.includes(newAccountKey)) {
|
|
284
|
+
currentAccountKeys.push(newAccountKey);
|
|
285
|
+
}
|
|
286
|
+
await this.setUserData(newIdTokenKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);
|
|
287
|
+
this.performanceClient.incrementFields({ migratedITCount: 1 }, correlationId);
|
|
288
|
+
currentCredentialKeys.idToken.push(newIdTokenKey);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
this.setTokenKeys(credentialKeysToMigrate, correlationId, credentialSchema);
|
|
292
|
+
this.setTokenKeys(currentCredentialKeys, correlationId);
|
|
293
|
+
this.setAccountKeys(currentAccountKeys, correlationId);
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Migrates access tokens from old cache schema to current schema
|
|
297
|
+
* @param credentialSchema
|
|
298
|
+
* @param kmsiMap
|
|
299
|
+
* @param correlationId
|
|
300
|
+
* @returns
|
|
301
|
+
*/
|
|
302
|
+
async migrateAccessTokens(credentialSchema, kmsiMap, correlationId) {
|
|
303
|
+
const credentialKeysToMigrate = getTokenKeys(this.clientId, this.browserStorage, credentialSchema);
|
|
304
|
+
if (credentialKeysToMigrate.accessToken.length === 0) {
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const currentCredentialKeys = getTokenKeys(this.clientId, this.browserStorage, CREDENTIAL_SCHEMA_VERSION);
|
|
308
|
+
for (const accessTokenKey of [...credentialKeysToMigrate.accessToken]) {
|
|
309
|
+
this.performanceClient.incrementFields({ oldATCount: 1 }, correlationId);
|
|
310
|
+
const oldSchemaData = (await this.updateOldEntry(accessTokenKey, correlationId));
|
|
311
|
+
if (!oldSchemaData) {
|
|
312
|
+
removeElementFromArray(credentialKeysToMigrate.accessToken, accessTokenKey);
|
|
313
|
+
continue;
|
|
116
314
|
}
|
|
117
|
-
if (!
|
|
118
|
-
|
|
119
|
-
(
|
|
120
|
-
TimeUtils.isTokenExpired(expirationTime, DEFAULT_TOKEN_RENEWAL_OFFSET_SEC))) {
|
|
121
|
-
this.browserStorage.removeItem(v0Key);
|
|
122
|
-
removeElementFromArray(v0Keys, v0Key);
|
|
123
|
-
this.performanceClient.incrementFields({ expiredCacheRemovedCount: 1 }, correlationId);
|
|
315
|
+
if (!Object.keys(kmsiMap).includes(oldSchemaData.homeAccountId)) {
|
|
316
|
+
// Don't migrate tokens if we don't have an idToken for them
|
|
317
|
+
this.performanceClient.incrementFields({ skipATMigrateCount: 1 }, correlationId);
|
|
124
318
|
continue;
|
|
125
319
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
320
|
+
const newKey = this.generateCredentialKey(oldSchemaData);
|
|
321
|
+
const kmsi = kmsiMap[oldSchemaData.homeAccountId];
|
|
322
|
+
if (!currentCredentialKeys.accessToken.includes(newKey)) {
|
|
323
|
+
await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);
|
|
324
|
+
this.performanceClient.incrementFields({ migratedATCount: 1 }, correlationId);
|
|
325
|
+
currentCredentialKeys.accessToken.push(newKey);
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
const currentToken = this.getAccessTokenCredential(newKey, correlationId);
|
|
329
|
+
if (!currentToken ||
|
|
330
|
+
oldSchemaData.lastUpdatedAt > currentToken.lastUpdatedAt) {
|
|
331
|
+
// If the token already exists, only overwrite it if the old token has a more recent lastUpdatedAt
|
|
332
|
+
await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);
|
|
333
|
+
this.performanceClient.incrementFields({ migratedATCount: 1 }, correlationId);
|
|
137
334
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
this.setTokenKeys(credentialKeysToMigrate, correlationId, credentialSchema);
|
|
338
|
+
this.setTokenKeys(currentCredentialKeys, correlationId);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Migrates refresh tokens from old cache schema to current schema
|
|
342
|
+
* @param credentialSchema
|
|
343
|
+
* @param kmsiMap
|
|
344
|
+
* @param correlationId
|
|
345
|
+
* @returns
|
|
346
|
+
*/
|
|
347
|
+
async migrateRefreshTokens(credentialSchema, kmsiMap, correlationId) {
|
|
348
|
+
const credentialKeysToMigrate = getTokenKeys(this.clientId, this.browserStorage, credentialSchema);
|
|
349
|
+
if (credentialKeysToMigrate.refreshToken.length === 0) {
|
|
350
|
+
return;
|
|
351
|
+
}
|
|
352
|
+
const currentCredentialKeys = getTokenKeys(this.clientId, this.browserStorage, CREDENTIAL_SCHEMA_VERSION);
|
|
353
|
+
for (const refreshTokenKey of [
|
|
354
|
+
...credentialKeysToMigrate.refreshToken,
|
|
355
|
+
]) {
|
|
356
|
+
this.performanceClient.incrementFields({ oldRTCount: 1 }, correlationId);
|
|
357
|
+
const oldSchemaData = (await this.updateOldEntry(refreshTokenKey, correlationId));
|
|
358
|
+
if (!oldSchemaData) {
|
|
359
|
+
removeElementFromArray(credentialKeysToMigrate.refreshToken, refreshTokenKey);
|
|
360
|
+
continue;
|
|
361
|
+
}
|
|
362
|
+
if (!Object.keys(kmsiMap).includes(oldSchemaData.homeAccountId)) {
|
|
363
|
+
// Don't migrate tokens if we don't have an idToken for them
|
|
364
|
+
this.performanceClient.incrementFields({ skipRTMigrateCount: 1 }, correlationId);
|
|
365
|
+
continue;
|
|
366
|
+
}
|
|
367
|
+
const newKey = this.generateCredentialKey(oldSchemaData);
|
|
368
|
+
const kmsi = kmsiMap[oldSchemaData.homeAccountId];
|
|
369
|
+
if (!currentCredentialKeys.refreshToken.includes(newKey)) {
|
|
370
|
+
await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);
|
|
371
|
+
this.performanceClient.incrementFields({ migratedRTCount: 1 }, correlationId);
|
|
372
|
+
currentCredentialKeys.refreshToken.push(newKey);
|
|
373
|
+
}
|
|
374
|
+
else {
|
|
375
|
+
const currentToken = this.getRefreshTokenCredential(newKey, correlationId);
|
|
376
|
+
if (!currentToken ||
|
|
377
|
+
oldSchemaData.lastUpdatedAt > currentToken.lastUpdatedAt) {
|
|
378
|
+
// If the token already exists, only overwrite it if the old token has a more recent lastUpdatedAt
|
|
379
|
+
await this.setUserData(newKey, JSON.stringify(oldSchemaData), correlationId, oldSchemaData.lastUpdatedAt, kmsi);
|
|
380
|
+
this.performanceClient.incrementFields({ migratedRTCount: 1 }, correlationId);
|
|
148
381
|
}
|
|
149
382
|
}
|
|
150
|
-
/*
|
|
151
|
-
* Note: If we reach here for unencrypted localStorage data, we continue without migrating
|
|
152
|
-
* as we can't migrate unencrypted localStorage data right now since we can't guarantee KMSI=no
|
|
153
|
-
*/
|
|
154
383
|
}
|
|
155
|
-
|
|
384
|
+
this.setTokenKeys(credentialKeysToMigrate, correlationId, credentialSchema);
|
|
385
|
+
this.setTokenKeys(currentCredentialKeys, correlationId);
|
|
156
386
|
}
|
|
157
387
|
/**
|
|
158
388
|
* Tracks upgrades and downgrades for telemetry and debugging purposes
|
|
@@ -197,20 +427,31 @@ class BrowserCacheManager extends CacheManager {
|
|
|
197
427
|
* @param value
|
|
198
428
|
*/
|
|
199
429
|
setItem(key, value, correlationId) {
|
|
200
|
-
|
|
201
|
-
|
|
430
|
+
const tokenKeysCount = new Array(CREDENTIAL_SCHEMA_VERSION + 1).fill(0); // Array mapping schema version to number of token keys stored for that version
|
|
431
|
+
const accessTokenKeys = []; // Flat map of all access token keys stored, ordered by schema version
|
|
202
432
|
const maxRetries = 20;
|
|
203
433
|
for (let i = 0; i <= maxRetries; i++) {
|
|
434
|
+
// Attempt to store item in cache, if cache is full this call will throw and we'll attempt to clear space by removing access tokens from the cache one by one, starting with tokens stored by previous versions of MSAL.js
|
|
204
435
|
try {
|
|
205
436
|
this.browserStorage.setItem(key, value);
|
|
206
437
|
if (i > 0) {
|
|
207
|
-
//
|
|
208
|
-
|
|
209
|
-
this
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
438
|
+
// If any tokens were removed in order to store this item update the token keys array with the tokens removed
|
|
439
|
+
for (let schemaVersion = 0; schemaVersion <= CREDENTIAL_SCHEMA_VERSION; schemaVersion++) {
|
|
440
|
+
// Get the sum of all previous token counts to use as start index for this schema version
|
|
441
|
+
const startIndex = tokenKeysCount
|
|
442
|
+
.slice(0, schemaVersion)
|
|
443
|
+
.reduce((sum, count) => sum + count, 0);
|
|
444
|
+
if (startIndex >= i) {
|
|
445
|
+
// Done removing tokens
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
const endIndex = i > startIndex + tokenKeysCount[schemaVersion]
|
|
449
|
+
? startIndex + tokenKeysCount[schemaVersion]
|
|
450
|
+
: i;
|
|
451
|
+
if (i > startIndex &&
|
|
452
|
+
tokenKeysCount[schemaVersion] > 0) {
|
|
453
|
+
this.removeAccessTokenKeys(accessTokenKeys.slice(startIndex, endIndex), correlationId, schemaVersion);
|
|
454
|
+
}
|
|
214
455
|
}
|
|
215
456
|
}
|
|
216
457
|
break; // If setItem succeeds, exit the loop
|
|
@@ -222,16 +463,19 @@ class BrowserCacheManager extends CacheManager {
|
|
|
222
463
|
i < maxRetries) {
|
|
223
464
|
if (!accessTokenKeys.length) {
|
|
224
465
|
// If we are currently trying to set the token keys, use the value we're trying to set
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
466
|
+
for (let i = 0; i <= CREDENTIAL_SCHEMA_VERSION; i++) {
|
|
467
|
+
if (key ===
|
|
468
|
+
getTokenKeysCacheKey(this.clientId, i)) {
|
|
469
|
+
const tokenKeys = JSON.parse(value).accessToken;
|
|
470
|
+
accessTokenKeys.push(...tokenKeys);
|
|
471
|
+
tokenKeysCount[i] = tokenKeys.length;
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
const tokenKeys = this.getTokenKeys(i).accessToken;
|
|
475
|
+
accessTokenKeys.push(...tokenKeys);
|
|
476
|
+
tokenKeysCount[i] = tokenKeys.length;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
235
479
|
}
|
|
236
480
|
if (accessTokenKeys.length <= i) {
|
|
237
481
|
// Nothing to remove, rethrow the error
|
|
@@ -254,21 +498,32 @@ class BrowserCacheManager extends CacheManager {
|
|
|
254
498
|
* @param value
|
|
255
499
|
* @param correlationId
|
|
256
500
|
*/
|
|
257
|
-
async setUserData(key, value, correlationId, timestamp) {
|
|
258
|
-
|
|
259
|
-
|
|
501
|
+
async setUserData(key, value, correlationId, timestamp, kmsi) {
|
|
502
|
+
const tokenKeysCount = new Array(CREDENTIAL_SCHEMA_VERSION + 1).fill(0); // Array mapping schema version to number of token keys stored for that version
|
|
503
|
+
const accessTokenKeys = []; // Flat map of all access token keys stored, ordered by schema version
|
|
260
504
|
const maxRetries = 20;
|
|
261
505
|
for (let i = 0; i <= maxRetries; i++) {
|
|
262
506
|
try {
|
|
263
|
-
|
|
507
|
+
// Attempt to store item in cache, if cache is full this call will throw and we'll attempt to clear space by removing access tokens from the cache one by one, starting with tokens stored by previous versions of MSAL.js
|
|
508
|
+
await invokeAsync(this.browserStorage.setUserData.bind(this.browserStorage), PerformanceEvents.SetUserData, this.logger, this.performanceClient)(key, value, correlationId, timestamp, kmsi);
|
|
264
509
|
if (i > 0) {
|
|
265
|
-
//
|
|
266
|
-
|
|
267
|
-
this
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
510
|
+
// If any tokens were removed in order to store this item update the token keys array with the tokens removed
|
|
511
|
+
for (let schemaVersion = 0; schemaVersion <= CREDENTIAL_SCHEMA_VERSION; schemaVersion++) {
|
|
512
|
+
// Get the sum of all previous token counts to use as start index for this schema version
|
|
513
|
+
const startIndex = tokenKeysCount
|
|
514
|
+
.slice(0, schemaVersion)
|
|
515
|
+
.reduce((sum, count) => sum + count, 0);
|
|
516
|
+
if (startIndex >= i) {
|
|
517
|
+
// Done removing tokens
|
|
518
|
+
break;
|
|
519
|
+
}
|
|
520
|
+
const endIndex = i > startIndex + tokenKeysCount[schemaVersion]
|
|
521
|
+
? startIndex + tokenKeysCount[schemaVersion]
|
|
522
|
+
: i;
|
|
523
|
+
if (i > startIndex &&
|
|
524
|
+
tokenKeysCount[schemaVersion] > 0) {
|
|
525
|
+
this.removeAccessTokenKeys(accessTokenKeys.slice(startIndex, endIndex), correlationId, schemaVersion);
|
|
526
|
+
}
|
|
272
527
|
}
|
|
273
528
|
}
|
|
274
529
|
break; // If setItem succeeds, exit the loop
|
|
@@ -279,10 +534,12 @@ class BrowserCacheManager extends CacheManager {
|
|
|
279
534
|
CacheErrorCodes.cacheQuotaExceeded &&
|
|
280
535
|
i < maxRetries) {
|
|
281
536
|
if (!accessTokenKeys.length) {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
537
|
+
// If we are currently trying to set the token keys, use the value we're trying to set
|
|
538
|
+
for (let i = 0; i <= CREDENTIAL_SCHEMA_VERSION; i++) {
|
|
539
|
+
const tokenKeys = this.getTokenKeys(i).accessToken;
|
|
540
|
+
accessTokenKeys.push(...tokenKeys);
|
|
541
|
+
tokenKeysCount[i] = tokenKeys.length;
|
|
542
|
+
}
|
|
286
543
|
}
|
|
287
544
|
if (accessTokenKeys.length <= i) {
|
|
288
545
|
// Nothing left to remove, rethrow the error
|
|
@@ -322,20 +579,21 @@ class BrowserCacheManager extends CacheManager {
|
|
|
322
579
|
* set account entity in the platform cache
|
|
323
580
|
* @param account
|
|
324
581
|
*/
|
|
325
|
-
async setAccount(account, correlationId) {
|
|
582
|
+
async setAccount(account, correlationId, kmsi) {
|
|
326
583
|
this.logger.trace("BrowserCacheManager.setAccount called");
|
|
327
|
-
const key = this.generateAccountKey(
|
|
584
|
+
const key = this.generateAccountKey(AccountEntity.getAccountInfo(account));
|
|
328
585
|
const timestamp = Date.now().toString();
|
|
329
586
|
account.lastUpdatedAt = timestamp;
|
|
330
|
-
await this.setUserData(key, JSON.stringify(account), correlationId, timestamp);
|
|
587
|
+
await this.setUserData(key, JSON.stringify(account), correlationId, timestamp, kmsi);
|
|
331
588
|
const wasAdded = this.addAccountKeyToMap(key, correlationId);
|
|
589
|
+
this.performanceClient.addFields({ kmsi: kmsi }, correlationId);
|
|
332
590
|
/**
|
|
333
591
|
* @deprecated - Remove this in next major version in favor of more consistent LOGIN event
|
|
334
592
|
*/
|
|
335
593
|
if (this.cacheConfig.cacheLocation ===
|
|
336
594
|
BrowserCacheLocation.LocalStorage &&
|
|
337
595
|
wasAdded) {
|
|
338
|
-
this.eventHandler.emitEvent(EventType.ACCOUNT_ADDED, undefined,
|
|
596
|
+
this.eventHandler.emitEvent(EventType.ACCOUNT_ADDED, undefined, AccountEntity.getAccountInfo(account));
|
|
339
597
|
}
|
|
340
598
|
}
|
|
341
599
|
/**
|
|
@@ -345,6 +603,14 @@ class BrowserCacheManager extends CacheManager {
|
|
|
345
603
|
getAccountKeys() {
|
|
346
604
|
return getAccountKeys(this.browserStorage);
|
|
347
605
|
}
|
|
606
|
+
setAccountKeys(accountKeys, correlationId, schemaVersion = ACCOUNT_SCHEMA_VERSION) {
|
|
607
|
+
if (accountKeys.length === 0) {
|
|
608
|
+
this.removeItem(getAccountKeysCacheKey(schemaVersion));
|
|
609
|
+
}
|
|
610
|
+
else {
|
|
611
|
+
this.setItem(getAccountKeysCacheKey(schemaVersion), JSON.stringify(accountKeys), correlationId);
|
|
612
|
+
}
|
|
613
|
+
}
|
|
348
614
|
/**
|
|
349
615
|
* Add a new account to the key map
|
|
350
616
|
* @param key
|
|
@@ -376,14 +642,7 @@ class BrowserCacheManager extends CacheManager {
|
|
|
376
642
|
const removalIndex = accountKeys.indexOf(key);
|
|
377
643
|
if (removalIndex > -1) {
|
|
378
644
|
accountKeys.splice(removalIndex, 1);
|
|
379
|
-
|
|
380
|
-
// If no keys left, remove the map
|
|
381
|
-
this.removeItem(getAccountKeysCacheKey());
|
|
382
|
-
return;
|
|
383
|
-
}
|
|
384
|
-
else {
|
|
385
|
-
this.setItem(getAccountKeysCacheKey(), JSON.stringify(accountKeys), correlationId);
|
|
386
|
-
}
|
|
645
|
+
this.setAccountKeys(accountKeys, correlationId);
|
|
387
646
|
this.logger.trace("BrowserCacheManager.removeAccountKeyFromMap account key removed");
|
|
388
647
|
}
|
|
389
648
|
else {
|
|
@@ -523,12 +782,12 @@ class BrowserCacheManager extends CacheManager {
|
|
|
523
782
|
* set IdToken credential to the platform cache
|
|
524
783
|
* @param idToken
|
|
525
784
|
*/
|
|
526
|
-
async setIdTokenCredential(idToken, correlationId) {
|
|
785
|
+
async setIdTokenCredential(idToken, correlationId, kmsi) {
|
|
527
786
|
this.logger.trace("BrowserCacheManager.setIdTokenCredential called");
|
|
528
787
|
const idTokenKey = this.generateCredentialKey(idToken);
|
|
529
788
|
const timestamp = Date.now().toString();
|
|
530
789
|
idToken.lastUpdatedAt = timestamp;
|
|
531
|
-
await this.setUserData(idTokenKey, JSON.stringify(idToken), correlationId, timestamp);
|
|
790
|
+
await this.setUserData(idTokenKey, JSON.stringify(idToken), correlationId, timestamp, kmsi);
|
|
532
791
|
const tokenKeys = this.getTokenKeys();
|
|
533
792
|
if (tokenKeys.idToken.indexOf(idTokenKey) === -1) {
|
|
534
793
|
this.logger.info("BrowserCacheManager: addTokenKey - idToken added to map");
|
|
@@ -560,12 +819,12 @@ class BrowserCacheManager extends CacheManager {
|
|
|
560
819
|
* set accessToken credential to the platform cache
|
|
561
820
|
* @param accessToken
|
|
562
821
|
*/
|
|
563
|
-
async setAccessTokenCredential(accessToken, correlationId) {
|
|
822
|
+
async setAccessTokenCredential(accessToken, correlationId, kmsi) {
|
|
564
823
|
this.logger.trace("BrowserCacheManager.setAccessTokenCredential called");
|
|
565
824
|
const accessTokenKey = this.generateCredentialKey(accessToken);
|
|
566
825
|
const timestamp = Date.now().toString();
|
|
567
826
|
accessToken.lastUpdatedAt = timestamp;
|
|
568
|
-
await this.setUserData(accessTokenKey, JSON.stringify(accessToken), correlationId, timestamp);
|
|
827
|
+
await this.setUserData(accessTokenKey, JSON.stringify(accessToken), correlationId, timestamp, kmsi);
|
|
569
828
|
const tokenKeys = this.getTokenKeys();
|
|
570
829
|
const index = tokenKeys.accessToken.indexOf(accessTokenKey);
|
|
571
830
|
if (index !== -1) {
|
|
@@ -599,12 +858,12 @@ class BrowserCacheManager extends CacheManager {
|
|
|
599
858
|
* set refreshToken credential to the platform cache
|
|
600
859
|
* @param refreshToken
|
|
601
860
|
*/
|
|
602
|
-
async setRefreshTokenCredential(refreshToken, correlationId) {
|
|
861
|
+
async setRefreshTokenCredential(refreshToken, correlationId, kmsi) {
|
|
603
862
|
this.logger.trace("BrowserCacheManager.setRefreshTokenCredential called");
|
|
604
863
|
const refreshTokenKey = this.generateCredentialKey(refreshToken);
|
|
605
864
|
const timestamp = Date.now().toString();
|
|
606
865
|
refreshToken.lastUpdatedAt = timestamp;
|
|
607
|
-
await this.setUserData(refreshTokenKey, JSON.stringify(refreshToken), correlationId, timestamp);
|
|
866
|
+
await this.setUserData(refreshTokenKey, JSON.stringify(refreshToken), correlationId, timestamp, kmsi);
|
|
608
867
|
const tokenKeys = this.getTokenKeys();
|
|
609
868
|
if (tokenKeys.refreshToken.indexOf(refreshTokenKey) === -1) {
|
|
610
869
|
this.logger.info("BrowserCacheManager: addTokenKey - refreshToken added to map");
|
|
@@ -1104,7 +1363,7 @@ class BrowserCacheManager extends CacheManager {
|
|
|
1104
1363
|
idToken: idTokenEntity,
|
|
1105
1364
|
accessToken: accessTokenEntity,
|
|
1106
1365
|
};
|
|
1107
|
-
return this.saveCacheRecord(cacheRecord, result.correlationId);
|
|
1366
|
+
return this.saveCacheRecord(cacheRecord, result.correlationId, AuthToken.isKmsi(AuthToken.extractTokenClaims(result.idToken, base64Decode)));
|
|
1108
1367
|
}
|
|
1109
1368
|
/**
|
|
1110
1369
|
* saves a cache record
|
|
@@ -1112,9 +1371,9 @@ class BrowserCacheManager extends CacheManager {
|
|
|
1112
1371
|
* @param storeInCache {?StoreInCache}
|
|
1113
1372
|
* @param correlationId {?string} correlation id
|
|
1114
1373
|
*/
|
|
1115
|
-
async saveCacheRecord(cacheRecord, correlationId, storeInCache) {
|
|
1374
|
+
async saveCacheRecord(cacheRecord, correlationId, kmsi, storeInCache) {
|
|
1116
1375
|
try {
|
|
1117
|
-
await super.saveCacheRecord(cacheRecord, correlationId, storeInCache);
|
|
1376
|
+
await super.saveCacheRecord(cacheRecord, correlationId, kmsi, storeInCache);
|
|
1118
1377
|
}
|
|
1119
1378
|
catch (e) {
|
|
1120
1379
|
if (e instanceof CacheError &&
|