@azure/msal-browser 3.0.0-alpha.1 → 3.0.0-alpha.2

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 (142) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +213 -213
  3. package/dist/app/IPublicClientApplication.d.ts +45 -45
  4. package/dist/app/IPublicClientApplication.js +96 -96
  5. package/dist/app/PublicClientApplication.d.ts +244 -244
  6. package/dist/app/PublicClientApplication.js +307 -307
  7. package/dist/broker/nativeBroker/NativeMessageHandler.d.ts +63 -63
  8. package/dist/broker/nativeBroker/NativeMessageHandler.js +255 -255
  9. package/dist/broker/nativeBroker/NativeRequest.d.ts +43 -43
  10. package/dist/broker/nativeBroker/NativeResponse.d.ts +48 -48
  11. package/dist/cache/AsyncMemoryStorage.d.ts +51 -51
  12. package/dist/cache/AsyncMemoryStorage.js +132 -132
  13. package/dist/cache/BrowserCacheManager.d.ts +377 -377
  14. package/dist/cache/BrowserCacheManager.js +1276 -1276
  15. package/dist/cache/BrowserStorage.d.ts +11 -11
  16. package/dist/cache/BrowserStorage.js +35 -35
  17. package/dist/cache/CryptoKeyStore.d.ts +17 -17
  18. package/dist/cache/CryptoKeyStore.js +41 -41
  19. package/dist/cache/DatabaseStorage.d.ts +56 -56
  20. package/dist/cache/DatabaseStorage.js +190 -190
  21. package/dist/cache/IAsyncMemoryStorage.d.ts +27 -27
  22. package/dist/cache/ITokenCache.d.ts +10 -10
  23. package/dist/cache/IWindowStorage.d.ts +27 -27
  24. package/dist/cache/MemoryStorage.d.ts +11 -11
  25. package/dist/cache/MemoryStorage.js +31 -31
  26. package/dist/cache/TokenCache.d.ts +76 -76
  27. package/dist/cache/TokenCache.js +225 -225
  28. package/dist/config/Configuration.d.ts +203 -203
  29. package/dist/config/Configuration.js +101 -101
  30. package/dist/controllers/ControllerFactory.d.ts +9 -9
  31. package/dist/controllers/ControllerFactory.js +37 -37
  32. package/dist/controllers/IController.d.ts +66 -66
  33. package/dist/controllers/StandardController.d.ts +413 -413
  34. package/dist/controllers/StandardController.js +1272 -1272
  35. package/dist/crypto/BrowserCrypto.d.ts +61 -61
  36. package/dist/crypto/BrowserCrypto.js +131 -131
  37. package/dist/crypto/CryptoOps.d.ts +73 -73
  38. package/dist/crypto/CryptoOps.js +150 -150
  39. package/dist/crypto/GuidGenerator.d.ts +12 -12
  40. package/dist/crypto/GuidGenerator.js +96 -96
  41. package/dist/crypto/ISubtleCrypto.d.ts +9 -9
  42. package/dist/crypto/ModernBrowserCrypto.d.ts +9 -9
  43. package/dist/crypto/ModernBrowserCrypto.js +24 -24
  44. package/dist/crypto/MsBrowserCrypto.d.ts +9 -9
  45. package/dist/crypto/MsBrowserCrypto.js +79 -79
  46. package/dist/crypto/MsrBrowserCrypto.d.ts +17 -17
  47. package/dist/crypto/MsrBrowserCrypto.js +28 -28
  48. package/dist/crypto/PkceGenerator.d.ts +24 -24
  49. package/dist/crypto/PkceGenerator.js +58 -58
  50. package/dist/crypto/SignedHttpRequest.d.ts +30 -30
  51. package/dist/crypto/SignedHttpRequest.js +39 -39
  52. package/dist/encode/Base64Decode.d.ts +22 -22
  53. package/dist/encode/Base64Decode.js +73 -73
  54. package/dist/encode/Base64Encode.d.ts +31 -31
  55. package/dist/encode/Base64Encode.js +79 -79
  56. package/dist/error/BrowserAuthError.d.ts +382 -382
  57. package/dist/error/BrowserAuthError.js +483 -483
  58. package/dist/error/BrowserConfigurationAuthError.d.ts +70 -70
  59. package/dist/error/BrowserConfigurationAuthError.js +96 -96
  60. package/dist/error/NativeAuthError.d.ts +56 -56
  61. package/dist/error/NativeAuthError.js +88 -88
  62. package/dist/event/EventHandler.d.ts +41 -41
  63. package/dist/event/EventHandler.js +119 -119
  64. package/dist/event/EventMessage.d.ts +25 -25
  65. package/dist/event/EventMessage.js +67 -67
  66. package/dist/event/EventType.d.ts +26 -26
  67. package/dist/event/EventType.js +31 -31
  68. package/dist/index.d.ts +35 -35
  69. package/dist/index.js +1 -1
  70. package/dist/interaction_client/BaseInteractionClient.d.ts +52 -52
  71. package/dist/interaction_client/BaseInteractionClient.js +138 -138
  72. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.d.ts +4 -4
  73. package/dist/interaction_client/HybridSpaAuthorizationCodeClient.js +10 -10
  74. package/dist/interaction_client/NativeInteractionClient.d.ts +148 -148
  75. package/dist/interaction_client/NativeInteractionClient.js +516 -516
  76. package/dist/interaction_client/PopupClient.d.ts +111 -111
  77. package/dist/interaction_client/PopupClient.js +476 -476
  78. package/dist/interaction_client/RedirectClient.d.ts +48 -48
  79. package/dist/interaction_client/RedirectClient.js +290 -290
  80. package/dist/interaction_client/SilentAuthCodeClient.d.ts +22 -22
  81. package/dist/interaction_client/SilentAuthCodeClient.js +62 -62
  82. package/dist/interaction_client/SilentCacheClient.d.ts +21 -21
  83. package/dist/interaction_client/SilentCacheClient.js +67 -67
  84. package/dist/interaction_client/SilentIframeClient.d.ts +31 -31
  85. package/dist/interaction_client/SilentIframeClient.js +127 -127
  86. package/dist/interaction_client/SilentRefreshClient.d.ts +19 -19
  87. package/dist/interaction_client/SilentRefreshClient.js +62 -62
  88. package/dist/interaction_client/StandardInteractionClient.d.ts +59 -59
  89. package/dist/interaction_client/StandardInteractionClient.js +259 -259
  90. package/dist/interaction_handler/InteractionHandler.d.ts +39 -39
  91. package/dist/interaction_handler/InteractionHandler.js +127 -127
  92. package/dist/interaction_handler/RedirectHandler.d.ts +24 -24
  93. package/dist/interaction_handler/RedirectHandler.js +118 -118
  94. package/dist/interaction_handler/SilentHandler.d.ts +47 -47
  95. package/dist/interaction_handler/SilentHandler.js +162 -162
  96. package/dist/internals.d.ts +23 -23
  97. package/dist/internals.js +4 -4
  98. package/dist/navigation/INavigationClient.d.ts +16 -16
  99. package/dist/navigation/NavigationClient.d.ts +22 -22
  100. package/dist/navigation/NavigationClient.js +40 -40
  101. package/dist/navigation/NavigationOptions.d.ts +12 -12
  102. package/dist/network/FetchClient.d.ts +26 -26
  103. package/dist/network/FetchClient.js +99 -99
  104. package/dist/network/XhrClient.d.ts +40 -40
  105. package/dist/network/XhrClient.js +117 -117
  106. package/dist/operatingcontext/BaseOperatingContext.d.ts +40 -40
  107. package/dist/operatingcontext/BaseOperatingContext.js +44 -44
  108. package/dist/operatingcontext/StandardOperatingContext.d.ts +25 -25
  109. package/dist/operatingcontext/StandardOperatingContext.js +43 -43
  110. package/dist/operatingcontext/TeamsAppOperatingContext.d.ts +25 -25
  111. package/dist/operatingcontext/TeamsAppOperatingContext.js +42 -42
  112. package/dist/packageMetadata.d.ts +2 -2
  113. package/dist/packageMetadata.js +4 -4
  114. package/dist/request/AuthorizationCodeRequest.d.ts +8 -8
  115. package/dist/request/AuthorizationUrlRequest.d.ts +8 -8
  116. package/dist/request/EndSessionPopupRequest.d.ts +18 -18
  117. package/dist/request/EndSessionRequest.d.ts +15 -15
  118. package/dist/request/PopupRequest.d.ts +32 -32
  119. package/dist/request/PopupWindowAttributes.d.ts +15 -15
  120. package/dist/request/RedirectRequest.d.ts +33 -33
  121. package/dist/request/SilentRequest.d.ts +30 -30
  122. package/dist/request/SsoSilentRequest.d.ts +26 -26
  123. package/dist/telemetry/BrowserPerformanceClient.d.ts +38 -38
  124. package/dist/telemetry/BrowserPerformanceClient.js +124 -124
  125. package/dist/telemetry/BrowserPerformanceMeasurement.d.ts +21 -21
  126. package/dist/telemetry/BrowserPerformanceMeasurement.js +92 -92
  127. package/dist/utils/BrowserConstants.d.ts +166 -166
  128. package/dist/utils/BrowserConstants.js +214 -214
  129. package/dist/utils/BrowserProtocolUtils.d.ts +18 -18
  130. package/dist/utils/BrowserProtocolUtils.js +34 -34
  131. package/dist/utils/BrowserStringUtils.d.ts +26 -26
  132. package/dist/utils/BrowserStringUtils.js +149 -149
  133. package/dist/utils/BrowserUtils.d.ts +65 -65
  134. package/dist/utils/BrowserUtils.js +138 -138
  135. package/dist/utils/MathUtils.d.ts +11 -11
  136. package/dist/utils/MathUtils.js +21 -21
  137. package/lib/msal-browser.cjs.js +18383 -0
  138. package/lib/msal-browser.cjs.js.map +1 -0
  139. package/lib/msal-browser.js +18389 -0
  140. package/lib/msal-browser.js.map +1 -0
  141. package/lib/msal-browser.min.js +74 -0
  142. package/package.json +97 -95
