@databiosphere/findable-ui 19.0.0 → 20.0.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 (363) hide show
  1. package/.release-please-manifest.json +1 -1
  2. package/CHANGELOG.md +11 -0
  3. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.d.ts +2 -0
  4. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.js +29 -0
  5. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/types.d.ts +6 -0
  6. package/lib/components/Authentication/components/SessionController/components/GoogleSessionController/types.js +1 -0
  7. package/lib/components/Authentication/components/SessionController/components/NextSessionController/SessionController.d.ts +2 -0
  8. package/lib/components/Authentication/components/SessionController/components/NextSessionController/SessionController.js +17 -0
  9. package/lib/components/Authentication/components/SessionController/components/NextSessionController/constants.d.ts +5 -0
  10. package/lib/components/Authentication/components/SessionController/components/NextSessionController/constants.js +12 -0
  11. package/lib/components/Authentication/components/SessionController/components/NextSessionController/types.d.ts +4 -0
  12. package/lib/components/Authentication/components/SessionController/components/NextSessionController/types.js +1 -0
  13. package/lib/components/Authentication/components/SessionController/components/NextSessionController/utils.d.ts +15 -0
  14. package/lib/components/Authentication/components/SessionController/components/NextSessionController/utils.js +53 -0
  15. package/lib/components/ComponentCreator/ComponentCreator.js +2 -3
  16. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/FormStep/components/AcceptTerraTOS/acceptTerraTOS.js +2 -2
  17. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/NIHAccountExpiryWarning/nihAccountExpiryWarning.js +1 -1
  18. package/lib/components/Export/components/ExportToTerra/components/TerraSetUpForm/terraSetUpForm.js +8 -3
  19. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.d.ts +2 -1
  20. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.js +17 -14
  21. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.d.ts +3 -4
  22. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.js +15 -24
  23. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.d.ts +1 -1
  24. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.js +2 -2
  25. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.d.ts +2 -0
  26. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.js +14 -0
  27. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/Button/button.styles.js +3 -2
  28. package/lib/components/Layout/components/Header/header.js +1 -1
  29. package/lib/components/Login/components/Button/button.d.ts +2 -0
  30. package/lib/components/Login/components/Button/button.js +6 -0
  31. package/lib/components/Login/components/Button/button.styles.d.ts +5 -0
  32. package/lib/components/Login/components/Button/button.styles.js +11 -0
  33. package/lib/components/Login/components/Button/constants.d.ts +2 -0
  34. package/lib/components/Login/components/Button/constants.js +6 -0
  35. package/lib/components/Login/components/Button/types.d.ts +3 -0
  36. package/lib/components/Login/components/Button/types.js +1 -0
  37. package/lib/components/Login/login.d.ts +2 -9
  38. package/lib/components/Login/login.js +9 -10
  39. package/lib/components/Login/types.d.ts +10 -0
  40. package/lib/components/Login/types.js +1 -0
  41. package/lib/components/common/Banner/components/SessionTimeout/sessionTimeout.js +1 -1
  42. package/lib/components/common/CustomIcon/common/entities.d.ts +1 -4
  43. package/lib/components/common/CustomIcon/components/GoogleIcon/googleIcon.d.ts +2 -2
  44. package/lib/components/common/CustomIcon/components/GoogleIcon/googleIcon.js +1 -1
  45. package/lib/config/entities.d.ts +22 -23
  46. package/lib/hooks/authentication/auth/useAuthReducer.d.ts +2 -0
  47. package/lib/hooks/authentication/auth/useAuthReducer.js +8 -0
  48. package/lib/hooks/authentication/authentication/useAuthenticationReducer.d.ts +2 -0
  49. package/lib/hooks/authentication/authentication/useAuthenticationReducer.js +8 -0
  50. package/lib/hooks/authentication/config/useAuthenticationConfig.d.ts +6 -0
  51. package/lib/hooks/authentication/config/useAuthenticationConfig.js +9 -0
  52. package/lib/hooks/authentication/credentials/useCredentialsReducer.d.ts +2 -0
  53. package/lib/hooks/authentication/credentials/useCredentialsReducer.js +7 -0
  54. package/lib/hooks/authentication/profile/types.d.ts +5 -0
  55. package/lib/hooks/authentication/profile/types.js +1 -0
  56. package/lib/hooks/authentication/profile/useProfile.d.ts +6 -0
  57. package/lib/hooks/authentication/profile/useProfile.js +15 -0
  58. package/lib/hooks/authentication/providers/types.d.ts +6 -0
  59. package/lib/hooks/authentication/providers/types.js +1 -0
  60. package/lib/hooks/authentication/providers/useProviders.d.ts +6 -0
  61. package/lib/hooks/authentication/providers/useProviders.js +14 -0
  62. package/lib/hooks/authentication/session/useSessionActive.d.ts +12 -0
  63. package/lib/hooks/authentication/session/useSessionActive.js +36 -0
  64. package/lib/hooks/authentication/session/useSessionCallbackUrl.d.ts +4 -0
  65. package/lib/hooks/authentication/session/useSessionCallbackUrl.js +20 -0
  66. package/lib/hooks/authentication/session/useSessionIdleTimer.d.ts +6 -0
  67. package/lib/hooks/authentication/session/useSessionIdleTimer.js +8 -0
  68. package/lib/hooks/{useSessionTimeout.js → authentication/session/useSessionTimeout.js} +2 -2
  69. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.d.ts +0 -1
  70. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.js +6 -9
  71. package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.js +3 -4
  72. package/lib/hooks/authentication/token/types.d.ts +4 -0
  73. package/lib/hooks/authentication/token/types.js +1 -0
  74. package/lib/hooks/authentication/token/useToken.d.ts +2 -0
  75. package/lib/hooks/authentication/token/useToken.js +5 -0
  76. package/lib/hooks/authentication/token/useTokenReducer.d.ts +7 -0
  77. package/lib/hooks/authentication/token/useTokenReducer.js +12 -0
  78. package/lib/hooks/useEntityList.js +2 -2
  79. package/lib/hooks/useFetchEntity.js +4 -3
  80. package/lib/hooks/useFileManifest/useFetchFilesFacets.js +2 -3
  81. package/lib/hooks/useFileManifest/useFetchSummary.js +2 -3
  82. package/lib/hooks/useRequestFileLocation.js +2 -3
  83. package/lib/hooks/useRouteHistory.d.ts +14 -0
  84. package/lib/hooks/useRouteHistory.js +40 -0
  85. package/lib/hooks/useRouteRoot.d.ts +1 -0
  86. package/lib/hooks/useRouteRoot.js +8 -0
  87. package/lib/hooks/useSummary.js +3 -3
  88. package/lib/providers/authentication/auth/actions.d.ts +8 -0
  89. package/lib/providers/authentication/auth/actions.js +12 -0
  90. package/lib/providers/authentication/auth/constants.d.ts +2 -0
  91. package/lib/providers/authentication/auth/constants.js +5 -0
  92. package/lib/providers/authentication/auth/context.d.ts +2 -0
  93. package/lib/providers/authentication/auth/context.js +7 -0
  94. package/lib/providers/authentication/auth/dispatch.d.ts +23 -0
  95. package/lib/providers/authentication/auth/dispatch.js +43 -0
  96. package/lib/providers/authentication/auth/hook.d.ts +6 -0
  97. package/lib/providers/authentication/auth/hook.js +9 -0
  98. package/lib/providers/authentication/auth/reducer.d.ts +8 -0
  99. package/lib/providers/authentication/auth/reducer.js +24 -0
  100. package/lib/providers/authentication/auth/types.d.ts +48 -0
  101. package/lib/providers/authentication/auth/types.js +11 -0
  102. package/lib/providers/authentication/authentication/actions.d.ts +8 -0
  103. package/lib/providers/authentication/authentication/actions.js +12 -0
  104. package/lib/providers/authentication/authentication/constants.d.ts +2 -0
  105. package/lib/providers/authentication/authentication/constants.js +5 -0
  106. package/lib/providers/authentication/authentication/context.d.ts +2 -0
  107. package/lib/providers/authentication/authentication/context.js +6 -0
  108. package/lib/providers/authentication/authentication/dispatch.d.ts +22 -0
  109. package/lib/providers/authentication/authentication/dispatch.js +42 -0
  110. package/lib/providers/authentication/authentication/hook.d.ts +6 -0
  111. package/lib/providers/authentication/authentication/hook.js +9 -0
  112. package/lib/providers/authentication/authentication/reducer.d.ts +9 -0
  113. package/lib/providers/authentication/authentication/reducer.js +25 -0
  114. package/lib/providers/authentication/authentication/types.d.ts +47 -0
  115. package/lib/providers/authentication/authentication/types.js +11 -0
  116. package/lib/providers/authentication/authentication/utils.d.ts +12 -0
  117. package/lib/providers/authentication/authentication/utils.js +18 -0
  118. package/lib/providers/authentication/common/types.d.ts +1 -0
  119. package/lib/providers/authentication/common/types.js +1 -0
  120. package/lib/providers/authentication/common/utils.d.ts +6 -0
  121. package/lib/providers/authentication/common/utils.js +11 -0
  122. package/lib/providers/authentication/credentials/actions.d.ts +8 -0
  123. package/lib/providers/authentication/credentials/actions.js +12 -0
  124. package/lib/providers/authentication/credentials/constants.d.ts +2 -0
  125. package/lib/providers/authentication/credentials/constants.js +3 -0
  126. package/lib/providers/authentication/credentials/context.d.ts +2 -0
  127. package/lib/providers/authentication/credentials/context.js +6 -0
  128. package/lib/providers/authentication/credentials/dispatch.d.ts +12 -0
  129. package/lib/providers/authentication/credentials/dispatch.js +22 -0
  130. package/lib/providers/authentication/credentials/hook.d.ts +6 -0
  131. package/lib/providers/authentication/credentials/hook.js +9 -0
  132. package/lib/providers/authentication/credentials/reducer.d.ts +8 -0
  133. package/lib/providers/authentication/credentials/reducer.js +22 -0
  134. package/lib/providers/authentication/credentials/types.d.ts +24 -0
  135. package/lib/providers/authentication/credentials/types.js +5 -0
  136. package/lib/providers/authentication/terra/context.d.ts +2 -0
  137. package/lib/providers/authentication/terra/context.js +7 -0
  138. package/lib/providers/authentication/terra/hook.d.ts +6 -0
  139. package/lib/providers/authentication/terra/hook.js +9 -0
  140. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.d.ts +2 -0
  141. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.js +7 -0
  142. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.d.ts +3 -7
  143. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.js +1 -5
  144. package/lib/providers/authentication/terra/hooks/useFetchProfiles.d.ts +13 -0
  145. package/lib/providers/authentication/terra/hooks/useFetchProfiles.js +31 -0
  146. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.js +11 -6
  147. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.js +11 -6
  148. package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.js +11 -6
  149. package/lib/providers/authentication/terra/hooks/utils.d.ts +16 -0
  150. package/lib/providers/authentication/terra/hooks/utils.js +19 -0
  151. package/lib/providers/authentication/terra/provider.d.ts +2 -0
  152. package/lib/providers/authentication/terra/provider.js +42 -0
  153. package/lib/providers/authentication/terra/types.d.ts +20 -0
  154. package/lib/providers/authentication/terra/types.js +6 -0
  155. package/lib/providers/authentication/terra/utils.d.ts +19 -0
  156. package/lib/providers/authentication/terra/utils.js +36 -0
  157. package/lib/providers/authentication/token/constants.d.ts +2 -0
  158. package/lib/providers/authentication/token/constants.js +4 -0
  159. package/lib/providers/authentication/token/dispatch.d.ts +12 -0
  160. package/lib/providers/authentication/token/dispatch.js +22 -0
  161. package/lib/providers/authentication/token/reducer.d.ts +8 -0
  162. package/lib/providers/authentication/token/reducer.js +22 -0
  163. package/lib/providers/authentication/token/types.d.ts +28 -0
  164. package/lib/providers/authentication/token/types.js +5 -0
  165. package/lib/providers/exploreState.js +3 -5
  166. package/lib/providers/googleSignInAuthentication/common/types.d.ts +17 -0
  167. package/lib/providers/googleSignInAuthentication/common/types.js +1 -0
  168. package/lib/providers/googleSignInAuthentication/constants.d.ts +4 -0
  169. package/lib/providers/googleSignInAuthentication/constants.js +12 -0
  170. package/lib/providers/googleSignInAuthentication/hooks/useGoogleSignInService.d.ts +3 -0
  171. package/lib/providers/googleSignInAuthentication/hooks/useGoogleSignInService.js +36 -0
  172. package/lib/providers/googleSignInAuthentication/profile/types.d.ts +14 -0
  173. package/lib/providers/googleSignInAuthentication/profile/types.js +1 -0
  174. package/lib/providers/googleSignInAuthentication/profile/utils.d.ts +8 -0
  175. package/lib/providers/googleSignInAuthentication/profile/utils.js +25 -0
  176. package/lib/providers/googleSignInAuthentication/provider.d.ts +2 -0
  177. package/lib/providers/googleSignInAuthentication/provider.js +40 -0
  178. package/lib/providers/googleSignInAuthentication/service/constants.d.ts +4 -0
  179. package/lib/providers/googleSignInAuthentication/service/constants.js +9 -0
  180. package/lib/providers/googleSignInAuthentication/service/service.d.ts +6 -0
  181. package/lib/providers/googleSignInAuthentication/service/service.js +43 -0
  182. package/lib/providers/googleSignInAuthentication/types.d.ts +6 -0
  183. package/lib/providers/googleSignInAuthentication/types.js +1 -0
  184. package/lib/providers/nextAuthAuthentication/hooks/useNextAuthService.d.ts +2 -0
  185. package/lib/providers/nextAuthAuthentication/hooks/useNextAuthService.js +14 -0
  186. package/lib/providers/nextAuthAuthentication/provider.d.ts +2 -0
  187. package/lib/providers/nextAuthAuthentication/provider.js +30 -0
  188. package/lib/providers/nextAuthAuthentication/service/service.d.ts +6 -0
  189. package/lib/providers/nextAuthAuthentication/service/service.js +12 -0
  190. package/lib/providers/nextAuthAuthentication/types.d.ts +8 -0
  191. package/lib/providers/nextAuthAuthentication/types.js +1 -0
  192. package/lib/routes/constants.d.ts +3 -0
  193. package/lib/routes/constants.js +3 -0
  194. package/lib/styles/common/mui/button.d.ts +3 -0
  195. package/lib/styles/common/mui/button.js +17 -0
  196. package/lib/styles/common/mui/paper.d.ts +2 -0
  197. package/lib/styles/common/mui/paper.js +9 -0
  198. package/lib/styles/common/mui/popover.d.ts +3 -0
  199. package/lib/styles/common/mui/popover.js +10 -0
  200. package/lib/theme/common/entities.d.ts +6 -0
  201. package/lib/theme/common/entities.js +1 -0
  202. package/lib/views/LoginView/loginView.d.ts +5 -1
  203. package/lib/views/LoginView/loginView.js +6 -4
  204. package/package.json +3 -2
  205. package/src/components/Authentication/components/SessionController/components/GoogleSessionController/SessionController.tsx +38 -0
  206. package/src/components/Authentication/components/SessionController/components/GoogleSessionController/types.ts +7 -0
  207. package/src/components/Authentication/components/SessionController/components/NextSessionController/SessionController.tsx +23 -0
  208. package/src/components/Authentication/components/SessionController/components/NextSessionController/constants.ts +21 -0
  209. package/src/components/Authentication/components/SessionController/components/NextSessionController/types.ts +5 -0
  210. package/src/components/Authentication/components/SessionController/components/NextSessionController/utils.ts +74 -0
  211. package/src/components/ComponentCreator/ComponentCreator.tsx +4 -3
  212. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/FormStep/components/AcceptTerraTOS/acceptTerraTOS.tsx +4 -4
  213. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/components/NIHAccountExpiryWarning/nihAccountExpiryWarning.tsx +1 -1
  214. package/src/components/Export/components/ExportToTerra/components/TerraSetUpForm/terraSetUpForm.tsx +9 -6
  215. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/authentication.tsx +27 -25
  216. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.styles.ts +2 -2
  217. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.tsx +18 -42
  218. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/constants.ts +19 -0
  219. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/Button/button.styles.ts +3 -2
  220. package/src/components/Layout/components/Header/header.tsx +1 -1
  221. package/src/components/Login/components/Button/button.styles.ts +12 -0
  222. package/src/components/Login/components/Button/button.tsx +8 -0
  223. package/src/components/Login/components/Button/constants.ts +8 -0
  224. package/src/components/Login/components/Button/types.ts +4 -0
  225. package/src/components/Login/login.tsx +28 -28
  226. package/src/components/Login/types.ts +11 -0
  227. package/src/components/common/Banner/components/SessionTimeout/sessionTimeout.tsx +1 -1
  228. package/src/components/common/CustomIcon/common/entities.ts +1 -4
  229. package/src/components/common/CustomIcon/components/GoogleIcon/googleIcon.tsx +3 -4
  230. package/src/config/entities.ts +20 -25
  231. package/src/hooks/authentication/auth/useAuthReducer.ts +16 -0
  232. package/src/hooks/authentication/authentication/useAuthenticationReducer.ts +16 -0
  233. package/src/hooks/authentication/config/useAuthenticationConfig.ts +13 -0
  234. package/src/hooks/authentication/credentials/useCredentialsReducer.ts +13 -0
  235. package/src/hooks/authentication/profile/types.ts +9 -0
  236. package/src/hooks/authentication/profile/useProfile.ts +21 -0
  237. package/src/hooks/authentication/providers/types.ts +7 -0
  238. package/src/hooks/authentication/providers/useProviders.ts +23 -0
  239. package/src/hooks/authentication/session/useSessionActive.ts +51 -0
  240. package/src/hooks/authentication/session/useSessionCallbackUrl.ts +25 -0
  241. package/src/hooks/authentication/session/useSessionIdleTimer.ts +10 -0
  242. package/src/hooks/{useSessionTimeout.ts → authentication/session/useSessionTimeout.ts} +2 -2
  243. package/src/hooks/{useAuthentication → authentication/terra}/useAuthenticationForm.ts +8 -13
  244. package/src/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.ts +3 -4
  245. package/src/hooks/authentication/token/types.ts +5 -0
  246. package/src/hooks/authentication/token/useToken.ts +9 -0
  247. package/src/hooks/authentication/token/useTokenReducer.ts +19 -0
  248. package/src/hooks/useEntityList.ts +2 -2
  249. package/src/hooks/useFetchEntity.tsx +3 -3
  250. package/src/hooks/useFileManifest/useFetchFilesFacets.ts +2 -3
  251. package/src/hooks/useFileManifest/useFetchSummary.ts +2 -3
  252. package/src/hooks/useRequestFileLocation.ts +2 -3
  253. package/src/hooks/useRouteHistory.ts +65 -0
  254. package/src/hooks/useRouteRoot.ts +11 -0
  255. package/src/hooks/useSummary.ts +3 -3
  256. package/src/providers/authentication/auth/actions.ts +17 -0
  257. package/src/providers/authentication/auth/constants.ts +6 -0
  258. package/src/providers/authentication/auth/context.ts +9 -0
  259. package/src/providers/authentication/auth/dispatch.ts +58 -0
  260. package/src/providers/authentication/auth/hook.ts +11 -0
  261. package/src/providers/authentication/auth/reducer.ts +25 -0
  262. package/src/providers/authentication/auth/types.ts +63 -0
  263. package/src/providers/authentication/authentication/actions.ts +17 -0
  264. package/src/providers/authentication/authentication/constants.ts +6 -0
  265. package/src/providers/authentication/authentication/context.ts +8 -0
  266. package/src/providers/authentication/authentication/dispatch.ts +55 -0
  267. package/src/providers/authentication/authentication/hook.ts +11 -0
  268. package/src/providers/authentication/authentication/reducer.ts +34 -0
  269. package/src/providers/authentication/authentication/types.ts +64 -0
  270. package/src/providers/authentication/authentication/utils.ts +25 -0
  271. package/src/providers/authentication/common/types.ts +1 -0
  272. package/src/providers/authentication/common/utils.ts +11 -0
  273. package/src/providers/authentication/credentials/actions.ts +17 -0
  274. package/src/providers/authentication/credentials/constants.ts +5 -0
  275. package/src/providers/authentication/credentials/context.ts +8 -0
  276. package/src/providers/authentication/credentials/dispatch.ts +31 -0
  277. package/src/providers/authentication/credentials/hook.ts +11 -0
  278. package/src/providers/authentication/credentials/reducer.ts +30 -0
  279. package/src/providers/authentication/credentials/types.ts +33 -0
  280. package/src/providers/authentication/terra/context.ts +16 -0
  281. package/src/providers/authentication/terra/hook.ts +11 -0
  282. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/constants.ts +9 -0
  283. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/entities.ts +1 -7
  284. package/src/providers/authentication/terra/hooks/useFetchProfiles.ts +61 -0
  285. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.ts +18 -7
  286. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.ts +18 -7
  287. package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.ts +18 -7
  288. package/src/providers/authentication/terra/hooks/utils.ts +29 -0
  289. package/src/providers/authentication/terra/provider.tsx +60 -0
  290. package/src/providers/authentication/terra/types.ts +23 -0
  291. package/src/providers/authentication/terra/utils.ts +49 -0
  292. package/src/providers/authentication/token/constants.ts +6 -0
  293. package/src/providers/authentication/token/dispatch.ts +29 -0
  294. package/src/providers/authentication/token/reducer.ts +26 -0
  295. package/src/providers/authentication/token/types.ts +36 -0
  296. package/src/providers/exploreState.tsx +3 -4
  297. package/src/providers/googleSignInAuthentication/common/types.ts +28 -0
  298. package/src/providers/googleSignInAuthentication/constants.ts +17 -0
  299. package/src/providers/googleSignInAuthentication/hooks/useGoogleSignInService.ts +53 -0
  300. package/src/providers/googleSignInAuthentication/profile/types.ts +15 -0
  301. package/src/providers/googleSignInAuthentication/profile/utils.ts +29 -0
  302. package/src/providers/googleSignInAuthentication/provider.tsx +53 -0
  303. package/src/providers/googleSignInAuthentication/service/constants.ts +16 -0
  304. package/src/providers/googleSignInAuthentication/service/service.ts +68 -0
  305. package/src/providers/googleSignInAuthentication/types.ts +7 -0
  306. package/src/providers/nextAuthAuthentication/hooks/useNextAuthService.ts +26 -0
  307. package/src/providers/nextAuthAuthentication/provider.tsx +42 -0
  308. package/src/providers/nextAuthAuthentication/service/service.ts +14 -0
  309. package/src/providers/nextAuthAuthentication/types.ts +9 -0
  310. package/src/routes/constants.ts +3 -0
  311. package/src/styles/common/mui/button.ts +20 -0
  312. package/src/styles/common/mui/paper.ts +11 -0
  313. package/src/styles/common/mui/popover.ts +19 -0
  314. package/src/theme/common/entities.ts +7 -0
  315. package/src/views/LoginView/loginView.tsx +15 -9
  316. package/tests/getProfileStatus.test.ts +290 -0
  317. package/tests/terraProfileProvider.test.tsx +121 -0
  318. package/tests/transformRoute.test.ts +21 -0
  319. package/tests/useRouteHistory.test.ts +97 -0
  320. package/tests/useSessionActive.test.ts +107 -0
  321. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.d.ts +0 -5
  322. package/lib/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.js +0 -29
  323. package/lib/components/Login/login.stories.d.ts +0 -6
  324. package/lib/components/Login/login.stories.js +0 -31
  325. package/lib/components/common/Button/components/LoginButton/loginButton.d.ts +0 -3
  326. package/lib/components/common/Button/components/LoginButton/loginButton.js +0 -6
  327. package/lib/components/common/Button/components/LoginButton/loginButton.styles.d.ts +0 -7
  328. package/lib/components/common/Button/components/LoginButton/loginButton.styles.js +0 -11
  329. package/lib/hooks/useAuthentication/useAuthentication.d.ts +0 -6
  330. package/lib/hooks/useAuthentication/useAuthentication.js +0 -9
  331. package/lib/hooks/useAuthentication/useAuthenticationComplete.d.ts +0 -6
  332. package/lib/hooks/useAuthentication/useAuthenticationComplete.js +0 -55
  333. package/lib/hooks/useAuthentication/useAuthenticationStatus.d.ts +0 -20
  334. package/lib/hooks/useAuthentication/useAuthenticationStatus.js +0 -32
  335. package/lib/hooks/useAuthentication/useFetchGoogleProfile.d.ts +0 -21
  336. package/lib/hooks/useAuthentication/useFetchGoogleProfile.js +0 -41
  337. package/lib/hooks/useAuthentication/useTokenClient.d.ts +0 -11
  338. package/lib/hooks/useAuthentication/useTokenClient.js +0 -29
  339. package/lib/hooks/useAuthenticationConfig.d.ts +0 -6
  340. package/lib/hooks/useAuthenticationConfig.js +0 -14
  341. package/lib/providers/authentication.d.ts +0 -51
  342. package/lib/providers/authentication.js +0 -110
  343. package/src/components/Layout/components/Header/components/Content/components/Actions/components/Authentication/components/AuthenticationMenu/authenticationMenu.stories.tsx +0 -35
  344. package/src/components/Login/login.stories.tsx +0 -43
  345. package/src/components/common/Button/components/LoginButton/loginButton.styles.ts +0 -13
  346. package/src/components/common/Button/components/LoginButton/loginButton.tsx +0 -16
  347. package/src/hooks/useAuthentication/useAuthentication.tsx +0 -10
  348. package/src/hooks/useAuthentication/useAuthenticationComplete.ts +0 -66
  349. package/src/hooks/useAuthentication/useAuthenticationStatus.ts +0 -49
  350. package/src/hooks/useAuthentication/useFetchGoogleProfile.ts +0 -68
  351. package/src/hooks/useAuthentication/useTokenClient.ts +0 -54
  352. package/src/hooks/useAuthenticationConfig.ts +0 -18
  353. package/src/providers/authentication.tsx +0 -181
  354. package/tests/authentication.test.ts +0 -142
  355. package/tests/useAuthenticationStatus.test.ts +0 -155
  356. /package/lib/hooks/{useSessionTimeout.d.ts → authentication/session/useSessionTimeout.d.ts} +0 -0
  357. /package/lib/hooks/{useAuthentication → authentication/terra}/useAuthenticationNIHExpiry.d.ts +0 -0
  358. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.d.ts +0 -0
  359. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.js +0 -0
  360. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraNIHProfile.d.ts +0 -0
  361. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraProfile.d.ts +0 -0
  362. /package/lib/{hooks/useAuthentication → providers/authentication/terra/hooks}/useFetchTerraTermsOfService.d.ts +0 -0
  363. /package/src/{hooks/useAuthentication → providers/authentication/terra/hooks}/common/utils.ts +0 -0
