@azure/msal-common 14.0.0-alpha.1 → 14.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 (167) 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 +8 -8
  7. package/dist/account/CcsCredential.js +9 -9
  8. package/dist/account/ClientCredentials.d.ts +14 -14
  9. package/dist/account/ClientInfo.d.ts +19 -19
  10. package/dist/account/ClientInfo.js +37 -37
  11. package/dist/account/DecodedAuthToken.d.ts +8 -8
  12. package/dist/account/TokenClaims.d.ts +65 -65
  13. package/dist/authority/Authority.d.ts +228 -215
  14. package/dist/authority/Authority.d.ts.map +1 -1
  15. package/dist/authority/Authority.js +716 -682
  16. package/dist/authority/Authority.js.map +1 -1
  17. package/dist/authority/AuthorityFactory.d.ts +30 -30
  18. package/dist/authority/AuthorityFactory.js +47 -47
  19. package/dist/authority/AuthorityMetadata.d.ts +622 -622
  20. package/dist/authority/AuthorityMetadata.js +876 -876
  21. package/dist/authority/AuthorityOptions.d.ts +18 -18
  22. package/dist/authority/AuthorityOptions.js +19 -19
  23. package/dist/authority/AuthorityType.d.ts +9 -9
  24. package/dist/authority/AuthorityType.js +14 -14
  25. package/dist/authority/AzureRegion.d.ts +1 -1
  26. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  27. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  28. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  29. package/dist/authority/CloudInstanceDiscoveryErrorResponse.js +8 -8
  30. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  31. package/dist/authority/CloudInstanceDiscoveryResponse.js +8 -8
  32. package/dist/authority/ImdsOptions.d.ts +5 -5
  33. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  34. package/dist/authority/OpenIdConfigResponse.js +10 -10
  35. package/dist/authority/ProtocolMode.d.ts +7 -7
  36. package/dist/authority/ProtocolMode.js +12 -12
  37. package/dist/authority/RegionDiscovery.d.ts +30 -30
  38. package/dist/authority/RegionDiscovery.js +108 -108
  39. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  40. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  41. package/dist/cache/CacheManager.d.ts +443 -443
  42. package/dist/cache/CacheManager.js +1011 -1011
  43. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  44. package/dist/cache/entities/AccessTokenEntity.js +111 -111
  45. package/dist/cache/entities/AccountEntity.d.ts +99 -99
  46. package/dist/cache/entities/AccountEntity.js +248 -248
  47. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  48. package/dist/cache/entities/AppMetadataEntity.js +66 -66
  49. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +47 -47
  50. package/dist/cache/entities/AuthorityMetadataEntity.js +77 -77
  51. package/dist/cache/entities/CacheRecord.d.ts +13 -13
  52. package/dist/cache/entities/CacheRecord.js +13 -13
  53. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  54. package/dist/cache/entities/CredentialEntity.js +136 -136
  55. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  56. package/dist/cache/entities/IdTokenEntity.js +56 -56
  57. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  58. package/dist/cache/entities/RefreshTokenEntity.js +59 -59
  59. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  60. package/dist/cache/entities/ServerTelemetryEntity.js +27 -27
  61. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  62. package/dist/cache/entities/ThrottlingEntity.js +23 -23
  63. package/dist/cache/interface/ICacheManager.d.ts +165 -165
  64. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  65. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  66. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  67. package/dist/cache/persistence/TokenCacheContext.js +25 -25
  68. package/dist/cache/utils/CacheTypes.d.ts +62 -62
  69. package/dist/client/AuthorizationCodeClient.d.ts +71 -71
  70. package/dist/client/AuthorizationCodeClient.js +433 -433
  71. package/dist/client/BaseClient.d.ts +50 -50
  72. package/dist/client/BaseClient.js +92 -92
  73. package/dist/client/RefreshTokenClient.d.ts +34 -34
  74. package/dist/client/RefreshTokenClient.js +239 -239
  75. package/dist/client/SilentFlowClient.d.ts +24 -24
  76. package/dist/client/SilentFlowClient.js +94 -94
  77. package/dist/config/AppTokenProvider.d.ts +38 -38
  78. package/dist/config/ClientConfiguration.d.ts +133 -133
  79. package/dist/config/ClientConfiguration.js +88 -88
  80. package/dist/crypto/ICrypto.d.ts +62 -62
  81. package/dist/crypto/ICrypto.js +42 -42
  82. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  83. package/dist/crypto/JoseHeader.d.ts +21 -21
  84. package/dist/crypto/JoseHeader.js +36 -36
  85. package/dist/crypto/PopTokenGenerator.d.ts +57 -57
  86. package/dist/crypto/PopTokenGenerator.js +83 -83
  87. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  88. package/dist/error/AuthError.d.ts +47 -47
  89. package/dist/error/AuthError.js +51 -51
  90. package/dist/error/ClientAuthError.d.ts +412 -412
  91. package/dist/error/ClientAuthError.js +519 -519
  92. package/dist/error/ClientConfigurationError.d.ts +198 -198
  93. package/dist/error/ClientConfigurationError.js +249 -249
  94. package/dist/error/InteractionRequiredAuthError.d.ts +59 -59
  95. package/dist/error/InteractionRequiredAuthError.js +78 -78
  96. package/dist/error/JoseHeaderError.d.ts +28 -28
  97. package/dist/error/JoseHeaderError.js +39 -39
  98. package/dist/error/ServerError.d.ts +7 -7
  99. package/dist/error/ServerError.js +14 -14
  100. package/dist/index.cjs.js +8843 -8809
  101. package/dist/index.cjs.js.map +1 -1
  102. package/dist/index.d.ts +93 -93
  103. package/dist/index.js +1 -1
  104. package/dist/logger/Logger.d.ts +95 -95
  105. package/dist/logger/Logger.js +197 -197
  106. package/dist/network/INetworkModule.d.ts +29 -29
  107. package/dist/network/INetworkModule.js +14 -14
  108. package/dist/network/NetworkManager.d.ts +32 -32
  109. package/dist/network/NetworkManager.js +33 -33
  110. package/dist/network/RequestThumbprint.d.ts +16 -16
  111. package/dist/network/ThrottlingUtils.d.ts +41 -41
  112. package/dist/network/ThrottlingUtils.js +94 -94
  113. package/dist/packageMetadata.d.ts +2 -2
  114. package/dist/packageMetadata.js +4 -4
  115. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  116. package/dist/request/AuthenticationHeaderParser.js +55 -55
  117. package/dist/request/BaseAuthRequest.d.ts +37 -37
  118. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  119. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  120. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  121. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  122. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  123. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  124. package/dist/request/CommonRefreshTokenRequest.d.ts +19 -19
  125. package/dist/request/CommonSilentFlowRequest.d.ts +18 -18
  126. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  127. package/dist/request/NativeRequest.d.ts +19 -19
  128. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  129. package/dist/request/RequestParameterBuilder.d.ts +216 -216
  130. package/dist/request/RequestParameterBuilder.js +374 -374
  131. package/dist/request/RequestValidator.d.ts +33 -33
  132. package/dist/request/RequestValidator.js +83 -83
  133. package/dist/request/ScopeSet.d.ts +88 -88
  134. package/dist/request/ScopeSet.js +197 -197
  135. package/dist/response/AuthenticationResult.d.ts +39 -39
  136. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  137. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  138. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  139. package/dist/response/IMDSBadResponse.d.ts +4 -4
  140. package/dist/response/ResponseHandler.d.ts +72 -72
  141. package/dist/response/ResponseHandler.js +300 -300
  142. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  143. package/dist/response/ServerAuthorizationTokenResponse.d.ts +44 -44
  144. package/dist/telemetry/performance/IPerformanceClient.d.ts +42 -42
  145. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  146. package/dist/telemetry/performance/PerformanceClient.d.ts +189 -189
  147. package/dist/telemetry/performance/PerformanceClient.js +406 -406
  148. package/dist/telemetry/performance/PerformanceEvent.d.ts +439 -439
  149. package/dist/telemetry/performance/PerformanceEvent.js +227 -227
  150. package/dist/telemetry/performance/StubPerformanceClient.d.ts +19 -19
  151. package/dist/telemetry/performance/StubPerformanceClient.js +36 -36
  152. package/dist/telemetry/server/ServerTelemetryManager.d.ts +65 -65
  153. package/dist/telemetry/server/ServerTelemetryManager.js +196 -196
  154. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  155. package/dist/url/IUri.d.ts +12 -12
  156. package/dist/url/UrlString.d.ts +70 -70
  157. package/dist/url/UrlString.js +242 -242
  158. package/dist/utils/Constants.d.ts +331 -331
  159. package/dist/utils/Constants.js +373 -373
  160. package/dist/utils/MsalTypes.d.ts +6 -6
  161. package/dist/utils/ProtocolUtils.d.ts +42 -42
  162. package/dist/utils/ProtocolUtils.js +71 -71
  163. package/dist/utils/StringUtils.d.ts +53 -53
  164. package/dist/utils/StringUtils.js +124 -124
  165. package/dist/utils/TimeUtils.d.ts +27 -27
  166. package/dist/utils/TimeUtils.js +45 -45
  167. package/package.json +79 -79
@@ -1,4 +1,4 @@
1
- /*! @azure/msal-common v14.0.0-alpha.1 2023-05-08 */
1
+ /*! @azure/msal-common v14.0.0-alpha.2 2023-05-17 */
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 };