@azure/msal-browser 5.6.2 → 5.7.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.
Files changed (456) hide show
  1. package/README.md +0 -1
  2. package/dist/app/IPublicClientApplication.mjs +1 -1
  3. package/dist/app/PublicClientApplication.mjs +1 -1
  4. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +2 -3
  5. package/dist/broker/nativeBroker/NativeStatusCodes.mjs.map +1 -1
  6. package/dist/broker/nativeBroker/PlatformAuthDOMHandler.mjs +1 -1
  7. package/dist/broker/nativeBroker/PlatformAuthExtensionHandler.mjs +1 -1
  8. package/dist/broker/nativeBroker/PlatformAuthProvider.d.ts +1 -1
  9. package/dist/broker/nativeBroker/PlatformAuthProvider.mjs +2 -2
  10. package/dist/cache/AccountManager.mjs +1 -1
  11. package/dist/cache/AsyncMemoryStorage.mjs +1 -1
  12. package/dist/cache/BrowserCacheManager.mjs +1 -1
  13. package/dist/cache/CacheHelpers.mjs +1 -1
  14. package/dist/cache/CacheKeys.d.ts +1 -0
  15. package/dist/cache/CacheKeys.d.ts.map +1 -1
  16. package/dist/cache/CacheKeys.mjs +3 -2
  17. package/dist/cache/CacheKeys.mjs.map +1 -1
  18. package/dist/cache/CookieStorage.mjs +1 -1
  19. package/dist/cache/DatabaseStorage.mjs +1 -1
  20. package/dist/cache/EncryptedData.mjs +1 -1
  21. package/dist/cache/LocalStorage.mjs +1 -1
  22. package/dist/cache/MemoryStorage.mjs +1 -1
  23. package/dist/cache/SessionStorage.mjs +1 -1
  24. package/dist/cache/TokenCache.d.ts.map +1 -1
  25. package/dist/cache/TokenCache.mjs +9 -9
  26. package/dist/cache/TokenCache.mjs.map +1 -1
  27. package/dist/config/Configuration.d.ts +20 -1
  28. package/dist/config/Configuration.d.ts.map +1 -1
  29. package/dist/config/Configuration.mjs +10 -2
  30. package/dist/config/Configuration.mjs.map +1 -1
  31. package/dist/controllers/NestedAppAuthController.mjs +1 -1
  32. package/dist/controllers/StandardController.d.ts +20 -2
  33. package/dist/controllers/StandardController.d.ts.map +1 -1
  34. package/dist/controllers/StandardController.mjs +204 -37
  35. package/dist/controllers/StandardController.mjs.map +1 -1
  36. package/dist/crypto/BrowserCrypto.mjs +1 -1
  37. package/dist/crypto/CryptoOps.mjs +1 -1
  38. package/dist/crypto/PkceGenerator.mjs +1 -1
  39. package/dist/crypto/SignedHttpRequest.mjs +1 -1
  40. package/dist/custom-auth-path/app/PublicClientApplication.mjs +1 -1
  41. package/dist/custom-auth-path/broker/nativeBroker/NativeStatusCodes.mjs +2 -3
  42. package/dist/custom-auth-path/broker/nativeBroker/NativeStatusCodes.mjs.map +1 -1
  43. package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthDOMHandler.mjs +1 -1
  44. package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthExtensionHandler.mjs +1 -1
  45. package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthProvider.d.ts +1 -1
  46. package/dist/custom-auth-path/broker/nativeBroker/PlatformAuthProvider.mjs +2 -2
  47. package/dist/custom-auth-path/cache/AccountManager.mjs +1 -1
  48. package/dist/custom-auth-path/cache/AsyncMemoryStorage.mjs +1 -1
  49. package/dist/custom-auth-path/cache/BrowserCacheManager.mjs +1 -1
  50. package/dist/custom-auth-path/cache/CacheHelpers.mjs +1 -1
  51. package/dist/custom-auth-path/cache/CacheKeys.d.ts +1 -0
  52. package/dist/custom-auth-path/cache/CacheKeys.d.ts.map +1 -1
  53. package/dist/custom-auth-path/cache/CacheKeys.mjs +3 -2
  54. package/dist/custom-auth-path/cache/CacheKeys.mjs.map +1 -1
  55. package/dist/custom-auth-path/cache/CookieStorage.mjs +1 -1
  56. package/dist/custom-auth-path/cache/DatabaseStorage.mjs +1 -1
  57. package/dist/custom-auth-path/cache/EncryptedData.mjs +1 -1
  58. package/dist/custom-auth-path/cache/LocalStorage.mjs +1 -1
  59. package/dist/custom-auth-path/cache/MemoryStorage.mjs +1 -1
  60. package/dist/custom-auth-path/cache/SessionStorage.mjs +1 -1
  61. package/dist/custom-auth-path/cache/TokenCache.d.ts.map +1 -1
  62. package/dist/custom-auth-path/config/Configuration.d.ts +20 -1
  63. package/dist/custom-auth-path/config/Configuration.d.ts.map +1 -1
  64. package/dist/custom-auth-path/config/Configuration.mjs +10 -2
  65. package/dist/custom-auth-path/config/Configuration.mjs.map +1 -1
  66. package/dist/custom-auth-path/controllers/StandardController.d.ts +20 -2
  67. package/dist/custom-auth-path/controllers/StandardController.d.ts.map +1 -1
  68. package/dist/custom-auth-path/controllers/StandardController.mjs +204 -37
  69. package/dist/custom-auth-path/controllers/StandardController.mjs.map +1 -1
  70. package/dist/custom-auth-path/crypto/BrowserCrypto.mjs +1 -1
  71. package/dist/custom-auth-path/crypto/CryptoOps.mjs +1 -1
  72. package/dist/custom-auth-path/crypto/PkceGenerator.mjs +1 -1
  73. package/dist/custom-auth-path/custom_auth/CustomAuthConstants.d.ts +1 -1
  74. package/dist/custom-auth-path/custom_auth/CustomAuthConstants.mjs +1 -1
  75. package/dist/custom-auth-path/custom_auth/CustomAuthPublicClientApplication.mjs +1 -1
  76. package/dist/custom-auth-path/custom_auth/controller/CustomAuthStandardController.mjs +1 -1
  77. package/dist/custom-auth-path/custom_auth/core/CustomAuthAuthority.mjs +1 -1
  78. package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowErrorBase.mjs +1 -1
  79. package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowResultBase.mjs +1 -1
  80. package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowState.mjs +1 -1
  81. package/dist/custom-auth-path/custom_auth/core/auth_flow/AuthFlowStateTypes.mjs +1 -1
  82. package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/error_type/AuthMethodRegistrationError.mjs +1 -1
  83. package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/result/AuthMethodRegistrationChallengeMethodResult.mjs +1 -1
  84. package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/result/AuthMethodRegistrationSubmitChallengeResult.mjs +1 -1
  85. package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/state/AuthMethodRegistrationCompletedState.mjs +1 -1
  86. package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/state/AuthMethodRegistrationFailedState.mjs +1 -1
  87. package/dist/custom-auth-path/custom_auth/core/auth_flow/jit/state/AuthMethodRegistrationState.mjs +1 -1
  88. package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/error_type/MfaError.mjs +1 -1
  89. package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/result/MfaRequestChallengeResult.mjs +1 -1
  90. package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/result/MfaSubmitChallengeResult.mjs +1 -1
  91. package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/state/MfaCompletedState.mjs +1 -1
  92. package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/state/MfaFailedState.mjs +1 -1
  93. package/dist/custom-auth-path/custom_auth/core/auth_flow/mfa/state/MfaState.mjs +1 -1
  94. package/dist/custom-auth-path/custom_auth/core/error/CustomAuthApiError.mjs +1 -1
  95. package/dist/custom-auth-path/custom_auth/core/error/CustomAuthError.mjs +1 -1
  96. package/dist/custom-auth-path/custom_auth/core/error/HttpError.mjs +1 -1
  97. package/dist/custom-auth-path/custom_auth/core/error/HttpErrorCodes.mjs +1 -1
  98. package/dist/custom-auth-path/custom_auth/core/error/InvalidArgumentError.mjs +1 -1
  99. package/dist/custom-auth-path/custom_auth/core/error/InvalidConfigurationError.mjs +1 -1
  100. package/dist/custom-auth-path/custom_auth/core/error/InvalidConfigurationErrorCodes.mjs +1 -1
  101. package/dist/custom-auth-path/custom_auth/core/error/MethodNotImplementedError.mjs +1 -1
  102. package/dist/custom-auth-path/custom_auth/core/error/MsalCustomAuthError.mjs +1 -1
  103. package/dist/custom-auth-path/custom_auth/core/error/NoCachedAccountFoundError.mjs +1 -1
  104. package/dist/custom-auth-path/custom_auth/core/error/ParsedUrlError.mjs +1 -1
  105. package/dist/custom-auth-path/custom_auth/core/error/ParsedUrlErrorCodes.mjs +1 -1
  106. package/dist/custom-auth-path/custom_auth/core/error/UnexpectedError.mjs +1 -1
  107. package/dist/custom-auth-path/custom_auth/core/error/UnsupportedEnvironmentError.mjs +1 -1
  108. package/dist/custom-auth-path/custom_auth/core/error/UserAccountAttributeError.mjs +1 -1
  109. package/dist/custom-auth-path/custom_auth/core/error/UserAlreadySignedInError.mjs +1 -1
  110. package/dist/custom-auth-path/custom_auth/core/interaction_client/CustomAuthInteractionClientBase.mjs +1 -1
  111. package/dist/custom-auth-path/custom_auth/core/interaction_client/CustomAuthInterationClientFactory.mjs +1 -1
  112. package/dist/custom-auth-path/custom_auth/core/interaction_client/jit/JitClient.mjs +1 -1
  113. package/dist/custom-auth-path/custom_auth/core/interaction_client/jit/result/JitActionResult.mjs +1 -1
  114. package/dist/custom-auth-path/custom_auth/core/interaction_client/mfa/MfaClient.mjs +1 -1
  115. package/dist/custom-auth-path/custom_auth/core/interaction_client/mfa/result/MfaActionResult.mjs +1 -1
  116. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/BaseApiClient.mjs +1 -1
  117. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/CustomAuthApiClient.mjs +1 -1
  118. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/CustomAuthApiEndpoint.mjs +1 -1
  119. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/RegisterApiClient.mjs +1 -1
  120. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/ResetPasswordApiClient.mjs +1 -1
  121. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/SignInApiClient.mjs +1 -1
  122. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/SignupApiClient.mjs +1 -1
  123. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/types/ApiErrorCodes.mjs +1 -1
  124. package/dist/custom-auth-path/custom_auth/core/network_client/custom_auth_api/types/ApiSuberrors.mjs +1 -1
  125. package/dist/custom-auth-path/custom_auth/core/network_client/http_client/FetchHttpClient.mjs +1 -1
  126. package/dist/custom-auth-path/custom_auth/core/network_client/http_client/IHttpClient.mjs +1 -1
  127. package/dist/custom-auth-path/custom_auth/core/telemetry/PublicApiId.mjs +1 -1
  128. package/dist/custom-auth-path/custom_auth/core/utils/ArgumentValidator.mjs +1 -1
  129. package/dist/custom-auth-path/custom_auth/core/utils/UrlUtils.mjs +1 -1
  130. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/CustomAuthAccountData.mjs +1 -1
  131. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/error_type/GetAccountError.mjs +1 -1
  132. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/result/GetAccessTokenResult.mjs +1 -1
  133. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/result/GetAccountResult.mjs +1 -1
  134. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/result/SignOutResult.mjs +1 -1
  135. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/state/GetAccessTokenState.mjs +1 -1
  136. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/state/GetAccountState.mjs +1 -1
  137. package/dist/custom-auth-path/custom_auth/get_account/auth_flow/state/SignOutState.mjs +1 -1
  138. package/dist/custom-auth-path/custom_auth/get_account/interaction_client/CustomAuthSilentCacheClient.mjs +1 -1
  139. package/dist/custom-auth-path/custom_auth/index.mjs +1 -1
  140. package/dist/custom-auth-path/custom_auth/operating_context/CustomAuthOperatingContext.mjs +1 -1
  141. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/error_type/ResetPasswordError.mjs +1 -1
  142. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordResendCodeResult.mjs +1 -1
  143. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordStartResult.mjs +1 -1
  144. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordSubmitCodeResult.mjs +1 -1
  145. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/result/ResetPasswordSubmitPasswordResult.mjs +1 -1
  146. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordCodeRequiredState.mjs +1 -1
  147. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordCompletedState.mjs +1 -1
  148. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordFailedState.mjs +1 -1
  149. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordPasswordRequiredState.mjs +1 -1
  150. package/dist/custom-auth-path/custom_auth/reset_password/auth_flow/state/ResetPasswordState.mjs +1 -1
  151. package/dist/custom-auth-path/custom_auth/reset_password/interaction_client/ResetPasswordClient.mjs +1 -1
  152. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/SignInScenario.mjs +1 -1
  153. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/error_type/SignInError.mjs +1 -1
  154. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInResendCodeResult.mjs +1 -1
  155. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInResult.mjs +1 -1
  156. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInSubmitCodeResult.mjs +1 -1
  157. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/result/SignInSubmitPasswordResult.mjs +1 -1
  158. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInCodeRequiredState.mjs +1 -1
  159. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInCompletedState.mjs +1 -1
  160. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInContinuationState.mjs +1 -1
  161. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInFailedState.mjs +1 -1
  162. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInPasswordRequiredState.mjs +1 -1
  163. package/dist/custom-auth-path/custom_auth/sign_in/auth_flow/state/SignInState.mjs +1 -1
  164. package/dist/custom-auth-path/custom_auth/sign_in/interaction_client/SignInClient.mjs +1 -1
  165. package/dist/custom-auth-path/custom_auth/sign_in/interaction_client/result/SignInActionResult.mjs +1 -1
  166. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/error_type/SignUpError.mjs +1 -1
  167. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpResendCodeResult.mjs +1 -1
  168. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpResult.mjs +1 -1
  169. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpSubmitAttributesResult.mjs +1 -1
  170. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpSubmitCodeResult.mjs +1 -1
  171. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/result/SignUpSubmitPasswordResult.mjs +1 -1
  172. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpAttributesRequiredState.mjs +1 -1
  173. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpCodeRequiredState.mjs +1 -1
  174. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpCompletedState.mjs +1 -1
  175. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpFailedState.mjs +1 -1
  176. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpPasswordRequiredState.mjs +1 -1
  177. package/dist/custom-auth-path/custom_auth/sign_up/auth_flow/state/SignUpState.mjs +1 -1
  178. package/dist/custom-auth-path/custom_auth/sign_up/interaction_client/SignUpClient.mjs +1 -1
  179. package/dist/custom-auth-path/custom_auth/sign_up/interaction_client/result/SignUpActionResult.mjs +1 -1
  180. package/dist/custom-auth-path/encode/Base64Decode.mjs +1 -1
  181. package/dist/custom-auth-path/encode/Base64Encode.mjs +1 -1
  182. package/dist/custom-auth-path/error/BrowserAuthError.mjs +1 -1
  183. package/dist/custom-auth-path/error/BrowserAuthErrorCodes.mjs +1 -1
  184. package/dist/custom-auth-path/error/BrowserConfigurationAuthError.mjs +1 -1
  185. package/dist/custom-auth-path/error/BrowserConfigurationAuthErrorCodes.mjs +1 -1
  186. package/dist/custom-auth-path/error/NativeAuthError.d.ts.map +1 -1
  187. package/dist/custom-auth-path/error/NativeAuthError.mjs +3 -4
  188. package/dist/custom-auth-path/error/NativeAuthError.mjs.map +1 -1
  189. package/dist/custom-auth-path/error/NativeAuthErrorCodes.mjs +1 -1
  190. package/dist/custom-auth-path/event/EventHandler.mjs +1 -1
  191. package/dist/custom-auth-path/event/EventType.mjs +1 -1
  192. package/dist/custom-auth-path/index.d.ts +1 -1
  193. package/dist/custom-auth-path/index.d.ts.map +1 -1
  194. package/dist/custom-auth-path/interaction_client/BaseInteractionClient.mjs +1 -1
  195. package/dist/custom-auth-path/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
  196. package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.d.ts +12 -12
  197. package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
  198. package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.mjs +39 -26
  199. package/dist/custom-auth-path/interaction_client/PlatformAuthInteractionClient.mjs.map +1 -1
  200. package/dist/custom-auth-path/interaction_client/PopupClient.d.ts.map +1 -1
  201. package/dist/custom-auth-path/interaction_client/PopupClient.mjs +6 -2
  202. package/dist/custom-auth-path/interaction_client/PopupClient.mjs.map +1 -1
  203. package/dist/custom-auth-path/interaction_client/RedirectClient.d.ts.map +1 -1
  204. package/dist/custom-auth-path/interaction_client/RedirectClient.mjs +6 -2
  205. package/dist/custom-auth-path/interaction_client/RedirectClient.mjs.map +1 -1
  206. package/dist/custom-auth-path/interaction_client/SilentAuthCodeClient.mjs +1 -1
  207. package/dist/custom-auth-path/interaction_client/SilentCacheClient.mjs +1 -1
  208. package/dist/custom-auth-path/interaction_client/SilentIframeClient.d.ts +14 -0
  209. package/dist/custom-auth-path/interaction_client/SilentIframeClient.d.ts.map +1 -1
  210. package/dist/custom-auth-path/interaction_client/SilentIframeClient.mjs +47 -5
  211. package/dist/custom-auth-path/interaction_client/SilentIframeClient.mjs.map +1 -1
  212. package/dist/custom-auth-path/interaction_client/SilentRefreshClient.mjs +1 -1
  213. package/dist/custom-auth-path/interaction_client/StandardInteractionClient.mjs +1 -1
  214. package/dist/custom-auth-path/interaction_handler/InteractionHandler.mjs +1 -1
  215. package/dist/custom-auth-path/interaction_handler/SilentHandler.mjs +1 -1
  216. package/dist/custom-auth-path/log-strings-mapping.json +67 -15
  217. package/dist/custom-auth-path/navigation/NavigationClient.mjs +1 -1
  218. package/dist/custom-auth-path/network/FetchClient.mjs +1 -1
  219. package/dist/custom-auth-path/operatingcontext/BaseOperatingContext.mjs +1 -1
  220. package/dist/custom-auth-path/operatingcontext/StandardOperatingContext.mjs +1 -1
  221. package/dist/custom-auth-path/packageMetadata.d.ts +1 -1
  222. package/dist/custom-auth-path/packageMetadata.mjs +2 -2
  223. package/dist/custom-auth-path/protocol/Authorize.d.ts.map +1 -1
  224. package/dist/custom-auth-path/protocol/Authorize.mjs +5 -1
  225. package/dist/custom-auth-path/protocol/Authorize.mjs.map +1 -1
  226. package/dist/custom-auth-path/redirect_bridge/index.d.ts.map +1 -1
  227. package/dist/custom-auth-path/request/RequestHelpers.mjs +1 -1
  228. package/dist/custom-auth-path/response/ResponseHandler.mjs +1 -1
  229. package/dist/custom-auth-path/telemetry/BrowserPerformanceClient.d.ts +1 -0
  230. package/dist/custom-auth-path/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  231. package/dist/custom-auth-path/telemetry/BrowserPerformanceEvents.d.ts +6 -0
  232. package/dist/custom-auth-path/telemetry/BrowserPerformanceEvents.d.ts.map +1 -1
  233. package/dist/custom-auth-path/telemetry/BrowserPerformanceEvents.mjs +9 -3
  234. package/dist/custom-auth-path/telemetry/BrowserPerformanceEvents.mjs.map +1 -1
  235. package/dist/custom-auth-path/telemetry/BrowserRootPerformanceEvents.d.ts +6 -0
  236. package/dist/custom-auth-path/telemetry/BrowserRootPerformanceEvents.d.ts.map +1 -1
  237. package/dist/custom-auth-path/telemetry/BrowserRootPerformanceEvents.mjs +8 -3
  238. package/dist/custom-auth-path/telemetry/BrowserRootPerformanceEvents.mjs.map +1 -1
  239. package/dist/custom-auth-path/utils/BrowserConstants.mjs +1 -1
  240. package/dist/custom-auth-path/utils/BrowserProtocolUtils.mjs +1 -1
  241. package/dist/custom-auth-path/utils/BrowserUtils.d.ts +2 -2
  242. package/dist/custom-auth-path/utils/BrowserUtils.d.ts.map +1 -1
  243. package/dist/custom-auth-path/utils/BrowserUtils.mjs +27 -3
  244. package/dist/custom-auth-path/utils/BrowserUtils.mjs.map +1 -1
  245. package/dist/custom-auth-path/utils/Helpers.mjs +1 -1
  246. package/dist/custom-auth-path/utils/MsalFrameStatsUtils.mjs +1 -1
  247. package/dist/custom_auth/CustomAuthConstants.d.ts +1 -1
  248. package/dist/encode/Base64Decode.mjs +1 -1
  249. package/dist/encode/Base64Encode.mjs +1 -1
  250. package/dist/error/BrowserAuthError.mjs +1 -1
  251. package/dist/error/BrowserAuthErrorCodes.mjs +1 -1
  252. package/dist/error/BrowserConfigurationAuthError.mjs +1 -1
  253. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +1 -1
  254. package/dist/error/NativeAuthError.d.ts.map +1 -1
  255. package/dist/error/NativeAuthError.mjs +3 -4
  256. package/dist/error/NativeAuthError.mjs.map +1 -1
  257. package/dist/error/NativeAuthErrorCodes.mjs +1 -1
  258. package/dist/error/NestedAppAuthError.mjs +1 -1
  259. package/dist/event/EventHandler.mjs +1 -1
  260. package/dist/event/EventMessage.mjs +1 -1
  261. package/dist/event/EventType.mjs +1 -1
  262. package/dist/index.d.ts +1 -1
  263. package/dist/index.d.ts.map +1 -1
  264. package/dist/index.mjs +1 -1
  265. package/dist/index.mjs.map +1 -1
  266. package/dist/interaction_client/BaseInteractionClient.mjs +1 -1
  267. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
  268. package/dist/interaction_client/PlatformAuthInteractionClient.d.ts +12 -12
  269. package/dist/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
  270. package/dist/interaction_client/PlatformAuthInteractionClient.mjs +39 -26
  271. package/dist/interaction_client/PlatformAuthInteractionClient.mjs.map +1 -1
  272. package/dist/interaction_client/PopupClient.d.ts.map +1 -1
  273. package/dist/interaction_client/PopupClient.mjs +6 -2
  274. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  275. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  276. package/dist/interaction_client/RedirectClient.mjs +6 -2
  277. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  278. package/dist/interaction_client/SilentAuthCodeClient.mjs +1 -1
  279. package/dist/interaction_client/SilentCacheClient.mjs +1 -1
  280. package/dist/interaction_client/SilentIframeClient.d.ts +14 -0
  281. package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
  282. package/dist/interaction_client/SilentIframeClient.mjs +47 -5
  283. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  284. package/dist/interaction_client/SilentRefreshClient.mjs +1 -1
  285. package/dist/interaction_client/StandardInteractionClient.mjs +1 -1
  286. package/dist/interaction_handler/InteractionHandler.mjs +1 -1
  287. package/dist/interaction_handler/SilentHandler.mjs +1 -1
  288. package/dist/log-strings-mapping.json +75 -23
  289. package/dist/naa/BridgeError.mjs +1 -1
  290. package/dist/naa/BridgeProxy.mjs +1 -1
  291. package/dist/naa/BridgeStatusCode.mjs +1 -1
  292. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +1 -1
  293. package/dist/navigation/NavigationClient.mjs +1 -1
  294. package/dist/network/FetchClient.mjs +1 -1
  295. package/dist/operatingcontext/BaseOperatingContext.mjs +1 -1
  296. package/dist/operatingcontext/NestedAppOperatingContext.mjs +1 -1
  297. package/dist/operatingcontext/StandardOperatingContext.mjs +1 -1
  298. package/dist/packageMetadata.d.ts +1 -1
  299. package/dist/packageMetadata.mjs +2 -2
  300. package/dist/protocol/Authorize.d.ts.map +1 -1
  301. package/dist/protocol/Authorize.mjs +5 -1
  302. package/dist/protocol/Authorize.mjs.map +1 -1
  303. package/dist/redirect-bridge/broker/nativeBroker/PlatformAuthProvider.d.ts +1 -1
  304. package/dist/redirect-bridge/cache/CacheKeys.d.ts +1 -0
  305. package/dist/redirect-bridge/cache/CacheKeys.d.ts.map +1 -1
  306. package/dist/redirect-bridge/cache/CacheKeys.mjs +1 -1
  307. package/dist/redirect-bridge/cache/TokenCache.d.ts.map +1 -1
  308. package/dist/redirect-bridge/config/Configuration.d.ts +20 -1
  309. package/dist/redirect-bridge/config/Configuration.d.ts.map +1 -1
  310. package/dist/redirect-bridge/config/Configuration.mjs +1 -1
  311. package/dist/redirect-bridge/controllers/StandardController.d.ts +20 -2
  312. package/dist/redirect-bridge/controllers/StandardController.d.ts.map +1 -1
  313. package/dist/redirect-bridge/custom_auth/CustomAuthConstants.d.ts +1 -1
  314. package/dist/redirect-bridge/encode/Base64Decode.mjs +1 -1
  315. package/dist/redirect-bridge/error/BrowserAuthError.mjs +1 -1
  316. package/dist/redirect-bridge/error/BrowserAuthErrorCodes.mjs +1 -1
  317. package/dist/redirect-bridge/error/NativeAuthError.d.ts.map +1 -1
  318. package/dist/redirect-bridge/index.d.ts +1 -1
  319. package/dist/redirect-bridge/index.d.ts.map +1 -1
  320. package/dist/redirect-bridge/interaction_client/PlatformAuthInteractionClient.d.ts +12 -12
  321. package/dist/redirect-bridge/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
  322. package/dist/redirect-bridge/interaction_client/PopupClient.d.ts.map +1 -1
  323. package/dist/redirect-bridge/interaction_client/RedirectClient.d.ts.map +1 -1
  324. package/dist/redirect-bridge/interaction_client/SilentIframeClient.d.ts +14 -0
  325. package/dist/redirect-bridge/interaction_client/SilentIframeClient.d.ts.map +1 -1
  326. package/dist/redirect-bridge/navigation/NavigationClient.mjs +1 -1
  327. package/dist/redirect-bridge/packageMetadata.d.ts +1 -1
  328. package/dist/redirect-bridge/protocol/Authorize.d.ts.map +1 -1
  329. package/dist/redirect-bridge/redirect_bridge/index.d.ts.map +1 -1
  330. package/dist/redirect-bridge/redirect_bridge/index.mjs +11 -7
  331. package/dist/redirect-bridge/redirect_bridge/index.mjs.map +1 -1
  332. package/dist/redirect-bridge/telemetry/BrowserPerformanceClient.d.ts +1 -0
  333. package/dist/redirect-bridge/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  334. package/dist/redirect-bridge/telemetry/BrowserPerformanceEvents.d.ts +6 -0
  335. package/dist/redirect-bridge/telemetry/BrowserPerformanceEvents.d.ts.map +1 -1
  336. package/dist/redirect-bridge/telemetry/BrowserRootPerformanceEvents.d.ts +6 -0
  337. package/dist/redirect-bridge/telemetry/BrowserRootPerformanceEvents.d.ts.map +1 -1
  338. package/dist/redirect-bridge/utils/BrowserConstants.mjs +7 -3
  339. package/dist/redirect-bridge/utils/BrowserConstants.mjs.map +1 -1
  340. package/dist/redirect-bridge/utils/BrowserUtils.d.ts +2 -2
  341. package/dist/redirect-bridge/utils/BrowserUtils.d.ts.map +1 -1
  342. package/dist/redirect-bridge/utils/BrowserUtils.mjs +1 -1
  343. package/dist/redirect-bridge/utils/BrowserUtils.mjs.map +1 -1
  344. package/dist/redirect_bridge/index.d.ts.map +1 -1
  345. package/dist/request/RequestHelpers.mjs +1 -1
  346. package/dist/response/ResponseHandler.mjs +1 -1
  347. package/dist/telemetry/BrowserPerformanceClient.d.ts +1 -0
  348. package/dist/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  349. package/dist/telemetry/BrowserPerformanceClient.mjs +6 -1
  350. package/dist/telemetry/BrowserPerformanceClient.mjs.map +1 -1
  351. package/dist/telemetry/BrowserPerformanceEvents.d.ts +6 -0
  352. package/dist/telemetry/BrowserPerformanceEvents.d.ts.map +1 -1
  353. package/dist/telemetry/BrowserPerformanceEvents.mjs +9 -3
  354. package/dist/telemetry/BrowserPerformanceEvents.mjs.map +1 -1
  355. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +1 -1
  356. package/dist/telemetry/BrowserRootPerformanceEvents.d.ts +6 -0
  357. package/dist/telemetry/BrowserRootPerformanceEvents.d.ts.map +1 -1
  358. package/dist/telemetry/BrowserRootPerformanceEvents.mjs +10 -3
  359. package/dist/telemetry/BrowserRootPerformanceEvents.mjs.map +1 -1
  360. package/dist/utils/BrowserConstants.mjs +1 -1
  361. package/dist/utils/BrowserProtocolUtils.mjs +1 -1
  362. package/dist/utils/BrowserUtils.d.ts +2 -2
  363. package/dist/utils/BrowserUtils.d.ts.map +1 -1
  364. package/dist/utils/BrowserUtils.mjs +27 -3
  365. package/dist/utils/BrowserUtils.mjs.map +1 -1
  366. package/dist/utils/Helpers.mjs +1 -1
  367. package/dist/utils/MsalFrameStatsUtils.mjs +1 -1
  368. package/lib/custom-auth-path/log-strings-mapping.json +67 -15
  369. package/lib/custom-auth-path/msal-custom-auth.cjs +897 -617
  370. package/lib/custom-auth-path/msal-custom-auth.cjs.map +1 -1
  371. package/lib/custom-auth-path/types/broker/nativeBroker/PlatformAuthProvider.d.ts +1 -1
  372. package/lib/custom-auth-path/types/cache/CacheKeys.d.ts +1 -0
  373. package/lib/custom-auth-path/types/cache/CacheKeys.d.ts.map +1 -1
  374. package/lib/custom-auth-path/types/cache/TokenCache.d.ts.map +1 -1
  375. package/lib/custom-auth-path/types/config/Configuration.d.ts +20 -1
  376. package/lib/custom-auth-path/types/config/Configuration.d.ts.map +1 -1
  377. package/lib/custom-auth-path/types/controllers/StandardController.d.ts +20 -2
  378. package/lib/custom-auth-path/types/controllers/StandardController.d.ts.map +1 -1
  379. package/lib/custom-auth-path/types/custom_auth/CustomAuthConstants.d.ts +1 -1
  380. package/lib/custom-auth-path/types/error/NativeAuthError.d.ts.map +1 -1
  381. package/lib/custom-auth-path/types/index.d.ts +1 -1
  382. package/lib/custom-auth-path/types/index.d.ts.map +1 -1
  383. package/lib/custom-auth-path/types/interaction_client/PlatformAuthInteractionClient.d.ts +12 -12
  384. package/lib/custom-auth-path/types/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
  385. package/lib/custom-auth-path/types/interaction_client/PopupClient.d.ts.map +1 -1
  386. package/lib/custom-auth-path/types/interaction_client/RedirectClient.d.ts.map +1 -1
  387. package/lib/custom-auth-path/types/interaction_client/SilentIframeClient.d.ts +14 -0
  388. package/lib/custom-auth-path/types/interaction_client/SilentIframeClient.d.ts.map +1 -1
  389. package/lib/custom-auth-path/types/packageMetadata.d.ts +1 -1
  390. package/lib/custom-auth-path/types/protocol/Authorize.d.ts.map +1 -1
  391. package/lib/custom-auth-path/types/redirect_bridge/index.d.ts.map +1 -1
  392. package/lib/custom-auth-path/types/telemetry/BrowserPerformanceClient.d.ts +1 -0
  393. package/lib/custom-auth-path/types/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  394. package/lib/custom-auth-path/types/telemetry/BrowserPerformanceEvents.d.ts +6 -0
  395. package/lib/custom-auth-path/types/telemetry/BrowserPerformanceEvents.d.ts.map +1 -1
  396. package/lib/custom-auth-path/types/telemetry/BrowserRootPerformanceEvents.d.ts +6 -0
  397. package/lib/custom-auth-path/types/telemetry/BrowserRootPerformanceEvents.d.ts.map +1 -1
  398. package/lib/custom-auth-path/types/utils/BrowserUtils.d.ts +2 -2
  399. package/lib/custom-auth-path/types/utils/BrowserUtils.d.ts.map +1 -1
  400. package/lib/log-strings-mapping.json +75 -23
  401. package/lib/msal-browser.cjs +1045 -755
  402. package/lib/msal-browser.cjs.map +1 -1
  403. package/lib/msal-browser.js +1045 -755
  404. package/lib/msal-browser.js.map +1 -1
  405. package/lib/msal-browser.min.js +2 -2
  406. package/lib/redirect-bridge/msal-redirect-bridge.js +24 -16
  407. package/lib/redirect-bridge/msal-redirect-bridge.js.map +1 -1
  408. package/lib/redirect-bridge/msal-redirect-bridge.min.js +2 -2
  409. package/lib/types/broker/nativeBroker/PlatformAuthProvider.d.ts +1 -1
  410. package/lib/types/cache/CacheKeys.d.ts +1 -0
  411. package/lib/types/cache/CacheKeys.d.ts.map +1 -1
  412. package/lib/types/cache/TokenCache.d.ts.map +1 -1
  413. package/lib/types/config/Configuration.d.ts +20 -1
  414. package/lib/types/config/Configuration.d.ts.map +1 -1
  415. package/lib/types/controllers/StandardController.d.ts +20 -2
  416. package/lib/types/controllers/StandardController.d.ts.map +1 -1
  417. package/lib/types/custom_auth/CustomAuthConstants.d.ts +1 -1
  418. package/lib/types/error/NativeAuthError.d.ts.map +1 -1
  419. package/lib/types/index.d.ts +1 -1
  420. package/lib/types/index.d.ts.map +1 -1
  421. package/lib/types/interaction_client/PlatformAuthInteractionClient.d.ts +12 -12
  422. package/lib/types/interaction_client/PlatformAuthInteractionClient.d.ts.map +1 -1
  423. package/lib/types/interaction_client/PopupClient.d.ts.map +1 -1
  424. package/lib/types/interaction_client/RedirectClient.d.ts.map +1 -1
  425. package/lib/types/interaction_client/SilentIframeClient.d.ts +14 -0
  426. package/lib/types/interaction_client/SilentIframeClient.d.ts.map +1 -1
  427. package/lib/types/packageMetadata.d.ts +1 -1
  428. package/lib/types/protocol/Authorize.d.ts.map +1 -1
  429. package/lib/types/redirect_bridge/index.d.ts.map +1 -1
  430. package/lib/types/telemetry/BrowserPerformanceClient.d.ts +1 -0
  431. package/lib/types/telemetry/BrowserPerformanceClient.d.ts.map +1 -1
  432. package/lib/types/telemetry/BrowserPerformanceEvents.d.ts +6 -0
  433. package/lib/types/telemetry/BrowserPerformanceEvents.d.ts.map +1 -1
  434. package/lib/types/telemetry/BrowserRootPerformanceEvents.d.ts +6 -0
  435. package/lib/types/telemetry/BrowserRootPerformanceEvents.d.ts.map +1 -1
  436. package/lib/types/utils/BrowserUtils.d.ts +2 -2
  437. package/lib/types/utils/BrowserUtils.d.ts.map +1 -1
  438. package/package.json +2 -2
  439. package/src/broker/nativeBroker/PlatformAuthProvider.ts +1 -1
  440. package/src/cache/CacheKeys.ts +1 -0
  441. package/src/cache/TokenCache.ts +27 -24
  442. package/src/config/Configuration.ts +30 -0
  443. package/src/controllers/StandardController.ts +316 -69
  444. package/src/error/NativeAuthError.ts +1 -2
  445. package/src/index.ts +1 -0
  446. package/src/interaction_client/PlatformAuthInteractionClient.ts +99 -76
  447. package/src/interaction_client/PopupClient.ts +10 -0
  448. package/src/interaction_client/RedirectClient.ts +10 -0
  449. package/src/interaction_client/SilentIframeClient.ts +127 -22
  450. package/src/packageMetadata.ts +1 -1
  451. package/src/protocol/Authorize.ts +8 -0
  452. package/src/redirect_bridge/index.ts +12 -5
  453. package/src/telemetry/BrowserPerformanceClient.ts +6 -0
  454. package/src/telemetry/BrowserPerformanceEvents.ts +9 -0
  455. package/src/telemetry/BrowserRootPerformanceEvents.ts +7 -0
  456. package/src/utils/BrowserUtils.ts +36 -4