@@ -1,29 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { useAuthenticationConfig } from "../useAuthenticationConfig";
3
- /**
4
- * Initializes the token client, sets token from token client callback.
5
- * @returns initialized token client.
6
- */
7
- export const useTokenClient = () => {
8
- const [token, setToken] = useState();
9
- const [tokenClient, setTokenClient] = useState();
10
- const authenticationConfig = useAuthenticationConfig();
11
- const { googleGISAuthConfig: { clientId, scope } = {} } = authenticationConfig;
12
- // Initializes token client - (authorization client id must be configured).
13
- useEffect(() => {
14
- if (clientId) {
15
- setTokenClient(google.accounts.oauth2.initTokenClient({
16
- callback: (tokenResponse) => {
17
- const access_token = tokenResponse.access_token;
18
- setToken(access_token);
19
- },
20
- client_id: clientId,
21
- scope,
22
- }));
23
- }
24
- }, [clientId, scope]);
25
- return {
26
- token,
27
- tokenClient,
28
- };
29
- };
@@ -1,6 +0,0 @@
1
- import { AuthenticationConfig } from "../config/entities";
2
- /**
3
- * Hook to get the authentication config
4
- * @returns @see AuthenticationConfig used in the current config.
5
- */
6
- export declare const useAuthenticationConfig: () => AuthenticationConfig;
@@ -1,14 +0,0 @@
1
- import { useConfig } from "./useConfig";
2
- /**
3
- * Hook to get the authentication config
4
- * @returns @see AuthenticationConfig used in the current config.
5
- */
6
- export const useAuthenticationConfig = () => {
7
- const { config } = useConfig();
8
- if (!config.authentication) {
9
- return {
10
- title: "",
11
- };
12
- }
13
- return config.authentication;
14
- };
@@ -1,51 +0,0 @@
1
- import React, { ReactNode } from "react";
2
- import { AUTHENTICATION_STATUS, LoginStatus } from "../hooks/useAuthentication/common/entities";
3
- import { UserProfile } from "../hooks/useAuthentication/useFetchGoogleProfile";
4
- import { TerraNIHResponse } from "../hooks/useAuthentication/useFetchTerraNIHProfile";
5
- import { TerraResponse } from "../hooks/useAuthentication/useFetchTerraProfile";
6
- import { TerraTermsOfServiceResponse } from "../hooks/useAuthentication/useFetchTerraTermsOfService";
7
- export declare const ROUTE_LOGIN = "/login";
8
- type AuthenticateUserFn = () => void;
9
- type RequestAuthenticationFn = () => void;
10
- /**
11
- * Model of authentication context.
12
- */
13
- export interface AuthContextProps {
14
- authenticateUser: AuthenticateUserFn;
15
- authenticationStatus: AUTHENTICATION_STATUS;
16
- isAuthenticated: boolean;
17
- isEnabled: boolean;
18
- requestAuthentication: RequestAuthenticationFn;
19
- terraNIHProfileLoginStatus: LoginStatus<TerraNIHResponse>;
20
- terraProfileLoginStatus: LoginStatus<TerraResponse>;
21
- terraTOSLoginStatus: LoginStatus<TerraTermsOfServiceResponse>;
22
- token?: string;
23
- userProfile?: UserProfile;
24
- }
25
- /**
26
- * Auth context for storing and using auth-related state.
27
- */
28
- export declare const AuthContext: React.Context<AuthContextProps>;
29
- interface Props {
30
- children: ReactNode | ReactNode[];
31
- sessionTimeout?: number;
32
- }
33
- /**
34
- * Auth provider for consuming components to subscribe to changes in auth-related state.
35
- * @param props - Component inputs.
36
- * @param props.children - Set of children components that can possibly consume the query provider.
37
- * @param props.sessionTimeout - If provided, will set the value for a session timeout (in milliseconds).
38
- * @returns Provider element to be used by consumers to both update authentication state and subscribe to changes in authentication state.
39
- */
40
- export declare function AuthProvider({ children, sessionTimeout }: Props): JSX.Element;
41
- /**
42
- * Token is released for the following conditions:
43
- * - Terra endpoint is configured and the terms of service response is successful, or
44
- * - Terra endpoint is not configured and the user profile response is successful.
45
- * @param userProfileLoginStatus - User profile login status.
46
- * @param terraProfileLoginStatus - Terra profile login status.
47
- * @param terraTOSLoginStatus - Terra terms of service login status.
48
- * @returns true if the token should be released.
49
- */
50
- export declare function shouldReleaseToken(userProfileLoginStatus: LoginStatus<UserProfile>, terraProfileLoginStatus: LoginStatus<TerraResponse>, terraTOSLoginStatus: LoginStatus<TerraTermsOfServiceResponse>): boolean;
51
- export {};
@@ -1,110 +0,0 @@
1
- import Router, { useRouter } from "next/router";
2
- import React, { createContext, useCallback } from "react";
3
- import { useIdleTimer } from "react-idle-timer";
4
- import { LOGIN_STATUS_NOT_STARTED } from "../hooks/useAuthentication/common/constants";
5
- import { AUTHENTICATION_STATUS, } from "../hooks/useAuthentication/common/entities";
6
- import { useAuthenticationComplete } from "../hooks/useAuthentication/useAuthenticationComplete";
7
- import { useAuthenticationStatus } from "../hooks/useAuthentication/useAuthenticationStatus";
8
- import { useFetchGoogleProfile, } from "../hooks/useAuthentication/useFetchGoogleProfile";
9
- import { useFetchTerraNIHProfile, } from "../hooks/useAuthentication/useFetchTerraNIHProfile";
10
- import { useFetchTerraProfile, } from "../hooks/useAuthentication/useFetchTerraProfile";
11
- import { useFetchTerraTermsOfService, } from "../hooks/useAuthentication/useFetchTerraTermsOfService";
12
- import { useTokenClient } from "../hooks/useAuthentication/useTokenClient";
13
- import { useConfig } from "../hooks/useConfig";
14
- import { INACTIVITY_PARAM } from "../hooks/useSessionTimeout";
15
- // Template constants
16
- export const ROUTE_LOGIN = "/login";
17
- /**
18
- * Auth context for storing and using auth-related state.
19
- */
20
- export const AuthContext = createContext({
21
- // eslint-disable-next-line @typescript-eslint/no-empty-function -- allow dummy function for default state.
22
- authenticateUser: () => { },
23
- authenticationStatus: AUTHENTICATION_STATUS.INCOMPLETE,
24
- isAuthenticated: false,
25
- isEnabled: false,
26
- // eslint-disable-next-line @typescript-eslint/no-empty-function -- allow dummy function for default state.
27
- requestAuthentication: () => { },
28
- terraNIHProfileLoginStatus: LOGIN_STATUS_NOT_STARTED,
29
- terraProfileLoginStatus: LOGIN_STATUS_NOT_STARTED,
30
- terraTOSLoginStatus: LOGIN_STATUS_NOT_STARTED,
31
- token: undefined,
32
- userProfile: undefined,
33
- });
34
- /**
35
- * Auth provider for consuming components to subscribe to changes in auth-related state.
36
- * @param props - Component inputs.
37
- * @param props.children - Set of children components that can possibly consume the query provider.
38
- * @param props.sessionTimeout - If provided, will set the value for a session timeout (in milliseconds).
39
- * @returns Provider element to be used by consumers to both update authentication state and subscribe to changes in authentication state.
40
- */
41
- export function AuthProvider({ children, sessionTimeout }) {
42
- const { config } = useConfig();
43
- const { authentication, redirectRootToPath } = config;
44
- const { basePath } = useRouter();
45
- const { token, tokenClient } = useTokenClient();
46
- const terraNIHProfileLoginStatus = useFetchTerraNIHProfile(token);
47
- const terraProfileLoginStatus = useFetchTerraProfile(token);
48
- const terraTOSLoginStatus = useFetchTerraTermsOfService(token);
49
- const userProfileLoginStatus = useFetchGoogleProfile(token);
50
- const isEnabled = Boolean(authentication);
51
- const isAuthenticated = userProfileLoginStatus.isSuccess;
52
- const releaseToken = shouldReleaseToken(userProfileLoginStatus, terraProfileLoginStatus, terraTOSLoginStatus);
53
- const authenticationStatus = useAuthenticationStatus(userProfileLoginStatus, terraProfileLoginStatus, terraTOSLoginStatus, terraNIHProfileLoginStatus);
54
- // Handle completion of authentication process.
55
- useAuthenticationComplete(authenticationStatus);
56
- /**
57
- * If sessionTimeout is set and user is authenticated, the app will reload and redirect to
58
- * origin, including base path, root path, and query param.
59
- */
60
- useIdleTimer({
61
- onIdle: () => isAuthenticated &&
62
- sessionTimeout &&
63
- (window.location.href =
64
- window.location.origin +
65
- basePath +
66
- redirectRootToPath +
67
- "?" +
68
- `${INACTIVITY_PARAM}=true`),
69
- timeout: sessionTimeout,
70
- });
71
- /**
72
- * Requests access token and authenticates user.
73
- */
74
- const authenticateUser = useCallback(() => {
75
- tokenClient.requestAccessToken();
76
- }, [tokenClient]);
77
- /**
78
- * Navigates to login page.
79
- */
80
- const requestAuthentication = useCallback(() => {
81
- Router.push(ROUTE_LOGIN);
82
- }, []);
83
- return (React.createElement(AuthContext.Provider, { value: {
84
- authenticateUser,
85
- authenticationStatus,
86
- isAuthenticated,
87
- isEnabled,
88
- requestAuthentication,
89
- terraNIHProfileLoginStatus,
90
- terraProfileLoginStatus,
91
- terraTOSLoginStatus,
92
- token: releaseToken ? token : undefined,
93
- userProfile: userProfileLoginStatus.response,
94
- } }, children));
95
- }
96
- /**
97
- * Token is released for the following conditions:
98
- * - Terra endpoint is configured and the terms of service response is successful, or
99
- * - Terra endpoint is not configured and the user profile response is successful.
100
- * @param userProfileLoginStatus - User profile login status.
101
- * @param terraProfileLoginStatus - Terra profile login status.
102
- * @param terraTOSLoginStatus - Terra terms of service login status.
103
- * @returns true if the token should be released.
104
- */
105
- export function shouldReleaseToken(userProfileLoginStatus, terraProfileLoginStatus, terraTOSLoginStatus) {
106
- if (terraProfileLoginStatus.isSupported) {
107
- return terraTOSLoginStatus.isSuccess;
108
- }
109
- return userProfileLoginStatus.isSuccess;
110
- }
@@ -1,35 +0,0 @@
1
- import { Meta, StoryFn } from "@storybook/react";
2
- import React from "react";
3
- import { AuthenticationMenu } from "./authenticationMenu";
4
-
5
- export default {
6
- argTypes: {
7
- onLogout: {
8
- description: "Callback to be called when 'Logout' button is clicked",
9
- },
10
- userProfile: {
11
- description: "User profile with name and avatar",
12
- },
13
- },
14
- component: AuthenticationMenu,
15
- title: "Components/Navigation/AuthenticationMenu",
16
- } as Meta<typeof AuthenticationMenu>;
17
-
18
- const AuthenticationMenuTemplate: StoryFn<typeof AuthenticationMenu> = (
19
- args
20
- ) => <AuthenticationMenu {...args} />;
21
-
22
- export const AuthenticationMenuStory = AuthenticationMenuTemplate.bind({});
23
- AuthenticationMenuStory.args = {
24
- userProfile: {
25
- email: "john@smith.com",
26
- email_verified: true,
27
- family_name: "Smith",
28
- given_name: "John",
29
- hd: "",
30
- locale: "",
31
- name: "john_smith",
32
- picture: "https://i.pravatar.cc/200",
33
- sub: "",
34
- },
35
- };
@@ -1,43 +0,0 @@
1
- import { Meta, StoryObj } from "@storybook/react";
2
- import React from "react";
3
- import { HelpIconButton } from "../common/Button/components/HelpIconButton/helpIconButton";
4
- import { Login } from "./login";
5
-
6
- export default {
7
- argTypes: {
8
- isGoogle: { control: "boolean" },
9
- termsOfService: { control: "object" },
10
- text: { control: "object" },
11
- title: { control: "text" },
12
- warning: { control: "object" },
13
- },
14
- component: Login,
15
- parameters: {
16
- layout: "fullscreen",
17
- },
18
- title: "Components/Login",
19
- } as Meta<typeof Login>;
20
-
21
- type Story = StoryObj<typeof Login>;
22
-
23
- export const LoginStory: Story = {
24
- args: {
25
- isGoogle: true,
26
- termsOfService: (
27
- <p>I have read and agree to privacy notice and terms of use</p>
28
- ),
29
- text: (
30
- <p>
31
- Please sign in to your Data Explorer account{" "}
32
- <HelpIconButton url="https://www.google.com/" />
33
- </p>
34
- ),
35
- title: "Sign in to your account",
36
- warning: (
37
- <div>
38
- <p>WARNING NOTICE</p>
39
- <p>This is a warning notice.</p>
40
- </div>
41
- ),
42
- },
43
- };
@@ -1,13 +0,0 @@
1
- import styled from "@emotion/styled";
2
- import { ButtonSecondary } from "../ButtonSecondary/buttonSecondary";
3
-
4
- export const LoginButton = styled(ButtonSecondary)`
5
- .MuiButton-endIcon {
6
- margin-right: -6px;
7
- }
8
- `;
9
-
10
- export const LoginButtonText = styled.span`
11
- flex: 1;
12
- text-align: left;
13
- `;
@@ -1,16 +0,0 @@
1
- import React from "react";
2
- import { ButtonProps } from "../../button";
3
- import { LoginButton as Button, LoginButtonText } from "./loginButton.styles";
4
-
5
- export type LoginButtonProps = Exclude<ButtonProps, "StartIcon">;
6
-
7
- export const LoginButton = ({
8
- children,
9
- ...props
10
- }: LoginButtonProps): JSX.Element => {
11
- return (
12
- <Button fullWidth={true} {...props}>
13
- <LoginButtonText>{children}</LoginButtonText>
14
- </Button>
15
- );
16
- };
@@ -1,10 +0,0 @@
1
- import { useContext } from "react";
2
- import { AuthContext, AuthContextProps } from "../../providers/authentication";
3
-
4
- /**
5
- * Returns authentication context.
6
- * @returns authentication context.
7
- */
8
- export const useAuthentication = (): AuthContextProps => {
9
- return useContext(AuthContext);
10
- };
@@ -1,66 +0,0 @@
1
- import Router, { useRouter } from "next/router";
2
- import { useEffect, useMemo, useRef } from "react";
3
- import { escapeRegExp } from "../../common/utils";
4
- import { ROUTE_LOGIN } from "../../providers/authentication";
5
- import { INACTIVITY_PARAM } from "../useSessionTimeout";
6
- import { AUTHENTICATION_STATUS } from "./common/entities";
7
-
8
- /**
9
- * Handles the completion of the authentication process.
10
- * @param authenticationStatus - Authentication status.
11
- */
12
- export const useAuthenticationComplete = (
13
- authenticationStatus: AUTHENTICATION_STATUS
14
- ): void => {
15
- const { asPath } = useRouter();
16
- const routeHistoryRef = useRef<string>(initRouteHistory(asPath));
17
-
18
- // Maintain a history of routes that have been visited prior to authentication.
19
- routeHistoryRef.current = useMemo(
20
- () => updateRouteHistory(routeHistoryRef.current, asPath),
21
- [asPath]
22
- );
23
-
24
- // Redirect to the previous route after authentication is completed.
25
- useEffect(() => {
26
- if (authenticationStatus === AUTHENTICATION_STATUS.COMPLETED) {
27
- Router.push(routeHistoryRef.current);
28
- }
29
- }, [authenticationStatus]);
30
- };
31
-
32
- /**
33
- * Initializes route history with the current path.
34
- * Returns base path if current path is the login route.
35
- * @param path - current browser path.
36
- * @returns path to be used as the initial route history.
37
- */
38
- function initRouteHistory(path: string): string {
39
- return path === ROUTE_LOGIN ? "/" : removeInactivityTimeoutQueryParam(path);
40
- }
41
-
42
- /**
43
- * Removes the inactivity timeout query parameter from the path.
44
- * the inactivity timeout parameter is used to indicate that the session has timed out; remove the parameter to
45
- * clear the session timeout banner after the user logs in again.
46
- * @param path - Path.
47
- * @returns path without the inactivity timeout query parameter.
48
- */
49
- function removeInactivityTimeoutQueryParam(path: string): string {
50
- const regex = new RegExp(`\\?${escapeRegExp(INACTIVITY_PARAM)}(?:$|[=&].*)`);
51
- return path.replace(regex, "");
52
- }
53
-
54
- /**
55
- * Updates route history with the current path, unless the current path is the LoginView page.
56
- * @param prevPath - route history path.
57
- * @param path - current browser path.
58
- * @returns updated path to be used as the route history.
59
- */
60
- function updateRouteHistory(prevPath: string, path: string): string {
61
- let currentPath = prevPath;
62
- if (path !== ROUTE_LOGIN) {
63
- currentPath = path;
64
- }
65
- return removeInactivityTimeoutQueryParam(currentPath);
66
- }
@@ -1,49 +0,0 @@
1
- import {
2
- AUTHENTICATION_STATUS,
3
- LoginResponse,
4
- LoginStatus,
5
- REQUEST_STATUS,
6
- } from "./common/entities";
7
- import { GoogleResponse } from "./useFetchGoogleProfile";
8
- import { TerraNIHResponse } from "./useFetchTerraNIHProfile";
9
- import { TerraResponse } from "./useFetchTerraProfile";
10
- import { TerraTermsOfServiceResponse } from "./useFetchTerraTermsOfService";
11
-
12
- /**
13
- * Handles the status of the authentication process.
14
- * @param userProfileLoginStatus - User profile login status.
15
- * @param terraProfileLoginStatus - Terra profile login status.
16
- * @param terraTOSLoginStatus - Terra terms of service login status.
17
- * @param terraNIHProfileLoginStatus - Terra NIH profile login status.
18
- * @returns authentication status.
19
- */
20
- export const useAuthenticationStatus = (
21
- userProfileLoginStatus: LoginStatus<GoogleResponse>,
22
- terraProfileLoginStatus: LoginStatus<TerraResponse>,
23
- terraTOSLoginStatus: LoginStatus<TerraTermsOfServiceResponse>,
24
- terraNIHProfileLoginStatus: LoginStatus<TerraNIHResponse>
25
- ): AUTHENTICATION_STATUS => {
26
- return getAuthenticationStatus([
27
- terraNIHProfileLoginStatus,
28
- terraProfileLoginStatus,
29
- terraTOSLoginStatus,
30
- userProfileLoginStatus,
31
- ]);
32
- };
33
-
34
- /**
35
- * Returns the authentication status ("INCOMPLETE" or "COMPLETE").
36
- * @param loginStatuses - Login statuses.
37
- * @returns authentication status.
38
- */
39
- export function getAuthenticationStatus(
40
- loginStatuses: LoginStatus<LoginResponse>[]
41
- ): AUTHENTICATION_STATUS {
42
- for (const loginStatus of loginStatuses) {
43
- if (!loginStatus.isSupported) continue;
44
- if (loginStatus.requestStatus === REQUEST_STATUS.NOT_STARTED) {
45
- return AUTHENTICATION_STATUS.INCOMPLETE;
46
- }
47
- }
48
- return AUTHENTICATION_STATUS.COMPLETED;
49
- }
@@ -1,68 +0,0 @@
1
- import { useCallback, useEffect, useState } from "react";
2
- import { useAuthenticationConfig } from "../useAuthenticationConfig";
3
- import {
4
- LOGIN_STATUS_FAILED,
5
- LOGIN_STATUS_NOT_STARTED,
6
- } from "./common/constants";
7
- import { LoginStatus, REQUEST_STATUS } from "./common/entities";
8
- import { getAuthenticationRequestOptions } from "./common/utils";
9
-
10
- export type UserProfile = GoogleResponse;
11
-
12
- export interface GoogleResponse {
13
- email: string;
14
- email_verified: boolean;
15
- family_name: string;
16
- given_name: string;
17
- hd: string;
18
- locale: string;
19
- name: string;
20
- picture: string;
21
- sub: string;
22
- }
23
-
24
- type Status = LoginStatus<GoogleResponse>;
25
-
26
- /**
27
- * Returns user profile login status from configured endpoint.
28
- * @param token - Token.
29
- * @returns google profile login status.
30
- */
31
- export const useFetchGoogleProfile = (token?: string): Status => {
32
- const authenticationConfig = useAuthenticationConfig();
33
- const { googleGISAuthConfig: { googleProfileEndpoint: endpoint } = {} } =
34
- authenticationConfig;
35
- const [loginStatus, setLoginStatus] = useState<Status>(
36
- LOGIN_STATUS_NOT_STARTED as Status
37
- );
38
-
39
- // Fetch google user profile.
40
- const fetchEndpointData = useCallback(
41
- (endpoint: string, accessToken: string): void => {
42
- fetch(endpoint, getAuthenticationRequestOptions(accessToken))
43
- .then((response) => response.json())
44
- .then((profile: GoogleResponse) => {
45
- setLoginStatus((prevStatus) => ({
46
- ...prevStatus,
47
- isSuccess: true,
48
- requestStatus: REQUEST_STATUS.COMPLETED,
49
- response: profile,
50
- }));
51
- })
52
- .catch((err) => {
53
- console.log(err); // TODO handle error.
54
- setLoginStatus(LOGIN_STATUS_FAILED as Status);
55
- });
56
- },
57
- []
58
- );
59
-
60
- // Fetches user profile.
61
- useEffect(() => {
62
- if (!token) return;
63
- if (!endpoint) return;
64
- fetchEndpointData(endpoint, token);
65
- }, [endpoint, fetchEndpointData, token]);
66
-
67
- return loginStatus;
68
- };
@@ -1,54 +0,0 @@
1
- import { useEffect, useState } from "react";
2
- import { useAuthenticationConfig } from "../useAuthenticationConfig";
3
-
4
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO see https://github.com/clevercanary/data-browser/issues/544.
5
- declare const google: any;
6
-
7
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- TODO see https://github.com/clevercanary/data-browser/issues/544.
8
- type TokenClient = any;
9
-
10
- interface TokenResponse {
11
- access_token: string;
12
- expires_in: number;
13
- refresh_token?: string;
14
- scope?: string;
15
- token_type: string;
16
- }
17
-
18
- export interface UseTokenClient {
19
- token: string | undefined;
20
- tokenClient: TokenClient | undefined;
21
- }
22
-
23
- /**
24
- * Initializes the token client, sets token from token client callback.
25
- * @returns initialized token client.
26
- */
27
- export const useTokenClient = (): UseTokenClient => {
28
- const [token, setToken] = useState<string>();
29
- const [tokenClient, setTokenClient] = useState<TokenClient>();
30
- const authenticationConfig = useAuthenticationConfig();
31
- const { googleGISAuthConfig: { clientId, scope } = {} } =
32
- authenticationConfig;
33
-
34
- // Initializes token client - (authorization client id must be configured).
35
- useEffect(() => {
36
- if (clientId) {
37
- setTokenClient(
38
- google.accounts.oauth2.initTokenClient({
39
- callback: (tokenResponse: TokenResponse) => {
40
- const access_token = tokenResponse.access_token;
41
- setToken(access_token);
42
- },
43
- client_id: clientId,
44
- scope,
45
- })
46
- );
47
- }
48
- }, [clientId, scope]);
49
-
50
- return {
51
- token,
52
- tokenClient,
53
- };
54
- };
@@ -1,18 +0,0 @@
1
- import { AuthenticationConfig } from "../config/entities";
2
- import { useConfig } from "./useConfig";
3
-
4
- /**
5
- * Hook to get the authentication config
6
- * @returns @see AuthenticationConfig used in the current config.
7
- */
8
- export const useAuthenticationConfig = (): AuthenticationConfig => {
9
- const { config } = useConfig();
10
-
11
- if (!config.authentication) {
12
- return {
13
- title: "",
14
- };
15
- }
16
-
17
- return config.authentication;
18
- };