@@ -1,48 +1,48 @@
1
- import { CommonAuthorizationCodeRequest, AuthorizationCodeClient, Logger, IPerformanceClient } from "@azure/msal-common";
2
- import { InteractionHandler } from "./InteractionHandler";
3
- import { BrowserCacheManager } from "../cache/BrowserCacheManager";
4
- import { BrowserSystemOptions } from "../config/Configuration";
5
- export declare class SilentHandler extends InteractionHandler {
6
- private navigateFrameWait;
7
- private pollIntervalMilliseconds;
8
- constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required<Pick<BrowserSystemOptions, "navigateFrameWait" | "pollIntervalMilliseconds">>, performanceClient: IPerformanceClient);
9
- /**
10
- * Creates a hidden iframe to given URL using user-requested scopes as an id.
11
- * @param urlNavigate
12
- * @param userRequestScopes
13
- */
14
- initiateAuthRequest(requestUrl: string): Promise<HTMLIFrameElement>;
15
- /**
16
- * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
17
- * @param iframe
18
- * @param timeout
19
- */
20
- monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number): Promise<string>;
21
- /**
22
- * @hidden
23
- * Loads iframe with authorization endpoint URL
24
- * @ignore
25
- */
26
- private loadFrame;
27
- /**
28
- * @hidden
29
- * Loads the iframe synchronously when the navigateTimeFrame is set to `0`
30
- * @param urlNavigate
31
- * @param frameName
32
- * @param logger
33
- */
34
- private loadFrameSync;
35
- /**
36
- * @hidden
37
- * Creates a new hidden iframe or gets an existing one for silent token renewal.
38
- * @ignore
39
- */
40
- private createHiddenIframe;
41
- /**
42
- * @hidden
43
- * Removes a hidden iframe from the page.
44
- * @ignore
45
- */
46
- private removeHiddenIframe;
47
- }
1
+ import { CommonAuthorizationCodeRequest, AuthorizationCodeClient, Logger, IPerformanceClient } from "@azure/msal-common";
2
+ import { InteractionHandler } from "./InteractionHandler";
3
+ import { BrowserCacheManager } from "../cache/BrowserCacheManager";
4
+ import { BrowserSystemOptions } from "../config/Configuration";
5
+ export declare class SilentHandler extends InteractionHandler {
6
+ private navigateFrameWait;
7
+ private pollIntervalMilliseconds;
8
+ constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, systemOptions: Required<Pick<BrowserSystemOptions, "navigateFrameWait" | "pollIntervalMilliseconds">>, performanceClient: IPerformanceClient);
9
+ /**
10
+ * Creates a hidden iframe to given URL using user-requested scopes as an id.
11
+ * @param urlNavigate
12
+ * @param userRequestScopes
13
+ */
14
+ initiateAuthRequest(requestUrl: string): Promise<HTMLIFrameElement>;
15
+ /**
16
+ * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
17
+ * @param iframe
18
+ * @param timeout
19
+ */
20
+ monitorIframeForHash(iframe: HTMLIFrameElement, timeout: number): Promise<string>;
21
+ /**
22
+ * @hidden
23
+ * Loads iframe with authorization endpoint URL
24
+ * @ignore
25
+ */
26
+ private loadFrame;
27
+ /**
28
+ * @hidden
29
+ * Loads the iframe synchronously when the navigateTimeFrame is set to `0`
30
+ * @param urlNavigate
31
+ * @param frameName
32
+ * @param logger
33
+ */
34
+ private loadFrameSync;
35
+ /**
36
+ * @hidden
37
+ * Creates a new hidden iframe or gets an existing one for silent token renewal.
38
+ * @ignore
39
+ */
40
+ private createHiddenIframe;
41
+ /**
42
+ * @hidden
43
+ * Removes a hidden iframe from the page.
44
+ * @ignore
45
+ */
46
+ private removeHiddenIframe;
47
+ }
48
48
  //# sourceMappingURL=SilentHandler.d.ts.map
