@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
@@ -0,0 +1,12 @@
1
+ import { ResetStateAction, UpdateCredentialsAction, UpdateCredentialsPayload } from "./types";
2
+ /**
3
+ * Update credentials action.
4
+ * @returns Action.
5
+ */
6
+ export declare function resetState(): ResetStateAction;
7
+ /**
8
+ * Update credentials action.
9
+ * @param payload - Payload.
10
+ * @returns Action.
11
+ */
12
+ export declare function updateCredentials(payload: UpdateCredentialsPayload): UpdateCredentialsAction;
@@ -0,0 +1,22 @@
1
+ import { CredentialsActionKind, } from "./types";
2
+ /**
3
+ * Update credentials action.
4
+ * @returns Action.
5
+ */
6
+ export function resetState() {
7
+ return {
8
+ payload: undefined,
9
+ type: CredentialsActionKind.ResetState,
10
+ };
11
+ }
12
+ /**
13
+ * Update credentials action.
14
+ * @param payload - Payload.
15
+ * @returns Action.
16
+ */
17
+ export function updateCredentials(payload) {
18
+ return {
19
+ payload,
20
+ type: CredentialsActionKind.UpdateCredentials,
21
+ };
22
+ }
@@ -0,0 +1,6 @@
1
+ import { CredentialsContextProps } from "./types";
2
+ /**
3
+ * Credentials hook.
4
+ * @returns credentials context.
5
+ */
6
+ export declare const useCredentials: () => CredentialsContextProps;
@@ -0,0 +1,9 @@
1
+ import { useContext } from "react";
2
+ import { CredentialsContext } from "./context";
3
+ /**
4
+ * Credentials hook.
5
+ * @returns credentials context.
6
+ */
7
+ export const useCredentials = () => {
8
+ return useContext(CredentialsContext);
9
+ };
@@ -0,0 +1,8 @@
1
+ import { CredentialsAction, CredentialsState } from "./types";
2
+ /**
3
+ * Credentials reducer.
4
+ * @param state - State.
5
+ * @param action - Action.
6
+ * @returns state.
7
+ */
8
+ export declare function credentialsReducer(state: CredentialsState, action: CredentialsAction): CredentialsState;
@@ -0,0 +1,22 @@
1
+ import { updateCredentialsAction } from "./actions";
2
+ import { DEFAULT_CREDENTIALS_STATE } from "./constants";
3
+ import { CredentialsActionKind, } from "./types";
4
+ /**
5
+ * Credentials reducer.
6
+ * @param state - State.
7
+ * @param action - Action.
8
+ * @returns state.
9
+ */
10
+ export function credentialsReducer(state, action) {
11
+ const { payload, type } = action;
12
+ switch (type) {
13
+ case CredentialsActionKind.ResetState: {
14
+ return DEFAULT_CREDENTIALS_STATE;
15
+ }
16
+ case CredentialsActionKind.UpdateCredentials: {
17
+ return updateCredentialsAction(state, payload);
18
+ }
19
+ default:
20
+ return state;
21
+ }
22
+ }
@@ -0,0 +1,24 @@
1
+ import { Dispatch } from "react";
2
+ export type Credentials<C = string | undefined> = C;
3
+ export type CredentialsAction = ResetStateAction | UpdateCredentialsAction;
4
+ export declare enum CredentialsActionKind {
5
+ ResetState = "RESET_STATE",
6
+ UpdateCredentials = "STORE_CREDENTIALS"
7
+ }
8
+ export interface CredentialsContextProps {
9
+ credentialsDispatch: Dispatch<CredentialsAction> | null;
10
+ credentialsState: CredentialsState;
11
+ }
12
+ export interface CredentialsState {
13
+ credentials: Credentials;
14
+ }
15
+ export type ResetStateAction = {
16
+ payload: ResetStatePayload;
17
+ type: CredentialsActionKind.ResetState;
18
+ };
19
+ export type ResetStatePayload = undefined;
20
+ export type UpdateCredentialsAction = {
21
+ payload: UpdateCredentialsPayload;
22
+ type: CredentialsActionKind.UpdateCredentials;
23
+ };
24
+ export type UpdateCredentialsPayload = Credentials;
@@ -0,0 +1,5 @@
1
+ export var CredentialsActionKind;
2
+ (function (CredentialsActionKind) {
3
+ CredentialsActionKind["ResetState"] = "RESET_STATE";
4
+ CredentialsActionKind["UpdateCredentials"] = "STORE_CREDENTIALS";
5
+ })(CredentialsActionKind || (CredentialsActionKind = {}));
@@ -0,0 +1,2 @@
1
+ import { TerraProfileContextProps } from "./types";
2
+ export declare const TerraProfileContext: import("react").Context<TerraProfileContextProps>;
@@ -0,0 +1,7 @@
1
+ import { createContext } from "react";
2
+ import { LOGIN_STATUS_NOT_STARTED } from "./hooks/common/constants";
3
+ export const TerraProfileContext = createContext({
4
+ terraNIHProfileLoginStatus: LOGIN_STATUS_NOT_STARTED,
5
+ terraProfileLoginStatus: LOGIN_STATUS_NOT_STARTED,
6
+ terraTOSLoginStatus: LOGIN_STATUS_NOT_STARTED,
7
+ });
@@ -0,0 +1,6 @@
1
+ import { TerraProfileContextProps } from "./types";
2
+ /**
3
+ * Terra profile hook.
4
+ * @returns terra profile context.
5
+ */
6
+ export declare const useTerraProfile: () => TerraProfileContextProps;
@@ -0,0 +1,9 @@
1
+ import { useContext } from "react";
2
+ import { TerraProfileContext } from "./context";
3
+ /**
4
+ * Terra profile hook.
5
+ * @returns terra profile context.
6
+ */
7
+ export const useTerraProfile = () => {
8
+ return useContext(TerraProfileContext);
9
+ };
@@ -2,3 +2,5 @@ import { LoginResponse, LoginStatus } from "./entities";
2
2
  export declare const LOGIN_STATUS_FAILED: LoginStatus<LoginResponse>;
