@azure/msal-browser 3.4.0 → 3.5.1-beta.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 (231) hide show
  1. package/dist/app/IPublicClientApplication.d.ts +51 -51
  2. package/dist/app/IPublicClientApplication.mjs +102 -102
  3. package/dist/app/PublicClientApplication.d.ts +268 -268
  4. package/dist/app/PublicClientApplication.mjs +333 -333
  5. package/dist/app/PublicClientNext.d.ts +273 -273
  6. package/dist/app/PublicClientNext.mjs +351 -351
  7. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +62 -62
  8. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +254 -254
  9. package/dist/broker/nativeBroker/NativeRequest.d.ts +44 -44
  10. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  11. package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +7 -7
  12. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +11 -11
  13. package/dist/cache/AsyncMemoryStorage.d.ts +51 -51
  14. package/dist/cache/AsyncMemoryStorage.mjs +132 -132
  15. package/dist/cache/BrowserCacheManager.d.ts +383 -383
  16. package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
  17. package/dist/cache/BrowserCacheManager.mjs +1264 -1264
  18. package/dist/cache/BrowserCacheManager.mjs.map +1 -1
  19. package/dist/cache/BrowserStorage.d.ts +11 -11
  20. package/dist/cache/BrowserStorage.mjs +32 -32
  21. package/dist/cache/CryptoKeyStore.d.ts +18 -18
  22. package/dist/cache/CryptoKeyStore.mjs +40 -40
  23. package/dist/cache/DatabaseStorage.d.ts +56 -56
  24. package/dist/cache/DatabaseStorage.mjs +190 -190
  25. package/dist/cache/IAsyncMemoryStorage.d.ts +27 -27
  26. package/dist/cache/ITokenCache.d.ts +11 -11
  27. package/dist/cache/IWindowStorage.d.ts +27 -27
  28. package/dist/cache/MemoryStorage.d.ts +11 -11
  29. package/dist/cache/MemoryStorage.mjs +31 -31
  30. package/dist/cache/TokenCache.d.ts +77 -77
  31. package/dist/cache/TokenCache.mjs +224 -224
  32. package/dist/config/Configuration.d.ts +206 -206
  33. package/dist/config/Configuration.mjs +128 -128
  34. package/dist/controllers/ControllerFactory.d.ts +4 -4
  35. package/dist/controllers/ControllerFactory.mjs +29 -29
  36. package/dist/controllers/IController.d.ts +61 -61
  37. package/dist/controllers/NestedAppAuthController.d.ts +95 -95
  38. package/dist/controllers/NestedAppAuthController.d.ts.map +1 -1
  39. package/dist/controllers/NestedAppAuthController.mjs +335 -333
  40. package/dist/controllers/NestedAppAuthController.mjs.map +1 -1
  41. package/dist/controllers/StandardController.d.ts +407 -407
  42. package/dist/controllers/StandardController.d.ts.map +1 -1
  43. package/dist/controllers/StandardController.mjs +1294 -1291
  44. package/dist/controllers/StandardController.mjs.map +1 -1
  45. package/dist/controllers/UnknownOperatingContextController.d.ts +87 -87
  46. package/dist/controllers/UnknownOperatingContextController.mjs +264 -264
  47. package/dist/crypto/BrowserCrypto.d.ts +44 -44
  48. package/dist/crypto/BrowserCrypto.mjs +93 -93
  49. package/dist/crypto/CryptoOps.d.ts +63 -63
  50. package/dist/crypto/CryptoOps.d.ts.map +1 -1
  51. package/dist/crypto/CryptoOps.mjs +145 -144
  52. package/dist/crypto/CryptoOps.mjs.map +1 -1
  53. package/dist/crypto/PkceGenerator.d.ts +8 -8
  54. package/dist/crypto/PkceGenerator.mjs +54 -54
  55. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  56. package/dist/crypto/SignedHttpRequest.mjs +39 -39
  57. package/dist/encode/Base64Decode.d.ts +9 -9
  58. package/dist/encode/Base64Decode.mjs +36 -36
  59. package/dist/encode/Base64Encode.d.ts +19 -19
  60. package/dist/encode/Base64Encode.mjs +43 -43
  61. package/dist/error/BrowserAuthError.d.ts +250 -250
  62. package/dist/error/BrowserAuthError.mjs +258 -258
  63. package/dist/error/BrowserAuthErrorCodes.d.ts +45 -45
  64. package/dist/error/BrowserAuthErrorCodes.mjs +49 -49
  65. package/dist/error/BrowserConfigurationAuthError.d.ts +33 -33
  66. package/dist/error/BrowserConfigurationAuthError.mjs +40 -40
  67. package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +3 -3
  68. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +7 -7
  69. package/dist/error/NativeAuthError.d.ts +29 -29
  70. package/dist/error/NativeAuthError.mjs +60 -60
  71. package/dist/error/NativeAuthErrorCodes.d.ts +2 -2
  72. package/dist/error/NativeAuthErrorCodes.mjs +6 -6
  73. package/dist/error/NestedAppAuthError.d.ts +14 -14
  74. package/dist/error/NestedAppAuthError.mjs +23 -23
  75. package/dist/event/EventHandler.d.ts +41 -41
  76. package/dist/event/EventHandler.mjs +119 -119
  77. package/dist/event/EventMessage.d.ts +25 -25
  78. package/dist/event/EventMessage.mjs +68 -68
  79. package/dist/event/EventType.d.ts +28 -28
  80. package/dist/event/EventType.mjs +31 -31
  81. package/dist/index.d.ts +39 -39
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.mjs +2 -2
  84. package/dist/interaction_client/BaseInteractionClient.d.ts +54 -55
  85. package/dist/interaction_client/BaseInteractionClient.d.ts.map +1 -1
  86. package/dist/interaction_client/BaseInteractionClient.mjs +152 -153
  87. package/dist/interaction_client/BaseInteractionClient.mjs.map +1 -1
  88. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  89. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +10 -10
  90. package/dist/interaction_client/NativeInteractionClient.d.ts +140 -140
  91. package/dist/interaction_client/NativeInteractionClient.mjs +548 -548
  92. package/dist/interaction_client/PopupClient.d.ts +105 -115
  93. package/dist/interaction_client/PopupClient.d.ts.map +1 -1
  94. package/dist/interaction_client/PopupClient.mjs +435 -505
  95. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  96. package/dist/interaction_client/RedirectClient.d.ts +49 -49
  97. package/dist/interaction_client/RedirectClient.d.ts.map +1 -1
  98. package/dist/interaction_client/RedirectClient.mjs +314 -297
  99. package/dist/interaction_client/RedirectClient.mjs.map +1 -1
  100. package/dist/interaction_client/SilentAuthCodeClient.d.ts +23 -23
  101. package/dist/interaction_client/SilentAuthCodeClient.mjs +57 -57
  102. package/dist/interaction_client/SilentCacheClient.d.ts +24 -24
  103. package/dist/interaction_client/SilentCacheClient.mjs +61 -61
  104. package/dist/interaction_client/SilentIframeClient.d.ts +32 -32
  105. package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
  106. package/dist/interaction_client/SilentIframeClient.mjs +99 -108
  107. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  108. package/dist/interaction_client/SilentRefreshClient.d.ts +20 -20
  109. package/dist/interaction_client/SilentRefreshClient.mjs +43 -43
  110. package/dist/interaction_client/StandardInteractionClient.d.ts +54 -59
  111. package/dist/interaction_client/StandardInteractionClient.d.ts.map +1 -1
  112. package/dist/interaction_client/StandardInteractionClient.mjs +222 -244
  113. package/dist/interaction_client/StandardInteractionClient.mjs.map +1 -1
  114. package/dist/interaction_handler/InteractionHandler.d.ts +33 -33
  115. package/dist/interaction_handler/InteractionHandler.d.ts.map +1 -1
  116. package/dist/interaction_handler/InteractionHandler.mjs +94 -98
  117. package/dist/interaction_handler/InteractionHandler.mjs.map +1 -1
  118. package/dist/interaction_handler/RedirectHandler.d.ts +32 -32
  119. package/dist/interaction_handler/RedirectHandler.d.ts.map +1 -1
  120. package/dist/interaction_handler/RedirectHandler.mjs +135 -139
  121. package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
  122. package/dist/interaction_handler/SilentHandler.d.ts +13 -13
  123. package/dist/interaction_handler/SilentHandler.d.ts.map +1 -1
  124. package/dist/interaction_handler/SilentHandler.mjs +134 -128
  125. package/dist/interaction_handler/SilentHandler.mjs.map +1 -1
  126. package/dist/naa/AccountInfo.d.ts +11 -12
  127. package/dist/naa/AccountInfo.d.ts.map +1 -1
  128. package/dist/naa/AccountRequests.d.ts +9 -9
  129. package/dist/naa/AuthBridge.d.ts +5 -5
  130. package/dist/naa/BridgeCapabilities.d.ts +3 -3
  131. package/dist/naa/BridgeError.d.ts +9 -9
  132. package/dist/naa/BridgeError.d.ts.map +1 -1
  133. package/dist/naa/BridgeError.mjs +7 -7
  134. package/dist/naa/BridgeError.mjs.map +1 -1
  135. package/dist/naa/BridgeProxy.d.ts +72 -71
  136. package/dist/naa/BridgeProxy.d.ts.map +1 -1
  137. package/dist/naa/BridgeProxy.mjs +152 -149
  138. package/dist/naa/BridgeProxy.mjs.map +1 -1
  139. package/dist/naa/BridgeRequest.d.ts +6 -6
  140. package/dist/naa/BridgeRequestEnvelope.d.ts +13 -13
  141. package/dist/naa/BridgeResponseEnvelope.d.ts +10 -10
  142. package/dist/naa/BridgeStatusCode.d.ts +10 -10
  143. package/dist/naa/BridgeStatusCode.mjs +15 -15
  144. package/dist/naa/IBridgeProxy.d.ts +12 -10
  145. package/dist/naa/IBridgeProxy.d.ts.map +1 -1
  146. package/dist/naa/InitializeBridgeResponse.d.ts +6 -6
  147. package/dist/naa/InitializeBridgeResponse.d.ts.map +1 -1
  148. package/dist/naa/TokenRequest.d.ts +19 -21
  149. package/dist/naa/TokenRequest.d.ts.map +1 -1
  150. package/dist/naa/TokenResponse.d.ts +15 -16
  151. package/dist/naa/TokenResponse.d.ts.map +1 -1
  152. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +23 -25
  153. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts.map +1 -1
  154. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +142 -170
  155. package/dist/naa/mapping/NestedAppAuthAdapter.mjs.map +1 -1
  156. package/dist/navigation/INavigationClient.d.ts +16 -16
  157. package/dist/navigation/NavigationClient.d.ts +22 -22
  158. package/dist/navigation/NavigationClient.mjs +40 -40
  159. package/dist/navigation/NavigationOptions.d.ts +12 -12
  160. package/dist/network/FetchClient.d.ts +26 -26
  161. package/dist/network/FetchClient.mjs +99 -99
  162. package/dist/operatingcontext/BaseOperatingContext.d.ts +40 -40
  163. package/dist/operatingcontext/BaseOperatingContext.mjs +44 -44
  164. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  165. package/dist/operatingcontext/StandardOperatingContext.mjs +43 -43
  166. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +32 -32
  167. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts.map +1 -1
  168. package/dist/operatingcontext/TeamsAppOperatingContext.mjs +85 -82
  169. package/dist/operatingcontext/TeamsAppOperatingContext.mjs.map +1 -1
  170. package/dist/operatingcontext/UnknownOperatingContext.d.ts +25 -25
  171. package/dist/operatingcontext/UnknownOperatingContext.mjs +42 -42
  172. package/dist/packageMetadata.d.ts +2 -2
  173. package/dist/packageMetadata.mjs +4 -4
  174. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  175. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  176. package/dist/request/ClearCacheRequest.d.ts +10 -10
  177. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  178. package/dist/request/EndSessionRequest.d.ts +15 -15
  179. package/dist/request/PopupRequest.d.ts +34 -34
  180. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  181. package/dist/request/RedirectRequest.d.ts +35 -35
  182. package/dist/request/SilentRequest.d.ts +32 -32
  183. package/dist/request/SsoSilentRequest.d.ts +29 -29
  184. package/dist/response/AuthenticationResult.d.ts +4 -4
  185. package/dist/response/ResponseHandler.d.ts +8 -0
  186. package/dist/response/ResponseHandler.d.ts.map +1 -0
  187. package/dist/response/ResponseHandler.mjs +46 -0
  188. package/dist/response/ResponseHandler.mjs.map +1 -0
  189. package/dist/telemetry/BrowserPerformanceClient.d.ts +36 -36
  190. package/dist/telemetry/BrowserPerformanceClient.mjs +125 -125
  191. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  192. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +92 -92
  193. package/dist/utils/BrowserConstants.d.ts +176 -176
  194. package/dist/utils/BrowserConstants.mjs +204 -204
  195. package/dist/utils/BrowserProtocolUtils.d.ts +11 -18
  196. package/dist/utils/BrowserProtocolUtils.d.ts.map +1 -1
  197. package/dist/utils/BrowserProtocolUtils.mjs +23 -36
  198. package/dist/utils/BrowserProtocolUtils.mjs.map +1 -1
  199. package/dist/utils/BrowserUtils.d.ts +56 -56
  200. package/dist/utils/BrowserUtils.mjs +125 -125
  201. package/lib/msal-browser.cjs +17926 -18062
  202. package/lib/msal-browser.cjs.map +1 -1
  203. package/lib/msal-browser.js +17926 -18062
  204. package/lib/msal-browser.js.map +1 -1
  205. package/lib/msal-browser.min.js +66 -65
  206. package/package.json +102 -102
  207. package/src/cache/BrowserCacheManager.ts +7 -10
  208. package/src/controllers/NestedAppAuthController.ts +8 -3
  209. package/src/controllers/StandardController.ts +31 -40
  210. package/src/crypto/CryptoOps.ts +5 -3
  211. package/src/index.ts +1 -0
  212. package/src/interaction_client/BaseInteractionClient.ts +1 -2
  213. package/src/interaction_client/PopupClient.ts +34 -137
  214. package/src/interaction_client/RedirectClient.ts +71 -55
  215. package/src/interaction_client/SilentIframeClient.ts +16 -27
  216. package/src/interaction_client/StandardInteractionClient.ts +2 -48
  217. package/src/interaction_handler/InteractionHandler.ts +5 -8
  218. package/src/interaction_handler/RedirectHandler.ts +4 -8
  219. package/src/interaction_handler/SilentHandler.ts +12 -5
  220. package/src/naa/AccountInfo.ts +3 -4
  221. package/src/naa/BridgeError.ts +4 -4
  222. package/src/naa/BridgeProxy.ts +6 -2
  223. package/src/naa/IBridgeProxy.ts +2 -0
  224. package/src/naa/InitializeBridgeResponse.ts +1 -1
  225. package/src/naa/TokenRequest.ts +0 -2
  226. package/src/naa/TokenResponse.ts +1 -2
  227. package/src/naa/mapping/NestedAppAuthAdapter.ts +72 -80
  228. package/src/operatingcontext/TeamsAppOperatingContext.ts +4 -1
  229. package/src/packageMetadata.ts +1 -1
  230. package/src/response/ResponseHandler.ts +73 -0
  231. package/src/utils/BrowserProtocolUtils.ts +17 -36