@@ -36,6 +36,7 @@ import {
36
36
  BrowserCacheManager,
37
37
  DEFAULT_BROWSER_CACHE_MANAGER,
38
38
  } from "../cache/BrowserCacheManager.js";
39
+ import * as CacheKeys from "../cache/CacheKeys.js";
39
40
  import * as AccountManager from "../cache/AccountManager.js";
40
41
  import { BrowserConfiguration, CacheOptions } from "../config/Configuration.js";
41
42
  import {
@@ -260,11 +261,11 @@ export class StandardController implements IController {
260
261
  this.activeSilentTokenRequests = new Map();
261
262
 
262
263
  // Register listener functions
263
- this.trackPageVisibility = this.trackPageVisibility.bind(this);
264
+ this.trackStateChange = this.trackStateChange.bind(this);
264
265
 
265
266
  // Register listener functions
266
- this.trackPageVisibilityWithMeasurement =
267
- this.trackPageVisibilityWithMeasurement.bind(this);
267
+ this.trackStateChangeWithMeasurement =
268
+ this.trackStateChangeWithMeasurement.bind(this);
268
269
  }
269
270
 
270
271
  static async createController(
@@ -276,15 +277,39 @@ export class StandardController implements IController {
276
277
  return controller;
277
278
  }
278
279
 
279
- private trackPageVisibility(correlationId?: string): void {
280
+ private trackStateChange(
281
+ correlationId: string | undefined,
282
+ event: Event
283
+ ): void {
280
284
  if (!correlationId) {
281
285
  return;
282
286
  }
283
- this.logger.info("Perf: Visibility change detected", correlationId);
284
- this.performanceClient.incrementFields(
285
- { visibilityChangeCount: 1 },
286
- correlationId
287
- );
287
+
288
+ if (event.type === "visibilitychange") {
289
+ this.logger.info("Perf: Visibility change detected", correlationId);
290
+ this.performanceClient.incrementFields(
291
+ { visibilityChangeCount: 1 },
292
+ correlationId
293
+ );
294
+ } else if (event.type === "online") {
295
+ this.logger.info(
296
+ "Perf: Online status change detected",
297
+ correlationId
298
+ );
299
+ this.performanceClient.incrementFields(
300
+ { onlineStatusChangeCount: 1 },
301
+ correlationId
302
+ );
303
+ } else if (event.type === "offline") {
304
+ this.logger.info(
305
+ "Perf: Offline status change detected",
306
+ correlationId
307
+ );
308
+ this.performanceClient.incrementFields(
309
+ { onlineStatusChangeCount: 1 },
310
+ correlationId
311
+ );
312
+ }
288
313
  }
289
314
 
290
315
  /**
@@ -442,14 +467,12 @@ export class StandardController implements IController {
442
467
  const loggedInAccounts = this.getAllAccounts();
443
468
  const platformBrokerRequest: PlatformAuthRequest | null =
444
469
  this.browserStorage.getCachedNativeRequest();
445
- const useNative =
446
- platformBrokerRequest &&
447
- this.platformAuthProvider &&
448
- !options?.hash;
470
+ const useNative = platformBrokerRequest && !options?.hash;
449
471
 
450
472
  let rootMeasurement: InProgressPerformanceEvent;
451
473
 
452
474
  let redirectResponse: Promise<AuthenticationResult | null>;
475
+ let cachedRedirectRequest: SsoSilentRequest | undefined;
453
476
  try {
454
477
  if (useNative && this.platformAuthProvider) {
455
478
  const correlationId =
@@ -467,6 +490,9 @@ export class StandardController implements IController {
467
490
  "handleRedirectPromise - acquiring token from native platform",
468
491
  correlationId
469
492
  );
493
+ rootMeasurement.add({
494
+ isPlatformBrokerRequest: true,
495
+ });
470
496
  const nativeClient = new PlatformAuthInteractionClient(
471
497
  this.config,
472
498
  this.browserStorage,
@@ -488,10 +514,11 @@ export class StandardController implements IController {
488
514
  this.logger,
489
515
  this.performanceClient,
490
516
  rootMeasurement.event.correlationId
491
- )(this.performanceClient, rootMeasurement.event.correlationId);
517
+ )();
492
518
  } else {
493
519
  const [standardRequest, codeVerifier] =
494
520
  this.browserStorage.getCachedRequest("");
521
+ cachedRedirectRequest = standardRequest;
495
522
  const correlationId = standardRequest.correlationId;
496
523
  this.eventHandler.emitEvent(
497
524
  EventType.HANDLE_REDIRECT_START,
@@ -557,6 +584,12 @@ export class StandardController implements IController {
557
584
  undefined,
558
585
  result.account
559
586
  );
587
+
588
+ // Fire-and-forget SSO capability verification in background
589
+ this.verifySsoCapability(
590
+ cachedRedirectRequest,
591
+ InteractionType.Redirect
592
+ );
560
593
  } else {
561
594
  /*
562
595
  * Instrument an event only if an error code is set. Otherwise, discard it when the redirect response
@@ -681,28 +714,36 @@ export class StandardController implements IController {
681
714
  this.nativeInternalStorage,
682
715
  correlationId
683
716
  );
684
- result = nativeClient
685
- .acquireTokenRedirect(request, atrMeasurement)
686
- .catch((e: AuthError) => {
687
- if (
688
- e instanceof NativeAuthError &&
689
- isFatalNativeAuthError(e)
690
- ) {
691
- this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt
692
- const redirectClient =
693
- this.createRedirectClient(correlationId);
694
- return redirectClient.acquireToken(request);
695
- } else if (e instanceof InteractionRequiredAuthError) {
696
- this.logger.verbose(
697
- "acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow",
698
- correlationId
699
- );
700
- const redirectClient =
701
- this.createRedirectClient(correlationId);
702
- return redirectClient.acquireToken(request);
703
- }
704
- throw e;
717
+ result = invokeAsync(
718
+ nativeClient.acquireTokenRedirect.bind(nativeClient),
719
+ BrowserPerformanceEvents.NativeInteractionClientAcquireTokenRedirect,
720
+ this.logger,
721
+ this.performanceClient,
722
+ correlationId
723
+ )(request, atrMeasurement).catch((e: AuthError) => {
724
+ atrMeasurement.add({
725
+ brokerErrorName: e.name,
726
+ brokerErrorCode: e.errorCode,
705
727
  });
728
+ if (
729
+ e instanceof NativeAuthError &&
730
+ isFatalNativeAuthError(e)
731
+ ) {
732
+ this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt platform broker calls
733
+ const redirectClient =
734
+ this.createRedirectClient(correlationId);
735
+ return redirectClient.acquireToken(request);
736
+ } else if (e instanceof InteractionRequiredAuthError) {
737
+ this.logger.verbose(
738
+ "acquireTokenRedirect - Resolving interaction required error thrown by native broker by falling back to web flow",
739
+ correlationId
740
+ );
741
+ const redirectClient =
742
+ this.createRedirectClient(correlationId);
743
+ return redirectClient.acquireToken(request);
744
+ }
745
+ throw e;
746
+ });
706
747
  } else {
707
748
  const redirectClient = this.createRedirectClient(correlationId);
708
749
  result = redirectClient.acquireToken(request);
@@ -791,6 +832,9 @@ export class StandardController implements IController {
791
832
  const pkce = this.getPreGeneratedPkceCodes(correlationId);
792
833
 
793
834
  if (this.canUsePlatformBroker(request)) {
835
+ atPopupMeasurement.add({
836
+ isPlatformBrokerRequest: true,
837
+ });
794
838
  result = this.acquireTokenNative(
795
839
  {
796
840
  ...request,
@@ -810,11 +854,15 @@ export class StandardController implements IController {
810
854
  return response;
811
855
  })
812
856
  .catch((e: AuthError) => {
857
+ atPopupMeasurement.add({
858
+ brokerErrorName: e.name,
859
+ brokerErrorCode: e.errorCode,
860
+ });
813
861
  if (
814
862
  e instanceof NativeAuthError &&
815
863
  isFatalNativeAuthError(e)
816
864
  ) {
817
- this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt
865
+ this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt platform broker calls
818
866
  const popupClient =
819
867
  this.createPopupClient(correlationId);
820
868
  return popupClient.acquireToken(request, pkce);
@@ -865,6 +913,10 @@ export class StandardController implements IController {
865
913
  undefined,
866
914
  result.account
867
915
  );
916
+
917
+ // SSO capability verification in background
918
+ this.verifySsoCapability(request, InteractionType.Popup);
919
+
868
920
  return result;
869
921
  })
870
922
  .catch((e: Error) => {
@@ -894,7 +946,7 @@ export class StandardController implements IController {
894
946
  });
895
947
  }
896
948
 
897
- private trackPageVisibilityWithMeasurement(): void {
949
+ private trackStateChangeWithMeasurement(event: Event): void {
898
950
  const measurement =
899
951
  this.ssoSilentMeasurement ||
900
952
  this.acquireTokenByCodeAsyncMeasurement;
@@ -902,10 +954,183 @@ export class StandardController implements IController {
902
954
  return;
903
955
  }
904
956
 
905
- measurement.increment({
906
- visibilityChangeCount: 1,
957
+ if (event.type === "visibilitychange") {
958
+ this.logger.info(
959
+ `Perf: Visibility change detected in '${measurement.event.name}'`,
960
+ measurement.event.correlationId
961
+ );
962
+ measurement.increment({
963
+ visibilityChangeCount: 1,
964
+ });
965
+ } else if (event.type === "online") {
966
+ this.logger.info(
967
+ `Perf: Online status change detected in '${measurement.event.name}'`,
968
+ measurement.event.correlationId
969
+ );
970
+ measurement.increment({
971
+ onlineStatusChangeCount: 1,
972
+ });
973
+ } else if (event.type === "offline") {
974
+ this.logger.info(
975
+ `Perf: Offline status change detected in '${measurement.event.name}'`,
976
+ measurement.event.correlationId
977
+ );
978
+ measurement.increment({
979
+ onlineStatusChangeCount: 1,
980
+ });
981
+ }
982
+ }
983
+
984
+ private addStateChangeListeners(listener: (event: Event) => void): void {
985
+ document.addEventListener("visibilitychange", listener);
986
+ window.addEventListener("online", listener);
987
+ window.addEventListener("offline", listener);
988
+ }
989
+
990
+ private removeStateChangeListeners(listener: (event: Event) => void): void {
991
+ document.removeEventListener("visibilitychange", listener);
992
+ window.removeEventListener("online", listener);
993
+ window.removeEventListener("offline", listener);
994
+ }
995
+
996
+ /**
997
+ * Reads the cached ssoCapable value from localStorage.
998
+ * @returns The cached ssoCapable boolean value, or undefined if not cached or expired.
999
+ */
1000
+ private getCachedSsoCapable(): boolean | undefined {
1001
+ try {
1002
+ const cachedValue = window.localStorage.getItem(
1003
+ CacheKeys.SSO_CAPABLE
1004
+ );
1005
+ if (cachedValue) {
1006
+ const parsed = JSON.parse(cachedValue);
1007
+ if (
1008
+ parsed &&
1009
+ typeof parsed.ssoCapable === "boolean" &&
1010
+ parsed.expiresOn &&
1011
+ Date.now() < parsed.expiresOn
1012
+ ) {
1013
+ return parsed.ssoCapable;
1014
+ }
1015
+ }
1016
+ } catch {
1017
+ // If parsing fails, return undefined
1018
+ }
1019
+ return undefined;
1020
+ }
1021
+
1022
+ /**
1023
+ * SSO capability verification in the background.
1024
+ * This method makes an iframe request to /authorize to verify SSO capability without calling /token.
1025
+ * This method does not block the caller and tracks telemetry for success/failure.
1026
+ * This method only executes if verifySSO is set to true in the auth configuration.
1027
+ * The result is cached in localStorage with a 24-hour TTL; the SSO verification call
1028
+ * is only attempted when the cached value is absent or expired.
1029
+ * @param request - The original request used for the authentication flow
1030
+ * @param interactionType - The interactionType of the AT operation for logging purposes
1031
+ */
1032
+ private verifySsoCapability(
1033
+ request: SsoSilentRequest | undefined,
1034
+ interactionType: InteractionType
1035
+ ): void {
1036
+ // Check if SSO capability verification is enabled
1037
+ if (!this.config.auth.verifySSO) {
1038
+ return;
1039
+ }
1040
+
1041
+ // Check TTL: derive ssoCapable state from localStorage and skip if not expired
1042
+ const ssoCacheKey = CacheKeys.SSO_CAPABLE;
1043
+ const SSO_CAPABLE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours
1044
+ const cachedSsoCapable = this.getCachedSsoCapable();
1045
+ if (cachedSsoCapable !== undefined) {
1046
+ this.logger.verbose(
1047
+ `SSO capability verification skipped - cached value has not expired (interactionType: '${interactionType}')`,
1048
+ ""
1049
+ );
1050
+ return;
1051
+ }
1052
+
1053
+ const correlationId = createNewGuid();
1054
+ const ssoCapableMeasurement = this.performanceClient.startMeasurement(
1055
+ BrowserRootPerformanceEvents.SsoCapable,
1056
+ correlationId
1057
+ );
1058
+ ssoCapableMeasurement.add({
1059
+ "ext.interactionType": interactionType,
907
1060
  });
1061
+
1062
+ this.logger.verbose(
1063
+ `SSO capability verification initiated after '${interactionType}'`,
1064
+ correlationId
1065
+ );
1066
+
1067
+ /*
1068
+ * Use setTimeout to ensure this runs in a separate macrotask after the current call stack completes
1069
+ * This ensures the result is returned to the caller before the SSO verification starts and doesn't affect performance
1070
+ */
1071
+ setTimeout(() => {
1072
+ const ssoVerificationRequest: SsoSilentRequest = {
1073
+ ...request,
1074
+ correlationId: correlationId,
1075
+ };
1076
+
1077
+ const silentIframeClient =
1078
+ this.createSilentIframeClient(correlationId);
1079
+ silentIframeClient
1080
+ .verifySso(ssoVerificationRequest)
1081
+ .then((result: boolean) => {
1082
+ this.logger.verbose(
1083
+ `SSO capability verification completed after '${interactionType}', result: '${result}'`,
1084
+ correlationId
1085
+ );
1086
+
1087
+ // TBD to add profileTelemetry later in localStorage with 24h TTL
1088
+ try {
1089
+ const cacheEntry = JSON.stringify({
1090
+ ssoCapable: result,
1091
+ expiresOn: Date.now() + SSO_CAPABLE_TTL_MS,
1092
+ });
1093
+ window.localStorage.setItem(ssoCacheKey, cacheEntry);
1094
+ } catch {
1095
+ this.logger.warning(
1096
+ `Failed to cache SSO capability verification result (interactionType: '${interactionType}')`,
1097
+ correlationId
1098
+ );
1099
+ }
1100
+
1101
+ ssoCapableMeasurement.end(
1102
+ {
1103
+ fromCache: false,
1104
+ success: result,
1105
+ },
1106
+ undefined
1107
+ );
1108
+ })
1109
+ .catch((error: Error) => {
1110
+ this.logger.warning(
1111
+ `SSO capability verification failed after '${interactionType}': '${error.message}'`,
1112
+ correlationId
1113
+ );
1114
+ // reset the cache
1115
+ try {
1116
+ window.localStorage.removeItem(ssoCacheKey);
1117
+ } catch {
1118
+ this.logger.warning(
1119
+ `Failed to reset cached SSO capability verification result (interactionType: '${interactionType}')`,
1120
+ correlationId
1121
+ );
1122
+ }
1123
+ ssoCapableMeasurement.end(
1124
+ {
1125
+ fromCache: false,
1126
+ success: false,
1127
+ },
1128
+ error
1129
+ );
1130
+ });
1131
+ }, 0);
908
1132
  }
1133
+
909
1134
  // #endregion
910
1135
 
911
1136
  // #region Silent Flow
@@ -929,8 +1154,6 @@ export class StandardController implements IController {
929
1154
  const correlationId = this.getRequestCorrelationId(request);
930
1155
  const validRequest = {
931
1156
  ...request,
932
- // will be PromptValue.NONE or PromptValue.NO_SESSION
933
- prompt: request.prompt,
934
1157
  correlationId: correlationId,
935
1158
  };
936
1159
  this.ssoSilentMeasurement = this.performanceClient.startMeasurement(
@@ -939,6 +1162,7 @@ export class StandardController implements IController {
939
1162
  );
940
1163
  this.ssoSilentMeasurement?.add({
941
1164
  scenarioId: request.scenarioId,
1165
+ ssoCapable: this.getCachedSsoCapable(),
942
1166
  });
943
1167
  preflightCheck(
944
1168
  this.initialized,
@@ -948,12 +1172,10 @@ export class StandardController implements IController {
948
1172
  );
949
1173
  this.ssoSilentMeasurement?.increment({
950
1174
  visibilityChangeCount: 0,
1175
+ onlineStatusChangeCount: 0,
951
1176
  });
952
1177
 
953
- document.addEventListener(
954
- "visibilitychange",
955
- this.trackPageVisibilityWithMeasurement
956
- );
1178
+ this.addStateChangeListeners(this.trackStateChangeWithMeasurement);
957
1179
 
958
1180
  const loggedInAccounts = this.getAllAccounts();
959
1181
  this.logger.verbose("ssoSilent called", correlationId);
@@ -967,13 +1189,20 @@ export class StandardController implements IController {
967
1189
  let result: Promise<AuthenticationResult>;
968
1190
 
969
1191
  if (this.canUsePlatformBroker(validRequest)) {
1192
+ this.ssoSilentMeasurement?.add({
1193
+ isPlatformBrokerRequest: true,
1194
+ });
970
1195
  result = this.acquireTokenNative(
971
1196
  validRequest,
972
1197
  ApiId.ssoSilent
973
1198
  ).catch((e: AuthError) => {
1199
+ this.ssoSilentMeasurement?.add({
1200
+ brokerErrorName: e.name,
1201
+ brokerErrorCode: e.errorCode,
1202
+ });
974
1203
  // If native token acquisition fails for availability reasons fallback to standard flow
975
1204
  if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {
976
- this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt
1205
+ this.platformAuthProvider = undefined; // If extension gets uninstalled during session prevent future requests from continuing to attempt platform broker calls
977
1206
  const silentIframeClient = this.createSilentIframeClient(
978
1207
  validRequest.correlationId
979
1208
  );
@@ -1036,9 +1265,8 @@ export class StandardController implements IController {
1036
1265
  throw e;
1037
1266
  })
1038
1267
  .finally(() => {
1039
- document.removeEventListener(
1040
- "visibilitychange",
1041
- this.trackPageVisibilityWithMeasurement
1268
+ this.removeStateChangeListeners(
1269
+ this.trackStateChangeWithMeasurement
1042
1270
  );
1043
1271
  });
1044
1272
  }
@@ -1100,7 +1328,6 @@ export class StandardController implements IController {
1100
1328
  atbcMeasurement.end(
1101
1329
  {
1102
1330
  success: true,
1103
- isNativeBroker: result.fromPlatformBroker,
1104
1331
  accessTokenSize: result.accessToken.length,
1105
1332
  idTokenSize: result.idToken.length,
1106
1333
  },
@@ -1139,6 +1366,9 @@ export class StandardController implements IController {
1139
1366
  if (
1140
1367
  this.canUsePlatformBroker(request, request.nativeAccountId)
1141
1368
  ) {
1369
+ atbcMeasurement.add({
1370
+ isPlatformBrokerRequest: true,
1371
+ });
1142
1372
  const result = await this.acquireTokenNative(
1143
1373
  {
1144
1374
  ...request,
@@ -1147,6 +1377,10 @@ export class StandardController implements IController {
1147
1377
  ApiId.acquireTokenByCode,
1148
1378
  request.nativeAccountId
1149
1379
  ).catch((e: AuthError) => {
1380
+ atbcMeasurement.add({
1381
+ brokerErrorName: e.name,
1382
+ brokerErrorCode: e.errorCode,
1383
+ });
1150
1384
  // If native token acquisition fails for availability reasons fallback to standard flow
1151
1385
  if (
1152
1386
  e instanceof NativeAuthError &&
@@ -1209,11 +1443,9 @@ export class StandardController implements IController {
1209
1443
  );
1210
1444
  this.acquireTokenByCodeAsyncMeasurement?.increment({
1211
1445
  visibilityChangeCount: 0,
1446
+ onlineStatusChangeCount: 0,
1212
1447
  });
1213
- document.addEventListener(
1214
- "visibilitychange",
1215
- this.trackPageVisibilityWithMeasurement
1216
- );
1448
+ this.addStateChangeListeners(this.trackStateChangeWithMeasurement);
1217
1449
  const silentAuthCodeClient =
1218
1450
  this.createSilentAuthCodeClient(correlationId);
1219
1451
  const silentTokenResult = await silentAuthCodeClient
@@ -1222,7 +1454,6 @@ export class StandardController implements IController {
1222
1454
  this.acquireTokenByCodeAsyncMeasurement?.end({
1223
1455
  success: true,
1224
1456
  fromCache: response.fromCache,
1225
- isNativeBroker: response.fromPlatformBroker,
1226
1457
  });
1227
1458
  return response;
1228
1459
  })
@@ -1236,9 +1467,8 @@ export class StandardController implements IController {
1236
1467
  throw tokenRenewalError;
1237
1468
  })
1238
1469
  .finally(() => {
1239
- document.removeEventListener(
1240
- "visibilitychange",
1241
- this.trackPageVisibilityWithMeasurement
1470
+ this.removeStateChangeListeners(
1471
+ this.trackStateChangeWithMeasurement
1242
1472
  );
1243
1473
  });
1244
1474
  return silentTokenResult;
@@ -1521,7 +1751,13 @@ export class StandardController implements IController {
1521
1751
  correlationId
1522
1752
  );
1523
1753
 
1524
- return nativeClient.acquireToken(request, cacheLookupPolicy);
1754
+ return invokeAsync(
1755
+ nativeClient.acquireToken.bind(nativeClient),
1756
+ BrowserPerformanceEvents.NativeInteractionClientAcquireToken,
1757
+ this.logger,
1758
+ this.performanceClient,
1759
+ correlationId
1760
+ )(request, cacheLookupPolicy);
1525
1761
  }
1526
1762
 
1527
1763
  /**
@@ -1552,7 +1788,7 @@ export class StandardController implements IController {
1552
1788
  )
1553
1789
  ) {
1554
1790
  this.logger.trace(
1555
- "canUsePlatformBroker: isBrokerAvailable returned false, returning false",
1791
+ "canUsePlatformBroker: isPlatformAuthAllowed returned false, returning false",
1556
1792
  correlationId
1557
1793
  );
1558
1794
  return false;
@@ -1895,6 +2131,7 @@ export class StandardController implements IController {
1895
2131
  atsMeasurement.add({
1896
2132
  cacheLookupPolicy: request.cacheLookupPolicy,
1897
2133
  scenarioId: request.scenarioId,
2134
+ ssoCapable: this.getCachedSsoCapable(),
1898
2135
  });
1899
2136
 
1900
2137
  preflightCheck(this.initialized, atsMeasurement, this.config, request);
@@ -1911,7 +2148,6 @@ export class StandardController implements IController {
1911
2148
  {
1912
2149
  success: true,
1913
2150
  fromCache: result.fromCache,
1914
- isNativeBroker: result.fromPlatformBroker,
1915
2151
  accessTokenSize: result.accessToken.length,
1916
2152
  idTokenSize: result.idToken.length,
1917
2153
  },
@@ -2012,8 +2248,8 @@ export class StandardController implements IController {
2012
2248
  request: SilentRequest & { correlationId: string },
2013
2249
  account: AccountInfo
2014
2250
  ): Promise<AuthenticationResult> {
2015
- const trackPageVisibility = () =>
2016
- this.trackPageVisibility(request.correlationId);
2251
+ const trackStateChange = (event: Event) =>
2252
+ this.trackStateChange(request.correlationId, event);
2017
2253
  this.eventHandler.emitEvent(
2018
2254
  EventType.ACQUIRE_TOKEN_START,
2019
2255
  request.correlationId,
@@ -2023,12 +2259,12 @@ export class StandardController implements IController {
2023
2259
 
2024
2260
  if (request.correlationId) {
2025
2261
  this.performanceClient.incrementFields(
2026
- { visibilityChangeCount: 0 },
2262
+ { visibilityChangeCount: 0, onlineStatusChangeCount: 0 },
2027
2263
  request.correlationId
2028
2264
  );
2029
2265
  }
2030
2266
 
2031
- document.addEventListener("visibilitychange", trackPageVisibility);
2267
+ this.addStateChangeListeners(trackStateChange);
2032
2268
 
2033
2269
  const silentRequest = await invokeAsync(
2034
2270
  initializeSilentRequest,
@@ -2180,10 +2416,7 @@ export class StandardController implements IController {
2180
2416
  throw tokenRenewalError;
2181
2417
  })
2182
2418
  .finally(() => {
2183
- document.removeEventListener(
2184
- "visibilitychange",
2185
- trackPageVisibility
2186
- );
2419
+ this.removeStateChangeListeners(trackStateChange);
2187
2420
  });
2188
2421
  }
2189
2422
 
@@ -2212,12 +2445,26 @@ export class StandardController implements IController {
2212
2445
  "acquireTokenSilent - attempting to acquire token from native platform",
2213
2446
  silentRequest.correlationId
2214
2447
  );
2448
+
2449
+ this.performanceClient.addFields(
2450
+ { isPlatformBrokerRequest: true },
2451
+ silentRequest.correlationId
2452
+ );
2453
+
2215
2454
  return this.acquireTokenNative(
2216
2455
  silentRequest,
2217
2456
  ApiId.acquireTokenSilent_silentFlow,
2218
2457
  silentRequest.account.nativeAccountId,
2219
2458
  cacheLookupPolicy
2220
2459
  ).catch(async (e: AuthError) => {
2460
+ this.performanceClient.addFields(
2461
+ {
2462
+ brokerErrorName: e.name,
2463
+ brokerErrorCode: e.errorCode,
2464
+ },
2465
+ silentRequest.correlationId
2466
+ );
2467
+
2221
2468
  // If native token acquisition fails for availability reasons fallback to web flow
2222
2469
  if (e instanceof NativeAuthError && isFatalNativeAuthError(e)) {
2223
2470
  this.logger.verbose(
@@ -48,8 +48,7 @@ export function isFatalNativeAuthError(error: NativeAuthError): boolean {
48
48
  if (
49
49
  error.ext &&
50
50
  error.ext.status &&
51
- (error.ext.status === NativeStatusCodes.PERSISTENT_ERROR ||
52
- error.ext.status === NativeStatusCodes.DISABLED)
51
+ error.ext.status === NativeStatusCodes.DISABLED
53
52
  ) {
54
53
  return true;
55
54
  }
package/src/index.ts CHANGED
@@ -23,6 +23,7 @@ export {
23
23
  BrowserAuthOptions,
24
24
  CacheOptions,
25
25
  BrowserSystemOptions,
26
+ BrowserExperimentalOptions,
26
27
  BrowserTelemetryOptions,
27
28
  BrowserConfiguration,
28
29
  DEFAULT_IFRAME_TIMEOUT_MS,