3
3
  export declare const LOGIN_STATUS_NOT_STARTED: LoginStatus<LoginResponse>;
4
4
  export declare const LOGIN_STATUS_NOT_SUPPORTED: LoginStatus<LoginResponse>;
5
+ export declare const LOGIN_STATUS_PENDING: LoginStatus<LoginResponse>;
6
+ export declare const TERRA_SERVICE_ID = "terra";
@@ -17,3 +17,10 @@ export const LOGIN_STATUS_NOT_SUPPORTED = {
17
17
  requestStatus: REQUEST_STATUS.NOT_STARTED,
18
18
  response: undefined,
19
19
  };
20
+ export const LOGIN_STATUS_PENDING = {
21
+ isSuccess: false,
22
+ isSupported: true,
23
+ requestStatus: REQUEST_STATUS.PENDING,
24
+ response: undefined,
25
+ };
26
+ export const TERRA_SERVICE_ID = "terra";
@@ -1,12 +1,7 @@
1
- import { GoogleResponse } from "../useFetchGoogleProfile";
2
1
  import { TerraNIHResponse } from "../useFetchTerraNIHProfile";
3
2
  import { TerraResponse } from "../useFetchTerraProfile";
4
3
  import { TerraTermsOfServiceResponse } from "../useFetchTerraTermsOfService";