@@ -1,171 +1,171 @@
1
- /*! @azure/msal-browser v3.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-browser v3.0.0-alpha.2 2023-05-17 */
2
2
  'use strict';
3
3
  import { PerformanceEvents, StringUtils, Constants, UrlString } from '@azure/msal-common';
4
4
  import { InteractionHandler } from './InteractionHandler.js';
5
5
  import { BrowserAuthError } from '../error/BrowserAuthError.js';
6
6
  import { DEFAULT_IFRAME_TIMEOUT_MS } from '../config/Configuration.js';
7
7
 
8
- /*
9
- * Copyright (c) Microsoft Corporation. All rights reserved.
10
- * Licensed under the MIT License.
11
- */
12
- class SilentHandler extends InteractionHandler {
13
- constructor(authCodeModule, storageImpl, authCodeRequest, logger, systemOptions, performanceClient) {
14
- super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);
15
- this.navigateFrameWait = systemOptions.navigateFrameWait;
16
- this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;
17
- }
18
- /**
19
- * Creates a hidden iframe to given URL using user-requested scopes as an id.
20
- * @param urlNavigate
21
- * @param userRequestScopes
22
- */
23
- async initiateAuthRequest(requestUrl) {
24
- this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, this.authCodeRequest.correlationId);
25
- if (StringUtils.isEmpty(requestUrl)) {
26
- // Throw error if request URL is empty.
27
- this.logger.info("Navigate url is empty");
28
- throw BrowserAuthError.createEmptyNavigationUriError();
29
- }
30
- if (this.navigateFrameWait) {
31
- this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);
32
- return await this.loadFrame(requestUrl);
33
- }
34
- return this.loadFrameSync(requestUrl);
35
- }
36
- /**
37
- * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
38
- * @param iframe
39
- * @param timeout
40
- */
41
- monitorIframeForHash(iframe, timeout) {
42
- this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, this.authCodeRequest.correlationId);
43
- return new Promise((resolve, reject) => {
44
- if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {
45
- this.logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);
46
- }
47
- /*
48
- * Polling for iframes can be purely timing based,
49
- * since we don't need to account for interaction.
50
- */
51
- const nowMark = window.performance.now();
52
- const timeoutMark = nowMark + timeout;
53
- const intervalId = setInterval(() => {
54
- if (window.performance.now() > timeoutMark) {
55
- this.removeHiddenIframe(iframe);
56
- clearInterval(intervalId);
57
- reject(BrowserAuthError.createMonitorIframeTimeoutError());
58
- return;
59
- }
60
- let href = Constants.EMPTY_STRING;
61
- const contentWindow = iframe.contentWindow;
62
- try {
63
- /*
64
- * Will throw if cross origin,
65
- * which should be caught and ignored
66
- * since we need the interval to keep running while on STS UI.
67
- */
68
- href = contentWindow
69
- ? contentWindow.location.href
70
- : Constants.EMPTY_STRING;
71
- }
72
- catch (e) { }
73
- if (StringUtils.isEmpty(href) || href === "about:blank") {
74
- return;
75
- }
76
- const contentHash = contentWindow
77
- ? contentWindow.location.hash
78
- : Constants.EMPTY_STRING;
79
- if (contentHash) {
80
- if (UrlString.hashContainsKnownProperties(contentHash)) {
81
- // Success case
82
- this.removeHiddenIframe(iframe);
83
- clearInterval(intervalId);
84
- resolve(contentHash);
85
- return;
86
- }
87
- else {
88
- // Hash is present but incorrect
89
- this.logger.error("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.");
90
- this.logger.errorPii(`SilentHandler:monitorIFrameForHash - the url detected in the iframe is: ${href}`);
91
- this.removeHiddenIframe(iframe);
92
- clearInterval(intervalId);
93
- reject(BrowserAuthError.createHashDoesNotContainKnownPropertiesError());
94
- return;
95
- }
96
- }
97
- else {
98
- // No hash is present
99
- this.logger.error("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.");
100
- this.logger.errorPii(`SilentHandler:monitorIFrameForHash - the url detected in the iframe is: ${href}`);
101
- this.removeHiddenIframe(iframe);
102
- clearInterval(intervalId);
103
- reject(BrowserAuthError.createEmptyHashError());
104
- return;
105
- }
106
- }, this.pollIntervalMilliseconds);
107
- });
108
- }
109
- /**
110
- * @hidden
111
- * Loads iframe with authorization endpoint URL
112
- * @ignore
113
- */
114
- loadFrame(urlNavigate) {
115
- this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);
116
- /*
117
- * This trick overcomes iframe navigation in IE
118
- * IE does not load the page consistently in iframe
119
- */
120
- return new Promise((resolve, reject) => {
121
- const frameHandle = this.createHiddenIframe();
122
- setTimeout(() => {
123
- if (!frameHandle) {
124
- reject("Unable to load iframe");
125
- return;
126
- }
127
- frameHandle.src = urlNavigate;
128
- resolve(frameHandle);
129
- }, this.navigateFrameWait);
130
- });
131
- }
132
- /**
133
- * @hidden
134
- * Loads the iframe synchronously when the navigateTimeFrame is set to `0`
135
- * @param urlNavigate
136
- * @param frameName
137
- * @param logger
138
- */
139
- loadFrameSync(urlNavigate) {
140
- const frameHandle = this.createHiddenIframe();
141
- frameHandle.src = urlNavigate;
142
- return frameHandle;
143
- }
144
- /**
145
- * @hidden
146
- * Creates a new hidden iframe or gets an existing one for silent token renewal.
147
- * @ignore
148
- */
149
- createHiddenIframe() {
150
- const authFrame = document.createElement("iframe");
151
- authFrame.style.visibility = "hidden";
152
- authFrame.style.position = "absolute";
153
- authFrame.style.width = authFrame.style.height = "0";
154
- authFrame.style.border = "0";
155
- authFrame.setAttribute("sandbox", "allow-scripts allow-same-origin allow-forms");
156
- document.getElementsByTagName("body")[0].appendChild(authFrame);
157
- return authFrame;
158
- }
159
- /**
160
- * @hidden
161
- * Removes a hidden iframe from the page.
162
- * @ignore
163
- */
164
- removeHiddenIframe(iframe) {
165
- if (document.body === iframe.parentNode) {
166
- document.body.removeChild(iframe);
167
- }
168
- }
8
+ /*
9
+ * Copyright (c) Microsoft Corporation. All rights reserved.
10
+ * Licensed under the MIT License.
11
+ */
12
+ class SilentHandler extends InteractionHandler {
13
+ constructor(authCodeModule, storageImpl, authCodeRequest, logger, systemOptions, performanceClient) {
14
+ super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);
15
+ this.navigateFrameWait = systemOptions.navigateFrameWait;
16
+ this.pollIntervalMilliseconds = systemOptions.pollIntervalMilliseconds;
17
+ }
18
+ /**
19
+ * Creates a hidden iframe to given URL using user-requested scopes as an id.
20
+ * @param urlNavigate
21
+ * @param userRequestScopes
22
+ */
23
+ async initiateAuthRequest(requestUrl) {
24
+ this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerInitiateAuthRequest, this.authCodeRequest.correlationId);
25
+ if (StringUtils.isEmpty(requestUrl)) {
26
+ // Throw error if request URL is empty.
27
+ this.logger.info("Navigate url is empty");
28
+ throw BrowserAuthError.createEmptyNavigationUriError();
29
+ }
30
+ if (this.navigateFrameWait) {
31
+ this.performanceClient.setPreQueueTime(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);
32
+ return await this.loadFrame(requestUrl);
33
+ }
34
+ return this.loadFrameSync(requestUrl);
35
+ }
36
+ /**
37
+ * Monitors an iframe content window until it loads a url with a known hash, or hits a specified timeout.
38
+ * @param iframe
39
+ * @param timeout
40
+ */
41
+ monitorIframeForHash(iframe, timeout) {
42
+ this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerMonitorIframeForHash, this.authCodeRequest.correlationId);
43
+ return new Promise((resolve, reject) => {
44
+ if (timeout < DEFAULT_IFRAME_TIMEOUT_MS) {
45
+ this.logger.warning(`system.loadFrameTimeout or system.iframeHashTimeout set to lower (${timeout}ms) than the default (${DEFAULT_IFRAME_TIMEOUT_MS}ms). This may result in timeouts.`);
46
+ }
47
+ /*
48
+ * Polling for iframes can be purely timing based,
49
+ * since we don't need to account for interaction.
50
+ */
51
+ const nowMark = window.performance.now();
52
+ const timeoutMark = nowMark + timeout;
53
+ const intervalId = setInterval(() => {
54
+ if (window.performance.now() > timeoutMark) {
55
+ this.removeHiddenIframe(iframe);
56
+ clearInterval(intervalId);
57
+ reject(BrowserAuthError.createMonitorIframeTimeoutError());
58
+ return;
59
+ }
60
+ let href = Constants.EMPTY_STRING;
61
+ const contentWindow = iframe.contentWindow;
62
+ try {
63
+ /*
64
+ * Will throw if cross origin,
65
+ * which should be caught and ignored
66
+ * since we need the interval to keep running while on STS UI.
67
+ */
68
+ href = contentWindow
69
+ ? contentWindow.location.href
70
+ : Constants.EMPTY_STRING;
71
+ }
72
+ catch (e) { }
73
+ if (StringUtils.isEmpty(href) || href === "about:blank") {
74
+ return;
75
+ }
76
+ const contentHash = contentWindow
77
+ ? contentWindow.location.hash
78
+ : Constants.EMPTY_STRING;
79
+ if (contentHash) {
80
+ if (UrlString.hashContainsKnownProperties(contentHash)) {
81
+ // Success case
82
+ this.removeHiddenIframe(iframe);
83
+ clearInterval(intervalId);
84
+ resolve(contentHash);
85
+ return;
86
+ }
87
+ else {
88
+ // Hash is present but incorrect
89
+ this.logger.error("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.");
90
+ this.logger.errorPii(`SilentHandler:monitorIFrameForHash - the url detected in the iframe is: ${href}`);
91
+ this.removeHiddenIframe(iframe);
92
+ clearInterval(intervalId);
93
+ reject(BrowserAuthError.createHashDoesNotContainKnownPropertiesError());
94
+ return;
95
+ }
96
+ }
97
+ else {
98
+ // No hash is present
99
+ this.logger.error("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.");
100
+ this.logger.errorPii(`SilentHandler:monitorIFrameForHash - the url detected in the iframe is: ${href}`);
101
+ this.removeHiddenIframe(iframe);
102
+ clearInterval(intervalId);
103
+ reject(BrowserAuthError.createEmptyHashError());
104
+ return;
105
+ }
106
+ }, this.pollIntervalMilliseconds);
107
+ });
108
+ }
109
+ /**
110
+ * @hidden
111
+ * Loads iframe with authorization endpoint URL
112
+ * @ignore
113
+ */
114
+ loadFrame(urlNavigate) {
115
+ this.performanceClient.addQueueMeasurement(PerformanceEvents.SilentHandlerLoadFrame, this.authCodeRequest.correlationId);
116
+ /*
117
+ * This trick overcomes iframe navigation in IE
118
+ * IE does not load the page consistently in iframe
119
+ */
120
+ return new Promise((resolve, reject) => {
121
+ const frameHandle = this.createHiddenIframe();
122
+ setTimeout(() => {
123
+ if (!frameHandle) {
124
+ reject("Unable to load iframe");
125
+ return;
126
+ }
127
+ frameHandle.src = urlNavigate;
128
+ resolve(frameHandle);
129
+ }, this.navigateFrameWait);
130
+ });
131
+ }
132
+ /**
133
+ * @hidden
134
+ * Loads the iframe synchronously when the navigateTimeFrame is set to `0`
135
+ * @param urlNavigate
136
+ * @param frameName
137
+ * @param logger
138
+ */
139
+ loadFrameSync(urlNavigate) {
140
+ const frameHandle = this.createHiddenIframe();
141
+ frameHandle.src = urlNavigate;
142
+ return frameHandle;
143
+ }
144
+ /**
145
+ * @hidden
146
+ * Creates a new hidden iframe or gets an existing one for silent token renewal.
147
+ * @ignore
148
+ */
149
+ createHiddenIframe() {
150
+ const authFrame = document.createElement("iframe");
151
+ authFrame.style.visibility = "hidden";
152
+ authFrame.style.position = "absolute";
153
+ authFrame.style.width = authFrame.style.height = "0";
154
+ authFrame.style.border = "0";
155
+ authFrame.setAttribute("sandbox", "allow-scripts allow-same-origin allow-forms");
156
+ document.getElementsByTagName("body")[0].appendChild(authFrame);
157
+ return authFrame;
158
+ }
159
+ /**
160
+ * @hidden
161
+ * Removes a hidden iframe from the page.
162
+ * @ignore
163
+ */
164
+ removeHiddenIframe(iframe) {
165
+ if (document.body === iframe.parentNode) {
166
+ document.body.removeChild(iframe);
167
+ }
168
+ }
169
169
  }