@@ -1,36 +1,36 @@
1
- import { CommonAuthorizationUrlRequest, StringDict } from "@azure/msal-common";
2
- /**
3
- * RedirectRequest: Request object passed by user to retrieve a Code from the
4
- * server (first leg of authorization code grant flow) with a full page redirect.
5
- *
6
- * - scopes - Array of scopes the application is requesting access to.
7
- * - authority - Url of the authority which the application acquires tokens from.
8
- * - correlationId - Unique GUID set per request to trace a request end-to-end for telemetry purposes.
9
- * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.
10
- * - extraScopesToConsent - Scopes for a different resource when the user needs consent upfront.
11
- * - state - A value included in the request that is also returned in the token response. A randomly generated unique value is typically used for preventing cross site request forgery attacks. The state is also used to encode information about the user's state in the app before the authentication request occurred.
12
- * - prompt - Indicates the type of user interaction that is required.
13
- * login: will force the user to enter their credentials on that request, negating single-sign on
14
- * none: will ensure that the user isn't presented with any interactive prompt. if request can't be completed via single-sign on, the endpoint will return an interaction_required error
15
- * consent: will the trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app
16
- * select_account: will interrupt single sign-=on providing account selection experience listing all the accounts in session or any remembered accounts or an option to choose to use a different account
17
- * create: will direct the user to the account creation experience instead of the log in experience
18
- * no_session: will not read existing session token when authenticating the user. Upon user being successfully authenticated, EVO won’t create a new session for the user. FOR INTERNAL USE ONLY.
19
- * - loginHint - Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know the username/email address ahead of time. Often apps use this parameter during re-authentication, having already extracted the username from a previous sign-in using the login_hint or preferred_username claim.
20
- * - sid - Session ID, unique identifier for the session. Available as an optional claim on ID tokens.
21
- * - domainHint - Provides a hint about the tenant or domain that the user should use to sign in. The value of the domain hint is a registered domain for the tenant.
22
- * - extraQueryParameters - String to string map of custom query parameters added to the /authorize call
23
- * - tokenBodyParameters - String to string map of custom token request body parameters added to the /token call. Only used when renewing access tokens.
24
- * - tokenQueryParameters - String to string map of custom query parameters added to the /token call
25
- * - claims - In cases where Azure AD tenant admin has enabled conditional access policies, and the policy has not been met, exceptions will contain claims that need to be consented to.
26
- * - nonce - A value included in the request that is returned in the id token. A randomly generated unique value is typically used to mitigate replay attacks.
27
- * - redirectStartPage - The page that should be returned to after loginRedirect or acquireTokenRedirect. This should only be used if this is different from the redirectUri and will default to the page that initiates the request. When the navigateToLoginRequestUrl config option is set to false this parameter will be ignored.
28
- * - onRedirectNavigate - Callback that will be passed the url that MSAL will navigate to. Returning false in the callback will stop navigation.
29
- */
30
- export type RedirectRequest = Partial<Omit<CommonAuthorizationUrlRequest, "responseMode" | "scopes" | "codeChallenge" | "codeChallengeMethod" | "requestedClaimsHash" | "nativeBroker">> & {
31
- scopes: Array<string>;
32
- redirectStartPage?: string;
33
- onRedirectNavigate?: (url: string) => boolean | void;
34
- tokenBodyParameters?: StringDict;
35
- };
1
+ import { CommonAuthorizationUrlRequest, StringDict } from "@azure/msal-common";
2
+ /**
3
+ * RedirectRequest: Request object passed by user to retrieve a Code from the
4
+ * server (first leg of authorization code grant flow) with a full page redirect.
5
+ *
6
+ * - scopes - Array of scopes the application is requesting access to.
7
+ * - authority - Url of the authority which the application acquires tokens from.
8
+ * - correlationId - Unique GUID set per request to trace a request end-to-end for telemetry purposes.
9
+ * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.
10
+ * - extraScopesToConsent - Scopes for a different resource when the user needs consent upfront.
11
+ * - state - A value included in the request that is also returned in the token response. A randomly generated unique value is typically used for preventing cross site request forgery attacks. The state is also used to encode information about the user's state in the app before the authentication request occurred.
12
+ * - prompt - Indicates the type of user interaction that is required.
13
+ * login: will force the user to enter their credentials on that request, negating single-sign on
14
+ * none: will ensure that the user isn't presented with any interactive prompt. if request can't be completed via single-sign on, the endpoint will return an interaction_required error
15
+ * consent: will the trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app
16
+ * select_account: will interrupt single sign-=on providing account selection experience listing all the accounts in session or any remembered accounts or an option to choose to use a different account
17
+ * create: will direct the user to the account creation experience instead of the log in experience
18
+ * no_session: will not read existing session token when authenticating the user. Upon user being successfully authenticated, EVO won’t create a new session for the user. FOR INTERNAL USE ONLY.
19
+ * - loginHint - Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know the username/email address ahead of time. Often apps use this parameter during re-authentication, having already extracted the username from a previous sign-in using the login_hint or preferred_username claim.
20
+ * - sid - Session ID, unique identifier for the session. Available as an optional claim on ID tokens.
21
+ * - domainHint - Provides a hint about the tenant or domain that the user should use to sign in. The value of the domain hint is a registered domain for the tenant.
22
+ * - extraQueryParameters - String to string map of custom query parameters added to the /authorize call
23
+ * - tokenBodyParameters - String to string map of custom token request body parameters added to the /token call. Only used when renewing access tokens.
24
+ * - tokenQueryParameters - String to string map of custom query parameters added to the /token call
25
+ * - claims - In cases where Azure AD tenant admin has enabled conditional access policies, and the policy has not been met, exceptions will contain claims that need to be consented to.
26
+ * - nonce - A value included in the request that is returned in the id token. A randomly generated unique value is typically used to mitigate replay attacks.
27
+ * - redirectStartPage - The page that should be returned to after loginRedirect or acquireTokenRedirect. This should only be used if this is different from the redirectUri and will default to the page that initiates the request. When the navigateToLoginRequestUrl config option is set to false this parameter will be ignored.
28
+ * - onRedirectNavigate - Callback that will be passed the url that MSAL will navigate to. Returning false in the callback will stop navigation.
29
+ */
30
+ export type RedirectRequest = Partial<Omit<CommonAuthorizationUrlRequest, "responseMode" | "scopes" | "codeChallenge" | "codeChallengeMethod" | "requestedClaimsHash" | "nativeBroker">> & {
31
+ scopes: Array<string>;
32
+ redirectStartPage?: string;
33
+ onRedirectNavigate?: (url: string) => boolean | void;
34
+ tokenBodyParameters?: StringDict;
35
+ };
36
36
  //# sourceMappingURL=RedirectRequest.d.ts.map
