@azure/msal-common 14.0.2 → 14.1.0-alpha.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 (399) hide show
  1. package/dist/account/AccountInfo.d.ts +32 -32
  2. package/dist/account/AuthToken.d.ts +17 -20
  3. package/dist/account/AuthToken.d.ts.map +1 -1
  4. package/dist/account/AuthToken.mjs +61 -51
  5. package/dist/account/AuthToken.mjs.map +1 -1
  6. package/dist/account/CcsCredential.d.ts +9 -9
  7. package/dist/account/CcsCredential.mjs +8 -8
  8. package/dist/account/CcsCredential.mjs.map +1 -1
  9. package/dist/account/ClientCredentials.d.ts +14 -14
  10. package/dist/account/ClientInfo.d.ts +19 -19
  11. package/dist/account/ClientInfo.d.ts.map +1 -1
  12. package/dist/account/ClientInfo.mjs +39 -39
  13. package/dist/account/ClientInfo.mjs.map +1 -1
  14. package/dist/account/TokenClaims.d.ts +65 -65
  15. package/dist/authority/Authority.d.ts +235 -235
  16. package/dist/authority/Authority.d.ts.map +1 -1
  17. package/dist/authority/Authority.mjs +743 -765
  18. package/dist/authority/Authority.mjs.map +1 -1
  19. package/dist/authority/AuthorityFactory.d.ts +31 -31
  20. package/dist/authority/AuthorityFactory.d.ts.map +1 -1
  21. package/dist/authority/AuthorityFactory.mjs +52 -51
  22. package/dist/authority/AuthorityFactory.mjs.map +1 -1
  23. package/dist/authority/AuthorityMetadata.d.ts +623 -623
  24. package/dist/authority/AuthorityMetadata.mjs +884 -884
  25. package/dist/authority/AuthorityMetadata.mjs.map +1 -1
  26. package/dist/authority/AuthorityOptions.d.ts +21 -21
  27. package/dist/authority/AuthorityOptions.mjs +18 -18
  28. package/dist/authority/AuthorityOptions.mjs.map +1 -1
  29. package/dist/authority/AuthorityType.d.ts +10 -10
  30. package/dist/authority/AuthorityType.mjs +13 -13
  31. package/dist/authority/AuthorityType.mjs.map +1 -1
  32. package/dist/authority/AzureRegion.d.ts +1 -1
  33. package/dist/authority/AzureRegionConfiguration.d.ts +5 -5
  34. package/dist/authority/CloudDiscoveryMetadata.d.ts +5 -5
  35. package/dist/authority/CloudInstanceDiscoveryErrorResponse.d.ts +13 -13
  36. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs +8 -8
  37. package/dist/authority/CloudInstanceDiscoveryErrorResponse.mjs.map +1 -1
  38. package/dist/authority/CloudInstanceDiscoveryResponse.d.ts +9 -9
  39. package/dist/authority/CloudInstanceDiscoveryResponse.mjs +8 -8
  40. package/dist/authority/CloudInstanceDiscoveryResponse.mjs.map +1 -1
  41. package/dist/authority/ImdsOptions.d.ts +5 -5
  42. package/dist/authority/OIDCOptions.d.ts +8 -8
  43. package/dist/authority/OpenIdConfigResponse.d.ts +11 -11
  44. package/dist/authority/OpenIdConfigResponse.mjs +10 -10
  45. package/dist/authority/OpenIdConfigResponse.mjs.map +1 -1
  46. package/dist/authority/ProtocolMode.d.ts +8 -8
  47. package/dist/authority/ProtocolMode.mjs +11 -11
  48. package/dist/authority/ProtocolMode.mjs.map +1 -1
  49. package/dist/authority/RegionDiscovery.d.ts +32 -30
  50. package/dist/authority/RegionDiscovery.d.ts.map +1 -1
  51. package/dist/authority/RegionDiscovery.mjs +107 -108
  52. package/dist/authority/RegionDiscovery.mjs.map +1 -1
  53. package/dist/authority/RegionDiscoveryMetadata.d.ts +6 -6
  54. package/dist/broker/nativeBroker/INativeBrokerPlugin.d.ts +15 -15
  55. package/dist/cache/CacheManager.d.ts +446 -446
  56. package/dist/cache/CacheManager.d.ts.map +1 -1
  57. package/dist/cache/CacheManager.mjs +1001 -1025
  58. package/dist/cache/CacheManager.mjs.map +1 -1
  59. package/dist/cache/entities/AccessTokenEntity.d.ts +56 -56
  60. package/dist/cache/entities/AccessTokenEntity.d.ts.map +1 -1
  61. package/dist/cache/entities/AccessTokenEntity.mjs +112 -114
  62. package/dist/cache/entities/AccessTokenEntity.mjs.map +1 -1
  63. package/dist/cache/entities/AccountEntity.d.ts +101 -101
  64. package/dist/cache/entities/AccountEntity.d.ts.map +1 -1
  65. package/dist/cache/entities/AccountEntity.mjs +222 -223
  66. package/dist/cache/entities/AccountEntity.mjs.map +1 -1
  67. package/dist/cache/entities/AppMetadataEntity.d.ts +39 -39
  68. package/dist/cache/entities/AppMetadataEntity.mjs +66 -66
  69. package/dist/cache/entities/AppMetadataEntity.mjs.map +1 -1
  70. package/dist/cache/entities/AuthorityMetadataEntity.d.ts +48 -48
  71. package/dist/cache/entities/AuthorityMetadataEntity.mjs +78 -78
  72. package/dist/cache/entities/AuthorityMetadataEntity.mjs.map +1 -1
  73. package/dist/cache/entities/CacheRecord.d.ts +14 -14
  74. package/dist/cache/entities/CacheRecord.mjs +14 -14
  75. package/dist/cache/entities/CacheRecord.mjs.map +1 -1
  76. package/dist/cache/entities/CredentialEntity.d.ts +88 -88
  77. package/dist/cache/entities/CredentialEntity.d.ts.map +1 -1
  78. package/dist/cache/entities/CredentialEntity.mjs +138 -137
  79. package/dist/cache/entities/CredentialEntity.mjs.map +1 -1
  80. package/dist/cache/entities/IdTokenEntity.d.ts +34 -34
  81. package/dist/cache/entities/IdTokenEntity.mjs +56 -56
  82. package/dist/cache/entities/IdTokenEntity.mjs.map +1 -1
  83. package/dist/cache/entities/RefreshTokenEntity.d.ts +36 -36
  84. package/dist/cache/entities/RefreshTokenEntity.mjs +59 -59
  85. package/dist/cache/entities/RefreshTokenEntity.mjs.map +1 -1
  86. package/dist/cache/entities/ServerTelemetryEntity.d.ts +12 -12
  87. package/dist/cache/entities/ServerTelemetryEntity.mjs +27 -27
  88. package/dist/cache/entities/ServerTelemetryEntity.mjs.map +1 -1
  89. package/dist/cache/entities/ThrottlingEntity.d.ts +13 -13
  90. package/dist/cache/entities/ThrottlingEntity.mjs +23 -23
  91. package/dist/cache/entities/ThrottlingEntity.mjs.map +1 -1
  92. package/dist/cache/interface/ICacheManager.d.ts +166 -166
  93. package/dist/cache/interface/ICachePlugin.d.ts +5 -5
  94. package/dist/cache/interface/ISerializableTokenCache.d.ts +4 -4
  95. package/dist/cache/persistence/TokenCacheContext.d.ts +23 -23
  96. package/dist/cache/persistence/TokenCacheContext.mjs +25 -25
  97. package/dist/cache/persistence/TokenCacheContext.mjs.map +1 -1
  98. package/dist/cache/utils/CacheTypes.d.ts +69 -69
  99. package/dist/client/AuthorizationCodeClient.d.ts +73 -73
  100. package/dist/client/AuthorizationCodeClient.d.ts.map +1 -1
  101. package/dist/client/AuthorizationCodeClient.mjs +412 -440
  102. package/dist/client/AuthorizationCodeClient.mjs.map +1 -1
  103. package/dist/client/BaseClient.d.ts +51 -51
  104. package/dist/client/BaseClient.d.ts.map +1 -1
  105. package/dist/client/BaseClient.mjs +101 -94
  106. package/dist/client/BaseClient.mjs.map +1 -1
  107. package/dist/client/RefreshTokenClient.d.ts +35 -35
  108. package/dist/client/RefreshTokenClient.d.ts.map +1 -1
  109. package/dist/client/RefreshTokenClient.mjs +185 -243
  110. package/dist/client/RefreshTokenClient.mjs.map +1 -1
  111. package/dist/client/SilentFlowClient.d.ts +26 -25
  112. package/dist/client/SilentFlowClient.d.ts.map +1 -1
  113. package/dist/client/SilentFlowClient.mjs +128 -104
  114. package/dist/client/SilentFlowClient.mjs.map +1 -1
  115. package/dist/config/AppTokenProvider.d.ts +38 -38
  116. package/dist/config/ClientConfiguration.d.ts +150 -150
  117. package/dist/config/ClientConfiguration.d.ts.map +1 -1
  118. package/dist/config/ClientConfiguration.mjs +99 -100
  119. package/dist/config/ClientConfiguration.mjs.map +1 -1
  120. package/dist/crypto/ICrypto.d.ts +62 -62
  121. package/dist/crypto/ICrypto.d.ts.map +1 -1
  122. package/dist/crypto/ICrypto.mjs +35 -43
  123. package/dist/crypto/ICrypto.mjs.map +1 -1
  124. package/dist/crypto/IGuidGenerator.d.ts +4 -4
  125. package/dist/crypto/JoseHeader.d.ts +22 -22
  126. package/dist/crypto/JoseHeader.d.ts.map +1 -1
  127. package/dist/crypto/JoseHeader.mjs +39 -38
  128. package/dist/crypto/JoseHeader.mjs.map +1 -1
  129. package/dist/crypto/PopTokenGenerator.d.ts +60 -59
  130. package/dist/crypto/PopTokenGenerator.d.ts.map +1 -1
  131. package/dist/crypto/PopTokenGenerator.mjs +83 -83
  132. package/dist/crypto/PopTokenGenerator.mjs.map +1 -1
  133. package/dist/crypto/SignedHttpRequest.d.ts +11 -11
  134. package/dist/error/AuthError.d.ts +44 -47
  135. package/dist/error/AuthError.d.ts.map +1 -1
  136. package/dist/error/AuthError.mjs +50 -52
  137. package/dist/error/AuthError.mjs.map +1 -1
  138. package/dist/error/AuthErrorCodes.d.ts +6 -0
  139. package/dist/error/AuthErrorCodes.d.ts.map +1 -0
  140. package/dist/error/AuthErrorCodes.mjs +14 -0
  141. package/dist/error/AuthErrorCodes.mjs.map +1 -0
  142. package/dist/error/ClientAuthError.d.ts +232 -412
  143. package/dist/error/ClientAuthError.d.ts.map +1 -1
  144. package/dist/error/ClientAuthError.mjs +248 -520
  145. package/dist/error/ClientAuthError.mjs.map +1 -1
  146. package/dist/error/ClientAuthErrorCodes.d.ts +44 -0
  147. package/dist/error/ClientAuthErrorCodes.d.ts.map +1 -0
  148. package/dist/error/ClientAuthErrorCodes.mjs +52 -0
  149. package/dist/error/ClientAuthErrorCodes.mjs.map +1 -0
  150. package/dist/error/ClientConfigurationError.d.ts +128 -222
  151. package/dist/error/ClientConfigurationError.d.ts.map +1 -1
  152. package/dist/error/ClientConfigurationError.mjs +140 -281
  153. package/dist/error/ClientConfigurationError.mjs.map +1 -1
  154. package/dist/error/ClientConfigurationErrorCodes.d.ts +23 -0
  155. package/dist/error/ClientConfigurationErrorCodes.d.ts.map +1 -0
  156. package/dist/error/ClientConfigurationErrorCodes.mjs +31 -0
  157. package/dist/error/ClientConfigurationErrorCodes.mjs.map +1 -0
  158. package/dist/error/InteractionRequiredAuthError.d.ts +57 -59
  159. package/dist/error/InteractionRequiredAuthError.d.ts.map +1 -1
  160. package/dist/error/InteractionRequiredAuthError.mjs +80 -79
  161. package/dist/error/InteractionRequiredAuthError.mjs.map +1 -1
  162. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts +6 -0
  163. package/dist/error/InteractionRequiredAuthErrorCodes.d.ts.map +1 -0
  164. package/dist/error/InteractionRequiredAuthErrorCodes.mjs +16 -0
  165. package/dist/error/InteractionRequiredAuthErrorCodes.mjs.map +1 -0
  166. package/dist/error/JoseHeaderError.d.ts +15 -28
  167. package/dist/error/JoseHeaderError.d.ts.map +1 -1
  168. package/dist/error/JoseHeaderError.mjs +24 -40
  169. package/dist/error/JoseHeaderError.mjs.map +1 -1
  170. package/dist/error/JoseHeaderErrorCodes.d.ts +3 -0
  171. package/dist/error/JoseHeaderErrorCodes.d.ts.map +1 -0
  172. package/dist/error/JoseHeaderErrorCodes.mjs +11 -0
  173. package/dist/error/JoseHeaderErrorCodes.mjs.map +1 -0
  174. package/dist/error/ServerError.d.ts +7 -7
  175. package/dist/error/ServerError.mjs +14 -14
  176. package/dist/error/ServerError.mjs.map +1 -1
  177. package/dist/index.cjs +8727 -8978
  178. package/dist/index.cjs.map +1 -1
  179. package/dist/index.d.ts +96 -96
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.mjs +17 -7
  182. package/dist/index.mjs.map +1 -1
  183. package/dist/logger/Logger.d.ts +95 -95
  184. package/dist/logger/Logger.d.ts.map +1 -1
  185. package/dist/logger/Logger.mjs +188 -198
  186. package/dist/logger/Logger.mjs.map +1 -1
  187. package/dist/network/INetworkModule.d.ts +29 -29
  188. package/dist/network/INetworkModule.d.ts.map +1 -1
  189. package/dist/network/INetworkModule.mjs +14 -15
  190. package/dist/network/INetworkModule.mjs.map +1 -1
  191. package/dist/network/NetworkManager.d.ts +33 -33
  192. package/dist/network/NetworkManager.d.ts.map +1 -1
  193. package/dist/network/NetworkManager.mjs +36 -35
  194. package/dist/network/NetworkManager.mjs.map +1 -1
  195. package/dist/network/RequestThumbprint.d.ts +16 -16
  196. package/dist/network/ThrottlingUtils.d.ts +42 -42
  197. package/dist/network/ThrottlingUtils.mjs +95 -95
  198. package/dist/network/ThrottlingUtils.mjs.map +1 -1
  199. package/dist/packageMetadata.d.ts +2 -2
  200. package/dist/packageMetadata.mjs +4 -4
  201. package/dist/packageMetadata.mjs.map +1 -1
  202. package/dist/request/AuthenticationHeaderParser.d.ts +19 -19
  203. package/dist/request/AuthenticationHeaderParser.d.ts.map +1 -1
  204. package/dist/request/AuthenticationHeaderParser.mjs +58 -57
  205. package/dist/request/AuthenticationHeaderParser.mjs.map +1 -1
  206. package/dist/request/BaseAuthRequest.d.ts +40 -40
  207. package/dist/request/CommonAuthorizationCodeRequest.d.ts +27 -27
  208. package/dist/request/CommonAuthorizationUrlRequest.d.ts +50 -50
  209. package/dist/request/CommonClientCredentialRequest.d.ts +17 -17
  210. package/dist/request/CommonDeviceCodeRequest.d.ts +21 -21
  211. package/dist/request/CommonEndSessionRequest.d.ts +21 -21
  212. package/dist/request/CommonOnBehalfOfRequest.d.ts +13 -13
  213. package/dist/request/CommonRefreshTokenRequest.d.ts +19 -19
  214. package/dist/request/CommonSilentFlowRequest.d.ts +18 -18
  215. package/dist/request/CommonUsernamePasswordRequest.d.ts +17 -17
  216. package/dist/request/NativeRequest.d.ts +19 -19
  217. package/dist/request/NativeSignOutRequest.d.ts +5 -5
  218. package/dist/request/RequestParameterBuilder.d.ts +217 -217
  219. package/dist/request/RequestParameterBuilder.d.ts.map +1 -1
  220. package/dist/request/RequestParameterBuilder.mjs +383 -383
  221. package/dist/request/RequestParameterBuilder.mjs.map +1 -1
  222. package/dist/request/RequestValidator.d.ts +33 -33
  223. package/dist/request/RequestValidator.d.ts.map +1 -1
  224. package/dist/request/RequestValidator.mjs +83 -84
  225. package/dist/request/RequestValidator.mjs.map +1 -1
  226. package/dist/request/ScopeSet.d.ts +88 -88
  227. package/dist/request/ScopeSet.d.ts.map +1 -1
  228. package/dist/request/ScopeSet.mjs +201 -199
  229. package/dist/request/ScopeSet.mjs.map +1 -1
  230. package/dist/request/StoreInCache.d.ts +8 -8
  231. package/dist/response/AuthenticationResult.d.ts +41 -39
  232. package/dist/response/AuthenticationResult.d.ts.map +1 -1
  233. package/dist/response/AuthorizationCodePayload.d.ts +13 -13
  234. package/dist/response/DeviceCodeResponse.d.ts +25 -25
  235. package/dist/response/ExternalTokenResponse.d.ts +15 -15
  236. package/dist/response/IMDSBadResponse.d.ts +4 -4
  237. package/dist/response/ResponseHandler.d.ts +67 -66
  238. package/dist/response/ResponseHandler.d.ts.map +1 -1
  239. package/dist/response/ResponseHandler.mjs +316 -297
  240. package/dist/response/ResponseHandler.mjs.map +1 -1
  241. package/dist/response/ServerAuthorizationCodeResponse.d.ts +25 -25
  242. package/dist/response/ServerAuthorizationTokenResponse.d.ts +46 -44
  243. package/dist/response/ServerAuthorizationTokenResponse.d.ts.map +1 -1
  244. package/dist/telemetry/performance/IPerformanceClient.d.ts +51 -51
  245. package/dist/telemetry/performance/IPerformanceClient.d.ts.map +1 -1
  246. package/dist/telemetry/performance/IPerformanceMeasurement.d.ts +5 -5
  247. package/dist/telemetry/performance/PerformanceClient.d.ts +191 -191
  248. package/dist/telemetry/performance/PerformanceClient.d.ts.map +1 -1
  249. package/dist/telemetry/performance/PerformanceClient.mjs +409 -408
  250. package/dist/telemetry/performance/PerformanceClient.mjs.map +1 -1
  251. package/dist/telemetry/performance/PerformanceEvent.d.ts +433 -426
  252. package/dist/telemetry/performance/PerformanceEvent.d.ts.map +1 -1
  253. package/dist/telemetry/performance/PerformanceEvent.mjs +234 -226
  254. package/dist/telemetry/performance/PerformanceEvent.mjs.map +1 -1
  255. package/dist/telemetry/performance/StubPerformanceClient.d.ts +24 -24
  256. package/dist/telemetry/performance/StubPerformanceClient.d.ts.map +1 -1
  257. package/dist/telemetry/performance/StubPerformanceClient.mjs +77 -57
  258. package/dist/telemetry/performance/StubPerformanceClient.mjs.map +1 -1
  259. package/dist/telemetry/server/ServerTelemetryManager.d.ts +66 -66
  260. package/dist/telemetry/server/ServerTelemetryManager.d.ts.map +1 -1
  261. package/dist/telemetry/server/ServerTelemetryManager.mjs +197 -198
  262. package/dist/telemetry/server/ServerTelemetryManager.mjs.map +1 -1
  263. package/dist/telemetry/server/ServerTelemetryRequest.d.ts +8 -8
  264. package/dist/url/IUri.d.ts +12 -12
  265. package/dist/url/UrlString.d.ts +83 -83
  266. package/dist/url/UrlString.d.ts.map +1 -1
  267. package/dist/url/UrlString.mjs +283 -283
  268. package/dist/url/UrlString.mjs.map +1 -1
  269. package/dist/utils/Constants.d.ts +366 -353
  270. package/dist/utils/Constants.d.ts.map +1 -1
  271. package/dist/utils/Constants.mjs +377 -360
  272. package/dist/utils/Constants.mjs.map +1 -1
  273. package/dist/utils/FunctionWrappers.d.ts +28 -0
  274. package/dist/utils/FunctionWrappers.d.ts.map +1 -0
  275. package/dist/utils/FunctionWrappers.mjs +90 -0
  276. package/dist/utils/FunctionWrappers.mjs.map +1 -0
  277. package/dist/utils/MsalTypes.d.ts +6 -6
  278. package/dist/utils/ProtocolUtils.d.ts +42 -42
  279. package/dist/utils/ProtocolUtils.d.ts.map +1 -1
  280. package/dist/utils/ProtocolUtils.mjs +71 -73
  281. package/dist/utils/ProtocolUtils.mjs.map +1 -1
  282. package/dist/utils/StringUtils.d.ts +40 -53
  283. package/dist/utils/StringUtils.d.ts.map +1 -1
  284. package/dist/utils/StringUtils.mjs +95 -126
  285. package/dist/utils/StringUtils.mjs.map +1 -1
  286. package/dist/utils/TimeUtils.d.ts +27 -27
  287. package/dist/utils/TimeUtils.mjs +45 -45
  288. package/dist/utils/TimeUtils.mjs.map +1 -1
  289. package/package.json +6 -4
  290. package/src/account/AccountInfo.ts +44 -0
  291. package/src/account/AuthToken.ts +71 -0
  292. package/src/account/CcsCredential.ts +16 -0
  293. package/src/account/ClientCredentials.ts +20 -0
  294. package/src/account/ClientInfo.ts +67 -0
  295. package/src/account/TokenClaims.ts +70 -0
  296. package/src/authority/Authority.ts +1207 -0
  297. package/src/authority/AuthorityFactory.ts +118 -0
  298. package/src/authority/AuthorityMetadata.ts +953 -0
  299. package/src/authority/AuthorityOptions.ts +40 -0
  300. package/src/authority/AuthorityType.ts +15 -0
  301. package/src/authority/AzureRegion.ts +7 -0
  302. package/src/authority/AzureRegionConfiguration.ts +16 -0
  303. package/src/authority/CloudDiscoveryMetadata.ts +10 -0
  304. package/src/authority/CloudInstanceDiscoveryErrorResponse.ts +26 -0
  305. package/src/authority/CloudInstanceDiscoveryResponse.ts +21 -0
  306. package/src/authority/ImdsOptions.ts +10 -0
  307. package/src/authority/OIDCOptions.ts +14 -0
  308. package/src/authority/OpenIdConfigResponse.ts +24 -0
  309. package/src/authority/ProtocolMode.ts +13 -0
  310. package/src/authority/RegionDiscovery.ts +196 -0
  311. package/src/authority/RegionDiscoveryMetadata.ts +15 -0
  312. package/src/broker/nativeBroker/INativeBrokerPlugin.ts +29 -0
  313. package/src/cache/CacheManager.ts +1579 -0
  314. package/src/cache/entities/AccessTokenEntity.ts +167 -0
  315. package/src/cache/entities/AccountEntity.ts +314 -0
  316. package/src/cache/entities/AppMetadataEntity.ts +91 -0
  317. package/src/cache/entities/AuthorityMetadataEntity.ts +112 -0
  318. package/src/cache/entities/CacheRecord.ts +33 -0
  319. package/src/cache/entities/CredentialEntity.ts +220 -0
  320. package/src/cache/entities/IdTokenEntity.ts +74 -0
  321. package/src/cache/entities/RefreshTokenEntity.ts +78 -0
  322. package/src/cache/entities/ServerTelemetryEntity.ts +38 -0
  323. package/src/cache/entities/ThrottlingEntity.ts +36 -0
  324. package/src/cache/interface/ICacheManager.ts +218 -0
  325. package/src/cache/interface/ICachePlugin.ts +11 -0
  326. package/src/cache/interface/ISerializableTokenCache.ts +9 -0
  327. package/src/cache/persistence/TokenCacheContext.ts +39 -0
  328. package/src/cache/utils/CacheTypes.ts +93 -0
  329. package/src/client/AuthorizationCodeClient.ts +736 -0
  330. package/src/client/BaseClient.ts +208 -0
  331. package/src/client/RefreshTokenClient.ts +399 -0
  332. package/src/client/SilentFlowClient.ts +239 -0
  333. package/src/config/AppTokenProvider.ts +47 -0
  334. package/src/config/ClientConfiguration.ts +286 -0
  335. package/src/crypto/ICrypto.ts +112 -0
  336. package/src/crypto/IGuidGenerator.ts +9 -0
  337. package/src/crypto/JoseHeader.ts +58 -0
  338. package/src/crypto/PopTokenGenerator.ts +160 -0
  339. package/src/crypto/SignedHttpRequest.ts +16 -0
  340. package/src/error/AuthError.ts +83 -0
  341. package/src/error/AuthErrorCodes.ts +10 -0
  342. package/src/error/ClientAuthError.ts +333 -0
  343. package/src/error/ClientAuthErrorCodes.ts +51 -0
  344. package/src/error/ClientConfigurationError.ts +210 -0
  345. package/src/error/ClientConfigurationErrorCodes.ts +28 -0
  346. package/src/error/InteractionRequiredAuthError.ts +139 -0
  347. package/src/error/InteractionRequiredAuthErrorCodes.ts +13 -0
  348. package/src/error/JoseHeaderError.ts +32 -0
  349. package/src/error/JoseHeaderErrorCodes.ts +7 -0
  350. package/src/error/ServerError.ts +18 -0
  351. package/src/index.ts +226 -0
  352. package/src/logger/Logger.ts +272 -0
  353. package/src/network/INetworkModule.ts +60 -0
  354. package/src/network/NetworkManager.ts +76 -0
  355. package/src/network/RequestThumbprint.ts +22 -0
  356. package/src/network/ThrottlingUtils.ts +156 -0
  357. package/src/packageMetadata.ts +3 -0
  358. package/src/request/AuthenticationHeaderParser.ts +92 -0
  359. package/src/request/BaseAuthRequest.ts +46 -0
  360. package/src/request/CommonAuthorizationCodeRequest.ts +33 -0
  361. package/src/request/CommonAuthorizationUrlRequest.ts +56 -0
  362. package/src/request/CommonClientCredentialRequest.ts +23 -0
  363. package/src/request/CommonDeviceCodeRequest.ts +31 -0
  364. package/src/request/CommonEndSessionRequest.ts +27 -0
  365. package/src/request/CommonOnBehalfOfRequest.ts +19 -0
  366. package/src/request/CommonRefreshTokenRequest.ts +25 -0
  367. package/src/request/CommonSilentFlowRequest.ts +24 -0
  368. package/src/request/CommonUsernamePasswordRequest.ts +23 -0
  369. package/src/request/NativeRequest.ts +25 -0
  370. package/src/request/NativeSignOutRequest.ts +10 -0
  371. package/src/request/RequestParameterBuilder.ts +613 -0
  372. package/src/request/RequestValidator.ts +116 -0
  373. package/src/request/ScopeSet.ts +246 -0
  374. package/src/request/StoreInCache.ts +16 -0
  375. package/src/response/AuthenticationResult.ts +47 -0
  376. package/src/response/AuthorizationCodePayload.ts +18 -0
  377. package/src/response/DeviceCodeResponse.ts +31 -0
  378. package/src/response/ExternalTokenResponse.ts +24 -0
  379. package/src/response/IMDSBadResponse.ts +9 -0
  380. package/src/response/ResponseHandler.ts +634 -0
  381. package/src/response/ServerAuthorizationCodeResponse.ts +33 -0
  382. package/src/response/ServerAuthorizationTokenResponse.ts +54 -0
  383. package/src/telemetry/performance/IPerformanceClient.ts +71 -0
  384. package/src/telemetry/performance/IPerformanceMeasurement.ts +10 -0
  385. package/src/telemetry/performance/PerformanceClient.ts +636 -0
  386. package/src/telemetry/performance/PerformanceEvent.ts +542 -0
  387. package/src/telemetry/performance/StubPerformanceClient.ts +101 -0
  388. package/src/telemetry/server/ServerTelemetryManager.ts +274 -0
  389. package/src/telemetry/server/ServerTelemetryRequest.ts +13 -0
  390. package/src/url/IUri.ts +17 -0
  391. package/src/url/UrlString.ts +373 -0
  392. package/src/utils/Constants.ts +444 -0
  393. package/src/utils/FunctionWrappers.ts +105 -0
  394. package/src/utils/MsalTypes.ts +9 -0
  395. package/src/utils/ProtocolUtils.ts +120 -0
  396. package/src/utils/StringUtils.ts +106 -0
  397. package/src/utils/TimeUtils.ts +51 -0
  398. package/dist/account/DecodedAuthToken.d.ts +0 -9
  399. package/dist/account/DecodedAuthToken.d.ts.map +0 -1