170
170
 
171
171
  export { SilentHandler };
@@ -1,24 +1,24 @@
1
- /**
2
- * Warning: This set of exports is purely intended to be used by other MSAL libraries, and should be considered potentially unstable. We strongly discourage using them directly, you do so at your own risk.
3
- * Breaking changes to these APIs will be shipped under a minor version, instead of a major version.
4
- */
5
- export { BrowserCacheManager } from "./cache/BrowserCacheManager";
6
- export { StandardInteractionClient } from "./interaction_client/StandardInteractionClient";
7
- export { RedirectClient } from "./interaction_client/RedirectClient";
8
- export { PopupClient } from "./interaction_client/PopupClient";
9
- export { SilentIframeClient } from "./interaction_client/SilentIframeClient";
10
- export { SilentCacheClient } from "./interaction_client/SilentCacheClient";
11
- export { SilentRefreshClient } from "./interaction_client/SilentRefreshClient";
12
- export { NativeInteractionClient } from "./interaction_client/NativeInteractionClient";
13
- export { RedirectHandler } from "./interaction_handler/RedirectHandler";
14
- export { EventHandler } from "./event/EventHandler";
15
- export { NativeMessageHandler } from "./broker/nativeBroker/NativeMessageHandler";
16
- export { BrowserStateObject } from "./utils/BrowserProtocolUtils";
17
- export { BrowserConstants, TemporaryCacheKeys } from "./utils/BrowserConstants";
18
- export { CryptoOps } from "./crypto/CryptoOps";
19
- export { NativeAuthError } from "./error/NativeAuthError";
20
- export { BrowserPerformanceClient } from "./telemetry/BrowserPerformanceClient";
21
- export { BrowserPerformanceMeasurement } from "./telemetry/BrowserPerformanceMeasurement";
22
- export { NativeTokenRequest } from "./broker/nativeBroker/NativeRequest";
23
- export { NativeResponse, MATS } from "./broker/nativeBroker/NativeResponse";
1
+ /**
2
+ * Warning: This set of exports is purely intended to be used by other MSAL libraries, and should be considered potentially unstable. We strongly discourage using them directly, you do so at your own risk.
3
+ * Breaking changes to these APIs will be shipped under a minor version, instead of a major version.
4
+ */
5
+ export { BrowserCacheManager } from "./cache/BrowserCacheManager";
6
+ export { StandardInteractionClient } from "./interaction_client/StandardInteractionClient";
7
+ export { RedirectClient } from "./interaction_client/RedirectClient";
8
+ export { PopupClient } from "./interaction_client/PopupClient";
9
+ export { SilentIframeClient } from "./interaction_client/SilentIframeClient";
10
+ export { SilentCacheClient } from "./interaction_client/SilentCacheClient";
11
+ export { SilentRefreshClient } from "./interaction_client/SilentRefreshClient";
12
+ export { NativeInteractionClient } from "./interaction_client/NativeInteractionClient";
13
+ export { RedirectHandler } from "./interaction_handler/RedirectHandler";
14
+ export { EventHandler } from "./event/EventHandler";
15
+ export { NativeMessageHandler } from "./broker/nativeBroker/NativeMessageHandler";
16
+ export { BrowserStateObject } from "./utils/BrowserProtocolUtils";
17
+ export { BrowserConstants, TemporaryCacheKeys } from "./utils/BrowserConstants";
18
+ export { CryptoOps } from "./crypto/CryptoOps";
19
+ export { NativeAuthError } from "./error/NativeAuthError";
20
+ export { BrowserPerformanceClient } from "./telemetry/BrowserPerformanceClient";
21
+ export { BrowserPerformanceMeasurement } from "./telemetry/BrowserPerformanceMeasurement";
22
+ export { NativeTokenRequest } from "./broker/nativeBroker/NativeRequest";
23
+ export { NativeResponse, MATS } from "./broker/nativeBroker/NativeResponse";
24
24
  //# sourceMappingURL=internals.d.ts.map
