@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,634 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { ServerAuthorizationTokenResponse } from "./ServerAuthorizationTokenResponse";
7
+ import { buildClientInfo } from "../account/ClientInfo";
8
+ import { ICrypto } from "../crypto/ICrypto";
9
+ import {
10
+ ClientAuthErrorCodes,
11
+ createClientAuthError,
12
+ } from "../error/ClientAuthError";
13
+ import { ServerAuthorizationCodeResponse } from "./ServerAuthorizationCodeResponse";
14
+ import { Logger } from "../logger/Logger";
15
+ import { ServerError } from "../error/ServerError";
16
+ import { ScopeSet } from "../request/ScopeSet";
17
+ import { AuthenticationResult } from "./AuthenticationResult";
18
+ import { AccountEntity } from "../cache/entities/AccountEntity";
19
+ import { Authority } from "../authority/Authority";
20
+ import { IdTokenEntity } from "../cache/entities/IdTokenEntity";
21
+ import { AccessTokenEntity } from "../cache/entities/AccessTokenEntity";
22
+ import { RefreshTokenEntity } from "../cache/entities/RefreshTokenEntity";
23
+ import {
24
+ InteractionRequiredAuthError,
25
+ isInteractionRequiredError,
26
+ } from "../error/InteractionRequiredAuthError";
27
+ import { CacheRecord } from "../cache/entities/CacheRecord";
28
+ import { CacheManager } from "../cache/CacheManager";
29
+ import { ProtocolUtils, RequestStateObject } from "../utils/ProtocolUtils";
30
+ import {
31
+ AuthenticationScheme,
32
+ Constants,
33
+ THE_FAMILY_ID,
34
+ HttpStatus,
35
+ } from "../utils/Constants";
36
+ import { PopTokenGenerator } from "../crypto/PopTokenGenerator";
37
+ import { AppMetadataEntity } from "../cache/entities/AppMetadataEntity";
38
+ import { ICachePlugin } from "../cache/interface/ICachePlugin";
39
+ import { TokenCacheContext } from "../cache/persistence/TokenCacheContext";
40
+ import { ISerializableTokenCache } from "../cache/interface/ISerializableTokenCache";
41
+ import { AuthorizationCodePayload } from "./AuthorizationCodePayload";
42
+ import { BaseAuthRequest } from "../request/BaseAuthRequest";
43
+ import { IPerformanceClient } from "../telemetry/performance/IPerformanceClient";
44
+ import { PerformanceEvents } from "../telemetry/performance/PerformanceEvent";
45
+ import { checkMaxAge, extractTokenClaims } from "../account/AuthToken";
46
+ import { TokenClaims } from "../account/TokenClaims";
47
+
48
+ /**
49
+ * Class that handles response parsing.
50
+ * @internal
51
+ */
52
+ export class ResponseHandler {
53
+ private clientId: string;
54
+ private cacheStorage: CacheManager;
55
+ private cryptoObj: ICrypto;
56
+ private logger: Logger;
57
+ private homeAccountIdentifier: string;
58
+ private serializableCache: ISerializableTokenCache | null;
59
+ private persistencePlugin: ICachePlugin | null;
60
+ private performanceClient?: IPerformanceClient;
61
+
62
+ constructor(
63
+ clientId: string,
64
+ cacheStorage: CacheManager,
65
+ cryptoObj: ICrypto,
66
+ logger: Logger,
67
+ serializableCache: ISerializableTokenCache | null,
68
+ persistencePlugin: ICachePlugin | null,
69
+ performanceClient?: IPerformanceClient
70
+ ) {
71
+ this.clientId = clientId;
72
+ this.cacheStorage = cacheStorage;
73
+ this.cryptoObj = cryptoObj;
74
+ this.logger = logger;
75
+ this.serializableCache = serializableCache;
76
+ this.persistencePlugin = persistencePlugin;
77
+ this.performanceClient = performanceClient;
78
+ }
79
+
80
+ /**
81
+ * Function which validates server authorization code response.
82
+ * @param serverResponseHash
83
+ * @param cachedState
84
+ * @param cryptoObj
85
+ */
86
+ validateServerAuthorizationCodeResponse(
87
+ serverResponseHash: ServerAuthorizationCodeResponse,
88
+ cachedState: string,
89
+ cryptoObj: ICrypto
90
+ ): void {
91
+ if (!serverResponseHash.state || !cachedState) {
92
+ throw serverResponseHash.state
93
+ ? createClientAuthError(
94
+ ClientAuthErrorCodes.stateNotFound,
95
+ "Cached State"
96
+ )
97
+ : createClientAuthError(
98
+ ClientAuthErrorCodes.stateNotFound,
99
+ "Server State"
100
+ );
101
+ }
102
+
103
+ let decodedServerResponseHash: string;
104
+ let decodedCachedState: string;
105
+
106
+ try {
107
+ decodedServerResponseHash = decodeURIComponent(
108
+ serverResponseHash.state
109
+ );
110
+ } catch (e) {
111
+ throw createClientAuthError(
112
+ ClientAuthErrorCodes.invalidState,
113
+ serverResponseHash.state
114
+ );
115
+ }
116
+
117
+ try {
118
+ decodedCachedState = decodeURIComponent(cachedState);
119
+ } catch (e) {
120
+ throw createClientAuthError(
121
+ ClientAuthErrorCodes.invalidState,
122
+ serverResponseHash.state
123
+ );
124
+ }
125
+
126
+ if (decodedServerResponseHash !== decodedCachedState) {
127
+ throw createClientAuthError(ClientAuthErrorCodes.stateMismatch);
128
+ }
129
+
130
+ // Check for error
131
+ if (
132
+ serverResponseHash.error ||
133
+ serverResponseHash.error_description ||
134
+ serverResponseHash.suberror
135
+ ) {
136
+ if (
137
+ isInteractionRequiredError(
138
+ serverResponseHash.error,
139
+ serverResponseHash.error_description,
140
+ serverResponseHash.suberror
141
+ )
142
+ ) {
143
+ throw new InteractionRequiredAuthError(
144
+ serverResponseHash.error || Constants.EMPTY_STRING,
145
+ serverResponseHash.error_description,
146
+ serverResponseHash.suberror,
147
+ serverResponseHash.timestamp || Constants.EMPTY_STRING,
148
+ serverResponseHash.trace_id || Constants.EMPTY_STRING,
149
+ serverResponseHash.correlation_id || Constants.EMPTY_STRING,
150
+ serverResponseHash.claims || Constants.EMPTY_STRING
151
+ );
152
+ }
153
+
154
+ throw new ServerError(
155
+ serverResponseHash.error || Constants.EMPTY_STRING,
156
+ serverResponseHash.error_description,
157
+ serverResponseHash.suberror
158
+ );
159
+ }
160
+
161
+ if (serverResponseHash.client_info) {
162
+ buildClientInfo(serverResponseHash.client_info, cryptoObj);
163
+ }
164
+ }
165
+
166
+ /**
167
+ * Function which validates server authorization token response.
168
+ * @param serverResponse
169
+ * @param refreshAccessToken
170
+ */
171
+ validateTokenResponse(
172
+ serverResponse: ServerAuthorizationTokenResponse,
173
+ refreshAccessToken?: boolean
174
+ ): void {
175
+ // Check for error
176
+ if (
177
+ serverResponse.error ||
178
+ serverResponse.error_description ||
179
+ serverResponse.suberror
180
+ ) {
181
+ const errString = `${serverResponse.error_codes} - [${serverResponse.timestamp}]: ${serverResponse.error_description} - Correlation ID: ${serverResponse.correlation_id} - Trace ID: ${serverResponse.trace_id}`;
182
+ const serverError = new ServerError(
183
+ serverResponse.error,
184
+ errString,
185
+ serverResponse.suberror
186
+ );
187
+
188
+ // check if 500 error
189
+ if (
190
+ refreshAccessToken &&
191
+ serverResponse.status &&
192
+ serverResponse.status >= HttpStatus.SERVER_ERROR_RANGE_START &&
193
+ serverResponse.status <= HttpStatus.SERVER_ERROR_RANGE_END
194
+ ) {
195
+ this.logger.warning(
196
+ `executeTokenRequest:validateTokenResponse - AAD is currently unavailable and the access token is unable to be refreshed.\n${serverError}`
197
+ );
198
+
199
+ // don't throw an exception, but alert the user via a log that the token was unable to be refreshed
200
+ return;
201
+ // check if 400 error
202
+ } else if (
203
+ refreshAccessToken &&
204
+ serverResponse.status &&
205
+ serverResponse.status >= HttpStatus.CLIENT_ERROR_RANGE_START &&
206
+ serverResponse.status <= HttpStatus.CLIENT_ERROR_RANGE_END
207
+ ) {
208
+ this.logger.warning(
209
+ `executeTokenRequest:validateTokenResponse - AAD is currently available but is unable to refresh the access token.\n${serverError}`
210
+ );
211
+
212
+ // don't throw an exception, but alert the user via a log that the token was unable to be refreshed
213
+ return;
214
+ }
215
+
216
+ if (
217
+ isInteractionRequiredError(
218
+ serverResponse.error,
219
+ serverResponse.error_description,
220
+ serverResponse.suberror
221
+ )
222
+ ) {
223
+ throw new InteractionRequiredAuthError(
224
+ serverResponse.error,
225
+ serverResponse.error_description,
226
+ serverResponse.suberror,
227
+ serverResponse.timestamp || Constants.EMPTY_STRING,
228
+ serverResponse.trace_id || Constants.EMPTY_STRING,
229
+ serverResponse.correlation_id || Constants.EMPTY_STRING,
230
+ serverResponse.claims || Constants.EMPTY_STRING
231
+ );
232
+ }
233
+
234
+ throw serverError;
235
+ }
236
+ }
237
+
238
+ /**
239
+ * Returns a constructed token response based on given string. Also manages the cache updates and cleanups.
240
+ * @param serverTokenResponse
241
+ * @param authority
242
+ */
243
+ async handleServerTokenResponse(
244
+ serverTokenResponse: ServerAuthorizationTokenResponse,
245
+ authority: Authority,
246
+ reqTimestamp: number,
247
+ request: BaseAuthRequest,
248
+ authCodePayload?: AuthorizationCodePayload,
249
+ userAssertionHash?: string,
250
+ handlingRefreshTokenResponse?: boolean,
251
+ forceCacheRefreshTokenResponse?: boolean,
252
+ serverRequestId?: string
253
+ ): Promise<AuthenticationResult> {
254
+ this.performanceClient?.addQueueMeasurement(
255
+ PerformanceEvents.HandleServerTokenResponse,
256
+ serverTokenResponse.correlation_id
257
+ );
258
+
259
+ // create an idToken object (not entity)
260
+ let idTokenClaims: TokenClaims | undefined;
261
+ if (serverTokenResponse.id_token) {
262
+ idTokenClaims = extractTokenClaims(
263
+ serverTokenResponse.id_token || Constants.EMPTY_STRING,
264
+ this.cryptoObj.base64Decode
265
+ );
266
+
267
+ // token nonce check (TODO: Add a warning if no nonce is given?)
268
+ if (authCodePayload && authCodePayload.nonce) {
269
+ if (idTokenClaims.nonce !== authCodePayload.nonce) {
270
+ throw createClientAuthError(
271
+ ClientAuthErrorCodes.nonceMismatch
272
+ );
273
+ }
274
+ }
275
+
276
+ // token max_age check
277
+ if (request.maxAge || request.maxAge === 0) {
278
+ const authTime = idTokenClaims.auth_time;
279
+ if (!authTime) {
280
+ throw createClientAuthError(
281
+ ClientAuthErrorCodes.authTimeNotFound
282
+ );
283
+ }
284
+
285
+ checkMaxAge(authTime, request.maxAge);
286
+ }
287
+ }
288
+
289
+ // generate homeAccountId
290
+ this.homeAccountIdentifier = AccountEntity.generateHomeAccountId(
291
+ serverTokenResponse.client_info || Constants.EMPTY_STRING,
292
+ authority.authorityType,
293
+ this.logger,
294
+ this.cryptoObj,
295
+ idTokenClaims
296
+ );
297
+
298
+ // save the response tokens
299
+ let requestStateObj: RequestStateObject | undefined;
300
+ if (!!authCodePayload && !!authCodePayload.state) {
301
+ requestStateObj = ProtocolUtils.parseRequestState(
302
+ this.cryptoObj,
303
+ authCodePayload.state
304
+ );
305
+ }
306
+
307
+ // Add keyId from request to serverTokenResponse if defined
308
+ serverTokenResponse.key_id =
309
+ serverTokenResponse.key_id || request.sshKid || undefined;
310
+
311
+ const cacheRecord = this.generateCacheRecord(
312
+ serverTokenResponse,
313
+ authority,
314
+ reqTimestamp,
315
+ request,
316
+ idTokenClaims,
317
+ userAssertionHash,
318
+ authCodePayload
319
+ );
320
+ let cacheContext;
321
+ try {
322
+ if (this.persistencePlugin && this.serializableCache) {
323
+ this.logger.verbose(
324
+ "Persistence enabled, calling beforeCacheAccess"
325
+ );
326
+ cacheContext = new TokenCacheContext(
327
+ this.serializableCache,
328
+ true
329
+ );
330
+ await this.persistencePlugin.beforeCacheAccess(cacheContext);
331
+ }
332
+ /*
333
+ * When saving a refreshed tokens to the cache, it is expected that the account that was used is present in the cache.
334
+ * If not present, we should return null, as it's the case that another application called removeAccount in between
335
+ * the calls to getAllAccounts and acquireTokenSilent. We should not overwrite that removal, unless explicitly flagged by
336
+ * the developer, as in the case of refresh token flow used in ADAL Node to MSAL Node migration.
337
+ */
338
+ if (
339
+ handlingRefreshTokenResponse &&
340
+ !forceCacheRefreshTokenResponse &&
341
+ cacheRecord.account
342
+ ) {
343
+ const key = cacheRecord.account.generateAccountKey();
344
+ const account = this.cacheStorage.getAccount(key);
345
+ if (!account) {
346
+ this.logger.warning(
347
+ "Account used to refresh tokens not in persistence, refreshed tokens will not be stored in the cache"
348
+ );
349
+ return ResponseHandler.generateAuthenticationResult(
350
+ this.cryptoObj,
351
+ authority,
352
+ cacheRecord,
353
+ false,
354
+ request,
355
+ idTokenClaims,
356
+ requestStateObj,
357
+ undefined,
358
+ serverRequestId
359
+ );
360
+ }
361
+ }
362
+ await this.cacheStorage.saveCacheRecord(
363
+ cacheRecord,
364
+ request.storeInCache
365
+ );
366
+ } finally {
367
+ if (
368
+ this.persistencePlugin &&
369
+ this.serializableCache &&
370
+ cacheContext
371
+ ) {
372
+ this.logger.verbose(
373
+ "Persistence enabled, calling afterCacheAccess"
374
+ );
375
+ await this.persistencePlugin.afterCacheAccess(cacheContext);
376
+ }
377
+ }
378
+ return ResponseHandler.generateAuthenticationResult(
379
+ this.cryptoObj,
380
+ authority,
381
+ cacheRecord,
382
+ false,
383
+ request,
384
+ idTokenClaims,
385
+ requestStateObj,
386
+ serverTokenResponse,
387
+ serverRequestId
388
+ );
389
+ }
390
+
391
+ /**
392
+ * Generates CacheRecord
393
+ * @param serverTokenResponse
394
+ * @param idTokenObj
395
+ * @param authority
396
+ */
397
+ private generateCacheRecord(
398
+ serverTokenResponse: ServerAuthorizationTokenResponse,
399
+ authority: Authority,
400
+ reqTimestamp: number,
401
+ request: BaseAuthRequest,
402
+ idTokenClaims?: TokenClaims,
403
+ userAssertionHash?: string,
404
+ authCodePayload?: AuthorizationCodePayload
405
+ ): CacheRecord {
406
+ const env = authority.getPreferredCache();
407
+ if (!env) {
408
+ throw createClientAuthError(
409
+ ClientAuthErrorCodes.invalidCacheEnvironment
410
+ );
411
+ }
412
+
413
+ // IdToken: non AAD scenarios can have empty realm
414
+ let cachedIdToken: IdTokenEntity | undefined;
415
+ let cachedAccount: AccountEntity | undefined;
416
+ if (serverTokenResponse.id_token && !!idTokenClaims) {
417
+ cachedIdToken = IdTokenEntity.createIdTokenEntity(
418
+ this.homeAccountIdentifier,
419
+ env,
420
+ serverTokenResponse.id_token,
421
+ this.clientId,
422
+ idTokenClaims.tid || ""
423
+ );
424
+
425
+ cachedAccount = AccountEntity.createAccount(
426
+ {
427
+ homeAccountId: this.homeAccountIdentifier,
428
+ idTokenClaims: idTokenClaims,
429
+ clientInfo: serverTokenResponse.client_info,
430
+ cloudGraphHostName: authCodePayload?.cloud_graph_host_name,
431
+ msGraphHost: authCodePayload?.msgraph_host,
432
+ },
433
+ authority
434
+ );
435
+ }
436
+
437
+ // AccessToken
438
+ let cachedAccessToken: AccessTokenEntity | null = null;
439
+ if (serverTokenResponse.access_token) {
440
+ // If scopes not returned in server response, use request scopes
441
+ const responseScopes = serverTokenResponse.scope
442
+ ? ScopeSet.fromString(serverTokenResponse.scope)
443
+ : new ScopeSet(request.scopes || []);
444
+
445
+ /*
446
+ * Use timestamp calculated before request
447
+ * Server may return timestamps as strings, parse to numbers if so.
448
+ */
449
+ const expiresIn: number =
450
+ (typeof serverTokenResponse.expires_in === "string"
451
+ ? parseInt(serverTokenResponse.expires_in, 10)
452
+ : serverTokenResponse.expires_in) || 0;
453
+ const extExpiresIn: number =
454
+ (typeof serverTokenResponse.ext_expires_in === "string"
455
+ ? parseInt(serverTokenResponse.ext_expires_in, 10)
456
+ : serverTokenResponse.ext_expires_in) || 0;
457
+ const refreshIn: number | undefined =
458
+ (typeof serverTokenResponse.refresh_in === "string"
459
+ ? parseInt(serverTokenResponse.refresh_in, 10)
460
+ : serverTokenResponse.refresh_in) || undefined;
461
+ const tokenExpirationSeconds = reqTimestamp + expiresIn;
462
+ const extendedTokenExpirationSeconds =
463
+ tokenExpirationSeconds + extExpiresIn;
464
+ const refreshOnSeconds =
465
+ refreshIn && refreshIn > 0
466
+ ? reqTimestamp + refreshIn
467
+ : undefined;
468
+
469
+ // non AAD scenarios can have empty realm
470
+ cachedAccessToken = AccessTokenEntity.createAccessTokenEntity(
471
+ this.homeAccountIdentifier,
472
+ env,
473
+ serverTokenResponse.access_token || Constants.EMPTY_STRING,
474
+ this.clientId,
475
+ idTokenClaims?.tid || authority.tenant,
476
+ responseScopes.printScopes(),
477
+ tokenExpirationSeconds,
478
+ extendedTokenExpirationSeconds,
479
+ this.cryptoObj,
480
+ refreshOnSeconds,
481
+ serverTokenResponse.token_type,
482
+ userAssertionHash,
483
+ serverTokenResponse.key_id,
484
+ request.claims,
485
+ request.requestedClaimsHash
486
+ );
487
+ }
488
+
489
+ // refreshToken
490
+ let cachedRefreshToken: RefreshTokenEntity | null = null;
491
+ if (serverTokenResponse.refresh_token) {
492
+ cachedRefreshToken = RefreshTokenEntity.createRefreshTokenEntity(
493
+ this.homeAccountIdentifier,
494
+ env,
495
+ serverTokenResponse.refresh_token || Constants.EMPTY_STRING,
496
+ this.clientId,
497
+ serverTokenResponse.foci,
498
+ userAssertionHash
499
+ );
500
+ }
501
+
502
+ // appMetadata
503
+ let cachedAppMetadata: AppMetadataEntity | null = null;
504
+ if (serverTokenResponse.foci) {
505
+ cachedAppMetadata = AppMetadataEntity.createAppMetadataEntity(
506
+ this.clientId,
507
+ env,
508
+ serverTokenResponse.foci
509
+ );
510
+ }
511
+
512
+ return new CacheRecord(
513
+ cachedAccount,
514
+ cachedIdToken,
515
+ cachedAccessToken,
516
+ cachedRefreshToken,
517
+ cachedAppMetadata
518
+ );
519
+ }
520
+
521
+ /**
522
+ * Creates an @AuthenticationResult from @CacheRecord , @IdToken , and a boolean that states whether or not the result is from cache.
523
+ *
524
+ * Optionally takes a state string that is set as-is in the response.
525
+ *
526
+ * @param cacheRecord
527
+ * @param idTokenObj
528
+ * @param fromTokenCache
529
+ * @param stateString
530
+ */
531
+ static async generateAuthenticationResult(
532
+ cryptoObj: ICrypto,
533
+ authority: Authority,
534
+ cacheRecord: CacheRecord,
535
+ fromTokenCache: boolean,
536
+ request: BaseAuthRequest,
537
+ idTokenClaims?: TokenClaims,
538
+ requestState?: RequestStateObject,
539
+ serverTokenResponse?: ServerAuthorizationTokenResponse,
540
+ requestId?: string
541
+ ): Promise<AuthenticationResult> {
542
+ let accessToken: string = Constants.EMPTY_STRING;
543
+ let responseScopes: Array<string> = [];
544
+ let expiresOn: Date | null = null;
545
+ let extExpiresOn: Date | undefined;
546
+ let refreshOn: Date | undefined;
547
+ let familyId: string = Constants.EMPTY_STRING;
548
+
549
+ if (cacheRecord.accessToken) {
550
+ if (
551
+ cacheRecord.accessToken.tokenType === AuthenticationScheme.POP
552
+ ) {
553
+ const popTokenGenerator: PopTokenGenerator =
554
+ new PopTokenGenerator(cryptoObj);
555
+ const { secret, keyId } = cacheRecord.accessToken;
556
+
557
+ if (!keyId) {
558
+ throw createClientAuthError(
559
+ ClientAuthErrorCodes.keyIdMissing
560
+ );
561
+ }
562
+
563
+ accessToken = await popTokenGenerator.signPopToken(
564
+ secret,
565
+ keyId,
566
+ request
567
+ );
568
+ } else {
569
+ accessToken = cacheRecord.accessToken.secret;
570
+ }
571
+ responseScopes = ScopeSet.fromString(
572
+ cacheRecord.accessToken.target
573
+ ).asArray();
574
+ expiresOn = new Date(
575
+ Number(cacheRecord.accessToken.expiresOn) * 1000
576
+ );
577
+ extExpiresOn = new Date(
578
+ Number(cacheRecord.accessToken.extendedExpiresOn) * 1000
579
+ );
580
+ if (cacheRecord.accessToken.refreshOn) {
581
+ refreshOn = new Date(
582
+ Number(cacheRecord.accessToken.refreshOn) * 1000
583
+ );
584
+ }
585
+ }
586
+
587
+ if (cacheRecord.appMetadata) {
588
+ familyId =
589
+ cacheRecord.appMetadata.familyId === THE_FAMILY_ID
590
+ ? THE_FAMILY_ID
591
+ : "";
592
+ }
593
+ const uid = idTokenClaims?.oid || idTokenClaims?.sub || "";
594
+ const tid = idTokenClaims?.tid || "";
595
+
596
+ // for hybrid + native bridge enablement, send back the native account Id
597
+ if (serverTokenResponse?.spa_accountid && !!cacheRecord.account) {
598
+ cacheRecord.account.nativeAccountId =
599
+ serverTokenResponse?.spa_accountid;
600
+ }
601
+
602
+ return {
603
+ authority: authority.canonicalAuthority,
604
+ uniqueId: uid,
605
+ tenantId: tid,
606
+ scopes: responseScopes,
607
+ account: cacheRecord.account
608
+ ? cacheRecord.account.getAccountInfo()
609
+ : null,
610
+ idToken: cacheRecord?.idToken?.secret || "",
611
+ idTokenClaims: idTokenClaims || {},
612
+ accessToken: accessToken,
613
+ fromCache: fromTokenCache,
614
+ expiresOn: expiresOn,
615
+ extExpiresOn: extExpiresOn,
616
+ refreshOn: refreshOn,
617
+ correlationId: request.correlationId,
618
+ requestId: requestId || Constants.EMPTY_STRING,
619
+ familyId: familyId,
620
+ tokenType:
621
+ cacheRecord.accessToken?.tokenType || Constants.EMPTY_STRING,
622
+ state: requestState
623
+ ? requestState.userRequestState
624
+ : Constants.EMPTY_STRING,
625
+ cloudGraphHostName:
626
+ cacheRecord.account?.cloudGraphHostName ||
627
+ Constants.EMPTY_STRING,
628
+ msGraphHost:
629
+ cacheRecord.account?.msGraphHost || Constants.EMPTY_STRING,
630
+ code: serverTokenResponse?.spa_code,
631
+ fromNativeBroker: false,
632
+ };
633
+ }
634
+ }
@@ -0,0 +1,33 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ /**
7
+ * Deserialized response object from server authorization code request.
8
+ * - code: authorization code from server
9
+ * - client_info: client info object
10
+ * - state: OAuth2 request state
11
+ * - error: error sent back in hash
12
+ * - error: description
13
+ */
14
+ export type ServerAuthorizationCodeResponse = {
15
+ // Success case
16
+ code?: string;
17
+ client_info?: string;
18
+ state?: string;
19
+ cloud_instance_name?: string;
20
+ cloud_instance_host_name?: string;
21
+ cloud_graph_host_name?: string;
22
+ msgraph_host?: string;
23
+ // Error case
24
+ error?: string;
25
+ error_description?: string;
26
+ suberror?: string;
27
+ timestamp?: string;
28
+ trace_id?: string;
29
+ correlation_id?: string;
30
+ claims?: string;
31
+ // Native Account ID
32
+ accountId?: string;
33
+ };