@azure/msal-browser 3.1.0 → 3.3.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 (282) hide show
  1. package/dist/app/IPublicClientApplication.d.ts.map +1 -1
  2. package/dist/app/IPublicClientApplication.mjs +20 -19
  3. package/dist/app/IPublicClientApplication.mjs.map +1 -1
  4. package/dist/app/PublicClientApplication.d.ts +14 -6
  5. package/dist/app/PublicClientApplication.d.ts.map +1 -1
  6. package/dist/app/PublicClientApplication.mjs +18 -8
  7. package/dist/app/PublicClientApplication.mjs.map +1 -1
  8. package/dist/app/PublicClientNext.d.ts +274 -0
  9. package/dist/app/PublicClientNext.d.ts.map +1 -0
  10. package/dist/app/PublicClientNext.mjs +362 -0
  11. package/dist/app/PublicClientNext.mjs.map +1 -0
  12. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +3 -4
  13. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts.map +1 -1
  14. package/dist/broker/nativeBroker/NativeMessageHandler.mjs +13 -13
  15. package/dist/broker/nativeBroker/NativeMessageHandler.mjs.map +1 -1
  16. package/dist/broker/nativeBroker/NativeStatusCodes.d.ts +8 -0
  17. package/dist/broker/nativeBroker/NativeStatusCodes.d.ts.map +1 -0
  18. package/dist/broker/nativeBroker/NativeStatusCodes.mjs +16 -0
  19. package/dist/broker/nativeBroker/NativeStatusCodes.mjs.map +1 -0
  20. package/dist/cache/AsyncMemoryStorage.mjs +1 -1
  21. package/dist/cache/BrowserCacheManager.d.ts +4 -15
  22. package/dist/cache/BrowserCacheManager.d.ts.map +1 -1
  23. package/dist/cache/BrowserCacheManager.mjs +13 -69
  24. package/dist/cache/BrowserCacheManager.mjs.map +1 -1
  25. package/dist/cache/BrowserStorage.d.ts.map +1 -1
  26. package/dist/cache/BrowserStorage.mjs +7 -9
  27. package/dist/cache/BrowserStorage.mjs.map +1 -1
  28. package/dist/cache/CryptoKeyStore.mjs +1 -1
  29. package/dist/cache/DatabaseStorage.mjs +1 -1
  30. package/dist/cache/MemoryStorage.mjs +1 -1
  31. package/dist/cache/TokenCache.mjs +1 -1
  32. package/dist/config/Configuration.d.ts +4 -0
  33. package/dist/config/Configuration.d.ts.map +1 -1
  34. package/dist/config/Configuration.mjs +8 -7
  35. package/dist/config/Configuration.mjs.map +1 -1
  36. package/dist/controllers/ControllerFactory.d.ts +2 -1
  37. package/dist/controllers/ControllerFactory.d.ts.map +1 -1
  38. package/dist/controllers/ControllerFactory.mjs +26 -19
  39. package/dist/controllers/ControllerFactory.mjs.map +1 -1
  40. package/dist/controllers/IController.d.ts +3 -2
  41. package/dist/controllers/IController.d.ts.map +1 -1
  42. package/dist/controllers/NestedAppAuthController.d.ts +96 -0
  43. package/dist/controllers/NestedAppAuthController.d.ts.map +1 -0
  44. package/dist/controllers/NestedAppAuthController.mjs +345 -0
  45. package/dist/controllers/NestedAppAuthController.mjs.map +1 -0
  46. package/dist/controllers/StandardController.d.ts +11 -6
  47. package/dist/controllers/StandardController.d.ts.map +1 -1
  48. package/dist/controllers/StandardController.mjs +67 -45
  49. package/dist/controllers/StandardController.mjs.map +1 -1
  50. package/dist/controllers/UnknownOperatingContextController.d.ts +88 -0
  51. package/dist/controllers/UnknownOperatingContextController.d.ts.map +1 -0
  52. package/dist/controllers/UnknownOperatingContextController.mjs +275 -0
  53. package/dist/controllers/UnknownOperatingContextController.mjs.map +1 -0
  54. package/dist/crypto/BrowserCrypto.d.ts +44 -49
  55. package/dist/crypto/BrowserCrypto.d.ts.map +1 -1
  56. package/dist/crypto/BrowserCrypto.mjs +77 -77
  57. package/dist/crypto/BrowserCrypto.mjs.map +1 -1
  58. package/dist/crypto/CryptoOps.d.ts +1 -7
  59. package/dist/crypto/CryptoOps.d.ts.map +1 -1
  60. package/dist/crypto/CryptoOps.mjs +18 -23
  61. package/dist/crypto/CryptoOps.mjs.map +1 -1
  62. package/dist/crypto/PkceGenerator.d.ts +6 -21
  63. package/dist/crypto/PkceGenerator.d.ts.map +1 -1
  64. package/dist/crypto/PkceGenerator.mjs +45 -46
  65. package/dist/crypto/PkceGenerator.mjs.map +1 -1
  66. package/dist/crypto/SignedHttpRequest.mjs +1 -1
  67. package/dist/encode/Base64Decode.d.ts.map +1 -1
  68. package/dist/encode/Base64Decode.mjs +18 -2
  69. package/dist/encode/Base64Decode.mjs.map +1 -1
  70. package/dist/encode/Base64Encode.mjs +1 -1
  71. package/dist/error/BrowserAuthError.d.ts +10 -1
  72. package/dist/error/BrowserAuthError.d.ts.map +1 -1
  73. package/dist/error/BrowserAuthError.mjs +12 -3
  74. package/dist/error/BrowserAuthError.mjs.map +1 -1
  75. package/dist/error/BrowserAuthErrorCodes.d.ts +1 -0
  76. package/dist/error/BrowserAuthErrorCodes.d.ts.map +1 -1
  77. package/dist/error/BrowserAuthErrorCodes.mjs +3 -2
  78. package/dist/error/BrowserAuthErrorCodes.mjs.map +1 -1
  79. package/dist/error/BrowserConfigurationAuthError.d.ts +9 -46
  80. package/dist/error/BrowserConfigurationAuthError.d.ts.map +1 -1
  81. package/dist/error/BrowserConfigurationAuthError.mjs +20 -73
  82. package/dist/error/BrowserConfigurationAuthError.mjs.map +1 -1
  83. package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts +4 -0
  84. package/dist/error/BrowserConfigurationAuthErrorCodes.d.ts.map +1 -0
  85. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs +12 -0
  86. package/dist/error/BrowserConfigurationAuthErrorCodes.mjs.map +1 -0
  87. package/dist/error/NativeAuthError.d.ts +17 -45
  88. package/dist/error/NativeAuthError.d.ts.map +1 -1
  89. package/dist/error/NativeAuthError.mjs +47 -78
  90. package/dist/error/NativeAuthError.mjs.map +1 -1
  91. package/dist/error/NativeAuthErrorCodes.d.ts +3 -0
  92. package/dist/error/NativeAuthErrorCodes.d.ts.map +1 -0
  93. package/dist/error/NativeAuthErrorCodes.mjs +11 -0
  94. package/dist/error/NativeAuthErrorCodes.mjs.map +1 -0
  95. package/dist/error/NestedAppAuthError.d.ts +15 -0
  96. package/dist/error/NestedAppAuthError.d.ts.map +1 -0
  97. package/dist/error/NestedAppAuthError.mjs +30 -0
  98. package/dist/error/NestedAppAuthError.mjs.map +1 -0
  99. package/dist/event/EventHandler.d.ts.map +1 -1
  100. package/dist/event/EventHandler.mjs +3 -2
  101. package/dist/event/EventHandler.mjs.map +1 -1
  102. package/dist/event/EventMessage.mjs +1 -1
  103. package/dist/event/EventType.mjs +1 -1
  104. package/dist/index.d.ts +5 -7
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.mjs +7 -3
  107. package/dist/index.mjs.map +1 -1
  108. package/dist/interaction_client/BaseInteractionClient.d.ts.map +1 -1
  109. package/dist/interaction_client/BaseInteractionClient.mjs +10 -11
  110. package/dist/interaction_client/BaseInteractionClient.mjs.map +1 -1
  111. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.mjs +1 -1
  112. package/dist/interaction_client/NativeInteractionClient.d.ts.map +1 -1
  113. package/dist/interaction_client/NativeInteractionClient.mjs +26 -13
  114. package/dist/interaction_client/NativeInteractionClient.mjs.map +1 -1
  115. package/dist/interaction_client/PopupClient.d.ts.map +1 -1
  116. package/dist/interaction_client/PopupClient.mjs +5 -4
  117. package/dist/interaction_client/PopupClient.mjs.map +1 -1
  118. package/dist/interaction_client/RedirectClient.mjs +7 -7
  119. package/dist/interaction_client/SilentAuthCodeClient.d.ts.map +1 -1
  120. package/dist/interaction_client/SilentAuthCodeClient.mjs +7 -10
  121. package/dist/interaction_client/SilentAuthCodeClient.mjs.map +1 -1
  122. package/dist/interaction_client/SilentCacheClient.d.ts.map +1 -1
  123. package/dist/interaction_client/SilentCacheClient.mjs +11 -18
  124. package/dist/interaction_client/SilentCacheClient.mjs.map +1 -1
  125. package/dist/interaction_client/SilentIframeClient.d.ts.map +1 -1
  126. package/dist/interaction_client/SilentIframeClient.mjs +27 -13
  127. package/dist/interaction_client/SilentIframeClient.mjs.map +1 -1
  128. package/dist/interaction_client/SilentRefreshClient.d.ts.map +1 -1
  129. package/dist/interaction_client/SilentRefreshClient.mjs +8 -18
  130. package/dist/interaction_client/SilentRefreshClient.mjs.map +1 -1
  131. package/dist/interaction_client/StandardInteractionClient.d.ts.map +1 -1
  132. package/dist/interaction_client/StandardInteractionClient.mjs +16 -37
  133. package/dist/interaction_client/StandardInteractionClient.mjs.map +1 -1
  134. package/dist/interaction_handler/InteractionHandler.d.ts.map +1 -1
  135. package/dist/interaction_handler/InteractionHandler.mjs +6 -9
  136. package/dist/interaction_handler/InteractionHandler.mjs.map +1 -1
  137. package/dist/interaction_handler/RedirectHandler.d.ts.map +1 -1
  138. package/dist/interaction_handler/RedirectHandler.mjs +3 -3
  139. package/dist/interaction_handler/RedirectHandler.mjs.map +1 -1
  140. package/dist/interaction_handler/SilentHandler.d.ts +13 -47
  141. package/dist/interaction_handler/SilentHandler.d.ts.map +1 -1
  142. package/dist/interaction_handler/SilentHandler.mjs +120 -156
  143. package/dist/interaction_handler/SilentHandler.mjs.map +1 -1
  144. package/dist/naa/AccountInfo.d.ts +13 -0
  145. package/dist/naa/AccountInfo.d.ts.map +1 -0
  146. package/dist/naa/AccountRequests.d.ts +10 -0
  147. package/dist/naa/AccountRequests.d.ts.map +1 -0
  148. package/dist/naa/AuthBridge.d.ts +6 -0
  149. package/dist/naa/AuthBridge.d.ts.map +1 -0
  150. package/dist/naa/BridgeCapabilities.d.ts +4 -0
  151. package/dist/naa/BridgeCapabilities.d.ts.map +1 -0
  152. package/dist/naa/BridgeError.d.ts +10 -0
  153. package/dist/naa/BridgeError.d.ts.map +1 -0
  154. package/dist/naa/BridgeError.mjs +12 -0
  155. package/dist/naa/BridgeError.mjs.map +1 -0
  156. package/dist/naa/BridgeProxy.d.ts +72 -0
  157. package/dist/naa/BridgeProxy.d.ts.map +1 -0
  158. package/dist/naa/BridgeProxy.mjs +154 -0
  159. package/dist/naa/BridgeProxy.mjs.map +1 -0
  160. package/dist/naa/BridgeRequest.d.ts +7 -0
  161. package/dist/naa/BridgeRequest.d.ts.map +1 -0
  162. package/dist/naa/BridgeRequestEnvelope.d.ts +14 -0
  163. package/dist/naa/BridgeRequestEnvelope.d.ts.map +1 -0
  164. package/dist/naa/BridgeResponseEnvelope.d.ts +11 -0
  165. package/dist/naa/BridgeResponseEnvelope.d.ts.map +1 -0
  166. package/dist/naa/BridgeStatusCode.d.ts +11 -0
  167. package/dist/naa/BridgeStatusCode.d.ts.map +1 -0
  168. package/dist/naa/BridgeStatusCode.mjs +20 -0
  169. package/dist/naa/BridgeStatusCode.mjs.map +1 -0
  170. package/dist/naa/IBridgeProxy.d.ts +11 -0
  171. package/dist/naa/IBridgeProxy.d.ts.map +1 -0
  172. package/dist/naa/InitializeBridgeResponse.d.ts +7 -0
  173. package/dist/naa/InitializeBridgeResponse.d.ts.map +1 -0
  174. package/dist/naa/TokenRequest.d.ts +22 -0
  175. package/dist/naa/TokenRequest.d.ts.map +1 -0
  176. package/dist/naa/TokenResponse.d.ts +17 -0
  177. package/dist/naa/TokenResponse.d.ts.map +1 -0
  178. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts +26 -0
  179. package/dist/naa/mapping/NestedAppAuthAdapter.d.ts.map +1 -0
  180. package/dist/naa/mapping/NestedAppAuthAdapter.mjs +178 -0
  181. package/dist/naa/mapping/NestedAppAuthAdapter.mjs.map +1 -0
  182. package/dist/navigation/NavigationClient.mjs +1 -1
  183. package/dist/network/FetchClient.mjs +1 -1
  184. package/dist/operatingcontext/BaseOperatingContext.mjs +1 -1
  185. package/dist/operatingcontext/StandardOperatingContext.mjs +1 -1
  186. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +7 -0
  187. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts.map +1 -1
  188. package/dist/operatingcontext/TeamsAppOperatingContext.mjs +45 -4
  189. package/dist/operatingcontext/TeamsAppOperatingContext.mjs.map +1 -1
  190. package/dist/operatingcontext/UnknownOperatingContext.d.ts +26 -0
  191. package/dist/operatingcontext/UnknownOperatingContext.d.ts.map +1 -0
  192. package/dist/operatingcontext/UnknownOperatingContext.mjs +49 -0
  193. package/dist/operatingcontext/UnknownOperatingContext.mjs.map +1 -0
  194. package/dist/packageMetadata.d.ts +1 -1
  195. package/dist/packageMetadata.mjs +2 -2
  196. package/dist/telemetry/BrowserPerformanceClient.mjs +1 -1
  197. package/dist/telemetry/BrowserPerformanceMeasurement.mjs +1 -1
  198. package/dist/utils/BrowserConstants.mjs +1 -1
  199. package/dist/utils/BrowserProtocolUtils.d.ts.map +1 -1
  200. package/dist/utils/BrowserProtocolUtils.mjs +3 -3
  201. package/dist/utils/BrowserProtocolUtils.mjs.map +1 -1
  202. package/dist/utils/BrowserUtils.d.ts +54 -53
  203. package/dist/utils/BrowserUtils.d.ts.map +1 -1
  204. package/dist/utils/BrowserUtils.mjs +114 -102
  205. package/dist/utils/BrowserUtils.mjs.map +1 -1
  206. package/lib/msal-browser.cjs +61 -18042
  207. package/lib/msal-browser.cjs.map +1 -1
  208. package/lib/msal-browser.js +13593 -12505
  209. package/lib/msal-browser.js.map +1 -1
  210. package/lib/msal-browser.min.js +66 -65
  211. package/package.json +2 -2
  212. package/src/app/IPublicClientApplication.ts +55 -18
  213. package/src/app/PublicClientApplication.ts +19 -7
  214. package/src/app/PublicClientNext.ts +442 -0
  215. package/src/broker/nativeBroker/NativeMessageHandler.ts +12 -15
  216. package/src/broker/nativeBroker/NativeStatusCodes.ts +13 -0
  217. package/src/cache/BrowserCacheManager.ts +29 -103
  218. package/src/cache/BrowserStorage.ts +9 -11
  219. package/src/config/Configuration.ts +21 -8
  220. package/src/controllers/ControllerFactory.ts +36 -25
  221. package/src/controllers/IController.ts +4 -1
  222. package/src/controllers/NestedAppAuthController.ts +525 -0
  223. package/src/controllers/StandardController.ts +163 -98
  224. package/src/controllers/UnknownOperatingContextController.ts +383 -0
  225. package/src/crypto/BrowserCrypto.ts +119 -103
  226. package/src/crypto/CryptoOps.ts +18 -27
  227. package/src/crypto/PkceGenerator.ts +93 -54
  228. package/src/encode/Base64Decode.ts +21 -1
  229. package/src/error/BrowserAuthError.ts +13 -1
  230. package/src/error/BrowserAuthErrorCodes.ts +1 -0
  231. package/src/error/BrowserConfigurationAuthError.ts +33 -102
  232. package/src/error/BrowserConfigurationAuthErrorCodes.ts +9 -0
  233. package/src/error/NativeAuthError.ts +73 -101
  234. package/src/error/NativeAuthErrorCodes.ts +7 -0
  235. package/src/error/NestedAppAuthError.ts +32 -0
  236. package/src/event/EventHandler.ts +2 -1
  237. package/src/index.ts +8 -10
  238. package/src/interaction_client/BaseInteractionClient.ts +14 -8
  239. package/src/interaction_client/NativeInteractionClient.ts +48 -14
  240. package/src/interaction_client/PopupClient.ts +2 -1
  241. package/src/interaction_client/RedirectClient.ts +1 -1
  242. package/src/interaction_client/SilentAuthCodeClient.ts +22 -19
  243. package/src/interaction_client/SilentCacheClient.ts +28 -28
  244. package/src/interaction_client/SilentIframeClient.ts +54 -18
  245. package/src/interaction_client/SilentRefreshClient.ts +26 -28
  246. package/src/interaction_client/StandardInteractionClient.ts +37 -68
  247. package/src/interaction_handler/InteractionHandler.ts +20 -15
  248. package/src/interaction_handler/RedirectHandler.ts +6 -2
  249. package/src/interaction_handler/SilentHandler.ts +177 -230
  250. package/src/naa/AccountInfo.ts +17 -0
  251. package/src/naa/AccountRequests.ts +16 -0
  252. package/src/naa/AuthBridge.ts +16 -0
  253. package/src/naa/BridgeCapabilities.ts +8 -0
  254. package/src/naa/BridgeError.ts +18 -0
  255. package/src/naa/BridgeProxy.ts +230 -0
  256. package/src/naa/BridgeRequest.ts +12 -0
  257. package/src/naa/BridgeRequestEnvelope.ts +46 -0
  258. package/src/naa/BridgeResponseEnvelope.ts +21 -0
  259. package/src/naa/BridgeStatusCode.ts +15 -0
  260. package/src/naa/IBridgeProxy.ts +25 -0
  261. package/src/naa/InitializeBridgeResponse.ts +12 -0
  262. package/src/naa/TokenRequest.ts +26 -0
  263. package/src/naa/TokenResponse.ts +61 -0
  264. package/src/naa/mapping/NestedAppAuthAdapter.ts +252 -0
  265. package/src/operatingcontext/TeamsAppOperatingContext.ts +43 -3
  266. package/src/operatingcontext/UnknownOperatingContext.ts +48 -0
  267. package/src/packageMetadata.ts +1 -1
  268. package/src/utils/BrowserProtocolUtils.ts +3 -2
  269. package/src/utils/BrowserUtils.ts +133 -125
  270. package/dist/crypto/ISubtleCrypto.d.ts +0 -10
  271. package/dist/crypto/ISubtleCrypto.d.ts.map +0 -1
  272. package/dist/crypto/ModernBrowserCrypto.d.ts +0 -10
  273. package/dist/crypto/ModernBrowserCrypto.d.ts.map +0 -1
  274. package/dist/crypto/ModernBrowserCrypto.mjs +0 -31
  275. package/dist/crypto/ModernBrowserCrypto.mjs.map +0 -1
  276. package/dist/utils/BrowserStringUtils.d.ts +0 -22
  277. package/dist/utils/BrowserStringUtils.d.ts.map +0 -1
  278. package/dist/utils/BrowserStringUtils.mjs +0 -144
  279. package/dist/utils/BrowserStringUtils.mjs.map +0 -1
  280. package/src/crypto/ISubtleCrypto.ts +0 -30
  281. package/src/crypto/ModernBrowserCrypto.ts +0 -69
  282. package/src/utils/BrowserStringUtils.ts +0 -143