package/dist/internals.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-browser v3.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-browser v3.0.0-alpha.2 2023-05-17 */
2
2
  'use strict';
3
3
  export { BrowserCacheManager } from './cache/BrowserCacheManager.js';
4
4
  export { StandardInteractionClient } from './interaction_client/StandardInteractionClient.js';
@@ -17,8 +17,8 @@ export { NativeAuthError } from './error/NativeAuthError.js';
17
17
  export { BrowserPerformanceClient } from './telemetry/BrowserPerformanceClient.js';
18
18
  export { BrowserPerformanceMeasurement } from './telemetry/BrowserPerformanceMeasurement.js';
19
19
 
20
- /*
21
- * Copyright (c) Microsoft Corporation. All rights reserved.
22
- * Licensed under the MIT License.
20
+ /*
21
+ * Copyright (c) Microsoft Corporation. All rights reserved.
22
+ * Licensed under the MIT License.
23
23
  */
24
24
  //# sourceMappingURL=internals.js.map
@@ -1,17 +1,17 @@
1
- import { NavigationOptions } from "./NavigationOptions";
2
- export interface INavigationClient {
3
- /**
4
- * Navigates to other pages within the same web application
5
- * Return false if this doesn't cause the page to reload i.e. Client-side navigation
6
- * @param url
7
- * @param options
8
- */
9
- navigateInternal(url: string, options: NavigationOptions): Promise<boolean>;
10
- /**
11
- * Navigates to other pages outside the web application i.e. the Identity Provider
12
- * @param url
13
- * @param options
14
- */
15
- navigateExternal(url: string, options: NavigationOptions): Promise<boolean>;
16
- }
1
+ import { NavigationOptions } from "./NavigationOptions";
2
+ export interface INavigationClient {
3
+ /**
4
+ * Navigates to other pages within the same web application
5
+ * Return false if this doesn't cause the page to reload i.e. Client-side navigation
6
+ * @param url
7
+ * @param options
8
+ */
9
+ navigateInternal(url: string, options: NavigationOptions): Promise<boolean>;
10
+ /**
11
+ * Navigates to other pages outside the web application i.e. the Identity Provider
12
+ * @param url
13
+ * @param options
14
+ */
15
+ navigateExternal(url: string, options: NavigationOptions): Promise<boolean>;
16
+ }
17
17
  //# sourceMappingURL=INavigationClient.d.ts.map
