@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,135 +1,135 @@
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, ClientAuthError, ServerError, AuthorityFactory } from '@azure/msal-common';
4
4
  import { BrowserAuthError, BrowserAuthErrorMessage } from '../error/BrowserAuthError.js';
5
5
  import { TemporaryCacheKeys } from '../utils/BrowserConstants.js';
6
6
 
7
- /*
8
- * Copyright (c) Microsoft Corporation. All rights reserved.
9
- * Licensed under the MIT License.
10
- */
11
- /**
12
- * Abstract class which defines operations for a browser interaction handling class.
13
- */
14
- class InteractionHandler {
15
- constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
16
- this.authModule = authCodeModule;
17
- this.browserStorage = storageImpl;
18
- this.authCodeRequest = authCodeRequest;
19
- this.logger = logger;
20
- this.performanceClient = performanceClient;
21
- }
22
- /**
23
- * Function to handle response parameters from hash.
24
- * @param locationHash
25
- */
26
- async handleCodeResponseFromHash(locationHash, state, authority, networkModule) {
27
- this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromHash, this.authCodeRequest.correlationId);
28
- this.logger.verbose("InteractionHandler.handleCodeResponse called");
29
- // Check that location hash isn't empty.
30
- if (StringUtils.isEmpty(locationHash)) {
31
- throw BrowserAuthError.createEmptyHashError();
32
- }
33
- // Handle code response.
34
- const stateKey = this.browserStorage.generateStateKey(state);
35
- const requestState = this.browserStorage.getTemporaryCache(stateKey);
36
- if (!requestState) {
37
- throw ClientAuthError.createStateNotFoundError("Cached State");
38
- }
39
- let authCodeResponse;
40
- try {
41
- authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);
42
- }
43
- catch (e) {
44
- if (e instanceof ServerError &&
45
- e.subError === BrowserAuthErrorMessage.userCancelledError.code) {
46
- // Translate server error caused by user closing native prompt to corresponding first class MSAL error
47
- throw BrowserAuthError.createUserCancelledError();
48
- }
49
- else {
50
- throw e;
51
- }
52
- }
53
- this.performanceClient.setPreQueueTime(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);
54
- return this.handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule);
55
- }
56
- /**
57
- * Process auth code response from AAD
58
- * @param authCodeResponse
59
- * @param state
60
- * @param authority
61
- * @param networkModule
62
- * @returns
63
- */
64
- async handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule, validateNonce = true) {
65
- this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);
66
- this.logger.trace("InteractionHandler.handleCodeResponseFromServer called");
67
- // Handle code response.
68
- const stateKey = this.browserStorage.generateStateKey(state);
69
- const requestState = this.browserStorage.getTemporaryCache(stateKey);
70
- if (!requestState) {
71
- throw ClientAuthError.createStateNotFoundError("Cached State");
72
- }
73
- // Get cached items
74
- const nonceKey = this.browserStorage.generateNonceKey(requestState);
75
- const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);
76
- // Assign code to request
77
- this.authCodeRequest.code = authCodeResponse.code;
78
- // Check for new cloud instance
79
- if (authCodeResponse.cloud_instance_host_name) {
80
- this.performanceClient.setPreQueueTime(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);
81
- await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);
82
- }
83
- // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)
84
- if (validateNonce) {
85
- authCodeResponse.nonce = cachedNonce || undefined;
86
- }
87
- authCodeResponse.state = requestState;
88
- // Add CCS parameters if available
89
- if (authCodeResponse.client_info) {
90
- this.authCodeRequest.clientInfo = authCodeResponse.client_info;
91
- }
92
- else {
93
- const cachedCcsCred = this.checkCcsCredentials();
94
- if (cachedCcsCred) {
95
- this.authCodeRequest.ccsCredential = cachedCcsCred;
96
- }
97
- }
98
- // Acquire token with retrieved code.
99
- this.performanceClient.setPreQueueTime(PerformanceEvents.AuthClientAcquireToken, this.authCodeRequest.correlationId);
100
- const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);
101
- this.browserStorage.cleanRequestByState(state);
102
- return tokenResponse;
103
- }
104
- /**
105
- * Updates authority based on cloudInstanceHostname
106
- * @param cloudInstanceHostname
107
- * @param authority
108
- * @param networkModule
109
- */
110
- async updateTokenEndpointAuthority(cloudInstanceHostname, authority, networkModule) {
111
- this.performanceClient.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);
112
- const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${authority.tenant}/`;
113
- const cloudInstanceAuthority = await AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger, this.performanceClient, this.authCodeRequest.correlationId);
114
- this.authModule.updateAuthority(cloudInstanceAuthority);
115
- }
116
- /**
117
- * Looks up ccs creds in the cache
118
- */
119
- checkCcsCredentials() {
120
- // Look up ccs credential in temp cache
121
- const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);
122
- if (cachedCcsCred) {
123
- try {
124
- return JSON.parse(cachedCcsCred);
125
- }
126
- catch (e) {
127
- this.authModule.logger.error("Cache credential could not be parsed");
128
- this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);
129
- }
130
- }
131
- return null;
132
- }
7
+ /*
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License.
10
+ */
11
+ /**
12
+ * Abstract class which defines operations for a browser interaction handling class.
13
+ */
14
+ class InteractionHandler {
15
+ constructor(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient) {
16
+ this.authModule = authCodeModule;
17
+ this.browserStorage = storageImpl;
18
+ this.authCodeRequest = authCodeRequest;
19
+ this.logger = logger;
20
+ this.performanceClient = performanceClient;
21
+ }
22
+ /**
23
+ * Function to handle response parameters from hash.
24
+ * @param locationHash
25
+ */
26
+ async handleCodeResponseFromHash(locationHash, state, authority, networkModule) {
27
+ this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromHash, this.authCodeRequest.correlationId);
28
+ this.logger.verbose("InteractionHandler.handleCodeResponse called");
29
+ // Check that location hash isn't empty.
30
+ if (StringUtils.isEmpty(locationHash)) {
31
+ throw BrowserAuthError.createEmptyHashError();
32
+ }
33
+ // Handle code response.
34
+ const stateKey = this.browserStorage.generateStateKey(state);
35
+ const requestState = this.browserStorage.getTemporaryCache(stateKey);
36
+ if (!requestState) {
37
+ throw ClientAuthError.createStateNotFoundError("Cached State");
38
+ }
39
+ let authCodeResponse;
40
+ try {
41
+ authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);
42
+ }
43
+ catch (e) {
44
+ if (e instanceof ServerError &&
45
+ e.subError === BrowserAuthErrorMessage.userCancelledError.code) {
46
+ // Translate server error caused by user closing native prompt to corresponding first class MSAL error
47
+ throw BrowserAuthError.createUserCancelledError();
48
+ }
49
+ else {
50
+ throw e;
51
+ }
52
+ }
53
+ this.performanceClient.setPreQueueTime(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);
54
+ return this.handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule);
55
+ }
56
+ /**
57
+ * Process auth code response from AAD
58
+ * @param authCodeResponse
59
+ * @param state
60
+ * @param authority
61
+ * @param networkModule
62
+ * @returns
63
+ */
64
+ async handleCodeResponseFromServer(authCodeResponse, state, authority, networkModule, validateNonce = true) {
65
+ this.performanceClient.addQueueMeasurement(PerformanceEvents.HandleCodeResponseFromServer, this.authCodeRequest.correlationId);
66
+ this.logger.trace("InteractionHandler.handleCodeResponseFromServer called");
67
+ // Handle code response.
68
+ const stateKey = this.browserStorage.generateStateKey(state);
69
+ const requestState = this.browserStorage.getTemporaryCache(stateKey);
70
+ if (!requestState) {
71
+ throw ClientAuthError.createStateNotFoundError("Cached State");
72
+ }
73
+ // Get cached items
74
+ const nonceKey = this.browserStorage.generateNonceKey(requestState);
75
+ const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);
76
+ // Assign code to request
77
+ this.authCodeRequest.code = authCodeResponse.code;
78
+ // Check for new cloud instance
79
+ if (authCodeResponse.cloud_instance_host_name) {
80
+ this.performanceClient.setPreQueueTime(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);
81
+ await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);
82
+ }
83
+ // Nonce validation not needed when redirect not involved (e.g. hybrid spa, renewing token via rt)
84
+ if (validateNonce) {
85
+ authCodeResponse.nonce = cachedNonce || undefined;
86
+ }
87
+ authCodeResponse.state = requestState;
88
+ // Add CCS parameters if available
89
+ if (authCodeResponse.client_info) {
90
+ this.authCodeRequest.clientInfo = authCodeResponse.client_info;
91
+ }
92
+ else {
93
+ const cachedCcsCred = this.checkCcsCredentials();
94
+ if (cachedCcsCred) {
95
+ this.authCodeRequest.ccsCredential = cachedCcsCred;
96
+ }
97
+ }
98
+ // Acquire token with retrieved code.
99
+ this.performanceClient.setPreQueueTime(PerformanceEvents.AuthClientAcquireToken, this.authCodeRequest.correlationId);
100
+ const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);
101
+ this.browserStorage.cleanRequestByState(state);
102
+ return tokenResponse;
103
+ }
104
+ /**
105
+ * Updates authority based on cloudInstanceHostname
106
+ * @param cloudInstanceHostname
107
+ * @param authority
108
+ * @param networkModule
109
+ */
110
+ async updateTokenEndpointAuthority(cloudInstanceHostname, authority, networkModule) {
111
+ this.performanceClient.addQueueMeasurement(PerformanceEvents.UpdateTokenEndpointAuthority, this.authCodeRequest.correlationId);
112
+ const cloudInstanceAuthorityUri = `https://${cloudInstanceHostname}/${authority.tenant}/`;
113
+ const cloudInstanceAuthority = await AuthorityFactory.createDiscoveredInstance(cloudInstanceAuthorityUri, networkModule, this.browserStorage, authority.options, this.logger, this.performanceClient, this.authCodeRequest.correlationId);
114
+ this.authModule.updateAuthority(cloudInstanceAuthority);
115
+ }
116
+ /**
117
+ * Looks up ccs creds in the cache
118
+ */
119
+ checkCcsCredentials() {
120
+ // Look up ccs credential in temp cache
121
+ const cachedCcsCred = this.browserStorage.getTemporaryCache(TemporaryCacheKeys.CCS_CREDENTIAL, true);
122
+ if (cachedCcsCred) {
123
+ try {
124
+ return JSON.parse(cachedCcsCred);
125
+ }
126
+ catch (e) {
127
+ this.authModule.logger.error("Cache credential could not be parsed");
128
+ this.authModule.logger.errorPii(`Cache credential could not be parsed: ${cachedCcsCred}`);
129
+ }
130
+ }
131
+ return null;
132
+ }
133
133
  }