@@ -1,33 +1,33 @@
1
- import { AccountInfo, CommonSilentFlowRequest, StringDict } from "@azure/msal-common";
2
- import { CacheLookupPolicy } from "../utils/BrowserConstants";
3
- /**
4
- * SilentRequest: Request object passed by user to retrieve tokens from the
5
- * cache, renew an expired token with a refresh token, or retrieve a code (first leg of authorization code grant flow)
6
- * in a hidden iframe.
7
- *
8
- * - scopes - Array of scopes the application is requesting access to.
9
- * - authority - Url of the authority which the application acquires tokens from.
10
- * - correlationId - Unique GUID set per request to trace a request end-to-end for telemetry purposes.
11
- * - account - Account entity to lookup the credentials.
12
- * - forceRefresh - Forces silent requests to make network calls if true.
13
- * - extraQueryParameters - String to string map of custom query parameters added to the /authorize call. Only used when renewing the refresh token.
14
- * - tokenBodyParameters - String to string map of custom token request body parameters added to the /token call. Only used when renewing access tokens.
15
- * - tokenQueryParameters - String to string map of custom query parameters added to the /token call. Only used when renewing access tokens.
16
- * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal. Only used for cases where refresh token is expired.
17
- * - cacheLookupPolicy - Enum of different ways the silent token can be retrieved.
18
- * - prompt - Indicates the type of user interaction that is required.
19
- * none: will ensure that the user isn't presented with any interactive prompt. if request can't be completed via single-sign on, the endpoint will return an interaction_required error
20
- * no_session: will not read existing session token when authenticating the user. Upon user being successfully authenticated, EVO won’t create a new session for the user. FOR INTERNAL USE ONLY.
21
- */
22
- export type SilentRequest = Omit<CommonSilentFlowRequest, "authority" | "correlationId" | "forceRefresh" | "account" | "requestedClaimsHash"> & {
23
- redirectUri?: string;
24
- extraQueryParameters?: StringDict;
25
- authority?: string;
26
- account?: AccountInfo;
27
- correlationId?: string;
28
- forceRefresh?: boolean;
29
- cacheLookupPolicy?: CacheLookupPolicy;
30
- prompt?: string;
31
- tokenBodyParameters?: StringDict;
32
- };
1
+ import { AccountInfo, CommonSilentFlowRequest, StringDict } from "@azure/msal-common";
2
+ import { CacheLookupPolicy } from "../utils/BrowserConstants";
3
+ /**
4
+ * SilentRequest: Request object passed by user to retrieve tokens from the
5
+ * cache, renew an expired token with a refresh token, or retrieve a code (first leg of authorization code grant flow)
6
+ * in a hidden iframe.
7
+ *
8
+ * - scopes - Array of scopes the application is requesting access to.
9
+ * - authority - Url of the authority which the application acquires tokens from.
10
+ * - correlationId - Unique GUID set per request to trace a request end-to-end for telemetry purposes.
11
+ * - account - Account entity to lookup the credentials.
12
+ * - forceRefresh - Forces silent requests to make network calls if true.
13
+ * - extraQueryParameters - String to string map of custom query parameters added to the /authorize call. Only used when renewing the refresh token.
14
+ * - tokenBodyParameters - String to string map of custom token request body parameters added to the /token call. Only used when renewing access tokens.
15
+ * - tokenQueryParameters - String to string map of custom query parameters added to the /token call. Only used when renewing access tokens.
16
+ * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal. Only used for cases where refresh token is expired.
17
+ * - cacheLookupPolicy - Enum of different ways the silent token can be retrieved.
18
+ * - prompt - Indicates the type of user interaction that is required.
19
+ * none: will ensure that the user isn't presented with any interactive prompt. if request can't be completed via single-sign on, the endpoint will return an interaction_required error
20
+ * no_session: will not read existing session token when authenticating the user. Upon user being successfully authenticated, EVO won’t create a new session for the user. FOR INTERNAL USE ONLY.
21
+ */
22
+ export type SilentRequest = Omit<CommonSilentFlowRequest, "authority" | "correlationId" | "forceRefresh" | "account" | "requestedClaimsHash"> & {
23
+ redirectUri?: string;
24
+ extraQueryParameters?: StringDict;
25
+ authority?: string;
26
+ account?: AccountInfo;
27
+ correlationId?: string;
28
+ forceRefresh?: boolean;
29
+ cacheLookupPolicy?: CacheLookupPolicy;
30
+ prompt?: string;
31
+ tokenBodyParameters?: StringDict;
32
+ };
33
33
  //# sourceMappingURL=SilentRequest.d.ts.map