@@ -1,23 +1,23 @@
1
- import { INavigationClient } from "./INavigationClient";
2
- import { NavigationOptions } from "./NavigationOptions";
3
- export declare class NavigationClient implements INavigationClient {
4
- /**
5
- * Navigates to other pages within the same web application
6
- * @param url
7
- * @param options
8
- */
9
- navigateInternal(url: string, options: NavigationOptions): Promise<boolean>;
10
- /**
11
- * Navigates to other pages outside the web application i.e. the Identity Provider
12
- * @param url
13
- * @param options
14
- */
15
- navigateExternal(url: string, options: NavigationOptions): Promise<boolean>;
16
- /**
17
- * Default navigation implementation invoked by the internal and external functions
18
- * @param url
19
- * @param options
20
- */
21
- private static defaultNavigateWindow;
22
- }
1
+ import { INavigationClient } from "./INavigationClient";
2
+ import { NavigationOptions } from "./NavigationOptions";
3
+ export declare class NavigationClient implements INavigationClient {
4
+ /**
5
+ * Navigates to other pages within the same web application
6
+ * @param url
7
+ * @param options
8
+ */
9
+ navigateInternal(url: string, options: NavigationOptions): Promise<boolean>;
10
+ /**
11
+ * Navigates to other pages outside the web application i.e. the Identity Provider
12
+ * @param url
13
+ * @param options
14
+ */
15
+ navigateExternal(url: string, options: NavigationOptions): Promise<boolean>;
16
+ /**
17
+ * Default navigation implementation invoked by the internal and external functions
18
+ * @param url
19
+ * @param options
20
+ */
21
+ private static defaultNavigateWindow;
22
+ }
23
23
  //# sourceMappingURL=NavigationClient.d.ts.map