@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,167 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { CredentialEntity } from "./CredentialEntity";
7
+ import { CredentialType, AuthenticationScheme } from "../../utils/Constants";
8
+ import { TimeUtils } from "../../utils/TimeUtils";
9
+ import { ICrypto } from "../../crypto/ICrypto";
10
+ import { TokenClaims } from "../../account/TokenClaims";
11
+ import {
12
+ createClientAuthError,
13
+ ClientAuthErrorCodes,
14
+ } from "../../error/ClientAuthError";
15
+ import { extractTokenClaims } from "../../account/AuthToken";
16
+
17
+ /**
18
+ * ACCESS_TOKEN Credential Type
19
+ *
20
+ * Key:Value Schema:
21
+ *
22
+ * Key Example: uid.utid-login.microsoftonline.com-accesstoken-clientId-contoso.com-user.read
23
+ *
24
+ * Value Schema:
25
+ * {
26
+ * homeAccountId: home account identifier for the auth scheme,
27
+ * environment: entity that issued the token, represented as a full host
28
+ * credentialType: Type of credential as a string, can be one of the following: RefreshToken, AccessToken, IdToken, Password, Cookie, Certificate, Other
29
+ * clientId: client ID of the application
30
+ * secret: Actual credential as a string
31
+ * familyId: Family ID identifier, usually only used for refresh tokens
32
+ * realm: Full tenant or organizational identifier that the account belongs to
33
+ * target: Permissions that are included in the token, or for refresh tokens, the resource identifier.
34
+ * cachedAt: Absolute device time when entry was created in the cache.
35
+ * expiresOn: Token expiry time, calculated based on current UTC time in seconds. Represented as a string.
36
+ * extendedExpiresOn: Additional extended expiry time until when token is valid in case of server-side outage. Represented as string in UTC seconds.
37
+ * keyId: used for POP and SSH tokenTypes
38
+ * tokenType: Type of the token issued. Usually "Bearer"
39
+ * }
40
+ */
41
+ export class AccessTokenEntity extends CredentialEntity {
42
+ realm: string;
43
+ target: string;
44
+ cachedAt: string;
45
+ expiresOn: string;
46
+ extendedExpiresOn?: string;
47
+ refreshOn?: string;
48
+ keyId?: string; // for POP and SSH tokenTypes
49
+ tokenType?: AuthenticationScheme;
50
+ requestedClaims?: string;
51
+ requestedClaimsHash?: string;
52
+
53
+ /**
54
+ * Create AccessTokenEntity
55
+ * @param homeAccountId
56
+ * @param environment
57
+ * @param accessToken
58
+ * @param clientId
59
+ * @param tenantId
60
+ * @param scopes
61
+ * @param expiresOn
62
+ * @param extExpiresOn
63
+ */
64
+ static createAccessTokenEntity(
65
+ homeAccountId: string,
66
+ environment: string,
67
+ accessToken: string,
68
+ clientId: string,
69
+ tenantId: string,
70
+ scopes: string,
71
+ expiresOn: number,
72
+ extExpiresOn: number,
73
+ cryptoUtils: ICrypto,
74
+ refreshOn?: number,
75
+ tokenType?: AuthenticationScheme,
76
+ userAssertionHash?: string,
77
+ keyId?: string,
78
+ requestedClaims?: string,
79
+ requestedClaimsHash?: string
80
+ ): AccessTokenEntity {
81
+ const atEntity: AccessTokenEntity = new AccessTokenEntity();
82
+
83
+ atEntity.homeAccountId = homeAccountId;
84
+ atEntity.credentialType = CredentialType.ACCESS_TOKEN;
85
+ atEntity.secret = accessToken;
86
+
87
+ const currentTime = TimeUtils.nowSeconds();
88
+ atEntity.cachedAt = currentTime.toString();
89
+
90
+ /*
91
+ * Token expiry time.
92
+ * This value should be  calculated based on the current UTC time measured locally and the value  expires_in Represented as a string in JSON.
93
+ */
94
+ atEntity.expiresOn = expiresOn.toString();
95
+ atEntity.extendedExpiresOn = extExpiresOn.toString();
96
+ if (refreshOn) {
97
+ atEntity.refreshOn = refreshOn.toString();
98
+ }
99
+
100
+ atEntity.environment = environment;
101
+ atEntity.clientId = clientId;
102
+ atEntity.realm = tenantId;
103
+ atEntity.target = scopes;
104
+ atEntity.userAssertionHash = userAssertionHash;
105
+
106
+ atEntity.tokenType = tokenType || AuthenticationScheme.BEARER;
107
+
108
+ if (requestedClaims) {
109
+ atEntity.requestedClaims = requestedClaims;
110
+ atEntity.requestedClaimsHash = requestedClaimsHash;
111
+ }
112
+
113
+ /*
114
+ * Create Access Token With Auth Scheme instead of regular access token
115
+ * Cast to lower to handle "bearer" from ADFS
116
+ */
117
+ if (
118
+ atEntity.tokenType?.toLowerCase() !==
119
+ AuthenticationScheme.BEARER.toLowerCase()
120
+ ) {
121
+ atEntity.credentialType =
122
+ CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME;
123
+ switch (atEntity.tokenType) {
124
+ case AuthenticationScheme.POP:
125
+ // Make sure keyId is present and add it to credential
126
+ const tokenClaims: TokenClaims | null = extractTokenClaims(
127
+ accessToken,
128
+ cryptoUtils.base64Decode
129
+ );
130
+ if (!tokenClaims?.cnf?.kid) {
131
+ throw createClientAuthError(
132
+ ClientAuthErrorCodes.tokenClaimsCnfRequiredForSignedJwt
133
+ );
134
+ }
135
+ atEntity.keyId = tokenClaims.cnf.kid;
136
+ break;
137
+ case AuthenticationScheme.SSH:
138
+ atEntity.keyId = keyId;
139
+ }
140
+ }
141
+
142
+ return atEntity;
143
+ }
144
+
145
+ /**
146
+ * Validates an entity: checks for all expected params
147
+ * @param entity
148
+ */
149
+ static isAccessTokenEntity(entity: object): boolean {
150
+ if (!entity) {
151
+ return false;
152
+ }
153
+
154
+ return (
155
+ entity.hasOwnProperty("homeAccountId") &&
156
+ entity.hasOwnProperty("environment") &&
157
+ entity.hasOwnProperty("credentialType") &&
158
+ entity.hasOwnProperty("realm") &&
159
+ entity.hasOwnProperty("clientId") &&
160
+ entity.hasOwnProperty("secret") &&
161
+ entity.hasOwnProperty("target") &&
162
+ (entity["credentialType"] === CredentialType.ACCESS_TOKEN ||
163
+ entity["credentialType"] ===
164
+ CredentialType.ACCESS_TOKEN_WITH_AUTH_SCHEME)
165
+ );
166
+ }
167
+ }
@@ -0,0 +1,314 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { Separators, CacheAccountType, Constants } from "../../utils/Constants";
7
+ import { Authority } from "../../authority/Authority";
8
+ import { ICrypto } from "../../crypto/ICrypto";
9
+ import { buildClientInfo } from "../../account/ClientInfo";
10
+ import { AccountInfo } from "../../account/AccountInfo";
11
+ import {
12
+ createClientAuthError,
13
+ ClientAuthErrorCodes,
14
+ } from "../../error/ClientAuthError";
15
+ import { AuthorityType } from "../../authority/AuthorityType";
16
+ import { Logger } from "../../logger/Logger";
17
+ import { TokenClaims } from "../../account/TokenClaims";
18
+ import { ProtocolMode } from "../../authority/ProtocolMode";
19
+
20
+ /**
21
+ * Type that defines required and optional parameters for an Account field (based on universal cache schema implemented by all MSALs).
22
+ *
23
+ * Key : Value Schema
24
+ *
25
+ * Key: <home_account_id>-<environment>-<realm*>
26
+ *
27
+ * Value Schema:
28
+ * {
29
+ * homeAccountId: home account identifier for the auth scheme,
30
+ * environment: entity that issued the token, represented as a full host
31
+ * realm: Full tenant or organizational identifier that the account belongs to
32
+ * localAccountId: Original tenant-specific accountID, usually used for legacy cases
33
+ * username: primary username that represents the user, usually corresponds to preferred_username in the v2 endpt
34
+ * authorityType: Accounts authority type as a string
35
+ * name: Full name for the account, including given name and family name,
36
+ * lastModificationTime: last time this entity was modified in the cache
37
+ * lastModificationApp:
38
+ * idTokenClaims: Object containing claims parsed from ID token
39
+ * nativeAccountId: Account identifier on the native device
40
+ * }
41
+ * @internal
42
+ */
43
+ export class AccountEntity {
44
+ homeAccountId: string;
45
+ environment: string;
46
+ realm: string;
47
+ localAccountId: string;
48
+ username: string;
49
+ authorityType: string;
50
+ clientInfo?: string;
51
+ name?: string;
52
+ lastModificationTime?: string;
53
+ lastModificationApp?: string;
54
+ cloudGraphHostName?: string;
55
+ msGraphHost?: string;
56
+ idTokenClaims?: TokenClaims;
57
+ nativeAccountId?: string;
58
+
59
+ /**
60
+ * Generate Account Id key component as per the schema: <home_account_id>-<environment>
61
+ */
62
+ generateAccountId(): string {
63
+ const accountId: Array<string> = [this.homeAccountId, this.environment];
64
+ return accountId.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
65
+ }
66
+
67
+ /**
68
+ * Generate Account Cache Key as per the schema: <home_account_id>-<environment>-<realm*>
69
+ */
70
+ generateAccountKey(): string {
71
+ return AccountEntity.generateAccountCacheKey({
72
+ homeAccountId: this.homeAccountId,
73
+ environment: this.environment,
74
+ tenantId: this.realm,
75
+ username: this.username,
76
+ localAccountId: this.localAccountId,
77
+ });
78
+ }
79
+
80
+ /**
81
+ * Returns the AccountInfo interface for this account.
82
+ */
83
+ getAccountInfo(): AccountInfo {
84
+ return {
85
+ homeAccountId: this.homeAccountId,
86
+ environment: this.environment,
87
+ tenantId: this.realm,
88
+ username: this.username,
89
+ localAccountId: this.localAccountId,
90
+ name: this.name,
91
+ idTokenClaims: this.idTokenClaims,
92
+ nativeAccountId: this.nativeAccountId,
93
+ authorityType: this.authorityType,
94
+ };
95
+ }
96
+
97
+ /**
98
+ * Generates account key from interface
99
+ * @param accountInterface
100
+ */
101
+ static generateAccountCacheKey(accountInterface: AccountInfo): string {
102
+ const accountKey = [
103
+ accountInterface.homeAccountId,
104
+ accountInterface.environment || Constants.EMPTY_STRING,
105
+ accountInterface.tenantId || Constants.EMPTY_STRING,
106
+ ];
107
+
108
+ return accountKey.join(Separators.CACHE_KEY_SEPARATOR).toLowerCase();
109
+ }
110
+
111
+ /**
112
+ * Build Account cache from IdToken, clientInfo and authority/policy. Associated with AAD.
113
+ * @param accountDetails
114
+ */
115
+ static createAccount(
116
+ accountDetails: {
117
+ homeAccountId: string;
118
+ idTokenClaims: TokenClaims;
119
+ clientInfo?: string;
120
+ cloudGraphHostName?: string;
121
+ msGraphHost?: string;
122
+ environment?: string;
123
+ nativeAccountId?: string;
124
+ },
125
+ authority: Authority
126
+ ): AccountEntity {
127
+ const account: AccountEntity = new AccountEntity();
128
+
129
+ if (authority.authorityType === AuthorityType.Adfs) {
130
+ account.authorityType = CacheAccountType.ADFS_ACCOUNT_TYPE;
131
+ } else if (authority.protocolMode === ProtocolMode.AAD) {
132
+ account.authorityType = CacheAccountType.MSSTS_ACCOUNT_TYPE;
133
+ } else {
134
+ account.authorityType = CacheAccountType.GENERIC_ACCOUNT_TYPE;
135
+ }
136
+
137
+ account.clientInfo = accountDetails.clientInfo;
138
+ account.homeAccountId = accountDetails.homeAccountId;
139
+ account.nativeAccountId = accountDetails.nativeAccountId;
140
+
141
+ const env =
142
+ accountDetails.environment ||
143
+ (authority && authority.getPreferredCache());
144
+
145
+ if (!env) {
146
+ throw createClientAuthError(
147
+ ClientAuthErrorCodes.invalidCacheEnvironment
148
+ );
149
+ }
150
+
151
+ account.environment = env;
152
+ // non AAD scenarios can have empty realm
153
+ account.realm =
154
+ accountDetails.idTokenClaims.tid || Constants.EMPTY_STRING;
155
+
156
+ account.idTokenClaims = accountDetails.idTokenClaims;
157
+
158
+ // How do you account for MSA CID here?
159
+ account.localAccountId =
160
+ accountDetails.idTokenClaims.oid ||
161
+ accountDetails.idTokenClaims.sub ||
162
+ Constants.EMPTY_STRING;
163
+
164
+ /*
165
+ * In B2C scenarios the emails claim is used instead of preferred_username and it is an array.
166
+ * In most cases it will contain a single email. This field should not be relied upon if a custom
167
+ * policy is configured to return more than 1 email.
168
+ */
169
+ const preferredUsername =
170
+ accountDetails.idTokenClaims.preferred_username ||
171
+ accountDetails.idTokenClaims.upn;
172
+ const email = accountDetails.idTokenClaims.emails
173
+ ? accountDetails.idTokenClaims.emails[0]
174
+ : null;
175
+
176
+ account.username = preferredUsername || email || Constants.EMPTY_STRING;
177
+ account.name = accountDetails.idTokenClaims.name;
178
+
179
+ account.cloudGraphHostName = accountDetails.cloudGraphHostName;
180
+ account.msGraphHost = accountDetails.msGraphHost;
181
+
182
+ return account;
183
+ }
184
+
185
+ /**
186
+ * Creates an AccountEntity object from AccountInfo
187
+ * @param accountInfo
188
+ * @param cloudGraphHostName
189
+ * @param msGraphHost
190
+ * @returns
191
+ */
192
+ static createFromAccountInfo(
193
+ accountInfo: AccountInfo,
194
+ cloudGraphHostName?: string,
195
+ msGraphHost?: string
196
+ ): AccountEntity {
197
+ const account: AccountEntity = new AccountEntity();
198
+
199
+ account.authorityType =
200
+ accountInfo.authorityType || CacheAccountType.GENERIC_ACCOUNT_TYPE;
201
+ account.homeAccountId = accountInfo.homeAccountId;
202
+ account.localAccountId = accountInfo.localAccountId;
203
+ account.nativeAccountId = accountInfo.nativeAccountId;
204
+
205
+ account.realm = accountInfo.tenantId;
206
+ account.environment = accountInfo.environment;
207
+
208
+ account.username = accountInfo.username;
209
+ account.name = accountInfo.name;
210
+ account.idTokenClaims = accountInfo.idTokenClaims;
211
+
212
+ account.cloudGraphHostName = cloudGraphHostName;
213
+ account.msGraphHost = msGraphHost;
214
+
215
+ return account;
216
+ }
217
+
218
+ /**
219
+ * Generate HomeAccountId from server response
220
+ * @param serverClientInfo
221
+ * @param authType
222
+ */
223
+ static generateHomeAccountId(
224
+ serverClientInfo: string,
225
+ authType: AuthorityType,
226
+ logger: Logger,
227
+ cryptoObj: ICrypto,
228
+ idTokenClaims?: TokenClaims
229
+ ): string {
230
+ const accountId = idTokenClaims?.sub
231
+ ? idTokenClaims.sub
232
+ : Constants.EMPTY_STRING;
233
+
234
+ // since ADFS does not have tid and does not set client_info
235
+ if (
236
+ authType === AuthorityType.Adfs ||
237
+ authType === AuthorityType.Dsts
238
+ ) {
239
+ return accountId;
240
+ }
241
+
242
+ // for cases where there is clientInfo
243
+ if (serverClientInfo) {
244
+ try {
245
+ const clientInfo = buildClientInfo(serverClientInfo, cryptoObj);
246
+ if (clientInfo.uid && clientInfo.utid) {
247
+ return `${clientInfo.uid}${Separators.CLIENT_INFO_SEPARATOR}${clientInfo.utid}`;
248
+ }
249
+ } catch (e) {}
250
+ }
251
+
252
+ // default to "sub" claim
253
+ logger.verbose("No client info in response");
254
+ return accountId;
255
+ }
256
+
257
+ /**
258
+ * Validates an entity: checks for all expected params
259
+ * @param entity
260
+ */
261
+ static isAccountEntity(entity: object): boolean {
262
+ if (!entity) {
263
+ return false;
264
+ }
265
+
266
+ return (
267
+ entity.hasOwnProperty("homeAccountId") &&
268
+ entity.hasOwnProperty("environment") &&
269
+ entity.hasOwnProperty("realm") &&
270
+ entity.hasOwnProperty("localAccountId") &&
271
+ entity.hasOwnProperty("username") &&
272
+ entity.hasOwnProperty("authorityType")
273
+ );
274
+ }
275
+
276
+ /**
277
+ * Helper function to determine whether 2 accountInfo objects represent the same account
278
+ * @param accountA
279
+ * @param accountB
280
+ * @param compareClaims - If set to true idTokenClaims will also be compared to determine account equality
281
+ */
282
+ static accountInfoIsEqual(
283
+ accountA: AccountInfo | null,
284
+ accountB: AccountInfo | null,
285
+ compareClaims?: boolean
286
+ ): boolean {
287
+ if (!accountA || !accountB) {
288
+ return false;
289
+ }
290
+
291
+ let claimsMatch = true; // default to true so as to not fail comparison below if compareClaims: false
292
+ if (compareClaims) {
293
+ const accountAClaims = (accountA.idTokenClaims ||
294
+ {}) as TokenClaims;
295
+ const accountBClaims = (accountB.idTokenClaims ||
296
+ {}) as TokenClaims;
297
+
298
+ // issued at timestamp and nonce are expected to change each time a new id token is acquired
299
+ claimsMatch =
300
+ accountAClaims.iat === accountBClaims.iat &&
301
+ accountAClaims.nonce === accountBClaims.nonce;
302
+ }
303
+
304
+ return (
305
+ accountA.homeAccountId === accountB.homeAccountId &&
306
+ accountA.localAccountId === accountB.localAccountId &&
307
+ accountA.username === accountB.username &&
308
+ accountA.tenantId === accountB.tenantId &&
309
+ accountA.environment === accountB.environment &&
310
+ accountA.nativeAccountId === accountB.nativeAccountId &&
311
+ claimsMatch
312
+ );
313
+ }
314
+ }
@@ -0,0 +1,91 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { APP_METADATA, Separators } from "../../utils/Constants";
7
+
8
+ /**
9
+ * APP_METADATA Cache
10
+ *
11
+ * Key:Value Schema:
12
+ *
13
+ * Key: appmetadata-<environment>-<client_id>
14
+ *
15
+ * Value:
16
+ * {
17
+ * clientId: client ID of the application
18
+ * environment: entity that issued the token, represented as a full host
19
+ * familyId: Family ID identifier, '1' represents Microsoft Family
20
+ * }
21
+ */
22
+ export class AppMetadataEntity {
23
+ clientId: string;
24
+ environment: string;
25
+ familyId?: string;
26
+
27
+ /**
28
+ * Generate AppMetadata Cache Key as per the schema: appmetadata-<environment>-<client_id>
29
+ */
30
+ generateAppMetadataKey(): string {
31
+ return AppMetadataEntity.generateAppMetadataCacheKey(
32
+ this.environment,
33
+ this.clientId
34
+ );
35
+ }
36
+
37
+ /**
38
+ * Generate AppMetadata Cache Key
39
+ */
40
+ static generateAppMetadataCacheKey(
41
+ environment: string,
42
+ clientId: string
43
+ ): string {
44
+ const appMetaDataKeyArray: Array<string> = [
45
+ APP_METADATA,
46
+ environment,
47
+ clientId,
48
+ ];
49
+ return appMetaDataKeyArray
50
+ .join(Separators.CACHE_KEY_SEPARATOR)
51
+ .toLowerCase();
52
+ }
53
+
54
+ /**
55
+ * Creates AppMetadataEntity
56
+ * @param clientId
57
+ * @param environment
58
+ * @param familyId
59
+ */
60
+ static createAppMetadataEntity(
61
+ clientId: string,
62
+ environment: string,
63
+ familyId?: string
64
+ ): AppMetadataEntity {
65
+ const appMetadata = new AppMetadataEntity();
66
+
67
+ appMetadata.clientId = clientId;
68
+ appMetadata.environment = environment;
69
+ if (familyId) {
70
+ appMetadata.familyId = familyId;
71
+ }
72
+
73
+ return appMetadata;
74
+ }
75
+
76
+ /**
77
+ * Validates an entity: checks for all expected params
78
+ * @param entity
79
+ */
80
+ static isAppMetadataEntity(key: string, entity: object): boolean {
81
+ if (!entity) {
82
+ return false;
83
+ }
84
+
85
+ return (
86
+ key.indexOf(APP_METADATA) === 0 &&
87
+ entity.hasOwnProperty("clientId") &&
88
+ entity.hasOwnProperty("environment")
89
+ );
90
+ }
91
+ }
@@ -0,0 +1,112 @@
1
+ /*
2
+ * Copyright (c) Microsoft Corporation. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { CloudDiscoveryMetadata } from "../../authority/CloudDiscoveryMetadata";
7
+ import { OpenIdConfigResponse } from "../../authority/OpenIdConfigResponse";
8
+ import { AUTHORITY_METADATA_CONSTANTS } from "../../utils/Constants";
9
+ import { TimeUtils } from "../../utils/TimeUtils";
10
+
11
+ /** @internal */
12
+ export class AuthorityMetadataEntity {
13
+ aliases: Array<string>;
14
+ preferred_cache: string;
15
+ preferred_network: string;
16
+ canonical_authority: string;
17
+ authorization_endpoint: string;
18
+ token_endpoint: string;
19
+ end_session_endpoint?: string;
20
+ issuer: string;
21
+ aliasesFromNetwork: boolean;
22
+ endpointsFromNetwork: boolean;
23
+ expiresAt: number;
24
+ jwks_uri: string;
25
+
26
+ constructor() {
27
+ this.expiresAt =
28
+ TimeUtils.nowSeconds() +
29
+ AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS;
30
+ }
31
+
32
+ /**
33
+ * Update the entity with new aliases, preferred_cache and preferred_network values
34
+ * @param metadata
35
+ * @param fromNetwork
36
+ */
37
+ updateCloudDiscoveryMetadata(
38
+ metadata: CloudDiscoveryMetadata,
39
+ fromNetwork: boolean
40
+ ): void {
41
+ this.aliases = metadata.aliases;
42
+ this.preferred_cache = metadata.preferred_cache;
43
+ this.preferred_network = metadata.preferred_network;
44
+ this.aliasesFromNetwork = fromNetwork;
45
+ }
46
+
47
+ /**
48
+ * Update the entity with new endpoints
49
+ * @param metadata
50
+ * @param fromNetwork
51
+ */
52
+ updateEndpointMetadata(
53
+ metadata: OpenIdConfigResponse,
54
+ fromNetwork: boolean
55
+ ): void {
56
+ this.authorization_endpoint = metadata.authorization_endpoint;
57
+ this.token_endpoint = metadata.token_endpoint;
58
+ this.end_session_endpoint = metadata.end_session_endpoint;
59
+ this.issuer = metadata.issuer;
60
+ this.endpointsFromNetwork = fromNetwork;
61
+ this.jwks_uri = metadata.jwks_uri;
62
+ }
63
+
64
+ /**
65
+ * Save the authority that was used to create this cache entry
66
+ * @param authority
67
+ */
68
+ updateCanonicalAuthority(authority: string): void {
69
+ this.canonical_authority = authority;
70
+ }
71
+
72
+ /**
73
+ * Reset the exiresAt value
74
+ */
75
+ resetExpiresAt(): void {
76
+ this.expiresAt =
77
+ TimeUtils.nowSeconds() +
78
+ AUTHORITY_METADATA_CONSTANTS.REFRESH_TIME_SECONDS;
79
+ }
80
+
81
+ /**
82
+ * Returns whether or not the data needs to be refreshed
83
+ */
84
+ isExpired(): boolean {
85
+ return this.expiresAt <= TimeUtils.nowSeconds();
86
+ }
87
+
88
+ /**
89
+ * Validates an entity: checks for all expected params
90
+ * @param entity
91
+ */
92
+ static isAuthorityMetadataEntity(key: string, entity: object): boolean {
93
+ if (!entity) {
94
+ return false;
95
+ }
96
+
97
+ return (
98
+ key.indexOf(AUTHORITY_METADATA_CONSTANTS.CACHE_KEY) === 0 &&
99
+ entity.hasOwnProperty("aliases") &&
100
+ entity.hasOwnProperty("preferred_cache") &&
101
+ entity.hasOwnProperty("preferred_network") &&
102
+ entity.hasOwnProperty("canonical_authority") &&
103
+ entity.hasOwnProperty("authorization_endpoint") &&
104
+ entity.hasOwnProperty("token_endpoint") &&
105
+ entity.hasOwnProperty("issuer") &&
106
+ entity.hasOwnProperty("aliasesFromNetwork") &&
107
+ entity.hasOwnProperty("endpointsFromNetwork") &&
108
+ entity.hasOwnProperty("expiresAt") &&
109
+ entity.hasOwnProperty("jwks_uri")
110
+ );
111
+ }
112
+ }