@azure/msal-common 14.0.0-alpha.1 → 14.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +62 -62
  3. package/dist/account/AccountInfo.d.ts +31 -31
  4. package/dist/account/AuthToken.d.ts +20 -20
  5. package/dist/account/AuthToken.js +48 -48
  6. package/dist/account/CcsCredential.d.ts +9 -8
  7. package/dist/account/CcsCredential.d.ts.map +1 -1
  8. package/dist/account/CcsCredential.js +9 -10
  9. package/dist/account/CcsCredential.js.map +1 -1
  10. package/dist/account/ClientCredentials.d.ts +14 -14
  11. package/dist/account/ClientInfo.d.ts +19 -19
  12. package/dist/account/ClientInfo.js +37 -37
  13. package/dist/account/DecodedAuthToken.d.ts +8 -8
  14. package/dist/account/TokenClaims.d.ts +65 -65
  15. package/dist/authority/Authority.d.ts +228 -215
  16. package/dist/authority/Authority.d.ts.map +1 -1
  17. package/dist/authority/Authority.js +716 -682
  18. package/dist/authority/Authority.js.map +1 -1
  19. package/dist/authority/AuthorityFactory.d.ts +30 -30
  20. package/dist/authority/AuthorityFactory.js +47 -47
  21. package/dist/authority/AuthorityMetadata.d.ts +622 -622
  22. package/dist/authority/AuthorityMetadata.js +876 -876
  23. package/dist/authority/AuthorityOptions.d.ts +19 -18
  24. package/dist/authority/AuthorityOptions.d.ts.map +1 -1
  25. package/dist/authority/AuthorityOptions.js +19 -20
  26. package/dist/authority/AuthorityOptions.js.map +1 -1
  27. package/dist/authority/AuthorityType.d.ts +10 -9
  28. package/dist/authority/AuthorityType.d.ts.map +1 -1
  29. package/dist/authority/AuthorityType.js +14 -15
  30. package/dist/authority/AuthorityType.js.map +1 -1
  31. package/dist/authority/AzureRegion.d.ts +1 -1
  32. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  33. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  34. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  35. package/dist/authority/CloudInstanceDiscoveryErrorResponse.js +8 -8
  36. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  37. package/dist/authority/CloudInstanceDiscoveryResponse.js +8 -8
  38. package/dist/authority/ImdsOptions.d.ts +5 -5
  39. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  40. package/dist/authority/OpenIdConfigResponse.js +10 -10
  41. package/dist/authority/ProtocolMode.d.ts +8 -7
  42. package/dist/authority/ProtocolMode.d.ts.map +1 -1
  43. package/dist/authority/ProtocolMode.js +12 -13
  44. package/dist/authority/ProtocolMode.js.map +1 -1
  45. package/dist/authority/RegionDiscovery.d.ts +30 -30
  46. package/dist/authority/RegionDiscovery.js +108 -108
  47. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  48. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  49. package/dist/cache/CacheManager.d.ts +443 -443
  50. package/dist/cache/CacheManager.js +1011 -1011
  51. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  52. package/dist/cache/entities/AccessTokenEntity.js +111 -111
  53. package/dist/cache/entities/AccountEntity.d.ts +99 -99
  54. package/dist/cache/entities/AccountEntity.js +248 -248
  55. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  56. package/dist/cache/entities/AppMetadataEntity.js +66 -66
  57. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +47 -47
  58. package/dist/cache/entities/AuthorityMetadataEntity.js +77 -77
  59. package/dist/cache/entities/CacheRecord.d.ts +13 -13
  60. package/dist/cache/entities/CacheRecord.js +13 -13
  61. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  62. package/dist/cache/entities/CredentialEntity.js +136 -136
  63. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  64. package/dist/cache/entities/IdTokenEntity.js +56 -56
  65. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  66. package/dist/cache/entities/RefreshTokenEntity.js +59 -59
  67. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  68. package/dist/cache/entities/ServerTelemetryEntity.js +27 -27
  69. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  70. package/dist/cache/entities/ThrottlingEntity.js +23 -23
  71. package/dist/cache/interface/ICacheManager.d.ts +165 -165
  72. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  73. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  74. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  75. package/dist/cache/persistence/TokenCacheContext.js +25 -25
  76. package/dist/cache/utils/CacheTypes.d.ts +62 -62
  77. package/dist/client/AuthorizationCodeClient.d.ts +71 -71
  78. package/dist/client/AuthorizationCodeClient.js +433 -433
  79. package/dist/client/BaseClient.d.ts +50 -50
  80. package/dist/client/BaseClient.js +92 -92
  81. package/dist/client/RefreshTokenClient.d.ts +34 -34
  82. package/dist/client/RefreshTokenClient.js +239 -239
  83. package/dist/client/SilentFlowClient.d.ts +24 -24
  84. package/dist/client/SilentFlowClient.js +94 -94
  85. package/dist/config/AppTokenProvider.d.ts +38 -38
  86. package/dist/config/ClientConfiguration.d.ts +133 -133
  87. package/dist/config/ClientConfiguration.js +88 -88
  88. package/dist/crypto/ICrypto.d.ts +62 -62
  89. package/dist/crypto/ICrypto.js +42 -42
  90. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  91. package/dist/crypto/JoseHeader.d.ts +21 -21
  92. package/dist/crypto/JoseHeader.js +36 -36
  93. package/dist/crypto/PopTokenGenerator.d.ts +58 -57
  94. package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
  95. package/dist/crypto/PopTokenGenerator.js +82 -83
  96. package/dist/crypto/PopTokenGenerator.js.map +1 -1
  97. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  98. package/dist/error/AuthError.d.ts +47 -47
  99. package/dist/error/AuthError.js +51 -51
  100. package/dist/error/ClientAuthError.d.ts +412 -412
  101. package/dist/error/ClientAuthError.js +519 -519
  102. package/dist/error/ClientConfigurationError.d.ts +206 -198
  103. package/dist/error/ClientConfigurationError.d.ts.map +1 -1
  104. package/dist/error/ClientConfigurationError.js +259 -249
  105. package/dist/error/ClientConfigurationError.js.map +1 -1
  106. package/dist/error/InteractionRequiredAuthError.d.ts +59 -59
  107. package/dist/error/InteractionRequiredAuthError.js +78 -78
  108. package/dist/error/JoseHeaderError.d.ts +28 -28
  109. package/dist/error/JoseHeaderError.js +39 -39
  110. package/dist/error/ServerError.d.ts +7 -7
  111. package/dist/error/ServerError.js +14 -14
  112. package/dist/index.cjs.js +8826 -8813
  113. package/dist/index.cjs.js.map +1 -1
  114. package/dist/index.d.ts +93 -93
  115. package/dist/index.js +1 -1
  116. package/dist/logger/Logger.d.ts +95 -95
  117. package/dist/logger/Logger.js +197 -197
  118. package/dist/network/INetworkModule.d.ts +29 -29
  119. package/dist/network/INetworkModule.js +14 -14
  120. package/dist/network/NetworkManager.d.ts +32 -32
  121. package/dist/network/NetworkManager.js +33 -33
  122. package/dist/network/RequestThumbprint.d.ts +16 -16
  123. package/dist/network/ThrottlingUtils.d.ts +41 -41
  124. package/dist/network/ThrottlingUtils.js +94 -94
  125. package/dist/packageMetadata.d.ts +2 -2
  126. package/dist/packageMetadata.d.ts.map +1 -1
  127. package/dist/packageMetadata.js +4 -4
  128. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  129. package/dist/request/AuthenticationHeaderParser.js +55 -55
  130. package/dist/request/BaseAuthRequest.d.ts +37 -37
  131. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  132. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  133. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  134. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  135. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  136. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  137. package/dist/request/CommonRefreshTokenRequest.d.ts +19 -19
  138. package/dist/request/CommonSilentFlowRequest.d.ts +18 -18
  139. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  140. package/dist/request/NativeRequest.d.ts +19 -19
  141. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  142. package/dist/request/RequestParameterBuilder.d.ts +216 -216
  143. package/dist/request/RequestParameterBuilder.js +374 -374
  144. package/dist/request/RequestValidator.d.ts +33 -33
  145. package/dist/request/RequestValidator.js +82 -83
  146. package/dist/request/RequestValidator.js.map +1 -1
  147. package/dist/request/ScopeSet.d.ts +88 -88
  148. package/dist/request/ScopeSet.js +197 -197
  149. package/dist/response/AuthenticationResult.d.ts +39 -39
  150. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  151. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  152. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  153. package/dist/response/IMDSBadResponse.d.ts +4 -4
  154. package/dist/response/ResponseHandler.d.ts +72 -72
  155. package/dist/response/ResponseHandler.js +300 -300
  156. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  157. package/dist/response/ServerAuthorizationTokenResponse.d.ts +44 -44
  158. package/dist/telemetry/performance/IPerformanceClient.d.ts +42 -42
  159. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  160. package/dist/telemetry/performance/PerformanceClient.d.ts +189 -189
  161. package/dist/telemetry/performance/PerformanceClient.js +406 -406
  162. package/dist/telemetry/performance/PerformanceEvent.d.ts +441 -439
  163. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  164. package/dist/telemetry/performance/PerformanceEvent.js +225 -227
  165. package/dist/telemetry/performance/PerformanceEvent.js.map +1 -1
  166. package/dist/telemetry/performance/StubPerformanceClient.d.ts +15 -19
  167. package/dist/telemetry/performance/StubPerformanceClient.d.ts.map +1 -1
  168. package/dist/telemetry/performance/StubPerformanceClient.js +22 -36
  169. package/dist/telemetry/performance/StubPerformanceClient.js.map +1 -1
  170. package/dist/telemetry/server/ServerTelemetryManager.d.ts +65 -65
  171. package/dist/telemetry/server/ServerTelemetryManager.js +196 -196
  172. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  173. package/dist/url/IUri.d.ts +12 -12
  174. package/dist/url/UrlString.d.ts +70 -70
  175. package/dist/url/UrlString.js +242 -242
  176. package/dist/utils/Constants.d.ts +345 -331
  177. package/dist/utils/Constants.d.ts.map +1 -1
  178. package/dist/utils/Constants.js +353 -373
  179. package/dist/utils/Constants.js.map +1 -1
  180. package/dist/utils/MsalTypes.d.ts +6 -6
  181. package/dist/utils/ProtocolUtils.d.ts +42 -42
  182. package/dist/utils/ProtocolUtils.js +71 -71
  183. package/dist/utils/StringUtils.d.ts +53 -53
  184. package/dist/utils/StringUtils.js +124 -124
  185. package/dist/utils/TimeUtils.d.ts +27 -27
  186. package/dist/utils/TimeUtils.js +45 -45
  187. package/package.json +86 -79
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-common v14.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-common v14.0.0-beta.0 2023-06-19 */
2
2
  'use strict';