134
134
 
135
135
  export { InteractionHandler };
@@ -1,25 +1,25 @@
1
- import { AuthorizationCodeClient, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, Logger, IPerformanceClient } from "@azure/msal-common";
2
- import { BrowserCacheManager } from "../cache/BrowserCacheManager";
3
- import { InteractionHandler, InteractionParams } from "./InteractionHandler";
4
- import { INavigationClient } from "../navigation/INavigationClient";
5
- export type RedirectParams = InteractionParams & {
6
- navigationClient: INavigationClient;
7
- redirectTimeout: number;
8
- redirectStartPage: string;
9
- onRedirectNavigate?: (url: string) => void | boolean;
10
- };
11
- export declare class RedirectHandler extends InteractionHandler {
12
- private browserCrypto;
13
- constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto, performanceClient: IPerformanceClient);
14
- /**
15
- * Redirects window to given URL.
16
- * @param urlNavigate
17
- */
18
- initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise<void>;
19
- /**
20
- * Handle authorization code response in the window.
21
- * @param hash
22
- */
23
- handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise<AuthenticationResult>;
24
- }
1
+ import { AuthorizationCodeClient, CommonAuthorizationCodeRequest, ICrypto, AuthenticationResult, Authority, INetworkModule, Logger, IPerformanceClient } from "@azure/msal-common";
2
+ import { BrowserCacheManager } from "../cache/BrowserCacheManager";
3
+ import { InteractionHandler, InteractionParams } from "./InteractionHandler";
4
+ import { INavigationClient } from "../navigation/INavigationClient";
5
+ export type RedirectParams = InteractionParams & {
6
+ navigationClient: INavigationClient;
7
+ redirectTimeout: number;
8
+ redirectStartPage: string;
9
+ onRedirectNavigate?: (url: string) => void | boolean;
10
+ };
11
+ export declare class RedirectHandler extends InteractionHandler {
12
+ private browserCrypto;
13
+ constructor(authCodeModule: AuthorizationCodeClient, storageImpl: BrowserCacheManager, authCodeRequest: CommonAuthorizationCodeRequest, logger: Logger, browserCrypto: ICrypto, performanceClient: IPerformanceClient);
14
+ /**
15
+ * Redirects window to given URL.
16
+ * @param urlNavigate
17
+ */
18
+ initiateAuthRequest(requestUrl: string, params: RedirectParams): Promise<void>;
19
+ /**
20
+ * Handle authorization code response in the window.
21
+ * @param hash
22
+ */
23
+ handleCodeResponseFromHash(locationHash: string, state: string, authority: Authority, networkModule: INetworkModule): Promise<AuthenticationResult>;
24
+ }
25
25
  //# sourceMappingURL=RedirectHandler.d.ts.map