5
- export declare enum AUTHENTICATION_STATUS {
6
- COMPLETED = "COMPLETED",
7
- INCOMPLETE = "INCOMPLETE"
8
- }
9
- export type LoginResponse = GoogleResponse | TerraResponse | TerraNIHResponse | TerraTermsOfServiceResponse;
4
+ export type LoginResponse = TerraResponse | TerraNIHResponse | TerraTermsOfServiceResponse;
10
5
  export interface LoginResponseError {
11
6
  message: string;
12
7
  source: string;
@@ -21,5 +16,6 @@ export interface LoginStatus<T> {
21
16
  export declare enum REQUEST_STATUS {
22
17
  COMPLETED = "COMPLETED",
23
18
  FAILED = "FAILED",
24
- NOT_STARTED = "NOT_STARTED"
19
+ NOT_STARTED = "NOT_STARTED",
20
+ PENDING = "PENDING"
25
21
  }
@@ -1,11 +1,7 @@
1
- export var AUTHENTICATION_STATUS;
2
- (function (AUTHENTICATION_STATUS) {
3
- AUTHENTICATION_STATUS["COMPLETED"] = "COMPLETED";
4
- AUTHENTICATION_STATUS["INCOMPLETE"] = "INCOMPLETE";
5
- })(AUTHENTICATION_STATUS || (AUTHENTICATION_STATUS = {}));
6
1
  export var REQUEST_STATUS;
7
2
  (function (REQUEST_STATUS) {
8
3
  REQUEST_STATUS["COMPLETED"] = "COMPLETED";
9
4
  REQUEST_STATUS["FAILED"] = "FAILED";
10
5
  REQUEST_STATUS["NOT_STARTED"] = "NOT_STARTED";
6
+ REQUEST_STATUS["PENDING"] = "PENDING";
11
7
  })(REQUEST_STATUS || (REQUEST_STATUS = {}));
@@ -0,0 +1,13 @@
1
+ import { LoginStatus } from "./common/entities";
2
+ import { TerraNIHResponse } from "./useFetchTerraNIHProfile";
3
+ import { TerraResponse } from "./useFetchTerraProfile";
4
+ import { TerraTermsOfServiceResponse } from "./useFetchTerraTermsOfService";
5
+ export interface UseFetchProfiles {
6
+ isAuthenticated: boolean;
7
+ isComplete: boolean;
8
+ isProfileActive: boolean;
9
+ terraNIHProfileLoginStatus: LoginStatus<TerraNIHResponse>;
10
+ terraProfileLoginStatus: LoginStatus<TerraResponse>;
11
+ terraTOSLoginStatus: LoginStatus<TerraTermsOfServiceResponse>;
12
+ }
13
+ export declare const useFetchProfiles: (token?: string) => UseFetchProfiles;
@@ -0,0 +1,31 @@
1
+ import { useEffect, useState } from "react";
2
+ import { useAuthentication } from "../../authentication/hook";
3
+ import { TERRA_PROFILE_STATUS } from "../types";
4
+ import { getProfileStatus } from "../utils";
5
+ import { useFetchTerraNIHProfile, } from "./useFetchTerraNIHProfile";
6
+ import { useFetchTerraProfile } from "./useFetchTerraProfile";
7
+ import { useFetchTerraTermsOfService, } from "./useFetchTerraTermsOfService";
8
+ export const useFetchProfiles = (token) => {
9
+ const [status, setStatus] = useState(TERRA_PROFILE_STATUS.PENDING);
10
+ const { authenticationState: { profile }, } = useAuthentication();
11
+ const isUserAuthenticated = !!profile;
12
+ const terraNIHProfileLoginStatus = useFetchTerraNIHProfile(token);
13
+ const terraProfileLoginStatus = useFetchTerraProfile(token);
14
+ const terraTOSLoginStatus = useFetchTerraTermsOfService(token);
15
+ useEffect(() => {
16
+ setStatus(getProfileStatus(isUserAuthenticated, terraNIHProfileLoginStatus, terraProfileLoginStatus, terraTOSLoginStatus));
17
+ }, [
18
+ isUserAuthenticated,
19
+ terraNIHProfileLoginStatus,
20
+ terraProfileLoginStatus,
21
+ terraTOSLoginStatus,
22
+ ]);
23
+ return {
24
+ isAuthenticated: isUserAuthenticated,
25
+ isComplete: status !== TERRA_PROFILE_STATUS.PENDING,
26
+ isProfileActive: status === TERRA_PROFILE_STATUS.AUTHENTICATED,
27
+ terraNIHProfileLoginStatus,
28
+ terraProfileLoginStatus,
29
+ terraTOSLoginStatus,
30
+ };
31
+ };
@@ -1,19 +1,26 @@
1
1
  import { useCallback, useEffect, useState } from "react";
2
- import { useAuthenticationConfig } from "../useAuthenticationConfig";
3
- import { LOGIN_STATUS_FAILED } from "./common/constants";
2
+ import { useAuthenticationConfig } from "../../../../hooks/authentication/config/useAuthenticationConfig";
3
+ import { LOGIN_STATUS_FAILED, LOGIN_STATUS_NOT_STARTED, LOGIN_STATUS_PENDING, TERRA_SERVICE_ID, } from "./common/constants";
4
4
  import { REQUEST_STATUS, } from "./common/entities";
5
5
  import { getAuthenticationRequestOptions, initLoginStatus, } from "./common/utils";
6
+ import { getServiceEndpoint } from "./utils";
7
+ const ENDPOINT_ID = "nihStatus";
6
8
  /**
7
9
  * Returns Terra NIH login status from configured endpoint.
8
10
  * @param token - Token.
9
11
  * @returns Terra NIH login status.
10
12
  */
11
13
  export const useFetchTerraNIHProfile = (token) => {
12
- const authenticationConfig = useAuthenticationConfig();
13
- const { terraAuthConfig: { terraNIHProfileEndpoint: endpoint } = {} } = authenticationConfig;
14
+ const { services } = useAuthenticationConfig() || {};
15
+ const endpoint = getServiceEndpoint(services, TERRA_SERVICE_ID, ENDPOINT_ID);
14
16
  const [loginStatus, setLoginStatus] = useState(initLoginStatus(endpoint));
15
17
  // Fetch Terra NIH account profile.
16
18
  const fetchEndpointData = useCallback((endpoint, accessToken) => {
19
+ if (!accessToken) {
20
+ setLoginStatus(LOGIN_STATUS_NOT_STARTED);
21
+ return;
22
+ }
23
+ setLoginStatus(LOGIN_STATUS_PENDING);
17
24
  fetch(endpoint, getAuthenticationRequestOptions(accessToken))
18
25
  .then((response) => response.json())
19
26
  .then((response) => {
@@ -36,8 +43,6 @@ export const useFetchTerraNIHProfile = (token) => {
36
43
  }, []);
37
44
  // Fetches Terra NIH account profile.
38
45
  useEffect(() => {
39
- if (!token)
40
- return;
41
46
  if (!endpoint)
42
47
  return;
43
48
  fetchEndpointData(endpoint, token);
@@ -1,19 +1,26 @@
1
1
  import { useCallback, useEffect, useState } from "react";
2
- import { useAuthenticationConfig } from "../useAuthenticationConfig";
3
- import { LOGIN_STATUS_FAILED } from "./common/constants";
2
+ import { useAuthenticationConfig } from "../../../../hooks/authentication/config/useAuthenticationConfig";
3
+ import { LOGIN_STATUS_FAILED, LOGIN_STATUS_NOT_STARTED, LOGIN_STATUS_PENDING, TERRA_SERVICE_ID, } from "./common/constants";
4
4
  import { REQUEST_STATUS, } from "./common/entities";
5
5
  import { getAuthenticationRequestOptions, initLoginStatus, } from "./common/utils";
6
+ import { getServiceEndpoint } from "./utils";
7
+ const ENDPOINT_ID = "profile";
6
8
  /**
7
9
  * Returns Terra profile login status from configured endpoint.
8
10
  * @param token - Token.
9
11
  * @returns Terra profile login status.
10
12
  */
11
13
  export const useFetchTerraProfile = (token) => {
12
- const authenticationConfig = useAuthenticationConfig();
13
- const { terraAuthConfig: { terraProfileEndpoint: endpoint } = {} } = authenticationConfig;
14
+ const { services } = useAuthenticationConfig() || {};
15
+ const endpoint = getServiceEndpoint(services, TERRA_SERVICE_ID, ENDPOINT_ID);
14
16
  const [loginStatus, setLoginStatus] = useState(initLoginStatus(endpoint));
15
17
  // Fetch Terra profile.
16
18
  const fetchEndpointData = useCallback((endpoint, accessToken) => {
19
+ if (!accessToken) {
20
+ setLoginStatus(LOGIN_STATUS_NOT_STARTED);
21
+ return;
22
+ }
23
+ setLoginStatus(LOGIN_STATUS_PENDING);
17
24
  fetch(endpoint, getAuthenticationRequestOptions(accessToken))
18
25
  .then((response) => response.json())
19
26
  .then((response) => {
@@ -36,8 +43,6 @@ export const useFetchTerraProfile = (token) => {
36
43
  }, []);
37
44
  // Fetches Terra profile.
38
45
  useEffect(() => {
39
- if (!token)
40
- return;
41
46
  if (!endpoint)
42
47
  return;
43
48
  fetchEndpointData(endpoint, token);
@@ -1,19 +1,26 @@
1
1
  import { useCallback, useEffect, useState } from "react";
2
- import { useAuthenticationConfig } from "../useAuthenticationConfig";
3
- import { LOGIN_STATUS_FAILED } from "./common/constants";
2
+ import { useAuthenticationConfig } from "../../../../hooks/authentication/config/useAuthenticationConfig";
3
+ import { LOGIN_STATUS_FAILED, LOGIN_STATUS_NOT_STARTED, LOGIN_STATUS_PENDING, TERRA_SERVICE_ID, } from "./common/constants";
4
4
  import { REQUEST_STATUS, } from "./common/entities";
5
5
  import { getAuthenticationRequestOptions, initLoginStatus, } from "./common/utils";
6
+ import { getServiceEndpoint } from "./utils";
7
+ const ENDPOINT_ID = "tos";
6
8
  /**
7
9
  * Returns Terra terms of service login status from configured endpoint.
8
10
  * @param token - Token.
9
11
  * @returns Terra terms of service login status.
10
12
  */
11
13
  export const useFetchTerraTermsOfService = (token) => {
12
- const authenticationConfig = useAuthenticationConfig();
13
- const { terraAuthConfig: { termsOfServiceEndpoint: endpoint } = {} } = authenticationConfig;
14
+ const { services } = useAuthenticationConfig() || {};
15
+ const endpoint = getServiceEndpoint(services, TERRA_SERVICE_ID, ENDPOINT_ID);
14
16
  const [loginStatus, setLoginStatus] = useState(initLoginStatus(endpoint));
15
17
  // Fetch Terra terms of service.
16
18
  const fetchEndpointData = useCallback((endpoint, accessToken) => {
19
+ if (!accessToken) {
20
+ setLoginStatus(LOGIN_STATUS_NOT_STARTED);
21
+ return;
22
+ }
23
+ setLoginStatus(LOGIN_STATUS_PENDING);
17
24
  fetch(endpoint, getAuthenticationRequestOptions(accessToken))
18
25
  .then((response) => response.json())
19
26
  .then((response) => {
@@ -36,8 +43,6 @@ export const useFetchTerraTermsOfService = (token) => {
36
43
  }, []);
37
44
  // Fetches Terra terms of service.
38
45
  useEffect(() => {
39
- if (!token)
40
- return;
41
46
  if (!endpoint)
42
47
  return;
43
48
  fetchEndpointData(endpoint, token);
@@ -0,0 +1,16 @@
1
+ import { AuthService } from "../../../../config/entities";
2
+ /**
3
+ * Returns service endpoint.
4
+ * @param services - Services.
5
+ * @param serviceId - Service ID.
6
+ * @param endpointId - Endpoint ID.
7
+ * @returns Service endpoint.
8
+ */
9
+ export declare function getServiceEndpoint(services: AuthService[] | undefined, serviceId: string, endpointId: string): string | undefined;
10
+ /**
11
+ * Find a service by service ID.
12
+ * @param services - Services.
13
+ * @param serviceId - Service ID.
14
+ * @returns Service.
15
+ */
16
+ export declare function findService(services: AuthService[] | undefined, serviceId: string): AuthService | undefined;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Returns service endpoint.
3
+ * @param services - Services.
4
+ * @param serviceId - Service ID.
5
+ * @param endpointId - Endpoint ID.
6
+ * @returns Service endpoint.
7
+ */
8
+ export function getServiceEndpoint(services, serviceId, endpointId) {
9
+ return findService(services, serviceId)?.endpoint[endpointId];
10
+ }
11
+ /**
12
+ * Find a service by service ID.
13
+ * @param services - Services.
14
+ * @param serviceId - Service ID.
15
+ * @returns Service.
16
+ */
17
+ export function findService(services, serviceId) {
18
+ return services?.find(({ id }) => id === serviceId);
19
+ }
@@ -0,0 +1,2 @@
1
+ import { TerraProfileProviderProps } from "./types";
2
+ export declare function TerraProfileProvider({ children, token, }: TerraProfileProviderProps): JSX.Element;
@@ -0,0 +1,42 @@
1
+ import React, { useEffect } from "react";
2
+ import { authComplete } from "../auth/dispatch";
3
+ import { useAuth } from "../auth/hook";
4
+ import { authenticationComplete } from "../authentication/dispatch";
5
+ import { useAuthentication } from "../authentication/hook";
6
+ import { updateCredentials } from "../credentials/dispatch";
7
+ import { useCredentials } from "../credentials/hook";
8
+ import { TerraProfileContext } from "./context";
9
+ import { useFetchProfiles } from "./hooks/useFetchProfiles";
10
+ export function TerraProfileProvider({ children, token, }) {
11
+ const { authDispatch } = useAuth();
12
+ const { authenticationDispatch } = useAuthentication();
13
+ const { credentialsDispatch } = useCredentials();
14
+ const { isAuthenticated, isComplete, isProfileActive, terraNIHProfileLoginStatus, terraProfileLoginStatus, terraTOSLoginStatus, } = useFetchProfiles(token);
15
+ useEffect(() => {
16
+ // Dispatch only when terra profile is available:
17
+ // - Login errors are managed by the login service.
18
+ // - Logout operations handle resetting credentials, authentication and auth state.
19
+ if (!isComplete)
20
+ return; // Terra profile status is still "PENDING".
21
+ // Release authentication only when terra profile status is either "AUTHENTICATED" or "UNAUTHENTICATED" i.e. not "PENDING".
22
+ authenticationDispatch?.(authenticationComplete()); // Authentication `status` is "SETTLED".
23
+ authDispatch?.(authComplete({ isAuthenticated })); // Auth `status` is "SETTLED", and `isAuthenticated` is either "true" or "false".
24
+ if (!isProfileActive)
25
+ return;
26
+ // Release credentials only when terra profile is "AUTHENTICATED".
27
+ credentialsDispatch?.(updateCredentials(token));
28
+ }, [
29
+ authDispatch,
30
+ authenticationDispatch,
31
+ credentialsDispatch,
32
+ isAuthenticated,
33
+ isComplete,
34
+ isProfileActive,
35
+ token,
36
+ ]);
37
+ return (React.createElement(TerraProfileContext.Provider, { value: {
38
+ terraNIHProfileLoginStatus,
39
+ terraProfileLoginStatus,
40
+ terraTOSLoginStatus,
41
+ } }, children));
42
+ }
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from "react";
2
+ import { TokenState } from "../token/types";
3
+ import { LoginStatus } from "./hooks/common/entities";
4
+ import { TerraNIHResponse } from "./hooks/useFetchTerraNIHProfile";
5
+ import { TerraResponse } from "./hooks/useFetchTerraProfile";
6
+ import { TerraTermsOfServiceResponse } from "./hooks/useFetchTerraTermsOfService";
7
+ export declare enum TERRA_PROFILE_STATUS {
8
+ AUTHENTICATED = "AUTHENTICATED",
9
+ PENDING = "PENDING",
10
+ UNAUTHENTICATED = "UNAUTHENTICATED"
11
+ }
12
+ export interface TerraProfileProviderProps {
13
+ children: ReactNode;
14
+ token: TokenState["token"];
15
+ }
16
+ export interface TerraProfileContextProps {
17
+ terraNIHProfileLoginStatus: LoginStatus<TerraNIHResponse>;
18
+ terraProfileLoginStatus: LoginStatus<TerraResponse>;
19
+ terraTOSLoginStatus: LoginStatus<TerraTermsOfServiceResponse>;
20
+ }
@@ -0,0 +1,6 @@
1
+ export var TERRA_PROFILE_STATUS;
2
+ (function (TERRA_PROFILE_STATUS) {
3
+ TERRA_PROFILE_STATUS["AUTHENTICATED"] = "AUTHENTICATED";
4
+ TERRA_PROFILE_STATUS["PENDING"] = "PENDING";
5
+ TERRA_PROFILE_STATUS["UNAUTHENTICATED"] = "UNAUTHENTICATED";
6
+ })(TERRA_PROFILE_STATUS || (TERRA_PROFILE_STATUS = {}));
@@ -0,0 +1,19 @@
1
+ import { LoginStatus } from "./hooks/common/entities";
2
+ import { TerraNIHResponse } from "./hooks/useFetchTerraNIHProfile";
3
+ import { TerraResponse } from "./hooks/useFetchTerraProfile";
4
+ import { TerraTermsOfServiceResponse } from "./hooks/useFetchTerraTermsOfService";
5
+ import { TERRA_PROFILE_STATUS } from "./types";
6
+ /**
7
+ * Determines the status of a user based on authentication and Terra service statuses.
8
+ * **Logic:**
9
+ * - **Pending** if the user is not authenticated.
10
+ * - **Pending** if any supported Terra service request is not started or pending.
11
+ * - **Unauthenticated** if the Terra profile is supported but the Terms of Service have not been accepted.
12
+ * - **Authenticated** in all other cases.
13
+ * @param isUserAuthenticated - User authentication status.
14
+ * @param terraNIHProfileLoginStatus - Terra NIH profile login status.
15
+ * @param terraProfileLoginStatus - Terra profile login status.
16
+ * @param terraTOSLoginStatus - Terra terms of service login status.
17
+ * @returns Terra profile status.
18
+ */
19
+ export declare function getProfileStatus(isUserAuthenticated: boolean, terraNIHProfileLoginStatus: LoginStatus<TerraNIHResponse>, terraProfileLoginStatus: LoginStatus<TerraResponse>, terraTOSLoginStatus: LoginStatus<TerraTermsOfServiceResponse>): TERRA_PROFILE_STATUS;
@@ -0,0 +1,36 @@
1
+ import { REQUEST_STATUS } from "./hooks/common/entities";
2
+ import { TERRA_PROFILE_STATUS } from "./types";
3
+ /**
4
+ * Determines the status of a user based on authentication and Terra service statuses.
5
+ * **Logic:**
6
+ * - **Pending** if the user is not authenticated.
7
+ * - **Pending** if any supported Terra service request is not started or pending.
8
+ * - **Unauthenticated** if the Terra profile is supported but the Terms of Service have not been accepted.
9
+ * - **Authenticated** in all other cases.
10
+ * @param isUserAuthenticated - User authentication status.
11
+ * @param terraNIHProfileLoginStatus - Terra NIH profile login status.
12
+ * @param terraProfileLoginStatus - Terra profile login status.
13
+ * @param terraTOSLoginStatus - Terra terms of service login status.
14
+ * @returns Terra profile status.
15
+ */
16
+ export function getProfileStatus(isUserAuthenticated, terraNIHProfileLoginStatus, terraProfileLoginStatus, terraTOSLoginStatus) {
17
+ if (!isUserAuthenticated)
18
+ return TERRA_PROFILE_STATUS.PENDING;
19
+ // Check if any supported Terra service request is not started or pending.
20
+ const terraServices = [
21
+ terraNIHProfileLoginStatus,
22
+ terraProfileLoginStatus,
23
+ terraTOSLoginStatus,
24
+ ];
25
+ const isAnyServicePending = terraServices.some(({ isSupported, requestStatus }) => isSupported &&
26
+ (requestStatus === REQUEST_STATUS.NOT_STARTED ||
27
+ requestStatus === REQUEST_STATUS.PENDING));
28
+ if (isAnyServicePending)
29
+ return TERRA_PROFILE_STATUS.PENDING;
30
+ // If Terra profile is supported but Terms of Service not accepted.
31
+ if (terraProfileLoginStatus.isSupported && !terraTOSLoginStatus.isSuccess) {
32
+ return TERRA_PROFILE_STATUS.UNAUTHENTICATED;
33
+ }
34
+ // Authenticated in all other cases.
35
+ return TERRA_PROFILE_STATUS.AUTHENTICATED;
36
+ }
@@ -0,0 +1,2 @@
1
+ import { TokenState } from "./types";
2
+ export declare const DEFAULT_TOKEN_STATE: TokenState;
@@ -0,0 +1,4 @@
1
+ export const DEFAULT_TOKEN_STATE = {
2
+ providerId: undefined,
3
+ token: undefined,
4
+ };
@@ -0,0 +1,12 @@
1
+ import { ResetStateAction, UpdateTokenAction, UpdateTokenPayload } from "./types";
2
+ /**
3
+ * Reset state action.
4
+ * @returns Action.
5
+ */
6
+ export declare function resetState(): ResetStateAction;
7
+ /**
8
+ * Update token action.
9
+ * @param payload - Payload.
10
+ * @returns Action.
11
+ */
12
+ export declare function updateToken(payload: UpdateTokenPayload): UpdateTokenAction;
@@ -0,0 +1,22 @@
1
+ import { TokenActionKind, } from "./types";
2
+ /**
3
+ * Reset state action.
4
+ * @returns Action.
5
+ */
6
+ export function resetState() {
7
+ return {
8
+ payload: undefined,
9
+ type: TokenActionKind.ResetState,
10
+ };
11
+ }
12
+ /**
13
+ * Update token action.
14
+ * @param payload - Payload.
15
+ * @returns Action.
16
+ */
17
+ export function updateToken(payload) {
18
+ return {
19
+ payload,
20
+ type: TokenActionKind.UpdateToken,
21
+ };
22
+ }
@@ -0,0 +1,8 @@
1
+ import { TokenAction, TokenState } from "./types";
2
+ /**
3
+ * Token reducer.
4
+ * @param state - State.
5
+ * @param action - Action.
6
+ * @returns state.
7
+ */
8
+ export declare function tokenReducer(state: TokenState, action: TokenAction): TokenState;
@@ -0,0 +1,22 @@
1
+ import { DEFAULT_TOKEN_STATE } from "./constants";
2
+ import { TokenActionKind } from "./types";
3
+ /**
4
+ * Token reducer.
5
+ * @param state - State.
6
+ * @param action - Action.
7
+ * @returns state.
8
+ */
9
+ export function tokenReducer(state, action) {
10
+ const { payload, type } = action;
11
+ switch (type) {
12
+ case TokenActionKind.ResetState:
13
+ return DEFAULT_TOKEN_STATE;
14
+ case TokenActionKind.UpdateToken:
15
+ return {
16
+ ...state,
17
+ ...payload,
18
+ };
19
+ default:
20
+ return state;
21
+ }
22
+ }