@@ -4,263 +4,210 @@
4
4
  */
5
5
 
6
6
  import {
7
- UrlString,
8
- CommonAuthorizationCodeRequest,
9
- AuthorizationCodeClient,
10
- Constants,
11
7
  Logger,
12
8
  IPerformanceClient,
13
9
  PerformanceEvents,
10
+ invokeAsync,
11
+ invoke,
14
12
  } from "@azure/msal-common";
15
- import { InteractionHandler } from "./InteractionHandler";
16
13
  import {
17
14
  createBrowserAuthError,
18
15
  BrowserAuthErrorCodes,
19
16
  } from "../error/BrowserAuthError";
20
- import { BrowserCacheManager } from "../cache/BrowserCacheManager";
21
- import {
22
- BrowserSystemOptions,
23
- DEFAULT_IFRAME_TIMEOUT_MS,
24
- } from "../config/Configuration";
25
-
26
- export class SilentHandler extends InteractionHandler {
27
- private navigateFrameWait: number;
28
- private pollIntervalMilliseconds: number;
17
+ import { DEFAULT_IFRAME_TIMEOUT_MS } from "../config/Configuration";
29
18
 
30
- constructor(
31
- authCodeModule: AuthorizationCodeClient,
32
- storageImpl: BrowserCacheManager,
33
- authCodeRequest: CommonAuthorizationCodeRequest,
34
- logger: Logger,
35
- systemOptions: Required<
36
- Pick<
37
- BrowserSystemOptions,
38
- "navigateFrameWait" | "pollIntervalMilliseconds"
39
- >
40
- >,
41
- performanceClient: IPerformanceClient
42
- ) {
43
- super(
44
- authCodeModule,
45
- storageImpl,
46
- authCodeRequest,
19
+ /**
20
+ * Creates a hidden iframe to given URL using user-requested scopes as an id.
21
+ * @param urlNavigate
22
+ * @param userRequestScopes
23
+ */
24
+ export async function initiateAuthRequest(
25
+ requestUrl: string,
26
+ performanceClient: IPerformanceClient,
27
+ logger: Logger,
28
+ correlationId: string,
29
+ navigateFrameWait?: number
30
+ ): Promise<HTMLIFrameElement> {
31
+ performanceClient.addQueueMeasurement(
32
+ PerformanceEvents.SilentHandlerInitiateAuthRequest,
33
+ correlationId
34
+ );
35
+
36
+ if (!requestUrl) {
37
+ // Throw error if request URL is empty.
38
+ logger.info("Navigate url is empty");
39
+ throw createBrowserAuthError(BrowserAuthErrorCodes.emptyNavigateUri);
40
+ }
41
+ if (navigateFrameWait) {
42
+ return await invokeAsync(
43
+ loadFrame,
44
+ PerformanceEvents.SilentHandlerLoadFrame,
47
45
  logger,
48
- performanceClient
49
- );
50
- this.navigateFrameWait = systemOptions.navigateFrameWait;
51
- this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;
46
+ performanceClient,
47
+ correlationId
48
+ )(requestUrl, navigateFrameWait, performanceClient, correlationId);
52
49
  }
50
+ return invoke(
51
+ loadFrameSync,
52
+ PerformanceEvents.SilentHandlerLoadFrameSync,
53
+ logger,
54
+ performanceClient,
55
+ correlationId
56
+ )(requestUrl);
57
+ }
53
58
 
54
- /**
55
- * Creates a hidden iframe to given URL using user-requested scopes as an id.
56
- * @param urlNavigate
57
- * @param userRequestScopes
58
- */
59
- async initiateAuthRequest(requestUrl: string): Promise<HTMLIFrameElement> {
60
- this.performanceClient.addQueueMeasurement(
61
- PerformanceEvents.SilentHandlerInitiateAuthRequest,
62
- this.authCodeRequest.correlationId
63
- );
64
-
65
- if (!requestUrl) {
66
- // Throw error if request URL is empty.
67
- this.logger.info("Navigate url is empty");
68
- throw createBrowserAuthError(
69
- BrowserAuthErrorCodes.emptyNavigateUri
59
+ /**
60
+ * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
61
+ * @param iframe
62
+ * @param timeout
63
+ */
64
+ export async function monitorIframeForHash(
65
+ iframe: HTMLIFrameElement,
66
+ timeout: number,
67
+ pollIntervalMilliseconds: number,
68
+ performanceClient: IPerformanceClient,
69
+ logger: Logger,
70
+ correlationId: string
71
+ ): Promise<string> {
72
+ performanceClient.addQueueMeasurement(
73
+ PerformanceEvents.SilentHandlerMonitorIframeForHash,
74
+ correlationId
75
+ );
76
+
77
+ return new Promise<string>((resolve, reject) => {
78
+ if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {
79
+ logger.warning(
80
+ `system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`
70
81
  );
71
82
  }
72
83
 
73
- if (this.navigateFrameWait) {
74
- this.performanceClient.setPreQueueTime(
75
- PerformanceEvents.SilentHandlerLoadFrame,
76
- this.authCodeRequest.correlationId
84
+ /*
85
+ * Polling for iframes can be purely timing based,
86
+ * since we don't need to account for interaction.
87
+ */
88
+ const timeoutId = window.setTimeout(() => {
89
+ window.clearInterval(intervalId);
90
+ reject(
91
+ createBrowserAuthError(
92
+ BrowserAuthErrorCodes.monitorWindowTimeout
93
+ )
77
94
  );
78
- return await this.loadFrame(requestUrl);
79
- }
80
- return this.loadFrameSync(requestUrl);
81
- }
82
-
83
- /**
84
- * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
85
- * @param iframe
86
- * @param timeout
87
- */
88
- monitorIframeForHash(
89
- iframe: HTMLIFrameElement,
90
- timeout: number
91
- ): Promise<string> {
92
- this.performanceClient.addQueueMeasurement(
93
- PerformanceEvents.SilentHandlerMonitorIframeForHash,
94
- this.authCodeRequest.correlationId
95
- );
96
-
97
- return new Promise((resolve, reject) => {
98
- if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {
99
- this.logger.warning(
100
- `system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`
101
- );
95
+ }, timeout);
96
+
97
+ const intervalId = window.setInterval(() => {
98
+ let href: string = "";
99
+ const contentWindow = iframe.contentWindow;
100
+ try {
101
+ /*
102
+ * Will throw if cross origin,
103
+ * which should be caught and ignored
104
+ * since we need the interval to keep running while on STS UI.
105
+ */
106
+ href = contentWindow ? contentWindow.location.href : "";
107
+ } catch (e) {}
108
+
109
+ if (!href || href === "about:blank") {
110
+ return;
102
111
  }
103
112
 
104
- /*
105
- * Polling for iframes can be purely timing based,
106
- * since we don't need to account for interaction.
107
- */
108
- const nowMark = window.performance.now();
109
- const timeoutMark = nowMark + timeout;
110
-
111
- const intervalId = setInterval(() => {
112
- if (window.performance.now() > timeoutMark) {
113
- this.removeHiddenIframe(iframe);
114
- clearInterval(intervalId);
115
- reject(
116
- createBrowserAuthError(
117
- BrowserAuthErrorCodes.monitorWindowTimeout
118
- )
119
- );
120
- return;
121
- }
122
-
123
- let href: string = Constants.EMPTY_STRING;
124
- const contentWindow = iframe.contentWindow;
125
- try {
126
- /*
127
- * Will throw if cross origin,
128
- * which should be caught and ignored
129
- * since we need the interval to keep running while on STS UI.
130
- */
131
- href = contentWindow
132
- ? contentWindow.location.href
133
- : Constants.EMPTY_STRING;
134
- } catch (e) {}
135
-
136
- if (!href || href === "about:blank") {
137
- return;
138
- }
139
-
140
- const contentHash = contentWindow
141
- ? contentWindow.location.hash
142
- : Constants.EMPTY_STRING;
143
- if (contentHash) {
144
- if (UrlString.hashContainsKnownProperties(contentHash)) {
145
- // Success case
146
- this.removeHiddenIframe(iframe);
147
- clearInterval(intervalId);
148
- resolve(contentHash);
149
- return;
150
- } else {
151
- // Hash is present but incorrect
152
- this.logger.error(
153
- "SilentHandler:monitorIFrameForHash - a hash is present in the iframe but it does not contain known properties. It's likely that the hash has been replaced by code running on the redirectUri page."
154
- );
155
- this.logger.errorPii(
156
- `SilentHandler:monitorIFrameForHash - the url detected in the iframe is: ${href}`
157
- );
158
- this.removeHiddenIframe(iframe);
159
- clearInterval(intervalId);
160
- reject(
161
- createBrowserAuthError(
162
- BrowserAuthErrorCodes.hashDoesNotContainKnownProperties
163
- )
164
- );
165
- return;
166
- }
167
- } else {
168
- // No hash is present
169
- this.logger.error(
170
- "SilentHandler:monitorIFrameForHash - the request has returned to the redirectUri but a hash is not present in the iframe. It's likely that the hash has been removed or the page has been redirected by code running on the redirectUri page."
171
- );
172
- this.logger.errorPii(
173
- `SilentHandler:monitorIFrameForHash - the url detected in the iframe is: ${href}`
174
- );
175
- this.removeHiddenIframe(iframe);
176
- clearInterval(intervalId);
177
- reject(
178
- createBrowserAuthError(
179
- BrowserAuthErrorCodes.hashEmptyError
180
- )
181
- );
182
- return;
183
- }
184
- }, this.pollIntervalMilliseconds);
185
- });
186
- }
113
+ const contentHash = contentWindow
114
+ ? contentWindow.location.hash
115
+ : "";
116
+ window.clearTimeout(timeoutId);
117
+ window.clearInterval(intervalId);
118
+ resolve(contentHash);
119
+ }, pollIntervalMilliseconds);
120
+ }).finally(() => {
121
+ invoke(
122
+ removeHiddenIframe,
123
+ PerformanceEvents.RemoveHiddenIframe,
124
+ logger,
125
+ performanceClient,
126
+ correlationId
127
+ )(iframe);
128
+ });
129
+ }
187
130
 
188
- /**
189
- * @hidden
190
- * Loads iframe with authorization endpoint URL
191
- * @ignore
131
+ /**
132
+ * @hidden
133
+ * Loads iframe with authorization endpoint URL
134
+ * @ignore
135
+ * @deprecated
136
+ */
137
+ function loadFrame(
138
+ urlNavigate: string,
139
+ navigateFrameWait: number,
140
+ performanceClient: IPerformanceClient,
141
+ correlationId: string
142
+ ): Promise<HTMLIFrameElement> {
143
+ performanceClient.addQueueMeasurement(
144
+ PerformanceEvents.SilentHandlerLoadFrame,
145
+ correlationId
146
+ );
147
+
148
+ /*
149
+ * This trick overcomes iframe navigation in IE
150
+ * IE does not load the page consistently in iframe
192
151
  */
193
- private loadFrame(urlNavigate: string): Promise<HTMLIFrameElement> {
194
- this.performanceClient.addQueueMeasurement(
195
- PerformanceEvents.SilentHandlerLoadFrame,
196
- this.authCodeRequest.correlationId
197
- );
198
-
199
- /*
200
- * This trick overcomes iframe navigation in IE
201
- * IE does not load the page consistently in iframe
202
- */
203
-
204
- return new Promise((resolve, reject) => {
205
- const frameHandle = this.createHiddenIframe();
206
152
 
207
- setTimeout(() => {
208
- if (!frameHandle) {
209
- reject("Unable to load iframe");
210
- return;
211
- }
153
+ return new Promise((resolve, reject) => {
154
+ const frameHandle = createHiddenIframe();
212
155
 
213
- frameHandle.src = urlNavigate;
214
-
215
- resolve(frameHandle);
216
- }, this.navigateFrameWait);
217
- });
218
- }
219
-
220
- /**
221
- * @hidden
222
- * Loads the iframe synchronously when the navigateTimeFrame is set to `0`
223
- * @param urlNavigate
224
- * @param frameName
225
- * @param logger
226
- */
227
- private loadFrameSync(urlNavigate: string): HTMLIFrameElement {
228
- const frameHandle = this.createHiddenIframe();
156
+ window.setTimeout(() => {
157
+ if (!frameHandle) {
158
+ reject("Unable to load iframe");
159
+ return;
160
+ }
229
161
 
230
- frameHandle.src = urlNavigate;
162
+ frameHandle.src = urlNavigate;
231
163
 
232
- return frameHandle;
233
- }
164
+ resolve(frameHandle);
165
+ }, navigateFrameWait);
166
+ });
167
+ }
168
+ /**
169
+ * @hidden
170
+ * Loads the iframe synchronously when the navigateTimeFrame is set to `0`
171
+ * @param urlNavigate
172
+ * @param frameName
173
+ * @param logger
174
+ */
175
+ function loadFrameSync(urlNavigate: string): HTMLIFrameElement {
176
+ const frameHandle = createHiddenIframe();
234
177
 
235
- /**
236
- * @hidden
237
- * Creates a new hidden iframe or gets an existing one for silent token renewal.
238
- * @ignore
239
- */
240
- private createHiddenIframe(): HTMLIFrameElement {
241
- const authFrame = document.createElement("iframe");
178
+ frameHandle.src = urlNavigate;
242
179
 
243
- authFrame.style.visibility = "hidden";
244
- authFrame.style.position = "absolute";
245
- authFrame.style.width = authFrame.style.height = "0";
246
- authFrame.style.border = "0";
247
- authFrame.setAttribute(
248
- "sandbox",
249
- "allow-scripts allow-same-origin allow-forms"
250
- );
251
- document.getElementsByTagName("body")[0].appendChild(authFrame);
180
+ return frameHandle;
181
+ }
252
182
 
253
- return authFrame;
254
- }
183
+ /**
184
+ * @hidden
185
+ * Creates a new hidden iframe or gets an existing one for silent token renewal.
186
+ * @ignore
187
+ */
188
+ function createHiddenIframe(): HTMLIFrameElement {
189
+ const authFrame = document.createElement("iframe");
190
+
191
+ authFrame.style.visibility = "hidden";
192
+ authFrame.style.position = "absolute";
193
+ authFrame.style.width = authFrame.style.height = "0";
194
+ authFrame.style.border = "0";
195
+ authFrame.setAttribute(
196
+ "sandbox",
197
+ "allow-scripts allow-same-origin allow-forms"
198
+ );
199
+ document.getElementsByTagName("body")[0].appendChild(authFrame);
200
+
201
+ return authFrame;
202
+ }
255
203
 
256
- /**
257
- * @hidden
258
- * Removes a hidden iframe from the page.
259
- * @ignore
260
- */
261
- private removeHiddenIframe(iframe: HTMLIFrameElement): void {
262
- if (document.body === iframe.parentNode) {
263
- document.body.removeChild(iframe);
264
- }
204
+ /**
205
+ * @hidden
206
+ * Removes a hidden iframe from the page.
207
+ * @ignore
208
+ */
209
+ function removeHiddenIframe(iframe: HTMLIFrameElement): void {
210
+ if (document.body === iframe.parentNode) {
211
+ document.body.removeChild(iframe);
265
212
  }
266
213
  }
@@ -0,0 +1,17 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export type AccountInfo = {
7
+ homeAccountId: string;
8
+ environment: string;
9
+ tenantId: string;
10
+ username: string;
11
+ localAccountId: string;
12
+ name?: string;
13
+ idToken?: string; // idTokenClaims can be parsed from idToken in MSAL.js
14
+ platformBrokerId?: string; // Used by WAM previous called nativeAccountId
15
+ idTokenClaims?: object;
16
+ client_info?: string;
17
+ };
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export type AccountByHomeIdRequest = {
7
+ homeAccountId: string;
8
+ };
9
+
10
+ export type AccountByLocalIdRequest = {
11
+ localAccountId: string;
12
+ };
13
+
14
+ export type AccountByUsernameRequest = {
15
+ username: string;
16
+ };
@@ -0,0 +1,16 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export interface AuthBridge {
7
+ addEventListener: (
8
+ eventName: string,
9
+ callback: (response: string) => void
10
+ ) => void;
11
+ postMessage: (message: string) => void;
12
+ removeEventListener: (
13
+ eventName: string,
14
+ callback: (response: string) => void
15
+ ) => void;
16
+ }
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ export interface BridgeCapabilities {
7
+ queryAccount: boolean;
8
+ }
@@ -0,0 +1,18 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { BridgeStatusCode } from "./BridgeStatusCode";
7
+
8
+ export type BridgeError = {
9
+ status: BridgeStatusCode;
10
+ code: string; // auth_flow_last_error such as invalid_grant
11
+ subError: string; // server_suberror_code such as consent_required
12
+ description: string;
13
+ properties: object; // additional telemetry info
14
+ };
15
+
16
+ export function isBridgeError(error: unknown): error is BridgeError {
17
+ return (error as BridgeError).status !== undefined;
18
+ }