@@ -0,0 +1,736 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { BaseClient } from "./BaseClient";
7
+ import { CommonAuthorizationUrlRequest } from "../request/CommonAuthorizationUrlRequest";
8
+ import { CommonAuthorizationCodeRequest } from "../request/CommonAuthorizationCodeRequest";
9
+ import { Authority } from "../authority/Authority";
10
+ import { RequestParameterBuilder } from "../request/RequestParameterBuilder";
11
+ import {
12
+ GrantType,
13
+ AuthenticationScheme,
14
+ PromptValue,
15
+ Separators,
16
+ AADServerParamKeys,
17
+ HeaderNames,
18
+ } from "../utils/Constants";
19
+ import {
20
+ ClientConfiguration,
21
+ isOidcProtocolMode,
22
+ } from "../config/ClientConfiguration";
23
+ import { ServerAuthorizationTokenResponse } from "../response/ServerAuthorizationTokenResponse";
24
+ import { NetworkResponse } from "../network/NetworkManager";
25
+ import { ResponseHandler } from "../response/ResponseHandler";
26
+ import { AuthenticationResult } from "../response/AuthenticationResult";
27
+ import { StringUtils } from "../utils/StringUtils";
28
+ import {
29
+ ClientAuthErrorCodes,
30
+ createClientAuthError,
31
+ } from "../error/ClientAuthError";
32
+ import { UrlString } from "../url/UrlString";
33
+ import { ServerAuthorizationCodeResponse } from "../response/ServerAuthorizationCodeResponse";
34
+ import { CommonEndSessionRequest } from "../request/CommonEndSessionRequest";
35
+ import { PopTokenGenerator } from "../crypto/PopTokenGenerator";
36
+ import { RequestThumbprint } from "../network/RequestThumbprint";
37
+ import { AuthorizationCodePayload } from "../response/AuthorizationCodePayload";
38
+ import { TimeUtils } from "../utils/TimeUtils";
39
+ import { AccountInfo } from "../account/AccountInfo";
40
+ import {
41
+ buildClientInfoFromHomeAccountId,
42
+ buildClientInfo,
43
+ } from "../account/ClientInfo";
44
+ import { CcsCredentialType, CcsCredential } from "../account/CcsCredential";
45
+ import {
46
+ createClientConfigurationError,
47
+ ClientConfigurationErrorCodes,
48
+ } from "../error/ClientConfigurationError";
49
+ import { RequestValidator } from "../request/RequestValidator";
50
+ import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
51
+ import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
52
+ import { invokeAsync } from "../utils/FunctionWrappers";
53
+
54
+ /**
55
+ * Oauth2.0 Authorization Code client
56
+ * @internal
57
+ */
58
+ export class AuthorizationCodeClient extends BaseClient {
59
+ // Flag to indicate if client is for hybrid spa auth code redemption
60
+ protected includeRedirectUri: boolean = true;
61
+ private oidcDefaultScopes;
62
+
63
+ constructor(
64
+ configuration: ClientConfiguration,
65
+ performanceClient?: IPerformanceClient
66
+ ) {
67
+ super(configuration, performanceClient);
68
+ this.oidcDefaultScopes =
69
+ this.config.authOptions.authority.options.OIDCOptions?.defaultScopes;
70
+ }
71
+
72
+ /**
73
+ * Creates the URL of the authorization request letting the user input credentials and consent to the
74
+ * application. The URL target the /authorize endpoint of the authority configured in the
75
+ * application object.
76
+ *
77
+ * Once the user inputs their credentials and consents, the authority will send a response to the redirect URI
78
+ * sent in the request and should contain an authorization code, which can then be used to acquire tokens via
79
+ * acquireToken(AuthorizationCodeRequest)
80
+ * @param request
81
+ */
82
+ async getAuthCodeUrl(
83
+ request: CommonAuthorizationUrlRequest
84
+ ): Promise<string> {
85
+ this.performanceClient?.addQueueMeasurement(
86
+ PerformanceEvents.GetAuthCodeUrl,
87
+ request.correlationId
88
+ );
89
+
90
+ const queryString = await invokeAsync(
91
+ this.createAuthCodeUrlQueryString.bind(this),
92
+ PerformanceEvents.AuthClientCreateQueryString,
93
+ this.logger,
94
+ this.performanceClient,
95
+ request.correlationId
96
+ )(request);
97
+
98
+ return UrlString.appendQueryString(
99
+ this.authority.authorizationEndpoint,
100
+ queryString
101
+ );
102
+ }
103
+
104
+ /**
105
+ * API to acquire a token in exchange of 'authorization_code` acquired by the user in the first leg of the
106
+ * authorization_code_grant
107
+ * @param request
108
+ */
109
+ async acquireToken(
110
+ request: CommonAuthorizationCodeRequest,
111
+ authCodePayload?: AuthorizationCodePayload
112
+ ): Promise<AuthenticationResult> {
113
+ this.performanceClient?.addQueueMeasurement(
114
+ PerformanceEvents.AuthClientAcquireToken,
115
+ request.correlationId
116
+ );
117
+
118
+ if (!request.code) {
119
+ throw createClientAuthError(
120
+ ClientAuthErrorCodes.requestCannotBeMade
121
+ );
122
+ }
123
+
124
+ const reqTimestamp = TimeUtils.nowSeconds();
125
+ const response = await invokeAsync(
126
+ this.executeTokenRequest.bind(this),
127
+ PerformanceEvents.AuthClientExecuteTokenRequest,
128
+ this.logger,
129
+ this.performanceClient,
130
+ request.correlationId
131
+ )(this.authority, request);
132
+
133
+ // Retrieve requestId from response headers
134
+ const requestId = response.headers?.[HeaderNames.X_MS_REQUEST_ID];
135
+
136
+ const responseHandler = new ResponseHandler(
137
+ this.config.authOptions.clientId,
138
+ this.cacheManager,
139
+ this.cryptoUtils,
140
+ this.logger,
141
+ this.config.serializableCache,
142
+ this.config.persistencePlugin,
143
+ this.performanceClient
144
+ );
145
+
146
+ // Validate response. This function throws a server error if an error is returned by the server.
147
+ responseHandler.validateTokenResponse(response.body);
148
+
149
+ return invokeAsync(
150
+ responseHandler.handleServerTokenResponse.bind(responseHandler),
151
+ PerformanceEvents.HandleServerTokenResponse,
152
+ this.logger,
153
+ this.performanceClient,
154
+ request.correlationId
155
+ )(
156
+ response.body,
157
+ this.authority,
158
+ reqTimestamp,
159
+ request,
160
+ authCodePayload,
161
+ undefined,
162
+ undefined,
163
+ undefined,
164
+ requestId
165
+ );
166
+ }
167
+
168
+ /**
169
+ * Handles the hash fragment response from public client code request. Returns a code response used by
170
+ * the client to exchange for a token in acquireToken.
171
+ * @param hashFragment
172
+ */
173
+ handleFragmentResponse(
174
+ hashFragment: string,
175
+ cachedState: string
176
+ ): AuthorizationCodePayload {
177
+ // Handle responses.
178
+ const responseHandler = new ResponseHandler(
179
+ this.config.authOptions.clientId,
180
+ this.cacheManager,
181
+ this.cryptoUtils,
182
+ this.logger,
183
+ null,
184
+ null
185
+ );
186
+
187
+ const serverParams: ServerAuthorizationCodeResponse =
188
+ UrlString.getDeserializedCodeResponse(
189
+ this.config.authOptions.authority.options.OIDCOptions
190
+ ?.serverResponseType,
191
+ hashFragment
192
+ );
193
+
194
+ // Get code response
195
+ responseHandler.validateServerAuthorizationCodeResponse(
196
+ serverParams,
197
+ cachedState,
198
+ this.cryptoUtils
199
+ );
200
+
201
+ // throw when there is no auth code in the response
202
+ if (!serverParams.code) {
203
+ throw createClientAuthError(
204
+ ClientAuthErrorCodes.authorizationCodeMissingFromServerResponse
205
+ );
206
+ }
207
+ return {
208
+ ...serverParams,
209
+ // Code param is optional in ServerAuthorizationCodeResponse but required in AuthorizationCodePaylod
210
+ code: serverParams.code,
211
+ };
212
+ }
213
+
214
+ /**
215
+ * Used to log out the current user, and redirect the user to the postLogoutRedirectUri.
216
+ * Default behaviour is to redirect the user to `window.location.href`.
217
+ * @param authorityUri
218
+ */
219
+ getLogoutUri(logoutRequest: CommonEndSessionRequest): string {
220
+ // Throw error if logoutRequest is null/undefined
221
+ if (!logoutRequest) {
222
+ throw createClientConfigurationError(
223
+ ClientConfigurationErrorCodes.logoutRequestEmpty
224
+ );
225
+ }
226
+ const queryString = this.createLogoutUrlQueryString(logoutRequest);
227
+
228
+ // Construct logout URI
229
+ return UrlString.appendQueryString(
230
+ this.authority.endSessionEndpoint,
231
+ queryString
232
+ );
233
+ }
234
+
235
+ /**
236
+ * Executes POST request to token endpoint
237
+ * @param authority
238
+ * @param request
239
+ */
240
+ private async executeTokenRequest(
241
+ authority: Authority,
242
+ request: CommonAuthorizationCodeRequest
243
+ ): Promise<NetworkResponse<ServerAuthorizationTokenResponse>> {
244
+ this.performanceClient?.addQueueMeasurement(
245
+ PerformanceEvents.AuthClientExecuteTokenRequest,
246
+ request.correlationId
247
+ );
248
+
249
+ const queryParametersString = this.createTokenQueryParameters(request);
250
+ const endpoint = UrlString.appendQueryString(
251
+ authority.tokenEndpoint,
252
+ queryParametersString
253
+ );
254
+
255
+ const requestBody = await invokeAsync(
256
+ this.createTokenRequestBody.bind(this),
257
+ PerformanceEvents.AuthClientCreateTokenRequestBody,
258
+ this.logger,
259
+ this.performanceClient,
260
+ request.correlationId
261
+ )(request);
262
+
263
+ let ccsCredential: CcsCredential | undefined = undefined;
264
+ if (request.clientInfo) {
265
+ try {
266
+ const clientInfo = buildClientInfo(
267
+ request.clientInfo,
268
+ this.cryptoUtils
269
+ );
270
+ ccsCredential = {
271
+ credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,
272
+ type: CcsCredentialType.HOME_ACCOUNT_ID,
273
+ };
274
+ } catch (e) {
275
+ this.logger.verbose(
276
+ "Could not parse client info for CCS Header: " + e
277
+ );
278
+ }
279
+ }
280
+ const headers: Record<string, string> = this.createTokenRequestHeaders(
281
+ ccsCredential || request.ccsCredential
282
+ );
283
+
284
+ const thumbprint: RequestThumbprint = {
285
+ clientId: this.config.authOptions.clientId,
286
+ authority: authority.canonicalAuthority,
287
+ scopes: request.scopes,
288
+ claims: request.claims,
289
+ authenticationScheme: request.authenticationScheme,
290
+ resourceRequestMethod: request.resourceRequestMethod,
291
+ resourceRequestUri: request.resourceRequestUri,
292
+ shrClaims: request.shrClaims,
293
+ sshKid: request.sshKid,
294
+ };
295
+
296
+ return invokeAsync(
297
+ this.executePostToTokenEndpoint.bind(this),
298
+ PerformanceEvents.BaseClientExecutePostToTokenEndpoint,
299
+ this.logger,
300
+ this.performanceClient,
301
+ request.correlationId
302
+ )(endpoint, requestBody, headers, thumbprint, request.correlationId);
303
+ }
304
+
305
+ /**
306
+ * Generates a map for all the params to be sent to the service
307
+ * @param request
308
+ */
309
+ private async createTokenRequestBody(
310
+ request: CommonAuthorizationCodeRequest
311
+ ): Promise<string> {
312
+ this.performanceClient?.addQueueMeasurement(
313
+ PerformanceEvents.AuthClientCreateTokenRequestBody,
314
+ request.correlationId
315
+ );
316
+
317
+ const parameterBuilder = new RequestParameterBuilder();
318
+
319
+ parameterBuilder.addClientId(
320
+ request.tokenBodyParameters?.[AADServerParamKeys.CLIENT_ID] ||
321
+ this.config.authOptions.clientId
322
+ );
323
+
324
+ /*
325
+ * For hybrid spa flow, there will be a code but no verifier
326
+ * In this scenario, don't include redirect uri as auth code will not be bound to redirect URI
327
+ */
328
+ if (!this.includeRedirectUri) {
329
+ // Just validate
330
+ RequestValidator.validateRedirectUri(request.redirectUri);
331
+ } else {
332
+ // Validate and include redirect uri
333
+ parameterBuilder.addRedirectUri(request.redirectUri);
334
+ }
335
+
336
+ // Add scope array, parameter builder will add default scopes and dedupe
337
+ parameterBuilder.addScopes(
338
+ request.scopes,
339
+ true,
340
+ this.oidcDefaultScopes
341
+ );
342
+
343
+ // add code: user set, not validated
344
+ parameterBuilder.addAuthorizationCode(request.code);
345
+
346
+ // Add library metadata
347
+ parameterBuilder.addLibraryInfo(this.config.libraryInfo);
348
+ parameterBuilder.addApplicationTelemetry(
349
+ this.config.telemetry.application
350
+ );
351
+ parameterBuilder.addThrottling();
352
+
353
+ if (this.serverTelemetryManager && !isOidcProtocolMode(this.config)) {
354
+ parameterBuilder.addServerTelemetry(this.serverTelemetryManager);
355
+ }
356
+
357
+ // add code_verifier if passed
358
+ if (request.codeVerifier) {
359
+ parameterBuilder.addCodeVerifier(request.codeVerifier);
360
+ }
361
+
362
+ if (this.config.clientCredentials.clientSecret) {
363
+ parameterBuilder.addClientSecret(
364
+ this.config.clientCredentials.clientSecret
365
+ );
366
+ }
367
+
368
+ if (this.config.clientCredentials.clientAssertion) {
369
+ const clientAssertion =
370
+ this.config.clientCredentials.clientAssertion;
371
+ parameterBuilder.addClientAssertion(clientAssertion.assertion);
372
+ parameterBuilder.addClientAssertionType(
373
+ clientAssertion.assertionType
374
+ );
375
+ }
376
+
377
+ parameterBuilder.addGrantType(GrantType.AUTHORIZATION_CODE_GRANT);
378
+ parameterBuilder.addClientInfo();
379
+
380
+ if (request.authenticationScheme === AuthenticationScheme.POP) {
381
+ const popTokenGenerator = new PopTokenGenerator(
382
+ this.cryptoUtils,
383
+ this.performanceClient
384
+ );
385
+
386
+ const reqCnfData = await invokeAsync(
387
+ popTokenGenerator.generateCnf.bind(popTokenGenerator),
388
+ PerformanceEvents.PopTokenGenerateCnf,
389
+ this.logger,
390
+ this.performanceClient,
391
+ request.correlationId
392
+ )(request, this.logger);
393
+ // SPA PoP requires full Base64Url encoded req_cnf string (unhashed)
394
+ parameterBuilder.addPopToken(reqCnfData.reqCnfString);
395
+ } else if (request.authenticationScheme === AuthenticationScheme.SSH) {
396
+ if (request.sshJwk) {
397
+ parameterBuilder.addSshJwk(request.sshJwk);
398
+ } else {
399
+ throw createClientConfigurationError(
400
+ ClientConfigurationErrorCodes.missingSshJwk
401
+ );
402
+ }
403
+ }
404
+
405
+ const correlationId =
406
+ request.correlationId ||
407
+ this.config.cryptoInterface.createNewGuid();
408
+ parameterBuilder.addCorrelationId(correlationId);
409
+
410
+ if (
411
+ !StringUtils.isEmptyObj(request.claims) ||
412
+ (this.config.authOptions.clientCapabilities &&
413
+ this.config.authOptions.clientCapabilities.length > 0)
414
+ ) {
415
+ parameterBuilder.addClaims(
416
+ request.claims,
417
+ this.config.authOptions.clientCapabilities
418
+ );
419
+ }
420
+
421
+ let ccsCred: CcsCredential | undefined = undefined;
422
+ if (request.clientInfo) {
423
+ try {
424
+ const clientInfo = buildClientInfo(
425
+ request.clientInfo,
426
+ this.cryptoUtils
427
+ );
428
+ ccsCred = {
429
+ credential: `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`,
430
+ type: CcsCredentialType.HOME_ACCOUNT_ID,
431
+ };
432
+ } catch (e) {
433
+ this.logger.verbose(
434
+ "Could not parse client info for CCS Header: " + e
435
+ );
436
+ }
437
+ } else {
438
+ ccsCred = request.ccsCredential;
439
+ }
440
+
441
+ // Adds these as parameters in the request instead of headers to prevent CORS preflight request
442
+ if (this.config.systemOptions.preventCorsPreflight && ccsCred) {
443
+ switch (ccsCred.type) {
444
+ case CcsCredentialType.HOME_ACCOUNT_ID:
445
+ try {
446
+ const clientInfo = buildClientInfoFromHomeAccountId(
447
+ ccsCred.credential
448
+ );
449
+ parameterBuilder.addCcsOid(clientInfo);
450
+ } catch (e) {
451
+ this.logger.verbose(
452
+ "Could not parse home account ID for CCS Header: " +
453
+ e
454
+ );
455
+ }
456
+ break;
457
+ case CcsCredentialType.UPN:
458
+ parameterBuilder.addCcsUpn(ccsCred.credential);
459
+ break;
460
+ }
461
+ }
462
+
463
+ if (request.tokenBodyParameters) {
464
+ parameterBuilder.addExtraQueryParameters(
465
+ request.tokenBodyParameters
466
+ );
467
+ }
468
+
469
+ // Add hybrid spa parameters if not already provided
470
+ if (
471
+ request.enableSpaAuthorizationCode &&
472
+ (!request.tokenBodyParameters ||
473
+ !request.tokenBodyParameters[
474
+ AADServerParamKeys.RETURN_SPA_CODE
475
+ ])
476
+ ) {
477
+ parameterBuilder.addExtraQueryParameters({
478
+ [AADServerParamKeys.RETURN_SPA_CODE]: "1",
479
+ });
480
+ }
481
+
482
+ return parameterBuilder.createQueryString();
483
+ }
484
+
485
+ /**
486
+ * This API validates the `AuthorizationCodeUrlRequest` and creates a URL
487
+ * @param request
488
+ */
489
+ private async createAuthCodeUrlQueryString(
490
+ request: CommonAuthorizationUrlRequest
491
+ ): Promise<string> {
492
+ this.performanceClient?.addQueueMeasurement(
493
+ PerformanceEvents.AuthClientCreateQueryString,
494
+ request.correlationId
495
+ );
496
+
497
+ const parameterBuilder = new RequestParameterBuilder();
498
+
499
+ parameterBuilder.addClientId(
500
+ request.extraQueryParameters?.[AADServerParamKeys.CLIENT_ID] ||
501
+ this.config.authOptions.clientId
502
+ );
503
+
504
+ const requestScopes = [
505
+ ...(request.scopes || []),
506
+ ...(request.extraScopesToConsent || []),
507
+ ];
508
+ parameterBuilder.addScopes(requestScopes, true, this.oidcDefaultScopes);
509
+
510
+ // validate the redirectUri (to be a non null value)
511
+ parameterBuilder.addRedirectUri(request.redirectUri);
512
+
513
+ // generate the correlationId if not set by the user and add
514
+ const correlationId =
515
+ request.correlationId ||
516
+ this.config.cryptoInterface.createNewGuid();
517
+ parameterBuilder.addCorrelationId(correlationId);
518
+
519
+ // add response_mode. If not passed in it defaults to query.
520
+ parameterBuilder.addResponseMode(request.responseMode);
521
+
522
+ // add response_type = code
523
+ parameterBuilder.addResponseTypeCode();
524
+
525
+ // add library info parameters
526
+ parameterBuilder.addLibraryInfo(this.config.libraryInfo);
527
+ if (!isOidcProtocolMode(this.config)) {
528
+ parameterBuilder.addApplicationTelemetry(
529
+ this.config.telemetry.application
530
+ );
531
+ }
532
+
533
+ // add client_info=1
534
+ parameterBuilder.addClientInfo();
535
+
536
+ if (request.codeChallenge && request.codeChallengeMethod) {
537
+ parameterBuilder.addCodeChallengeParams(
538
+ request.codeChallenge,
539
+ request.codeChallengeMethod
540
+ );
541
+ }
542
+
543
+ if (request.prompt) {
544
+ parameterBuilder.addPrompt(request.prompt);
545
+ }
546
+
547
+ if (request.domainHint) {
548
+ parameterBuilder.addDomainHint(request.domainHint);
549
+ }
550
+
551
+ // Add sid or loginHint with preference for login_hint claim (in request) -> sid -> loginHint (upn/email) -> username of AccountInfo object
552
+ if (request.prompt !== PromptValue.SELECT_ACCOUNT) {
553
+ // AAD will throw if prompt=select_account is passed with an account hint
554
+ if (request.sid && request.prompt === PromptValue.NONE) {
555
+ // SessionID is only used in silent calls
556
+ this.logger.verbose(
557
+ "createAuthCodeUrlQueryString: Prompt is none, adding sid from request"
558
+ );
559
+ parameterBuilder.addSid(request.sid);
560
+ } else if (request.account) {
561
+ const accountSid = this.extractAccountSid(request.account);
562
+ const accountLoginHintClaim = this.extractLoginHint(
563
+ request.account
564
+ );
565
+ // If login_hint claim is present, use it over sid/username
566
+ if (accountLoginHintClaim) {
567
+ this.logger.verbose(
568
+ "createAuthCodeUrlQueryString: login_hint claim present on account"
569
+ );
570
+ parameterBuilder.addLoginHint(accountLoginHintClaim);
571
+ try {
572
+ const clientInfo = buildClientInfoFromHomeAccountId(
573
+ request.account.homeAccountId
574
+ );
575
+ parameterBuilder.addCcsOid(clientInfo);
576
+ } catch (e) {
577
+ this.logger.verbose(
578
+ "createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"
579
+ );
580
+ }
581
+ } else if (accountSid && request.prompt === PromptValue.NONE) {
582
+ /*
583
+ * If account and loginHint are provided, we will check account first for sid before adding loginHint
584
+ * SessionId is only used in silent calls
585
+ */
586
+ this.logger.verbose(
587
+ "createAuthCodeUrlQueryString: Prompt is none, adding sid from account"
588
+ );
589
+ parameterBuilder.addSid(accountSid);
590
+ try {
591
+ const clientInfo = buildClientInfoFromHomeAccountId(
592
+ request.account.homeAccountId
593
+ );
594
+ parameterBuilder.addCcsOid(clientInfo);
595
+ } catch (e) {
596
+ this.logger.verbose(
597
+ "createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"
598
+ );
599
+ }
600
+ } else if (request.loginHint) {
601
+ this.logger.verbose(
602
+ "createAuthCodeUrlQueryString: Adding login_hint from request"
603
+ );
604
+ parameterBuilder.addLoginHint(request.loginHint);
605
+ parameterBuilder.addCcsUpn(request.loginHint);
606
+ } else if (request.account.username) {
607
+ // Fallback to account username if provided
608
+ this.logger.verbose(
609
+ "createAuthCodeUrlQueryString: Adding login_hint from account"
610
+ );
611
+ parameterBuilder.addLoginHint(request.account.username);
612
+ try {
613
+ const clientInfo = buildClientInfoFromHomeAccountId(
614
+ request.account.homeAccountId
615
+ );
616
+ parameterBuilder.addCcsOid(clientInfo);
617
+ } catch (e) {
618
+ this.logger.verbose(
619
+ "createAuthCodeUrlQueryString: Could not parse home account ID for CCS Header"
620
+ );
621
+ }
622
+ }
623
+ } else if (request.loginHint) {
624
+ this.logger.verbose(
625
+ "createAuthCodeUrlQueryString: No account, adding login_hint from request"
626
+ );
627
+ parameterBuilder.addLoginHint(request.loginHint);
628
+ parameterBuilder.addCcsUpn(request.loginHint);
629
+ }
630
+ } else {
631
+ this.logger.verbose(
632
+ "createAuthCodeUrlQueryString: Prompt is select_account, ignoring account hints"
633
+ );
634
+ }
635
+
636
+ if (request.nonce) {
637
+ parameterBuilder.addNonce(request.nonce);
638
+ }
639
+
640
+ if (request.state) {
641
+ parameterBuilder.addState(request.state);
642
+ }
643
+
644
+ if (
645
+ request.claims ||
646
+ (this.config.authOptions.clientCapabilities &&
647
+ this.config.authOptions.clientCapabilities.length > 0)
648
+ ) {
649
+ parameterBuilder.addClaims(
650
+ request.claims,
651
+ this.config.authOptions.clientCapabilities
652
+ );
653
+ }
654
+
655
+ if (request.extraQueryParameters) {
656
+ parameterBuilder.addExtraQueryParameters(
657
+ request.extraQueryParameters
658
+ );
659
+ }
660
+
661
+ if (request.nativeBroker) {
662
+ // signal ests that this is a WAM call
663
+ parameterBuilder.addNativeBroker();
664
+
665
+ // pass the req_cnf for POP
666
+ if (request.authenticationScheme === AuthenticationScheme.POP) {
667
+ const popTokenGenerator = new PopTokenGenerator(
668
+ this.cryptoUtils
669
+ );
670
+ // to reduce the URL length, it is recommended to send the hash of the req_cnf instead of the whole string
671
+ const reqCnfData = await invokeAsync(
672
+ popTokenGenerator.generateCnf.bind(popTokenGenerator),
673
+ PerformanceEvents.PopTokenGenerateCnf,
674
+ this.logger,
675
+ this.performanceClient,
676
+ request.correlationId
677
+ )(request, this.logger);
678
+ parameterBuilder.addPopToken(reqCnfData.reqCnfHash);
679
+ }
680
+ }
681
+
682
+ return parameterBuilder.createQueryString();
683
+ }
684
+
685
+ /**
686
+ * This API validates the `EndSessionRequest` and creates a URL
687
+ * @param request
688
+ */
689
+ private createLogoutUrlQueryString(
690
+ request: CommonEndSessionRequest
691
+ ): string {
692
+ const parameterBuilder = new RequestParameterBuilder();
693
+
694
+ if (request.postLogoutRedirectUri) {
695
+ parameterBuilder.addPostLogoutRedirectUri(
696
+ request.postLogoutRedirectUri
697
+ );
698
+ }
699
+
700
+ if (request.correlationId) {
701
+ parameterBuilder.addCorrelationId(request.correlationId);
702
+ }
703
+
704
+ if (request.idTokenHint) {
705
+ parameterBuilder.addIdTokenHint(request.idTokenHint);
706
+ }
707
+
708
+ if (request.state) {
709
+ parameterBuilder.addState(request.state);
710
+ }
711
+
712
+ if (request.logoutHint) {
713
+ parameterBuilder.addLogoutHint(request.logoutHint);
714
+ }
715
+
716
+ if (request.extraQueryParameters) {
717
+ parameterBuilder.addExtraQueryParameters(
718
+ request.extraQueryParameters
719
+ );
720
+ }
721
+
722
+ return parameterBuilder.createQueryString();
723
+ }
724
+
725
+ /**
726
+ * Helper to get sid from account. Returns null if idTokenClaims are not present or sid is not present.
727
+ * @param account
728
+ */
729
+ private extractAccountSid(account: AccountInfo): string | null {
730
+ return account.idTokenClaims?.sid || null;
731
+ }
732
+
733
+ private extractLoginHint(account: AccountInfo): string | null {
734
+ return account.idTokenClaims?.login_hint || null;
735
+ }
736
+ }