3
3
  import { AADServerParamKeys, Constants, ResponseMode, SSOTypes, HeaderNames, CLIENT_INFO, ClaimsRequestKeys, PasswordGrantConstants, AuthenticationScheme, ThrottlingConstants, OIDC_DEFAULT_SCOPES } from '../utils/Constants.js';
4
4
  import { ScopeSet } from './ScopeSet.js';
@@ -6,379 +6,379 @@ import { ClientConfigurationError } from '../error/ClientConfigurationError.js';
6
6
  import { RequestValidator } from './RequestValidator.js';
7
7
  import { StringUtils } from '../utils/StringUtils.js';
8
8
 
9
- /*
10
- * Copyright (c) Microsoft Corporation. All rights reserved.
11
- * Licensed under the MIT License.
12
- */
13
- class RequestParameterBuilder {
14
- constructor() {
15
- this.parameters = new Map();
16
- }
17
- /**
18
- * add response_type = code
19
- */
20
- addResponseTypeCode() {
21
- this.parameters.set(AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(Constants.CODE_RESPONSE_TYPE));
22
- }
23
- /**
24
- * add response_type = token id_token
25
- */
26
- addResponseTypeForTokenAndIdToken() {
27
- this.parameters.set(AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(`${Constants.TOKEN_RESPONSE_TYPE} ${Constants.ID_TOKEN_RESPONSE_TYPE}`));
28
- }
29
- /**
30
- * add response_mode. defaults to query.
31
- * @param responseMode
32
- */
33
- addResponseMode(responseMode) {
34
- this.parameters.set(AADServerParamKeys.RESPONSE_MODE, encodeURIComponent(responseMode ? responseMode : ResponseMode.QUERY));
35
- }
36
- /**
37
- * Add flag to indicate STS should attempt to use WAM if available
38
- */
39
- addNativeBroker() {
40
- this.parameters.set(AADServerParamKeys.NATIVE_BROKER, encodeURIComponent("1"));
41
- }
42
- /**
43
- * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios
44
- * @param scopeSet
45
- * @param addOidcScopes
46
- */
47
- addScopes(scopes, addOidcScopes = true) {
48
- const requestScopes = addOidcScopes
49
- ? [...(scopes || []), ...OIDC_DEFAULT_SCOPES]
50
- : scopes || [];
51
- const scopeSet = new ScopeSet(requestScopes);
52
- this.parameters.set(AADServerParamKeys.SCOPE, encodeURIComponent(scopeSet.printScopes()));
53
- }
54
- /**
55
- * add clientId
56
- * @param clientId
57
- */
58
- addClientId(clientId) {
59
- this.parameters.set(AADServerParamKeys.CLIENT_ID, encodeURIComponent(clientId));
60
- }
61
- /**
62
- * add redirect_uri
63
- * @param redirectUri
64
- */
65
- addRedirectUri(redirectUri) {
66
- RequestValidator.validateRedirectUri(redirectUri);
67
- this.parameters.set(AADServerParamKeys.REDIRECT_URI, encodeURIComponent(redirectUri));
68
- }
69
- /**
70
- * add post logout redirectUri
71
- * @param redirectUri
72
- */
73
- addPostLogoutRedirectUri(redirectUri) {
74
- RequestValidator.validateRedirectUri(redirectUri);
75
- this.parameters.set(AADServerParamKeys.POST_LOGOUT_URI, encodeURIComponent(redirectUri));
76
- }
77
- /**
78
- * add id_token_hint to logout request
79
- * @param idTokenHint
80
- */
81
- addIdTokenHint(idTokenHint) {
82
- this.parameters.set(AADServerParamKeys.ID_TOKEN_HINT, encodeURIComponent(idTokenHint));
83
- }
84
- /**
85
- * add domain_hint
86
- * @param domainHint
87
- */
88
- addDomainHint(domainHint) {
89
- this.parameters.set(SSOTypes.DOMAIN_HINT, encodeURIComponent(domainHint));
90
- }
91
- /**
92
- * add login_hint
93
- * @param loginHint
94
- */
95
- addLoginHint(loginHint) {
96
- this.parameters.set(SSOTypes.LOGIN_HINT, encodeURIComponent(loginHint));
97
- }
98
- /**
99
- * Adds the CCS (Cache Credential Service) query parameter for login_hint
100
- * @param loginHint
101
- */
102
- addCcsUpn(loginHint) {
103
- this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`UPN:${loginHint}`));
104
- }
105
- /**
106
- * Adds the CCS (Cache Credential Service) query parameter for account object
107
- * @param loginHint
108
- */
109
- addCcsOid(clientInfo) {
110
- this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`Oid:${clientInfo.uid}@${clientInfo.utid}`));
111
- }
112
- /**
113
- * add sid
114
- * @param sid
115
- */
116
- addSid(sid) {
117
- this.parameters.set(SSOTypes.SID, encodeURIComponent(sid));
118
- }
119
- /**
120
- * add claims
121
- * @param claims
122
- */
123
- addClaims(claims, clientCapabilities) {
124
- const mergedClaims = this.addClientCapabilitiesToClaims(claims, clientCapabilities);
125
- RequestValidator.validateClaims(mergedClaims);
126
- this.parameters.set(AADServerParamKeys.CLAIMS, encodeURIComponent(mergedClaims));
127
- }
128
- /**
129
- * add correlationId
130
- * @param correlationId
131
- */
132
- addCorrelationId(correlationId) {
133
- this.parameters.set(AADServerParamKeys.CLIENT_REQUEST_ID, encodeURIComponent(correlationId));
134
- }
135
- /**
136
- * add library info query params
137
- * @param libraryInfo
138
- */
139
- addLibraryInfo(libraryInfo) {
140
- // Telemetry Info
141
- this.parameters.set(AADServerParamKeys.X_CLIENT_SKU, libraryInfo.sku);
142
- this.parameters.set(AADServerParamKeys.X_CLIENT_VER, libraryInfo.version);
143
- if (libraryInfo.os) {
144
- this.parameters.set(AADServerParamKeys.X_CLIENT_OS, libraryInfo.os);
145
- }
146
- if (libraryInfo.cpu) {
147
- this.parameters.set(AADServerParamKeys.X_CLIENT_CPU, libraryInfo.cpu);
148
- }
149
- }
150
- /**
151
- * Add client telemetry parameters
152
- * @param appTelemetry
153
- */
154
- addApplicationTelemetry(appTelemetry) {
155
- if (appTelemetry?.appName) {
156
- this.parameters.set(AADServerParamKeys.X_APP_NAME, appTelemetry.appName);
157
- }
158
- if (appTelemetry?.appVersion) {
159
- this.parameters.set(AADServerParamKeys.X_APP_VER, appTelemetry.appVersion);
160
- }
161
- }
162
- /**
163
- * add prompt
164
- * @param prompt
165
- */
166
- addPrompt(prompt) {
167
- RequestValidator.validatePrompt(prompt);
168
- this.parameters.set(`${AADServerParamKeys.PROMPT}`, encodeURIComponent(prompt));
169
- }
170
- /**
171
- * add state
172
- * @param state
173
- */
174
- addState(state) {
175
- if (!StringUtils.isEmpty(state)) {
176
- this.parameters.set(AADServerParamKeys.STATE, encodeURIComponent(state));
177
- }
178
- }
179
- /**
180
- * add nonce
181
- * @param nonce
182
- */
183
- addNonce(nonce) {
184
- this.parameters.set(AADServerParamKeys.NONCE, encodeURIComponent(nonce));
185
- }
186
- /**
187
- * add code_challenge and code_challenge_method
188
- * - throw if either of them are not passed
189
- * @param codeChallenge
190
- * @param codeChallengeMethod
191
- */
192
- addCodeChallengeParams(codeChallenge, codeChallengeMethod) {
193
- RequestValidator.validateCodeChallengeParams(codeChallenge, codeChallengeMethod);
194
- if (codeChallenge && codeChallengeMethod) {
195
- this.parameters.set(AADServerParamKeys.CODE_CHALLENGE, encodeURIComponent(codeChallenge));
196
- this.parameters.set(AADServerParamKeys.CODE_CHALLENGE_METHOD, encodeURIComponent(codeChallengeMethod));
197
- }
198
- else {
199
- throw ClientConfigurationError.createInvalidCodeChallengeParamsError();
200
- }
201
- }
202
- /**
203
- * add the `authorization_code` passed by the user to exchange for a token
204
- * @param code
205
- */
206
- addAuthorizationCode(code) {
207
- this.parameters.set(AADServerParamKeys.CODE, encodeURIComponent(code));
208
- }
209
- /**
210
- * add the `authorization_code` passed by the user to exchange for a token
211
- * @param code
212
- */
213
- addDeviceCode(code) {
214
- this.parameters.set(AADServerParamKeys.DEVICE_CODE, encodeURIComponent(code));
215
- }
216
- /**
217
- * add the `refreshToken` passed by the user
218
- * @param refreshToken
219
- */
220
- addRefreshToken(refreshToken) {
221
- this.parameters.set(AADServerParamKeys.REFRESH_TOKEN, encodeURIComponent(refreshToken));
222
- }
223
- /**
224
- * add the `code_verifier` passed by the user to exchange for a token
225
- * @param codeVerifier
226
- */
227
- addCodeVerifier(codeVerifier) {
228
- this.parameters.set(AADServerParamKeys.CODE_VERIFIER, encodeURIComponent(codeVerifier));
229
- }
230
- /**
231
- * add client_secret
232
- * @param clientSecret
233
- */
234
- addClientSecret(clientSecret) {
235
- this.parameters.set(AADServerParamKeys.CLIENT_SECRET, encodeURIComponent(clientSecret));
236
- }
237
- /**
238
- * add clientAssertion for confidential client flows
239
- * @param clientAssertion
240
- */
241
- addClientAssertion(clientAssertion) {
242
- if (!StringUtils.isEmpty(clientAssertion)) {
243
- this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION, encodeURIComponent(clientAssertion));
244
- }
245
- }
246
- /**
247
- * add clientAssertionType for confidential client flows
248
- * @param clientAssertionType
249
- */
250
- addClientAssertionType(clientAssertionType) {
251
- if (!StringUtils.isEmpty(clientAssertionType)) {
252
- this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION_TYPE, encodeURIComponent(clientAssertionType));
253
- }
254
- }
255
- /**
256
- * add OBO assertion for confidential client flows
257
- * @param clientAssertion
258
- */
259
- addOboAssertion(oboAssertion) {
260
- this.parameters.set(AADServerParamKeys.OBO_ASSERTION, encodeURIComponent(oboAssertion));
261
- }
262
- /**
263
- * add grant type
264
- * @param grantType
265
- */
266
- addRequestTokenUse(tokenUse) {
267
- this.parameters.set(AADServerParamKeys.REQUESTED_TOKEN_USE, encodeURIComponent(tokenUse));
268
- }
269
- /**
270
- * add grant type
271
- * @param grantType
272
- */
273
- addGrantType(grantType) {
274
- this.parameters.set(AADServerParamKeys.GRANT_TYPE, encodeURIComponent(grantType));
275
- }
276
- /**
277
- * add client info
278
- *
279
- */
280
- addClientInfo() {
281
- this.parameters.set(CLIENT_INFO, "1");
282
- }
283
- /**
284
- * add extraQueryParams
285
- * @param eQParams
286
- */
287
- addExtraQueryParameters(eQParams) {
288
- const sanitizedEQParams = RequestValidator.sanitizeEQParams(eQParams, this.parameters);
289
- Object.keys(sanitizedEQParams).forEach((key) => {
290
- this.parameters.set(key, eQParams[key]);
291
- });
292
- }
293
- addClientCapabilitiesToClaims(claims, clientCapabilities) {
294
- let mergedClaims;
295
- // Parse provided claims into JSON object or initialize empty object
296
- if (!claims) {
297
- mergedClaims = {};
298
- }
299
- else {
300
- try {
301
- mergedClaims = JSON.parse(claims);
302
- }
303
- catch (e) {
304
- throw ClientConfigurationError.createInvalidClaimsRequestError();
305
- }
306
- }
307
- if (clientCapabilities && clientCapabilities.length > 0) {
308
- if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {
309
- // Add access_token key to claims object
310
- mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};
311
- }
312
- // Add xms_cc claim with provided clientCapabilities to access_token key
313
- mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = {
314
- values: clientCapabilities,
315
- };
316
- }
317
- return JSON.stringify(mergedClaims);
318
- }
319
- /**
320
- * adds `username` for Password Grant flow
321
- * @param username
322
- */
323
- addUsername(username) {
324
- this.parameters.set(PasswordGrantConstants.username, encodeURIComponent(username));
325
- }
326
- /**
327
- * adds `password` for Password Grant flow
328
- * @param password
329
- */
330
- addPassword(password) {
331
- this.parameters.set(PasswordGrantConstants.password, encodeURIComponent(password));
332
- }
333
- /**
334
- * add pop_jwk to query params
335
- * @param cnfString
336
- */
337
- addPopToken(cnfString) {
338
- if (!StringUtils.isEmpty(cnfString)) {
339
- this.parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.POP);
340
- this.parameters.set(AADServerParamKeys.REQ_CNF, encodeURIComponent(cnfString));
341
- }
342
- }
343
- /**
344
- * add SSH JWK and key ID to query params
345
- */
346
- addSshJwk(sshJwkString) {
347
- if (!StringUtils.isEmpty(sshJwkString)) {
348
- this.parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.SSH);
349
- this.parameters.set(AADServerParamKeys.REQ_CNF, encodeURIComponent(sshJwkString));
350
- }
351
- }
352
- /**
353
- * add server telemetry fields
354
- * @param serverTelemetryManager
355
- */
356
- addServerTelemetry(serverTelemetryManager) {
357
- this.parameters.set(AADServerParamKeys.X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue());
358
- this.parameters.set(AADServerParamKeys.X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue());
359
- }
360
- /**
361
- * Adds parameter that indicates to the server that throttling is supported
362
- */
363
- addThrottling() {
364
- this.parameters.set(AADServerParamKeys.X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE);
365
- }
366
- /**
367
- * Adds logout_hint parameter for "silent" logout which prevent server account picker
368
- */
369
- addLogoutHint(logoutHint) {
370
- this.parameters.set(AADServerParamKeys.LOGOUT_HINT, encodeURIComponent(logoutHint));
371
- }
372
- /**
373
- * Utility to create a URL from the params map
374
- */
375
- createQueryString() {
376
- const queryParameterArray = new Array();
377
- this.parameters.forEach((value, key) => {
378
- queryParameterArray.push(`${key}=${value}`);
379
- });
380
- return queryParameterArray.join("&");
381
- }
9
+ /*
10
+ * Copyright (c) Microsoft Corporation. All rights reserved.
11
+ * Licensed under the MIT License.
12
+ */
13
+ class RequestParameterBuilder {
14
+ constructor() {
15
+ this.parameters = new Map();
16
+ }
17
+ /**
18
+ * add response_type = code
19
+ */
20
+ addResponseTypeCode() {
21
+ this.parameters.set(AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(Constants.CODE_RESPONSE_TYPE));
22
+ }
23
+ /**
24
+ * add response_type = token id_token
25
+ */
26
+ addResponseTypeForTokenAndIdToken() {
27
+ this.parameters.set(AADServerParamKeys.RESPONSE_TYPE, encodeURIComponent(`${Constants.TOKEN_RESPONSE_TYPE} ${Constants.ID_TOKEN_RESPONSE_TYPE}`));
28
+ }
29
+ /**
30
+ * add response_mode. defaults to query.
31
+ * @param responseMode
32
+ */
33
+ addResponseMode(responseMode) {
34
+ this.parameters.set(AADServerParamKeys.RESPONSE_MODE, encodeURIComponent(responseMode ? responseMode : ResponseMode.QUERY));
35
+ }
36
+ /**
37
+ * Add flag to indicate STS should attempt to use WAM if available
38
+ */
39
+ addNativeBroker() {
40
+ this.parameters.set(AADServerParamKeys.NATIVE_BROKER, encodeURIComponent("1"));
41
+ }
42
+ /**
43
+ * add scopes. set addOidcScopes to false to prevent default scopes in non-user scenarios
44
+ * @param scopeSet
45
+ * @param addOidcScopes
46
+ */
47
+ addScopes(scopes, addOidcScopes = true) {
48
+ const requestScopes = addOidcScopes
49
+ ? [...(scopes || []), ...OIDC_DEFAULT_SCOPES]
50
+ : scopes || [];
51
+ const scopeSet = new ScopeSet(requestScopes);
52
+ this.parameters.set(AADServerParamKeys.SCOPE, encodeURIComponent(scopeSet.printScopes()));
53
+ }
54
+ /**
55
+ * add clientId
56
+ * @param clientId
57
+ */
58
+ addClientId(clientId) {
59
+ this.parameters.set(AADServerParamKeys.CLIENT_ID, encodeURIComponent(clientId));
60
+ }
61
+ /**
62
+ * add redirect_uri
63
+ * @param redirectUri
64
+ */
65
+ addRedirectUri(redirectUri) {
66
+ RequestValidator.validateRedirectUri(redirectUri);
67
+ this.parameters.set(AADServerParamKeys.REDIRECT_URI, encodeURIComponent(redirectUri));
68
+ }
69
+ /**
70
+ * add post logout redirectUri
71
+ * @param redirectUri
72
+ */
73
+ addPostLogoutRedirectUri(redirectUri) {
74
+ RequestValidator.validateRedirectUri(redirectUri);
75
+ this.parameters.set(AADServerParamKeys.POST_LOGOUT_URI, encodeURIComponent(redirectUri));
76
+ }
77
+ /**
78
+ * add id_token_hint to logout request
79
+ * @param idTokenHint
80
+ */
81
+ addIdTokenHint(idTokenHint) {
82
+ this.parameters.set(AADServerParamKeys.ID_TOKEN_HINT, encodeURIComponent(idTokenHint));
83
+ }
84
+ /**
85
+ * add domain_hint
86
+ * @param domainHint
87
+ */
88
+ addDomainHint(domainHint) {
89
+ this.parameters.set(SSOTypes.DOMAIN_HINT, encodeURIComponent(domainHint));
90
+ }
91
+ /**
92
+ * add login_hint
93
+ * @param loginHint
94
+ */
95
+ addLoginHint(loginHint) {
96
+ this.parameters.set(SSOTypes.LOGIN_HINT, encodeURIComponent(loginHint));
97
+ }
98
+ /**
99
+ * Adds the CCS (Cache Credential Service) query parameter for login_hint
100
+ * @param loginHint
101
+ */
102
+ addCcsUpn(loginHint) {
103
+ this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`UPN:${loginHint}`));
104
+ }
105
+ /**
106
+ * Adds the CCS (Cache Credential Service) query parameter for account object
107
+ * @param loginHint
108
+ */
109
+ addCcsOid(clientInfo) {
110
+ this.parameters.set(HeaderNames.CCS_HEADER, encodeURIComponent(`Oid:${clientInfo.uid}@${clientInfo.utid}`));
111
+ }
112
+ /**
113
+ * add sid
114
+ * @param sid
115
+ */
116
+ addSid(sid) {
117
+ this.parameters.set(SSOTypes.SID, encodeURIComponent(sid));
118
+ }
119
+ /**
120
+ * add claims
121
+ * @param claims
122
+ */
123
+ addClaims(claims, clientCapabilities) {
124
+ const mergedClaims = this.addClientCapabilitiesToClaims(claims, clientCapabilities);
125
+ RequestValidator.validateClaims(mergedClaims);
126
+ this.parameters.set(AADServerParamKeys.CLAIMS, encodeURIComponent(mergedClaims));
127
+ }
128
+ /**
129
+ * add correlationId
130
+ * @param correlationId
131
+ */
132
+ addCorrelationId(correlationId) {
133
+ this.parameters.set(AADServerParamKeys.CLIENT_REQUEST_ID, encodeURIComponent(correlationId));
134
+ }
135
+ /**
136
+ * add library info query params
137
+ * @param libraryInfo
138
+ */
139
+ addLibraryInfo(libraryInfo) {
140
+ // Telemetry Info
141
+ this.parameters.set(AADServerParamKeys.X_CLIENT_SKU, libraryInfo.sku);
142
+ this.parameters.set(AADServerParamKeys.X_CLIENT_VER, libraryInfo.version);
143
+ if (libraryInfo.os) {
144
+ this.parameters.set(AADServerParamKeys.X_CLIENT_OS, libraryInfo.os);
145
+ }
146
+ if (libraryInfo.cpu) {
147
+ this.parameters.set(AADServerParamKeys.X_CLIENT_CPU, libraryInfo.cpu);
148
+ }
149
+ }
150
+ /**
151
+ * Add client telemetry parameters
152
+ * @param appTelemetry
153
+ */
154
+ addApplicationTelemetry(appTelemetry) {
155
+ if (appTelemetry?.appName) {
156
+ this.parameters.set(AADServerParamKeys.X_APP_NAME, appTelemetry.appName);
157
+ }
158
+ if (appTelemetry?.appVersion) {
159
+ this.parameters.set(AADServerParamKeys.X_APP_VER, appTelemetry.appVersion);
160
+ }
161
+ }
162
+ /**
163
+ * add prompt
164
+ * @param prompt
165
+ */
166
+ addPrompt(prompt) {
167
+ RequestValidator.validatePrompt(prompt);
168
+ this.parameters.set(`${AADServerParamKeys.PROMPT}`, encodeURIComponent(prompt));
169
+ }
170
+ /**
171
+ * add state
172
+ * @param state
173
+ */
174
+ addState(state) {
175
+ if (!StringUtils.isEmpty(state)) {
176
+ this.parameters.set(AADServerParamKeys.STATE, encodeURIComponent(state));
177
+ }
178
+ }
179
+ /**
180
+ * add nonce
181
+ * @param nonce
182
+ */
183
+ addNonce(nonce) {
184
+ this.parameters.set(AADServerParamKeys.NONCE, encodeURIComponent(nonce));
185
+ }
186
+ /**
187
+ * add code_challenge and code_challenge_method
188
+ * - throw if either of them are not passed
189
+ * @param codeChallenge
190
+ * @param codeChallengeMethod
191
+ */
192
+ addCodeChallengeParams(codeChallenge, codeChallengeMethod) {
193
+ RequestValidator.validateCodeChallengeParams(codeChallenge, codeChallengeMethod);
194
+ if (codeChallenge && codeChallengeMethod) {
195
+ this.parameters.set(AADServerParamKeys.CODE_CHALLENGE, encodeURIComponent(codeChallenge));
196
+ this.parameters.set(AADServerParamKeys.CODE_CHALLENGE_METHOD, encodeURIComponent(codeChallengeMethod));
197
+ }
198
+ else {
199
+ throw ClientConfigurationError.createInvalidCodeChallengeParamsError();
200
+ }
201
+ }
202
+ /**
203
+ * add the `authorization_code` passed by the user to exchange for a token
204
+ * @param code
205
+ */
206
+ addAuthorizationCode(code) {
207
+ this.parameters.set(AADServerParamKeys.CODE, encodeURIComponent(code));
208
+ }
209
+ /**
210
+ * add the `authorization_code` passed by the user to exchange for a token
211
+ * @param code
212
+ */
213
+ addDeviceCode(code) {
214
+ this.parameters.set(AADServerParamKeys.DEVICE_CODE, encodeURIComponent(code));
215
+ }
216
+ /**
217
+ * add the `refreshToken` passed by the user
218
+ * @param refreshToken
219
+ */
220
+ addRefreshToken(refreshToken) {
221
+ this.parameters.set(AADServerParamKeys.REFRESH_TOKEN, encodeURIComponent(refreshToken));
222
+ }
223
+ /**
224
+ * add the `code_verifier` passed by the user to exchange for a token
225
+ * @param codeVerifier
226
+ */
227
+ addCodeVerifier(codeVerifier) {
228
+ this.parameters.set(AADServerParamKeys.CODE_VERIFIER, encodeURIComponent(codeVerifier));
229
+ }
230
+ /**
231
+ * add client_secret
232
+ * @param clientSecret
233
+ */
234
+ addClientSecret(clientSecret) {
235
+ this.parameters.set(AADServerParamKeys.CLIENT_SECRET, encodeURIComponent(clientSecret));
236
+ }
237
+ /**
238
+ * add clientAssertion for confidential client flows
239
+ * @param clientAssertion
240
+ */
241
+ addClientAssertion(clientAssertion) {
242
+ if (!StringUtils.isEmpty(clientAssertion)) {
243
+ this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION, encodeURIComponent(clientAssertion));
244
+ }
245
+ }
246
+ /**
247
+ * add clientAssertionType for confidential client flows
248
+ * @param clientAssertionType
249
+ */
250
+ addClientAssertionType(clientAssertionType) {
251
+ if (!StringUtils.isEmpty(clientAssertionType)) {
252
+ this.parameters.set(AADServerParamKeys.CLIENT_ASSERTION_TYPE, encodeURIComponent(clientAssertionType));
253
+ }
254
+ }
255
+ /**
256
+ * add OBO assertion for confidential client flows
257
+ * @param clientAssertion
258
+ */
259
+ addOboAssertion(oboAssertion) {
260
+ this.parameters.set(AADServerParamKeys.OBO_ASSERTION, encodeURIComponent(oboAssertion));
261
+ }
262
+ /**
263
+ * add grant type
264
+ * @param grantType
265
+ */
266
+ addRequestTokenUse(tokenUse) {
267
+ this.parameters.set(AADServerParamKeys.REQUESTED_TOKEN_USE, encodeURIComponent(tokenUse));
268
+ }
269
+ /**
270
+ * add grant type
271
+ * @param grantType
272
+ */
273
+ addGrantType(grantType) {
274
+ this.parameters.set(AADServerParamKeys.GRANT_TYPE, encodeURIComponent(grantType));
275
+ }
276
+ /**
277
+ * add client info
278
+ *
279
+ */
280
+ addClientInfo() {
281
+ this.parameters.set(CLIENT_INFO, "1");
282
+ }
283
+ /**
284
+ * add extraQueryParams
285
+ * @param eQParams
286
+ */
287
+ addExtraQueryParameters(eQParams) {
288
+ const sanitizedEQParams = RequestValidator.sanitizeEQParams(eQParams, this.parameters);
289
+ Object.keys(sanitizedEQParams).forEach((key) => {
290
+ this.parameters.set(key, eQParams[key]);
291
+ });
292
+ }
293
+ addClientCapabilitiesToClaims(claims, clientCapabilities) {
294
+ let mergedClaims;
295
+ // Parse provided claims into JSON object or initialize empty object
296
+ if (!claims) {
297
+ mergedClaims = {};
298
+ }
299
+ else {
300
+ try {
301
+ mergedClaims = JSON.parse(claims);
302
+ }
303
+ catch (e) {
304
+ throw ClientConfigurationError.createInvalidClaimsRequestError();
305
+ }
306
+ }
307
+ if (clientCapabilities && clientCapabilities.length > 0) {
308
+ if (!mergedClaims.hasOwnProperty(ClaimsRequestKeys.ACCESS_TOKEN)) {
309
+ // Add access_token key to claims object
310
+ mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN] = {};
311
+ }
312
+ // Add xms_cc claim with provided clientCapabilities to access_token key
313
+ mergedClaims[ClaimsRequestKeys.ACCESS_TOKEN][ClaimsRequestKeys.XMS_CC] = {
314
+ values: clientCapabilities,
315
+ };
316
+ }
317
+ return JSON.stringify(mergedClaims);
318
+ }
319
+ /**
320
+ * adds `username` for Password Grant flow
321
+ * @param username
322
+ */
323
+ addUsername(username) {
324
+ this.parameters.set(PasswordGrantConstants.username, encodeURIComponent(username));
325
+ }
326
+ /**
327
+ * adds `password` for Password Grant flow
328
+ * @param password
329
+ */
330
+ addPassword(password) {
331
+ this.parameters.set(PasswordGrantConstants.password, encodeURIComponent(password));
332
+ }
333
+ /**
334
+ * add pop_jwk to query params
335
+ * @param cnfString
336
+ */
337
+ addPopToken(cnfString) {
338
+ if (!StringUtils.isEmpty(cnfString)) {
339
+ this.parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.POP);
340
+ this.parameters.set(AADServerParamKeys.REQ_CNF, encodeURIComponent(cnfString));
341
+ }
342
+ }
343
+ /**
344
+ * add SSH JWK and key ID to query params
345
+ */
346
+ addSshJwk(sshJwkString) {
347
+ if (!StringUtils.isEmpty(sshJwkString)) {
348
+ this.parameters.set(AADServerParamKeys.TOKEN_TYPE, AuthenticationScheme.SSH);
349
+ this.parameters.set(AADServerParamKeys.REQ_CNF, encodeURIComponent(sshJwkString));
350
+ }
351
+ }
352
+ /**
353
+ * add server telemetry fields
354
+ * @param serverTelemetryManager
355
+ */
356
+ addServerTelemetry(serverTelemetryManager) {
357
+ this.parameters.set(AADServerParamKeys.X_CLIENT_CURR_TELEM, serverTelemetryManager.generateCurrentRequestHeaderValue());
358
+ this.parameters.set(AADServerParamKeys.X_CLIENT_LAST_TELEM, serverTelemetryManager.generateLastRequestHeaderValue());
359
+ }
360
+ /**
361
+ * Adds parameter that indicates to the server that throttling is supported
362
+ */
363
+ addThrottling() {
364
+ this.parameters.set(AADServerParamKeys.X_MS_LIB_CAPABILITY, ThrottlingConstants.X_MS_LIB_CAPABILITY_VALUE);
365
+ }
366
+ /**
367
+ * Adds logout_hint parameter for "silent" logout which prevent server account picker
368
+ */
369
+ addLogoutHint(logoutHint) {
370
+ this.parameters.set(AADServerParamKeys.LOGOUT_HINT, encodeURIComponent(logoutHint));
371
+ }
372
+ /**
373
+ * Utility to create a URL from the params map
374
+ */
375
+ createQueryString() {
376
+ const queryParameterArray = new Array();
377
+ this.parameters.forEach((value, key) => {
378
+ queryParameterArray.push(`${key}=${value}`);
379
+ });
380
+ return queryParameterArray.join("&");
381
+ }
382
382
  }
383
383
 
384
384
  export { RequestParameterBuilder };