@@ -1,30 +1,30 @@
1
- import { CommonAuthorizationUrlRequest, StringDict } from "@azure/msal-common";
2
- /**
3
- * Request object passed by user to ssoSilent to retrieve a Code from the server (first leg of authorization code grant flow)
4
- *
5
- * - scopes - Array of scopes the application is requesting access to (optional for ssoSilent calls)
6
- * - claims - A stringified claims request which will be added to all /authorize and /token calls
7
- * - authority - Url of the authority which the application acquires tokens from.
8
- * - correlationId - Unique GUID set per request to trace a request end-to-end for telemetry purposes.
9
- * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.
10
- * - extraScopesToConsent - Scopes for a different resource when the user needs consent upfront.
11
- * - state - A value included in the request that is also returned in the token response. A randomly generated unique value is typically used for preventing cross site request forgery attacks. The state is also used to encode information about the user's state in the app before the authentication request occurred.
12
- * - prompt - Indicates the type of user interaction that is required.
13
- * login: will force the user to enter their credentials on that request, negating single-sign on
14
- * none: will ensure that the user isn't presented with any interactive prompt. if request can't be completed via single-sign on, the endpoint will return an interaction_required error
15
- * consent: will trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app
16
- * select_account: will interrupt single sign-=on providing account selection experience listing all the accounts in session or any remembered accounts or an option to choose to use a different account
17
- * create: will direct the user to the account creation experience instead of the log in experience
18
- * no_session: will not read existing session token when authenticating the user. Upon user being successfully authenticated, EVO won’t create a new session for the user. FOR INTERNAL USE ONLY.
19
- * - loginHint - Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know the username/email address ahead of time. Often apps use this parameter during re-authentication, having already extracted the username from a previous sign-in using the login_hint or preferred_username claim.
20
- * - sid - Session ID, unique identifier for the session. Available as an optional claim on ID tokens.
21
- * - domainHint - Provides a hint about the tenant or domain that the user should use to sign in. The value of the domain hint is a registered domain for the tenant.
22
- * - extraQueryParameters - String to string map of custom query parameters added to the /authorize call
23
- * - tokenBodyParameters - String to string map of custom token request body parameters added to the /token call. Only used when renewing access tokens.
24
- * - tokenQueryParameters - String to string map of custom query parameters added to the /token call
25
- * - nonce - A value included in the request that is returned in the id token. A randomly generated unique value is typically used to mitigate replay attacks.
26
- */
27
- export type SsoSilentRequest = Partial<Omit<CommonAuthorizationUrlRequest, "responseMode" | "codeChallenge" | "codeChallengeMethod" | "requestedClaimsHash" | "nativeBroker">> & {
28
- tokenBodyParameters?: StringDict;
29
- };
1
+ import { CommonAuthorizationUrlRequest, StringDict } from "@azure/msal-common";
2
+ /**
3
+ * Request object passed by user to ssoSilent to retrieve a Code from the server (first leg of authorization code grant flow)
4
+ *
5
+ * - scopes - Array of scopes the application is requesting access to (optional for ssoSilent calls)
6
+ * - claims - A stringified claims request which will be added to all /authorize and /token calls
7
+ * - authority - Url of the authority which the application acquires tokens from.
8
+ * - correlationId - Unique GUID set per request to trace a request end-to-end for telemetry purposes.
9
+ * - redirectUri - The redirect URI where authentication responses can be received by your application. It must exactly match one of the redirect URIs registered in the Azure portal.
10
+ * - extraScopesToConsent - Scopes for a different resource when the user needs consent upfront.
11
+ * - state - A value included in the request that is also returned in the token response. A randomly generated unique value is typically used for preventing cross site request forgery attacks. The state is also used to encode information about the user's state in the app before the authentication request occurred.
12
+ * - prompt - Indicates the type of user interaction that is required.
13
+ * login: will force the user to enter their credentials on that request, negating single-sign on
14
+ * none: will ensure that the user isn't presented with any interactive prompt. if request can't be completed via single-sign on, the endpoint will return an interaction_required error
15
+ * consent: will trigger the OAuth consent dialog after the user signs in, asking the user to grant permissions to the app
16
+ * select_account: will interrupt single sign-=on providing account selection experience listing all the accounts in session or any remembered accounts or an option to choose to use a different account
17
+ * create: will direct the user to the account creation experience instead of the log in experience
18
+ * no_session: will not read existing session token when authenticating the user. Upon user being successfully authenticated, EVO won’t create a new session for the user. FOR INTERNAL USE ONLY.
19
+ * - loginHint - Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know the username/email address ahead of time. Often apps use this parameter during re-authentication, having already extracted the username from a previous sign-in using the login_hint or preferred_username claim.
20
+ * - sid - Session ID, unique identifier for the session. Available as an optional claim on ID tokens.
21
+ * - domainHint - Provides a hint about the tenant or domain that the user should use to sign in. The value of the domain hint is a registered domain for the tenant.
22
+ * - extraQueryParameters - String to string map of custom query parameters added to the /authorize call
23
+ * - tokenBodyParameters - String to string map of custom token request body parameters added to the /token call. Only used when renewing access tokens.
24
+ * - tokenQueryParameters - String to string map of custom query parameters added to the /token call
25
+ * - nonce - A value included in the request that is returned in the id token. A randomly generated unique value is typically used to mitigate replay attacks.
26
+ */
27
+ export type SsoSilentRequest = Partial<Omit<CommonAuthorizationUrlRequest, "responseMode" | "codeChallenge" | "codeChallengeMethod" | "requestedClaimsHash" | "nativeBroker">> & {
28
+ tokenBodyParameters?: StringDict;
29
+ };
30
30
  //# sourceMappingURL=SsoSilentRequest.d.ts.map