@@ -1,127 +1,127 @@
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 { StringUtils, ClientAuthError, ServerError } from '@azure/msal-common';
4
4
  import { BrowserAuthError, BrowserAuthErrorMessage } from '../error/BrowserAuthError.js';
5
5
  import { TemporaryCacheKeys, ApiId } from '../utils/BrowserConstants.js';
6
6
  import { InteractionHandler } from './InteractionHandler.js';
7
7
 
8
- /*
9
- * Copyright (c) Microsoft Corporation. All rights reserved.
10
- * Licensed under the MIT License.
11
- */
12
- class RedirectHandler extends InteractionHandler {
13
- constructor(authCodeModule, storageImpl, authCodeRequest, logger, browserCrypto, performanceClient) {
14
- super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);
15
- this.browserCrypto = browserCrypto;
16
- }
17
- /**
18
- * Redirects window to given URL.
19
- * @param urlNavigate
20
- */
21
- async initiateAuthRequest(requestUrl, params) {
22
- this.logger.verbose("RedirectHandler.initiateAuthRequest called");
23
- // Navigate if valid URL
24
- if (!StringUtils.isEmpty(requestUrl)) {
25
- // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true
26
- if (params.redirectStartPage) {
27
- this.logger.verbose("RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page");
28
- this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);
29
- }
30
- // Set interaction status in the library.
31
- this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);
32
- this.browserStorage.cacheCodeRequest(this.authCodeRequest, this.browserCrypto);
33
- this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);
34
- const navigationOptions = {
35
- apiId: ApiId.acquireTokenRedirect,
36
- timeout: params.redirectTimeout,
37
- noHistory: false,
38
- };
39
- // If onRedirectNavigate is implemented, invoke it and provide requestUrl
40
- if (typeof params.onRedirectNavigate === "function") {
41
- this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback");
42
- const navigate = params.onRedirectNavigate(requestUrl);
43
- // Returning false from onRedirectNavigate will stop navigation
44
- if (navigate !== false) {
45
- this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating");
46
- await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
47
- return;
48
- }
49
- else {
50
- this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");
51
- return;
52
- }
53
- }
54
- else {
55
- // Navigate window to request URL
56
- this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url");
57
- await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
58
- return;
59
- }
60
- }
61
- else {
62
- // Throw error if request URL is empty.
63
- this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty");
64
- throw BrowserAuthError.createEmptyNavigationUriError();
65
- }
66
- }
67
- /**
68
- * Handle authorization code response in the window.
69
- * @param hash
70
- */
71
- async handleCodeResponseFromHash(locationHash, state, authority, networkModule) {
72
- this.logger.verbose("RedirectHandler.handleCodeResponse called");
73
- // Check that location hash isn't empty.
74
- if (StringUtils.isEmpty(locationHash)) {
75
- throw BrowserAuthError.createEmptyHashError();
76
- }
77
- // Interaction is completed - remove interaction status.
78
- this.browserStorage.setInteractionInProgress(false);
79
- // Handle code response.
80
- const stateKey = this.browserStorage.generateStateKey(state);
81
- const requestState = this.browserStorage.getTemporaryCache(stateKey);
82
- if (!requestState) {
83
- throw ClientAuthError.createStateNotFoundError("Cached State");
84
- }
85
- let authCodeResponse;
86
- try {
87
- authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);
88
- }
89
- catch (e) {
90
- if (e instanceof ServerError &&
91
- e.subError === BrowserAuthErrorMessage.userCancelledError.code) {
92
- // Translate server error caused by user closing native prompt to corresponding first class MSAL error
93
- throw BrowserAuthError.createUserCancelledError();
94
- }
95
- else {
96
- throw e;
97
- }
98
- }
99
- // Get cached items
100
- const nonceKey = this.browserStorage.generateNonceKey(requestState);
101
- const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);
102
- // Assign code to request
103
- this.authCodeRequest.code = authCodeResponse.code;
104
- // Check for new cloud instance
105
- if (authCodeResponse.cloud_instance_host_name) {
106
- await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);
107
- }
108
- authCodeResponse.nonce = cachedNonce || undefined;
109
- authCodeResponse.state = requestState;
110
- // Add CCS parameters if available
111
- if (authCodeResponse.client_info) {
112
- this.authCodeRequest.clientInfo = authCodeResponse.client_info;
113
- }
114
- else {
115
- const cachedCcsCred = this.checkCcsCredentials();
116
- if (cachedCcsCred) {
117
- this.authCodeRequest.ccsCredential = cachedCcsCred;
118
- }
119
- }
120
- // Acquire token with retrieved code.
121
- const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);
122
- this.browserStorage.cleanRequestByState(state);
123
- return tokenResponse;
124
- }
8
+ /*
9
+ * Copyright (c) Microsoft Corporation. All rights reserved.
10
+ * Licensed under the MIT License.
11
+ */
12
+ class RedirectHandler extends InteractionHandler {
13
+ constructor(authCodeModule, storageImpl, authCodeRequest, logger, browserCrypto, performanceClient) {
14
+ super(authCodeModule, storageImpl, authCodeRequest, logger, performanceClient);
15
+ this.browserCrypto = browserCrypto;
16
+ }
17
+ /**
18
+ * Redirects window to given URL.
19
+ * @param urlNavigate
20
+ */
21
+ async initiateAuthRequest(requestUrl, params) {
22
+ this.logger.verbose("RedirectHandler.initiateAuthRequest called");
23
+ // Navigate if valid URL
24
+ if (!StringUtils.isEmpty(requestUrl)) {
25
+ // Cache start page, returns to this page after redirectUri if navigateToLoginRequestUrl is true
26
+ if (params.redirectStartPage) {
27
+ this.logger.verbose("RedirectHandler.initiateAuthRequest: redirectStartPage set, caching start page");
28
+ this.browserStorage.setTemporaryCache(TemporaryCacheKeys.ORIGIN_URI, params.redirectStartPage, true);
29
+ }
30
+ // Set interaction status in the library.
31
+ this.browserStorage.setTemporaryCache(TemporaryCacheKeys.CORRELATION_ID, this.authCodeRequest.correlationId, true);
32
+ this.browserStorage.cacheCodeRequest(this.authCodeRequest, this.browserCrypto);
33
+ this.logger.infoPii(`RedirectHandler.initiateAuthRequest: Navigate to: ${requestUrl}`);
34
+ const navigationOptions = {
35
+ apiId: ApiId.acquireTokenRedirect,
36
+ timeout: params.redirectTimeout,
37
+ noHistory: false,
38
+ };
39
+ // If onRedirectNavigate is implemented, invoke it and provide requestUrl
40
+ if (typeof params.onRedirectNavigate === "function") {
41
+ this.logger.verbose("RedirectHandler.initiateAuthRequest: Invoking onRedirectNavigate callback");
42
+ const navigate = params.onRedirectNavigate(requestUrl);
43
+ // Returning false from onRedirectNavigate will stop navigation
44
+ if (navigate !== false) {
45
+ this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate did not return false, navigating");
46
+ await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
47
+ return;
48
+ }
49
+ else {
50
+ this.logger.verbose("RedirectHandler.initiateAuthRequest: onRedirectNavigate returned false, stopping navigation");
51
+ return;
52
+ }
53
+ }
54
+ else {
55
+ // Navigate window to request URL
56
+ this.logger.verbose("RedirectHandler.initiateAuthRequest: Navigating window to navigate url");
57
+ await params.navigationClient.navigateExternal(requestUrl, navigationOptions);
58
+ return;
59
+ }
60
+ }
61
+ else {
62
+ // Throw error if request URL is empty.
63
+ this.logger.info("RedirectHandler.initiateAuthRequest: Navigate url is empty");
64
+ throw BrowserAuthError.createEmptyNavigationUriError();
65
+ }
66
+ }
67
+ /**
68
+ * Handle authorization code response in the window.
69
+ * @param hash
70
+ */
71
+ async handleCodeResponseFromHash(locationHash, state, authority, networkModule) {
72
+ this.logger.verbose("RedirectHandler.handleCodeResponse called");
73
+ // Check that location hash isn't empty.
74
+ if (StringUtils.isEmpty(locationHash)) {
75
+ throw BrowserAuthError.createEmptyHashError();
76
+ }
77
+ // Interaction is completed - remove interaction status.
78
+ this.browserStorage.setInteractionInProgress(false);
79
+ // Handle code response.
80
+ const stateKey = this.browserStorage.generateStateKey(state);
81
+ const requestState = this.browserStorage.getTemporaryCache(stateKey);
82
+ if (!requestState) {
83
+ throw ClientAuthError.createStateNotFoundError("Cached State");
84
+ }
85
+ let authCodeResponse;
86
+ try {
87
+ authCodeResponse = this.authModule.handleFragmentResponse(locationHash, requestState);
88
+ }
89
+ catch (e) {
90
+ if (e instanceof ServerError &&
91
+ e.subError === BrowserAuthErrorMessage.userCancelledError.code) {
92
+ // Translate server error caused by user closing native prompt to corresponding first class MSAL error
93
+ throw BrowserAuthError.createUserCancelledError();
94
+ }
95
+ else {
96
+ throw e;
97
+ }
98
+ }
99
+ // Get cached items
100
+ const nonceKey = this.browserStorage.generateNonceKey(requestState);
101
+ const cachedNonce = this.browserStorage.getTemporaryCache(nonceKey);
102
+ // Assign code to request
103
+ this.authCodeRequest.code = authCodeResponse.code;
104
+ // Check for new cloud instance
105
+ if (authCodeResponse.cloud_instance_host_name) {
106
+ await this.updateTokenEndpointAuthority(authCodeResponse.cloud_instance_host_name, authority, networkModule);
107
+ }
108
+ authCodeResponse.nonce = cachedNonce || undefined;
109
+ authCodeResponse.state = requestState;
110
+ // Add CCS parameters if available
111
+ if (authCodeResponse.client_info) {
112
+ this.authCodeRequest.clientInfo = authCodeResponse.client_info;
113
+ }
114
+ else {
115
+ const cachedCcsCred = this.checkCcsCredentials();
116
+ if (cachedCcsCred) {
117
+ this.authCodeRequest.ccsCredential = cachedCcsCred;
118
+ }
119
+ }
120
+ // Acquire token with retrieved code.
121
+ const tokenResponse = await this.authModule.acquireToken(this.authCodeRequest, authCodeResponse);
122
+ this.browserStorage.cleanRequestByState(state);
123
+ return tokenResponse;
124
+ }
125
125
  }
126
126
 
127
127
  export { RedirectHandler };