@@ -1,5 +1,5 @@
1
- import { AccountInfo, AuthenticationResult as CommonAuthenticationResult } from "@azure/msal-common";
2
- export type AuthenticationResult = CommonAuthenticationResult & {
3
- account: AccountInfo;
4
- };
1
+ import { AccountInfo, AuthenticationResult as CommonAuthenticationResult } from "@azure/msal-common";
2
+ export type AuthenticationResult = CommonAuthenticationResult & {
3
+ account: AccountInfo;
4
+ };
5
5
  //# sourceMappingURL=AuthenticationResult.d.ts.map
@@ -0,0 +1,8 @@
1
+ import { ICrypto, Logger, ServerAuthorizationCodeResponse } from "@azure/msal-common";
2
+ import { InteractionType } from "../utils/BrowserConstants";
3
+ export declare function deserializeResponse(responseString: string, responseLocation: string, logger: Logger): ServerAuthorizationCodeResponse;
4
+ /**
5
+ * Returns the interaction type that the response object belongs to
6
+ */
7
+ export declare function validateInteractionType(response: ServerAuthorizationCodeResponse, browserCrypto: ICrypto, interactionType: InteractionType): void;
8
+ //# sourceMappingURL=ResponseHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseHandler.d.ts","sourceRoot":"","sources":["../../src/response/ResponseHandler.ts"],"names":[],"mappings":"AAKA,OAAO,EACH,OAAO,EACP,MAAM,EACN,+BAA+B,EAElC,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,wBAAgB,mBAAmB,CAC/B,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,MAAM,GACf,+BAA+B,CAuBjC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACnC,QAAQ,EAAE,+BAA+B,EACzC,aAAa,EAAE,OAAO,EACtB,eAAe,EAAE,eAAe,GACjC,IAAI,CAkBN"}
@@ -0,0 +1,46 @@
1
+ /*! @azure/msal-browser v3.5.1-beta.0 2023-11-14 */
2
+ 'use strict';
3
+ import { UrlUtils } from '@azure/msal-common';
4
+ import { createBrowserAuthError } from '../error/BrowserAuthError.mjs';
5
+ import { extractBrowserRequestState } from '../utils/BrowserProtocolUtils.mjs';
6
+ import { hashEmptyError, hashDoesNotContainKnownProperties, noStateInHash, unableToParseState, stateInteractionTypeMismatch } from '../error/BrowserAuthErrorCodes.mjs';
7
+
8
+ /*
9
+ * Copyright (c) Microsoft Corporation. All rights reserved.
10
+ * Licensed under the MIT License.
11
+ */
12
+ function deserializeResponse(responseString, responseLocation, logger) {
13
+ // Deserialize hash fragment response parameters.
14
+ const serverParams = UrlUtils.getDeserializedResponse(responseString);
15
+ if (!serverParams) {
16
+ if (!UrlUtils.stripLeadingHashOrQuery(responseString)) {
17
+ // Hash or Query string is empty
18
+ logger.error(`The request has returned to the redirectUri but a ${responseLocation} is not present. It's likely that the ${responseLocation} has been removed or the page has been redirected by code running on the redirectUri page.`);
19
+ throw createBrowserAuthError(hashEmptyError);
20
+ }
21
+ else {
22
+ logger.error(`A ${responseLocation} is present in the iframe but it does not contain known properties. It's likely that the ${responseLocation} has been replaced by code running on the redirectUri page.`);
23
+ logger.errorPii(`The ${responseLocation} detected is: ${responseString}`);
24
+ throw createBrowserAuthError(hashDoesNotContainKnownProperties);
25
+ }
26
+ }
27
+ return serverParams;
28
+ }
29
+ /**
30
+ * Returns the interaction type that the response object belongs to
31
+ */
32
+ function validateInteractionType(response, browserCrypto, interactionType) {
33
+ if (!response.state) {
34
+ throw createBrowserAuthError(noStateInHash);
35
+ }
36
+ const platformStateObj = extractBrowserRequestState(browserCrypto, response.state);
37
+ if (!platformStateObj) {
38
+ throw createBrowserAuthError(unableToParseState);
39
+ }
40
+ if (platformStateObj.interactionType !== interactionType) {
41
+ throw createBrowserAuthError(stateInteractionTypeMismatch);
42
+ }
43
+ }
44
+
45
+ export { deserializeResponse, validateInteractionType };
46
+ //# sourceMappingURL=ResponseHandler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponseHandler.mjs","sources":["../../src/response/ResponseHandler.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAKA;AAWA;AAEA;AA6BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,37 +1,37 @@
1
- import { PerformanceEvents, IPerformanceClient, PerformanceClient, IPerformanceMeasurement, InProgressPerformanceEvent } from "@azure/msal-common";
2
- import { Configuration } from "../config/Configuration";
3
- export declare class BrowserPerformanceClient extends PerformanceClient implements IPerformanceClient {
4
- constructor(configuration: Configuration, intFields?: Set<string>);
5
- startPerformanceMeasurement(measureName: string, correlationId: string): IPerformanceMeasurement;
6
- generateId(): string;
7
- private getPageVisibility;
8
- private deleteIncompleteSubMeasurements;
9
- supportsBrowserPerformanceNow(): boolean;
10
- /**
11
- * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.
12
- * Also captures browser page visibilityState.
13
- *
14
- * @param {PerformanceEvents} measureName
15
- * @param {?string} [correlationId]
16
- * @returns {((event?: Partial<PerformanceEvent>) => PerformanceEvent| null)}
17
- */
18
- startMeasurement(measureName: string, correlationId?: string): InProgressPerformanceEvent;
19
- /**
20
- * Adds pre-queue time to preQueueTimeByCorrelationId map.
21
- * @param {PerformanceEvents} eventName
22
- * @param {?string} correlationId
23
- * @returns
24
- */
25
- setPreQueueTime(eventName: PerformanceEvents, correlationId?: string): void;
26
- /**
27
- * Calculates and adds queue time measurement for given performance event.
28
- *
29
- * @param {PerformanceEvents} eventName
30
- * @param {?string} correlationId
31
- * @param {?number} queueTime
32
- * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements
33
- * @returns
34
- */
35
- addQueueMeasurement(eventName: string, correlationId?: string, queueTime?: number, manuallyCompleted?: boolean): void;
36
- }
1
+ import { PerformanceEvents, IPerformanceClient, PerformanceClient, IPerformanceMeasurement, InProgressPerformanceEvent } from "@azure/msal-common";
2
+ import { Configuration } from "../config/Configuration";
3
+ export declare class BrowserPerformanceClient extends PerformanceClient implements IPerformanceClient {
4
+ constructor(configuration: Configuration, intFields?: Set<string>);
5
+ startPerformanceMeasurement(measureName: string, correlationId: string): IPerformanceMeasurement;
6
+ generateId(): string;
7
+ private getPageVisibility;
8
+ private deleteIncompleteSubMeasurements;
9
+ supportsBrowserPerformanceNow(): boolean;
10
+ /**
11
+ * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.
12
+ * Also captures browser page visibilityState.
13
+ *
14
+ * @param {PerformanceEvents} measureName
15
+ * @param {?string} [correlationId]
16
+ * @returns {((event?: Partial<PerformanceEvent>) => PerformanceEvent| null)}
17
+ */
18
+ startMeasurement(measureName: string, correlationId?: string): InProgressPerformanceEvent;
19
+ /**
20
+ * Adds pre-queue time to preQueueTimeByCorrelationId map.
21
+ * @param {PerformanceEvents} eventName
22
+ * @param {?string} correlationId
23
+ * @returns
24
+ */
25
+ setPreQueueTime(eventName: PerformanceEvents, correlationId?: string): void;
26
+ /**
27
+ * Calculates and adds queue time measurement for given performance event.
28
+ *
29
+ * @param {PerformanceEvents} eventName
30
+ * @param {?string} correlationId
31
+ * @param {?number} queueTime
32
+ * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements
33
+ * @returns
34
+ */
35
+ addQueueMeasurement(eventName: string, correlationId?: string, queueTime?: number, manuallyCompleted?: boolean): void;
36
+ }
37
37
  //# sourceMappingURL=BrowserPerformanceClient.d.ts.map
@@ -1,133 +1,133 @@
1
- /*! @azure/msal-browser v3.4.0 2023-10-30 */
1
+ /*! @azure/msal-browser v3.5.1-beta.0 2023-11-14 */
2
2
  'use strict';
3
3
  import { PerformanceClient, Constants, Logger } from '@azure/msal-common';
4
4
  import { BrowserPerformanceMeasurement } from './BrowserPerformanceMeasurement.mjs';
5
5
  import { name, version } from '../packageMetadata.mjs';
6
6
 
7
- /*
8
- * Copyright (c) Microsoft Corporation. All rights reserved.
9
- * Licensed under the MIT License.
10
- */
11
- class BrowserPerformanceClient extends PerformanceClient {
12
- constructor(configuration, intFields) {
13
- super(configuration.auth.clientId, configuration.auth.authority || `${Constants.DEFAULT_AUTHORITY}`, new Logger(configuration.system?.loggerOptions || {}, name, version), name, version, configuration.telemetry?.application || {
14
- appName: "",
15
- appVersion: "",
16
- }, intFields);
17
- }
18
- startPerformanceMeasurement(measureName, correlationId) {
19
- return new BrowserPerformanceMeasurement(measureName, correlationId);
20
- }
21
- generateId() {
22
- return window.crypto.randomUUID();
23
- }
24
- getPageVisibility() {
25
- return document.visibilityState?.toString() || null;
26
- }
27
- deleteIncompleteSubMeasurements(inProgressEvent) {
28
- const rootEvent = this.eventsByCorrelationId.get(inProgressEvent.event.correlationId);
29
- const isRootEvent = rootEvent && rootEvent.eventId === inProgressEvent.event.eventId;
30
- const incompleteMeasurements = [];
31
- if (isRootEvent && rootEvent?.incompleteSubMeasurements) {
32
- rootEvent.incompleteSubMeasurements.forEach((subMeasurement) => {
33
- incompleteMeasurements.push({ ...subMeasurement });
34
- });
35
- }
36
- // Clean up remaining marks for incomplete sub-measurements
37
- if (incompleteMeasurements.length > 0) {
38
- BrowserPerformanceMeasurement.flushMeasurements(inProgressEvent.event.correlationId, incompleteMeasurements);
39
- }
40
- }
41
- supportsBrowserPerformanceNow() {
42
- return (typeof window !== "undefined" &&
43
- typeof window.performance !== "undefined" &&
44
- typeof window.performance.now === "function");
45
- }
46
- /**
47
- * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.
48
- * Also captures browser page visibilityState.
49
- *
50
- * @param {PerformanceEvents} measureName
51
- * @param {?string} [correlationId]
52
- * @returns {((event?: Partial<PerformanceEvent>) => PerformanceEvent| null)}
53
- */
54
- startMeasurement(measureName, correlationId) {
55
- // Capture page visibilityState and then invoke start/end measurement
56
- const startPageVisibility = this.getPageVisibility();
57
- const inProgressEvent = super.startMeasurement(measureName, correlationId);
58
- return {
59
- ...inProgressEvent,
60
- end: (event) => {
61
- const res = inProgressEvent.end({
62
- startPageVisibility,
63
- endPageVisibility: this.getPageVisibility(),
64
- ...event,
65
- });
66
- this.deleteIncompleteSubMeasurements(inProgressEvent);
67
- return res;
68
- },
69
- discard: () => {
70
- inProgressEvent.discard();
71
- this.deleteIncompleteSubMeasurements(inProgressEvent);
72
- inProgressEvent.measurement.flushMeasurement();
73
- },
74
- };
75
- }
76
- /**
77
- * Adds pre-queue time to preQueueTimeByCorrelationId map.
78
- * @param {PerformanceEvents} eventName
79
- * @param {?string} correlationId
80
- * @returns
81
- */
82
- setPreQueueTime(eventName, correlationId) {
83
- if (!this.supportsBrowserPerformanceNow()) {
84
- this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to set telemetry queue time for ${eventName}`);
85
- return;
86
- }
87
- if (!correlationId) {
88
- this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to set telemetry queue time`);
89
- return;
90
- }
91
- const preQueueEvent = this.preQueueTimeByCorrelationId.get(correlationId);
92
- /**
93
- * Manually complete queue measurement if there is an incomplete pre-queue event.
94
- * Incomplete pre-queue events are instrumentation bugs that should be fixed.
95
- */
96
- if (preQueueEvent) {
97
- this.logger.trace(`BrowserPerformanceClient: Incomplete pre-queue ${preQueueEvent.name} found`, correlationId);
98
- this.addQueueMeasurement(preQueueEvent.name, correlationId, undefined, true);
99
- }
100
- this.preQueueTimeByCorrelationId.set(correlationId, {
101
- name: eventName,
102
- time: window.performance.now(),
103
- });
104
- }
105
- /**
106
- * Calculates and adds queue time measurement for given performance event.
107
- *
108
- * @param {PerformanceEvents} eventName
109
- * @param {?string} correlationId
110
- * @param {?number} queueTime
111
- * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements
112
- * @returns
113
- */
114
- addQueueMeasurement(eventName, correlationId, queueTime, manuallyCompleted) {
115
- if (!this.supportsBrowserPerformanceNow()) {
116
- this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to add queue measurement for ${eventName}`);
117
- return;
118
- }
119
- if (!correlationId) {
120
- this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to add queue measurement`);
121
- return;
122
- }
123
- const preQueueTime = super.getPreQueueTime(eventName, correlationId);
124
- if (!preQueueTime) {
125
- return;
126
- }
127
- const currentTime = window.performance.now();
128
- const resQueueTime = queueTime || super.calculateQueuedTime(preQueueTime, currentTime);
129
- return super.addQueueMeasurement(eventName, correlationId, resQueueTime, manuallyCompleted);
130
- }
7
+ /*
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License.
10
+ */
11
+ class BrowserPerformanceClient extends PerformanceClient {
12
+ constructor(configuration, intFields) {
13
+ super(configuration.auth.clientId, configuration.auth.authority || `${Constants.DEFAULT_AUTHORITY}`, new Logger(configuration.system?.loggerOptions || {}, name, version), name, version, configuration.telemetry?.application || {
14
+ appName: "",
15
+ appVersion: "",
16
+ }, intFields);
17
+ }
18
+ startPerformanceMeasurement(measureName, correlationId) {
19
+ return new BrowserPerformanceMeasurement(measureName, correlationId);
20
+ }
21
+ generateId() {
22
+ return window.crypto.randomUUID();
23
+ }
24
+ getPageVisibility() {
25
+ return document.visibilityState?.toString() || null;
26
+ }
27
+ deleteIncompleteSubMeasurements(inProgressEvent) {
28
+ const rootEvent = this.eventsByCorrelationId.get(inProgressEvent.event.correlationId);
29
+ const isRootEvent = rootEvent && rootEvent.eventId === inProgressEvent.event.eventId;
30
+ const incompleteMeasurements = [];
31
+ if (isRootEvent && rootEvent?.incompleteSubMeasurements) {
32
+ rootEvent.incompleteSubMeasurements.forEach((subMeasurement) => {
33
+ incompleteMeasurements.push({ ...subMeasurement });
34
+ });
35
+ }
36
+ // Clean up remaining marks for incomplete sub-measurements
37
+ if (incompleteMeasurements.length > 0) {
38
+ BrowserPerformanceMeasurement.flushMeasurements(inProgressEvent.event.correlationId, incompleteMeasurements);
39
+ }
40
+ }
41
+ supportsBrowserPerformanceNow() {
42
+ return (typeof window !== "undefined" &&
43
+ typeof window.performance !== "undefined" &&
44
+ typeof window.performance.now === "function");
45
+ }
46
+ /**
47
+ * Starts measuring performance for a given operation. Returns a function that should be used to end the measurement.
48
+ * Also captures browser page visibilityState.
49
+ *
50
+ * @param {PerformanceEvents} measureName
51
+ * @param {?string} [correlationId]
52
+ * @returns {((event?: Partial<PerformanceEvent>) => PerformanceEvent| null)}
53
+ */
54
+ startMeasurement(measureName, correlationId) {
55
+ // Capture page visibilityState and then invoke start/end measurement
56
+ const startPageVisibility = this.getPageVisibility();
57
+ const inProgressEvent = super.startMeasurement(measureName, correlationId);
58
+ return {
59
+ ...inProgressEvent,
60
+ end: (event) => {
61
+ const res = inProgressEvent.end({
62
+ startPageVisibility,
63
+ endPageVisibility: this.getPageVisibility(),
64
+ ...event,
65
+ });
66
+ this.deleteIncompleteSubMeasurements(inProgressEvent);
67
+ return res;
68
+ },
69
+ discard: () => {
70
+ inProgressEvent.discard();
71
+ this.deleteIncompleteSubMeasurements(inProgressEvent);
72
+ inProgressEvent.measurement.flushMeasurement();
73
+ },
74
+ };
75
+ }
76
+ /**
77
+ * Adds pre-queue time to preQueueTimeByCorrelationId map.
78
+ * @param {PerformanceEvents} eventName
79
+ * @param {?string} correlationId
80
+ * @returns
81
+ */
82
+ setPreQueueTime(eventName, correlationId) {
83
+ if (!this.supportsBrowserPerformanceNow()) {
84
+ this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to set telemetry queue time for ${eventName}`);
85
+ return;
86
+ }
87
+ if (!correlationId) {
88
+ this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to set telemetry queue time`);
89
+ return;
90
+ }
91
+ const preQueueEvent = this.preQueueTimeByCorrelationId.get(correlationId);
92
+ /**
93
+ * Manually complete queue measurement if there is an incomplete pre-queue event.
94
+ * Incomplete pre-queue events are instrumentation bugs that should be fixed.
95
+ */
96
+ if (preQueueEvent) {
97
+ this.logger.trace(`BrowserPerformanceClient: Incomplete pre-queue ${preQueueEvent.name} found`, correlationId);
98
+ this.addQueueMeasurement(preQueueEvent.name, correlationId, undefined, true);
99
+ }
100
+ this.preQueueTimeByCorrelationId.set(correlationId, {
101
+ name: eventName,
102
+ time: window.performance.now(),
103
+ });
104
+ }
105
+ /**
106
+ * Calculates and adds queue time measurement for given performance event.
107
+ *
108
+ * @param {PerformanceEvents} eventName
109
+ * @param {?string} correlationId
110
+ * @param {?number} queueTime
111
+ * @param {?boolean} manuallyCompleted - indicator for manually completed queue measurements
112
+ * @returns
113
+ */
114
+ addQueueMeasurement(eventName, correlationId, queueTime, manuallyCompleted) {
115
+ if (!this.supportsBrowserPerformanceNow()) {
116
+ this.logger.trace(`BrowserPerformanceClient: window performance API not available, unable to add queue measurement for ${eventName}`);
117
+ return;
118
+ }
119
+ if (!correlationId) {
120
+ this.logger.trace(`BrowserPerformanceClient: correlationId for ${eventName} not provided, unable to add queue measurement`);
121
+ return;
122
+ }
123
+ const preQueueTime = super.getPreQueueTime(eventName, correlationId);
124
+ if (!preQueueTime) {
125
+ return;
126
+ }
127
+ const currentTime = window.performance.now();
128
+ const resQueueTime = queueTime || super.calculateQueuedTime(preQueueTime, currentTime);
129
+ return super.addQueueMeasurement(eventName, correlationId, resQueueTime, manuallyCompleted);
130
+ }
131
131
  }
132
132
 
133
133
  export { BrowserPerformanceClient };