@openedx/frontend-base 1.0.0-alpha.12 → 1.0.0-alpha.13

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 (754) hide show
  1. package/{index.ts → dist/index.d.ts} +0 -3
  2. package/dist/index.js +4 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/runtime/analytics/MockAnalyticsService.d.ts +50 -0
  5. package/dist/runtime/analytics/MockAnalyticsService.js +64 -0
  6. package/dist/runtime/analytics/MockAnalyticsService.js.map +1 -0
  7. package/dist/runtime/analytics/SegmentAnalyticsService.d.ts +64 -0
  8. package/dist/runtime/analytics/SegmentAnalyticsService.js +218 -0
  9. package/dist/runtime/analytics/SegmentAnalyticsService.js.map +1 -0
  10. package/dist/runtime/analytics/index.d.ts +3 -0
  11. package/dist/runtime/analytics/index.js +4 -0
  12. package/dist/runtime/analytics/index.js.map +1 -0
  13. package/dist/runtime/analytics/interface.d.ts +53 -0
  14. package/{runtime → dist/runtime}/analytics/interface.js +26 -38
  15. package/dist/runtime/analytics/interface.js.map +1 -0
  16. package/dist/runtime/auth/AxiosCsrfTokenService.d.ts +10 -0
  17. package/dist/runtime/auth/AxiosCsrfTokenService.js +64 -0
  18. package/dist/runtime/auth/AxiosCsrfTokenService.js.map +1 -0
  19. package/dist/runtime/auth/AxiosJwtAuthService.d.ts +182 -0
  20. package/dist/runtime/auth/AxiosJwtAuthService.js +339 -0
  21. package/dist/runtime/auth/AxiosJwtAuthService.js.map +1 -0
  22. package/dist/runtime/auth/AxiosJwtTokenService.d.ts +16 -0
  23. package/dist/runtime/auth/AxiosJwtTokenService.js +130 -0
  24. package/dist/runtime/auth/AxiosJwtTokenService.js.map +1 -0
  25. package/dist/runtime/auth/LocalForageCache.d.ts +7 -0
  26. package/dist/runtime/auth/LocalForageCache.js +78 -0
  27. package/dist/runtime/auth/LocalForageCache.js.map +1 -0
  28. package/dist/runtime/auth/MockAuthService.d.ts +209 -0
  29. package/dist/runtime/auth/MockAuthService.js +256 -0
  30. package/dist/runtime/auth/MockAuthService.js.map +1 -0
  31. package/dist/runtime/auth/index.d.ts +3 -0
  32. package/dist/runtime/auth/index.js +4 -0
  33. package/dist/runtime/auth/index.js.map +1 -0
  34. package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.d.ts +2 -0
  35. package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +42 -0
  36. package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js.map +1 -0
  37. package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.d.ts +2 -0
  38. package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +40 -0
  39. package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js.map +1 -0
  40. package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.d.ts +2 -0
  41. package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +26 -0
  42. package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js.map +1 -0
  43. package/dist/runtime/auth/interceptors/createRetryInterceptor.d.ts +3 -0
  44. package/dist/runtime/auth/interceptors/createRetryInterceptor.js +67 -0
  45. package/dist/runtime/auth/interceptors/createRetryInterceptor.js.map +1 -0
  46. package/dist/runtime/auth/interface.d.ts +133 -0
  47. package/{runtime → dist/runtime}/auth/interface.js +65 -72
  48. package/dist/runtime/auth/interface.js.map +1 -0
  49. package/dist/runtime/auth/utils.d.ts +13 -0
  50. package/dist/runtime/auth/utils.js +66 -0
  51. package/dist/runtime/auth/utils.js.map +1 -0
  52. package/dist/runtime/babel.config.d.ts +2 -0
  53. package/{shell → dist/runtime}/babel.config.js +2 -1
  54. package/dist/runtime/babel.config.js.map +1 -0
  55. package/{runtime/config/index.ts → dist/runtime/config/index.d.ts} +28 -123
  56. package/dist/runtime/config/index.js +323 -0
  57. package/dist/runtime/config/index.js.map +1 -0
  58. package/dist/runtime/constants.d.ts +57 -0
  59. package/{runtime/constants.ts → dist/runtime/constants.js} +1 -11
  60. package/dist/runtime/constants.js.map +1 -0
  61. package/dist/runtime/i18n/index.d.ts +3 -0
  62. package/{runtime → dist/runtime}/i18n/index.js +4 -44
  63. package/dist/runtime/i18n/index.js.map +1 -0
  64. package/dist/runtime/i18n/injectIntlWithShim.d.ts +11 -0
  65. package/dist/runtime/i18n/injectIntlWithShim.js +45 -0
  66. package/dist/runtime/i18n/injectIntlWithShim.js.map +1 -0
  67. package/dist/runtime/i18n/lib.d.ts +119 -0
  68. package/dist/runtime/i18n/lib.js +236 -0
  69. package/dist/runtime/i18n/lib.js.map +1 -0
  70. package/dist/runtime/index.d.ts +13 -0
  71. package/dist/runtime/index.js +14 -0
  72. package/dist/runtime/index.js.map +1 -0
  73. package/dist/runtime/initialize.d.ts +91 -0
  74. package/dist/runtime/initialize.js +312 -0
  75. package/dist/runtime/initialize.js.map +1 -0
  76. package/dist/runtime/jest.config.d.ts +17 -0
  77. package/dist/runtime/jest.config.js +35 -0
  78. package/dist/runtime/jest.config.js.map +1 -0
  79. package/dist/runtime/logging/MockLoggingService.d.ts +28 -0
  80. package/dist/runtime/logging/MockLoggingService.js +31 -0
  81. package/dist/runtime/logging/MockLoggingService.js.map +1 -0
  82. package/dist/runtime/logging/NewRelicLoggingService.d.ts +67 -0
  83. package/dist/runtime/logging/NewRelicLoggingService.js +175 -0
  84. package/dist/runtime/logging/NewRelicLoggingService.js.map +1 -0
  85. package/{runtime/logging/index.ts → dist/runtime/logging/index.d.ts} +1 -7
  86. package/dist/runtime/logging/index.js +4 -0
  87. package/dist/runtime/logging/index.js.map +1 -0
  88. package/dist/runtime/logging/interface.d.ts +38 -0
  89. package/{runtime → dist/runtime}/logging/interface.js +16 -26
  90. package/dist/runtime/logging/interface.js.map +1 -0
  91. package/dist/runtime/logging/types.d.ts +4 -0
  92. package/dist/runtime/logging/types.js +2 -0
  93. package/dist/runtime/logging/types.js.map +1 -0
  94. package/dist/runtime/react/AuthenticatedPageRoute.d.ts +28 -0
  95. package/{runtime/react/AuthenticatedPageRoute.jsx → dist/runtime/react/AuthenticatedPageRoute.js} +11 -18
  96. package/dist/runtime/react/AuthenticatedPageRoute.js.map +1 -0
  97. package/dist/runtime/react/CombinedAppProvider.d.ts +6 -0
  98. package/dist/runtime/react/CombinedAppProvider.js +24 -0
  99. package/dist/runtime/react/CombinedAppProvider.js.map +1 -0
  100. package/dist/runtime/react/CurrentAppContext.d.ts +20 -0
  101. package/{runtime/react/CurrentAppContext.tsx → dist/runtime/react/CurrentAppContext.js} +3 -7
  102. package/dist/runtime/react/CurrentAppContext.js.map +1 -0
  103. package/dist/runtime/react/CurrentAppProvider.d.ts +23 -0
  104. package/dist/runtime/react/CurrentAppProvider.js +33 -0
  105. package/dist/runtime/react/CurrentAppProvider.js.map +1 -0
  106. package/dist/runtime/react/Divider.d.ts +1 -0
  107. package/dist/runtime/react/Divider.js +5 -0
  108. package/dist/runtime/react/Divider.js.map +1 -0
  109. package/dist/runtime/react/ErrorBoundary.d.ts +32 -0
  110. package/dist/runtime/react/ErrorBoundary.js +40 -0
  111. package/dist/runtime/react/ErrorBoundary.js.map +1 -0
  112. package/dist/runtime/react/ErrorPage.d.ts +17 -0
  113. package/dist/runtime/react/ErrorPage.js +29 -0
  114. package/dist/runtime/react/ErrorPage.js.map +1 -0
  115. package/dist/runtime/react/LoginRedirect.d.ts +8 -0
  116. package/{runtime/react/LoginRedirect.jsx → dist/runtime/react/LoginRedirect.js} +5 -5
  117. package/dist/runtime/react/LoginRedirect.js.map +1 -0
  118. package/dist/runtime/react/PageWrap.d.ts +8 -0
  119. package/{runtime/react/PageWrap.jsx → dist/runtime/react/PageWrap.js} +7 -10
  120. package/dist/runtime/react/PageWrap.js.map +1 -0
  121. package/dist/runtime/react/SiteContext.d.ts +24 -0
  122. package/{runtime/react/SiteContext.tsx → dist/runtime/react/SiteContext.js} +5 -11
  123. package/dist/runtime/react/SiteContext.js.map +1 -0
  124. package/dist/runtime/react/SiteProvider.d.ts +29 -0
  125. package/dist/runtime/react/SiteProvider.js +69 -0
  126. package/dist/runtime/react/SiteProvider.js.map +1 -0
  127. package/dist/runtime/react/constants.d.ts +3 -0
  128. package/{runtime/react/constants.ts → dist/runtime/react/constants.js} +1 -0
  129. package/dist/runtime/react/constants.js.map +1 -0
  130. package/{runtime/react/hooks/index.ts → dist/runtime/react/hooks/index.d.ts} +0 -1
  131. package/dist/runtime/react/hooks/index.js +8 -0
  132. package/dist/runtime/react/hooks/index.js.map +1 -0
  133. package/dist/runtime/react/hooks/theme/index.js +3 -0
  134. package/dist/runtime/react/hooks/theme/index.js.map +1 -0
  135. package/dist/runtime/react/hooks/theme/useTheme.d.ts +35 -0
  136. package/dist/runtime/react/hooks/theme/useTheme.js +153 -0
  137. package/dist/runtime/react/hooks/theme/useTheme.js.map +1 -0
  138. package/dist/runtime/react/hooks/theme/useThemeConfig.d.ts +16 -0
  139. package/{runtime/react/hooks/theme/useThemeConfig.ts → dist/runtime/react/hooks/theme/useThemeConfig.js} +11 -16
  140. package/dist/runtime/react/hooks/theme/useThemeConfig.js.map +1 -0
  141. package/dist/runtime/react/hooks/theme/useThemeCore.d.ts +10 -0
  142. package/dist/runtime/react/hooks/theme/useThemeCore.js +40 -0
  143. package/dist/runtime/react/hooks/theme/useThemeCore.js.map +1 -0
  144. package/dist/runtime/react/hooks/theme/useThemeVariants.d.ts +17 -0
  145. package/dist/runtime/react/hooks/theme/useThemeVariants.js +90 -0
  146. package/dist/runtime/react/hooks/theme/useThemeVariants.js.map +1 -0
  147. package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.d.ts +8 -0
  148. package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js +30 -0
  149. package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js.map +1 -0
  150. package/dist/runtime/react/hooks/theme/utils.d.ts +6 -0
  151. package/{runtime/react/hooks/theme/utils.ts → dist/runtime/react/hooks/theme/utils.js} +4 -4
  152. package/dist/runtime/react/hooks/theme/utils.js.map +1 -0
  153. package/dist/runtime/react/hooks/useActiveRoles.d.ts +2 -0
  154. package/{runtime/react/hooks/useActiveRoles.ts → dist/runtime/react/hooks/useActiveRoles.js} +6 -8
  155. package/dist/runtime/react/hooks/useActiveRoles.js.map +1 -0
  156. package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.d.ts +2 -0
  157. package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js +26 -0
  158. package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js.map +1 -0
  159. package/dist/runtime/react/hooks/useAppConfig.d.ts +2 -0
  160. package/{runtime/react/hooks/useAppConfig.ts → dist/runtime/react/hooks/useAppConfig.js} +3 -4
  161. package/dist/runtime/react/hooks/useAppConfig.js.map +1 -0
  162. package/dist/runtime/react/hooks/useAuthenticatedUser.d.ts +2 -0
  163. package/{runtime/react/hooks/useAuthenticatedUser.ts → dist/runtime/react/hooks/useAuthenticatedUser.js} +3 -4
  164. package/dist/runtime/react/hooks/useAuthenticatedUser.js.map +1 -0
  165. package/dist/runtime/react/hooks/useSiteConfig.d.ts +2 -0
  166. package/{runtime/react/hooks/useSiteConfig.ts → dist/runtime/react/hooks/useSiteConfig.js} +3 -4
  167. package/dist/runtime/react/hooks/useSiteConfig.js.map +1 -0
  168. package/dist/runtime/react/hooks/useSiteEvent.d.ts +12 -0
  169. package/{runtime/react/hooks/useSiteEvent.ts → dist/runtime/react/hooks/useSiteEvent.js} +7 -9
  170. package/dist/runtime/react/hooks/useSiteEvent.js.map +1 -0
  171. package/{runtime/react/index.ts → dist/runtime/react/index.d.ts} +0 -1
  172. package/dist/runtime/react/index.js +19 -0
  173. package/dist/runtime/react/index.js.map +1 -0
  174. package/dist/runtime/react/reducers.d.ts +11 -0
  175. package/dist/runtime/react/reducers.js +28 -0
  176. package/dist/runtime/react/reducers.js.map +1 -0
  177. package/dist/runtime/routing/index.js +2 -0
  178. package/dist/runtime/routing/index.js.map +1 -0
  179. package/dist/runtime/routing/utils.d.ts +4 -0
  180. package/dist/runtime/routing/utils.js +28 -0
  181. package/dist/runtime/routing/utils.js.map +1 -0
  182. package/dist/runtime/scripts/GoogleAnalyticsLoader.d.ts +12 -0
  183. package/dist/runtime/scripts/GoogleAnalyticsLoader.js +49 -0
  184. package/dist/runtime/scripts/GoogleAnalyticsLoader.js.map +1 -0
  185. package/dist/runtime/scripts/index.js +2 -0
  186. package/dist/runtime/scripts/index.js.map +1 -0
  187. package/dist/runtime/setupTest.d.ts +1 -0
  188. package/{runtime → dist/runtime}/setupTest.js +6 -8
  189. package/dist/runtime/setupTest.js.map +1 -0
  190. package/dist/runtime/slots/Slot.d.ts +9 -0
  191. package/dist/runtime/slots/Slot.js +30 -0
  192. package/dist/runtime/slots/Slot.js.map +1 -0
  193. package/dist/runtime/slots/SlotContext.d.ts +7 -0
  194. package/dist/runtime/slots/SlotContext.js +7 -0
  195. package/dist/runtime/slots/SlotContext.js.map +1 -0
  196. package/dist/runtime/slots/hooks.d.ts +12 -0
  197. package/dist/runtime/slots/hooks.js +29 -0
  198. package/dist/runtime/slots/hooks.js.map +1 -0
  199. package/dist/runtime/slots/index.js +7 -0
  200. package/dist/runtime/slots/index.js.map +1 -0
  201. package/dist/runtime/slots/layout/DefaultSlotLayout.d.ts +1 -0
  202. package/dist/runtime/slots/layout/DefaultSlotLayout.js +7 -0
  203. package/dist/runtime/slots/layout/DefaultSlotLayout.js.map +1 -0
  204. package/dist/runtime/slots/layout/hooks.d.ts +10 -0
  205. package/dist/runtime/slots/layout/hooks.js +57 -0
  206. package/dist/runtime/slots/layout/hooks.js.map +1 -0
  207. package/dist/runtime/slots/layout/index.js +5 -0
  208. package/dist/runtime/slots/layout/index.js.map +1 -0
  209. package/{runtime/slots/layout/types.ts → dist/runtime/slots/layout/types.d.ts} +10 -25
  210. package/dist/runtime/slots/layout/types.js +12 -0
  211. package/dist/runtime/slots/layout/types.js.map +1 -0
  212. package/dist/runtime/slots/layout/utils.d.ts +5 -0
  213. package/dist/runtime/slots/layout/utils.js +11 -0
  214. package/dist/runtime/slots/layout/utils.js.map +1 -0
  215. package/{runtime/slots/types.ts → dist/runtime/slots/types.d.ts} +6 -12
  216. package/dist/runtime/slots/types.js +7 -0
  217. package/dist/runtime/slots/types.js.map +1 -0
  218. package/dist/runtime/slots/utils.d.ts +3 -0
  219. package/dist/runtime/slots/utils.js +66 -0
  220. package/dist/runtime/slots/utils.js.map +1 -0
  221. package/dist/runtime/slots/widget/WidgetContext.d.ts +6 -0
  222. package/dist/runtime/slots/widget/WidgetContext.js +8 -0
  223. package/dist/runtime/slots/widget/WidgetContext.js.map +1 -0
  224. package/dist/runtime/slots/widget/WidgetProvider.d.ts +9 -0
  225. package/dist/runtime/slots/widget/WidgetProvider.js +18 -0
  226. package/dist/runtime/slots/widget/WidgetProvider.js.map +1 -0
  227. package/dist/runtime/slots/widget/hooks.d.ts +13 -0
  228. package/dist/runtime/slots/widget/hooks.js +104 -0
  229. package/dist/runtime/slots/widget/hooks.js.map +1 -0
  230. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.d.ts +10 -0
  231. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js +42 -0
  232. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js.map +1 -0
  233. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.d.ts +13 -0
  234. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js +15 -0
  235. package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js.map +1 -0
  236. package/dist/runtime/slots/widget/iframe/IFrameWidget.d.ts +6 -0
  237. package/dist/runtime/slots/widget/iframe/IFrameWidget.js +32 -0
  238. package/dist/runtime/slots/widget/iframe/IFrameWidget.js.map +1 -0
  239. package/dist/runtime/slots/widget/iframe/constants.d.ts +15 -0
  240. package/{runtime/slots/widget/iframe/constants.ts → dist/runtime/slots/widget/iframe/constants.js} +2 -4
  241. package/dist/runtime/slots/widget/iframe/constants.js.map +1 -0
  242. package/dist/runtime/slots/widget/iframe/hooks.d.ts +64 -0
  243. package/dist/runtime/slots/widget/iframe/hooks.js +144 -0
  244. package/dist/runtime/slots/widget/iframe/hooks.js.map +1 -0
  245. package/{runtime/slots/widget/iframe/index.ts → dist/runtime/slots/widget/iframe/index.d.ts} +1 -4
  246. package/dist/runtime/slots/widget/iframe/index.js +3 -0
  247. package/dist/runtime/slots/widget/iframe/index.js.map +1 -0
  248. package/{runtime/slots/widget/iframe/types.ts → dist/runtime/slots/widget/iframe/types.d.ts} +2 -4
  249. package/dist/runtime/slots/widget/iframe/types.js +3 -0
  250. package/dist/runtime/slots/widget/iframe/types.js.map +1 -0
  251. package/dist/runtime/slots/widget/index.js +6 -0
  252. package/dist/runtime/slots/widget/index.js.map +1 -0
  253. package/{runtime/slots/widget/types.ts → dist/runtime/slots/widget/types.d.ts} +50 -84
  254. package/dist/runtime/slots/widget/types.js +41 -0
  255. package/dist/runtime/slots/widget/types.js.map +1 -0
  256. package/dist/runtime/slots/widget/utils.d.ts +22 -0
  257. package/dist/runtime/slots/widget/utils.js +166 -0
  258. package/dist/runtime/slots/widget/utils.js.map +1 -0
  259. package/{runtime/subscriptions.ts → dist/runtime/subscriptions.d.ts} +5 -41
  260. package/dist/runtime/subscriptions.js +48 -0
  261. package/dist/runtime/subscriptions.js.map +1 -0
  262. package/{runtime/testing/index.ts → dist/runtime/testing/index.d.ts} +0 -1
  263. package/dist/runtime/testing/index.js +9 -0
  264. package/dist/runtime/testing/index.js.map +1 -0
  265. package/dist/runtime/testing/initializeMockApp.d.ts +46 -0
  266. package/{runtime/testing/initializeMockApp.ts → dist/runtime/testing/initializeMockApp.js} +26 -41
  267. package/dist/runtime/testing/initializeMockApp.js.map +1 -0
  268. package/dist/runtime/testing/mockMessages.d.ts +22 -0
  269. package/dist/runtime/testing/mockMessages.js +23 -0
  270. package/dist/runtime/testing/mockMessages.js.map +1 -0
  271. package/dist/runtime/utils.d.ts +95 -0
  272. package/{runtime → dist/runtime}/utils.js +55 -70
  273. package/dist/runtime/utils.js.map +1 -0
  274. package/dist/shell/DefaultLayout.d.ts +1 -0
  275. package/dist/shell/DefaultLayout.js +7 -0
  276. package/dist/shell/DefaultLayout.js.map +1 -0
  277. package/dist/shell/DefaultMain.d.ts +1 -0
  278. package/dist/shell/DefaultMain.js +6 -0
  279. package/dist/shell/DefaultMain.js.map +1 -0
  280. package/dist/shell/Logo.d.ts +6 -0
  281. package/dist/shell/Logo.js +11 -0
  282. package/dist/shell/Logo.js.map +1 -0
  283. package/dist/shell/Shell.d.ts +1 -0
  284. package/dist/shell/Shell.js +10 -0
  285. package/dist/shell/Shell.js.map +1 -0
  286. package/dist/shell/Shell.messages.d.ts +58 -0
  287. package/dist/shell/Shell.messages.js +60 -0
  288. package/dist/shell/Shell.messages.js.map +1 -0
  289. package/dist/shell/app.d.ts +3 -0
  290. package/dist/shell/app.js +35 -0
  291. package/dist/shell/app.js.map +1 -0
  292. package/dist/shell/babel.config.d.ts +2 -0
  293. package/{runtime → dist/shell}/babel.config.js +2 -1
  294. package/dist/shell/babel.config.js.map +1 -0
  295. package/dist/shell/dev/devFooter/app.d.ts +3 -0
  296. package/dist/shell/dev/devFooter/app.js +36 -0
  297. package/dist/shell/dev/devFooter/app.js.map +1 -0
  298. package/dist/shell/dev/devFooter/index.js +2 -0
  299. package/dist/shell/dev/devFooter/index.js.map +1 -0
  300. package/dist/shell/dev/devHeader/BarContext.d.ts +7 -0
  301. package/dist/shell/dev/devHeader/BarContext.js +8 -0
  302. package/dist/shell/dev/devHeader/BarContext.js.map +1 -0
  303. package/dist/shell/dev/devHeader/BarLink.d.ts +1 -0
  304. package/dist/shell/dev/devHeader/BarLink.js +10 -0
  305. package/dist/shell/dev/devHeader/BarLink.js.map +1 -0
  306. package/dist/shell/dev/devHeader/BarProvider.d.ts +6 -0
  307. package/dist/shell/dev/devHeader/BarProvider.js +16 -0
  308. package/dist/shell/dev/devHeader/BarProvider.js.map +1 -0
  309. package/dist/shell/dev/devHeader/CoursesLink.d.ts +1 -0
  310. package/dist/shell/dev/devHeader/CoursesLink.js +10 -0
  311. package/dist/shell/dev/devHeader/CoursesLink.js.map +1 -0
  312. package/dist/shell/dev/devHeader/FooContext.d.ts +7 -0
  313. package/dist/shell/dev/devHeader/FooContext.js +8 -0
  314. package/dist/shell/dev/devHeader/FooContext.js.map +1 -0
  315. package/dist/shell/dev/devHeader/FooLink.d.ts +1 -0
  316. package/dist/shell/dev/devHeader/FooLink.js +10 -0
  317. package/dist/shell/dev/devHeader/FooLink.js.map +1 -0
  318. package/dist/shell/dev/devHeader/FooProvider.d.ts +6 -0
  319. package/dist/shell/dev/devHeader/FooProvider.js +16 -0
  320. package/dist/shell/dev/devHeader/FooProvider.js.map +1 -0
  321. package/dist/shell/dev/devHeader/app.d.ts +3 -0
  322. package/dist/shell/dev/devHeader/app.js +34 -0
  323. package/dist/shell/dev/devHeader/app.js.map +1 -0
  324. package/dist/shell/dev/devHeader/index.js +2 -0
  325. package/dist/shell/dev/devHeader/index.js.map +1 -0
  326. package/dist/shell/dev/devHeader/providers.d.ts +3 -0
  327. package/dist/shell/dev/devHeader/providers.js +8 -0
  328. package/dist/shell/dev/devHeader/providers.js.map +1 -0
  329. package/dist/shell/dev/devHome/HomePage.d.ts +1 -0
  330. package/dist/shell/dev/devHome/HomePage.js +13 -0
  331. package/dist/shell/dev/devHome/HomePage.js.map +1 -0
  332. package/dist/shell/dev/devHome/app.d.ts +3 -0
  333. package/dist/shell/dev/devHome/app.js +16 -0
  334. package/dist/shell/dev/devHome/app.js.map +1 -0
  335. package/dist/shell/dev/devHome/i18n/index.d.ts +27 -0
  336. package/dist/shell/dev/devHome/i18n/index.js +28 -0
  337. package/dist/shell/dev/devHome/i18n/index.js.map +1 -0
  338. package/dist/shell/dev/devHome/index.js +2 -0
  339. package/dist/shell/dev/devHome/index.js.map +1 -0
  340. package/dist/shell/dev/devHome/messages.d.ts +8 -0
  341. package/dist/shell/dev/devHome/messages.js +10 -0
  342. package/dist/shell/dev/devHome/messages.js.map +1 -0
  343. package/dist/shell/dev/devUser/app.d.ts +3 -0
  344. package/dist/shell/dev/devUser/app.js +22 -0
  345. package/dist/shell/dev/devUser/app.js.map +1 -0
  346. package/dist/shell/dev/devUser/index.js +2 -0
  347. package/dist/shell/dev/devUser/index.js.map +1 -0
  348. package/dist/shell/dev/index.js +6 -0
  349. package/dist/shell/dev/index.js.map +1 -0
  350. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.d.ts +1 -0
  351. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js +7 -0
  352. package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js.map +1 -0
  353. package/dist/shell/dev/slotShowcase/LayoutWithOptions.d.ts +1 -0
  354. package/dist/shell/dev/slotShowcase/LayoutWithOptions.js +9 -0
  355. package/dist/shell/dev/slotShowcase/LayoutWithOptions.js.map +1 -0
  356. package/dist/shell/dev/slotShowcase/SlotShowcasePage.d.ts +1 -0
  357. package/dist/shell/dev/slotShowcase/SlotShowcasePage.js +8 -0
  358. package/dist/shell/dev/slotShowcase/SlotShowcasePage.js.map +1 -0
  359. package/dist/shell/dev/slotShowcase/WidgetWithOptions.d.ts +1 -0
  360. package/dist/shell/dev/slotShowcase/WidgetWithOptions.js +8 -0
  361. package/dist/shell/dev/slotShowcase/WidgetWithOptions.js.map +1 -0
  362. package/dist/shell/dev/slotShowcase/app.d.ts +3 -0
  363. package/dist/shell/dev/slotShowcase/app.js +336 -0
  364. package/dist/shell/dev/slotShowcase/app.js.map +1 -0
  365. package/dist/shell/dev/slotShowcase/index.js +2 -0
  366. package/dist/shell/dev/slotShowcase/index.js.map +1 -0
  367. package/dist/shell/footer/CenterLinks.d.ts +1 -0
  368. package/dist/shell/footer/CenterLinks.js +7 -0
  369. package/dist/shell/footer/CenterLinks.js.map +1 -0
  370. package/dist/shell/footer/CopyrightNotice.d.ts +10 -0
  371. package/dist/shell/footer/CopyrightNotice.js +10 -0
  372. package/dist/shell/footer/CopyrightNotice.js.map +1 -0
  373. package/dist/shell/footer/Footer.d.ts +1 -0
  374. package/dist/shell/footer/Footer.js +12 -0
  375. package/dist/shell/footer/Footer.js.map +1 -0
  376. package/dist/shell/footer/LabeledLinkColumn.d.ts +1 -0
  377. package/dist/shell/footer/LabeledLinkColumn.js +11 -0
  378. package/dist/shell/footer/LabeledLinkColumn.js.map +1 -0
  379. package/dist/shell/footer/LanguageMenu.d.ts +1 -0
  380. package/dist/shell/footer/LanguageMenu.js +16 -0
  381. package/dist/shell/footer/LanguageMenu.js.map +1 -0
  382. package/dist/shell/footer/LanguageMenuItem.d.ts +8 -0
  383. package/dist/shell/footer/LanguageMenuItem.js +11 -0
  384. package/dist/shell/footer/LanguageMenuItem.js.map +1 -0
  385. package/dist/shell/footer/LeftLinks.d.ts +1 -0
  386. package/dist/shell/footer/LeftLinks.js +7 -0
  387. package/dist/shell/footer/LeftLinks.js.map +1 -0
  388. package/dist/shell/footer/LegalNotices.d.ts +1 -0
  389. package/dist/shell/footer/LegalNotices.js +10 -0
  390. package/dist/shell/footer/LegalNotices.js.map +1 -0
  391. package/dist/shell/footer/PoweredBy.d.ts +1 -0
  392. package/dist/shell/footer/PoweredBy.js +9 -0
  393. package/dist/shell/footer/PoweredBy.js.map +1 -0
  394. package/dist/shell/footer/RevealLinks.d.ts +1 -0
  395. package/dist/shell/footer/RevealLinks.js +16 -0
  396. package/dist/shell/footer/RevealLinks.js.map +1 -0
  397. package/dist/shell/footer/RightLinks.d.ts +1 -0
  398. package/dist/shell/footer/RightLinks.js +7 -0
  399. package/dist/shell/footer/RightLinks.js.map +1 -0
  400. package/dist/shell/footer/app.d.ts +3 -0
  401. package/dist/shell/footer/app.js +59 -0
  402. package/dist/shell/footer/app.js.map +1 -0
  403. package/dist/shell/footer/data/api.d.ts +1 -0
  404. package/dist/shell/footer/data/api.js +45 -0
  405. package/dist/shell/footer/data/api.js.map +1 -0
  406. package/dist/shell/footer/index.js +3 -0
  407. package/dist/shell/footer/index.js.map +1 -0
  408. package/dist/shell/header/AuthenticatedMenu.d.ts +5 -0
  409. package/dist/shell/header/AuthenticatedMenu.js +13 -0
  410. package/dist/shell/header/AuthenticatedMenu.js.map +1 -0
  411. package/dist/shell/header/Header.d.ts +1 -0
  412. package/dist/shell/header/Header.js +8 -0
  413. package/dist/shell/header/Header.js.map +1 -0
  414. package/dist/shell/header/anonymous-menu/AnonymousMenu.d.ts +5 -0
  415. package/dist/shell/header/anonymous-menu/AnonymousMenu.js +7 -0
  416. package/dist/shell/header/anonymous-menu/AnonymousMenu.js.map +1 -0
  417. package/dist/shell/header/anonymous-menu/LoginButton.d.ts +3 -0
  418. package/dist/shell/header/anonymous-menu/LoginButton.js +22 -0
  419. package/dist/shell/header/anonymous-menu/LoginButton.js.map +1 -0
  420. package/dist/shell/header/anonymous-menu/RegisterButton.d.ts +3 -0
  421. package/dist/shell/header/anonymous-menu/RegisterButton.js +22 -0
  422. package/dist/shell/header/anonymous-menu/RegisterButton.js.map +1 -0
  423. package/dist/shell/header/app.d.ts +3 -0
  424. package/dist/shell/header/app.js +119 -0
  425. package/dist/shell/header/app.js.map +1 -0
  426. package/dist/shell/header/desktop/DesktopLayout.d.ts +1 -0
  427. package/dist/shell/header/desktop/DesktopLayout.js +9 -0
  428. package/dist/shell/header/desktop/DesktopLayout.js.map +1 -0
  429. package/dist/shell/header/desktop/PrimaryNavLinks.d.ts +1 -0
  430. package/dist/shell/header/desktop/PrimaryNavLinks.js +7 -0
  431. package/dist/shell/header/desktop/PrimaryNavLinks.js.map +1 -0
  432. package/dist/shell/header/desktop/SecondaryNavLinks.d.ts +1 -0
  433. package/dist/shell/header/desktop/SecondaryNavLinks.js +7 -0
  434. package/dist/shell/header/desktop/SecondaryNavLinks.js.map +1 -0
  435. package/dist/shell/header/index.js +3 -0
  436. package/dist/shell/header/index.js.map +1 -0
  437. package/dist/shell/header/mobile/MobileLayout.d.ts +1 -0
  438. package/dist/shell/header/mobile/MobileLayout.js +17 -0
  439. package/dist/shell/header/mobile/MobileLayout.js.map +1 -0
  440. package/dist/shell/header/mobile/MobileNavLinks.d.ts +1 -0
  441. package/dist/shell/header/mobile/MobileNavLinks.js +7 -0
  442. package/dist/shell/header/mobile/MobileNavLinks.js.map +1 -0
  443. package/dist/shell/i18n/index.d.ts +25 -0
  444. package/dist/shell/i18n/index.js +26 -0
  445. package/dist/shell/i18n/index.js.map +1 -0
  446. package/dist/shell/index.js +8 -0
  447. package/dist/shell/index.js.map +1 -0
  448. package/dist/shell/jest.config.d.ts +16 -0
  449. package/{tools/dist/jest → dist/shell}/jest.config.js +13 -11
  450. package/dist/shell/jest.config.js.map +1 -0
  451. package/dist/shell/menus/LinkMenuItem.d.ts +9 -0
  452. package/dist/shell/menus/LinkMenuItem.js +36 -0
  453. package/dist/shell/menus/LinkMenuItem.js.map +1 -0
  454. package/dist/shell/menus/NavDropdownMenuSlot.d.ts +7 -0
  455. package/dist/shell/menus/NavDropdownMenuSlot.js +14 -0
  456. package/dist/shell/menus/NavDropdownMenuSlot.js.map +1 -0
  457. package/dist/shell/menus/ProfileLinkMenuItem.d.ts +8 -0
  458. package/dist/shell/menus/ProfileLinkMenuItem.js +16 -0
  459. package/dist/shell/menus/ProfileLinkMenuItem.js.map +1 -0
  460. package/dist/shell/menus/data/utils.d.ts +4 -0
  461. package/dist/shell/menus/data/utils.js +13 -0
  462. package/dist/shell/menus/data/utils.js.map +1 -0
  463. package/dist/shell/router/createRouter.d.ts +1 -0
  464. package/{shell/router/createRouter.ts → dist/shell/router/createRouter.js} +9 -11
  465. package/dist/shell/router/createRouter.js.map +1 -0
  466. package/dist/shell/router/getAppRoutes.d.ts +2 -0
  467. package/dist/shell/router/getAppRoutes.js +14 -0
  468. package/dist/shell/router/getAppRoutes.js.map +1 -0
  469. package/dist/shell/setupTest.d.ts +1 -0
  470. package/{shell → dist/shell}/setupTest.js +6 -7
  471. package/dist/shell/setupTest.js.map +1 -0
  472. package/dist/shell/site.config.dev.d.ts +4 -0
  473. package/dist/shell/site.config.dev.js +43 -0
  474. package/dist/shell/site.config.dev.js.map +1 -0
  475. package/dist/shell/site.d.ts +1 -0
  476. package/dist/shell/site.js +35 -0
  477. package/dist/shell/site.js.map +1 -0
  478. package/dist/tools/babel/babel.config.d.ts +12 -0
  479. package/dist/tools/cli/commands/serve.d.ts +1 -0
  480. package/dist/tools/cli/intl-imports.d.ts +7 -0
  481. package/dist/tools/cli/intl-imports.test.d.ts +1 -0
  482. package/dist/tools/cli/openedx.d.ts +2 -0
  483. package/{tools/dist → dist/tools}/cli/openedx.js +1 -1
  484. package/dist/tools/cli/transifex-utils.d.ts +2 -0
  485. package/dist/tools/cli/utils/ensureConfigFilenameOption.d.ts +2 -0
  486. package/dist/tools/cli/utils/formatter.d.ts +1 -0
  487. package/dist/tools/cli/utils/getResolvedConfigPath.d.ts +2 -0
  488. package/dist/tools/cli/utils/prettyPrintTitle.d.ts +1 -0
  489. package/dist/tools/cli/utils/printUsage.d.ts +1 -0
  490. package/dist/tools/config-helpers/createConfig.d.ts +2 -0
  491. package/dist/tools/config-helpers/createLintConfig.d.ts +2 -0
  492. package/dist/tools/config-helpers/getBaseConfig.d.ts +2 -0
  493. package/dist/tools/defaultConfigPaths.d.ts +8 -0
  494. package/dist/tools/eslint/base.eslint.config.d.ts +3 -0
  495. package/dist/tools/eslint.config.d.ts +3 -0
  496. package/dist/tools/index.d.ts +3 -0
  497. package/dist/tools/jest/jest.config.d.ts +15 -0
  498. package/dist/tools/jest.config.d.ts +8 -0
  499. package/dist/tools/types.d.ts +18 -0
  500. package/{tools/dist → dist/tools}/typescript/tsconfig.json +2 -1
  501. package/dist/tools/webpack/common-config/all/getCodeRules.d.ts +2 -0
  502. package/dist/tools/webpack/common-config/all/getFileLoaderRules.d.ts +11 -0
  503. package/dist/tools/webpack/common-config/all/getImageMinimizer.d.ts +5 -0
  504. package/dist/tools/webpack/common-config/all/getStylesheetRule.d.ts +8 -0
  505. package/dist/tools/webpack/common-config/dev/getDevServer.d.ts +2 -0
  506. package/dist/tools/webpack/common-config/index.d.ts +6 -0
  507. package/dist/tools/webpack/common-config/site/getHtmlWebpackPlugin.d.ts +2 -0
  508. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.d.ts +18 -0
  509. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/index.d.ts +2 -0
  510. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.d.ts +1 -0
  511. package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.d.ts +1 -0
  512. package/dist/tools/webpack/utils/getPublicPath.d.ts +1 -0
  513. package/dist/tools/webpack/utils/getResolvedSiteConfigPath.d.ts +1 -0
  514. package/dist/tools/webpack/webpack.config.build.d.ts +3 -0
  515. package/{config → dist/tools}/webpack/webpack.config.build.js +8 -5
  516. package/dist/tools/webpack/webpack.config.dev.d.ts +3 -0
  517. package/{tools/dist → dist/tools}/webpack/webpack.config.dev.js +8 -5
  518. package/dist/tools/webpack/webpack.config.dev.shell.d.ts +3 -0
  519. package/{tools/dist → dist/tools}/webpack/webpack.config.dev.shell.js +0 -4
  520. package/dist/types.d.ts +82 -0
  521. package/dist/types.js +7 -0
  522. package/dist/types.js.map +1 -0
  523. package/package.json +21 -16
  524. package/config/tsconfig.json +0 -32
  525. package/config/webpack/common-config/all/getIgnoreWarnings.js +0 -14
  526. package/config/webpack/utils/getLocalAliases.js +0 -65
  527. package/config/webpack/webpack.config.dev.js +0 -70
  528. package/config/webpack/webpack.config.dev.shell.js +0 -104
  529. package/runtime/__mocks__/file.js +0 -1
  530. package/runtime/__mocks__/svg.js +0 -1
  531. package/runtime/__mocks__/universal-cookie.js +0 -6
  532. package/runtime/analytics/MockAnalyticsService.js +0 -71
  533. package/runtime/analytics/SegmentAnalyticsService.js +0 -243
  534. package/runtime/analytics/index.ts +0 -12
  535. package/runtime/analytics/interface.test.js +0 -242
  536. package/runtime/auth/AxiosCsrfTokenService.js +0 -60
  537. package/runtime/auth/AxiosJwtAuthService.js +0 -363
  538. package/runtime/auth/AxiosJwtAuthService.test.jsx +0 -1076
  539. package/runtime/auth/AxiosJwtTokenService.js +0 -134
  540. package/runtime/auth/LocalForageCache.js +0 -76
  541. package/runtime/auth/MockAuthService.js +0 -278
  542. package/runtime/auth/index.ts +0 -19
  543. package/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +0 -36
  544. package/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +0 -37
  545. package/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +0 -20
  546. package/runtime/auth/interceptors/createRetryInterceptor.js +0 -74
  547. package/runtime/auth/interceptors/createRetryInterceptor.test.js +0 -23
  548. package/runtime/auth/utils.js +0 -105
  549. package/runtime/config/getExternalLinkUrl.test.js +0 -76
  550. package/runtime/i18n/injectIntlWithShim.jsx +0 -48
  551. package/runtime/i18n/lib.test.js +0 -230
  552. package/runtime/i18n/lib.ts +0 -272
  553. package/runtime/index.ts +0 -139
  554. package/runtime/initialize.async.function.config.test.js +0 -43
  555. package/runtime/initialize.const.config.test.js +0 -41
  556. package/runtime/initialize.function.config.test.js +0 -41
  557. package/runtime/initialize.js +0 -352
  558. package/runtime/initialize.test.js +0 -356
  559. package/runtime/jest.config.js +0 -33
  560. package/runtime/logging/MockLoggingService.js +0 -31
  561. package/runtime/logging/NewRelicLoggingService.js +0 -184
  562. package/runtime/logging/NewRelicLoggingService.test.js +0 -214
  563. package/runtime/logging/types.ts +0 -4
  564. package/runtime/react/AuthenticatedPageRoute.test.jsx +0 -135
  565. package/runtime/react/CombinedAppProvider.tsx +0 -46
  566. package/runtime/react/CurrentAppProvider.tsx +0 -46
  567. package/runtime/react/Divider.tsx +0 -5
  568. package/runtime/react/ErrorBoundary.jsx +0 -47
  569. package/runtime/react/ErrorBoundary.test.jsx +0 -83
  570. package/runtime/react/ErrorPage.jsx +0 -72
  571. package/runtime/react/SiteProvider.test.jsx +0 -66
  572. package/runtime/react/SiteProvider.tsx +0 -101
  573. package/runtime/react/hooks/theme/useTheme.test.ts +0 -221
  574. package/runtime/react/hooks/theme/useTheme.ts +0 -179
  575. package/runtime/react/hooks/theme/useThemeConfig.test.ts +0 -107
  576. package/runtime/react/hooks/theme/useThemeCore.test.ts +0 -65
  577. package/runtime/react/hooks/theme/useThemeCore.ts +0 -52
  578. package/runtime/react/hooks/theme/useThemeVariants.test.ts +0 -97
  579. package/runtime/react/hooks/theme/useThemeVariants.ts +0 -116
  580. package/runtime/react/hooks/theme/useTrackColorSchemeChoice.test.ts +0 -54
  581. package/runtime/react/hooks/theme/useTrackColorSchemeChoice.ts +0 -30
  582. package/runtime/react/hooks/useActiveRouteRoleWatcher.ts +0 -31
  583. package/runtime/react/hooks/useAuthenticatedUser.test.tsx +0 -41
  584. package/runtime/react/hooks/useSiteConfig.test.tsx +0 -13
  585. package/runtime/react/reducers.ts +0 -40
  586. package/runtime/routing/utils.test.ts +0 -7
  587. package/runtime/routing/utils.ts +0 -34
  588. package/runtime/scripts/GoogleAnalyticsLoader.test.ts +0 -77
  589. package/runtime/scripts/GoogleAnalyticsLoader.ts +0 -59
  590. package/runtime/site.config.test.tsx +0 -33
  591. package/runtime/slots/Slot.test.tsx +0 -40
  592. package/runtime/slots/Slot.tsx +0 -32
  593. package/runtime/slots/SlotContext.tsx +0 -8
  594. package/runtime/slots/hooks.ts +0 -35
  595. package/runtime/slots/layout/DefaultSlotLayout.test.tsx +0 -31
  596. package/runtime/slots/layout/DefaultSlotLayout.tsx +0 -9
  597. package/runtime/slots/layout/hooks.test.tsx +0 -178
  598. package/runtime/slots/layout/hooks.ts +0 -65
  599. package/runtime/slots/layout/utils.test.ts +0 -67
  600. package/runtime/slots/layout/utils.ts +0 -14
  601. package/runtime/slots/utils.test.ts +0 -64
  602. package/runtime/slots/utils.ts +0 -78
  603. package/runtime/slots/widget/WidgetContext.tsx +0 -9
  604. package/runtime/slots/widget/WidgetProvider.tsx +0 -30
  605. package/runtime/slots/widget/hooks.ts +0 -105
  606. package/runtime/slots/widget/iframe/IFrameContentWrapper.messages.tsx +0 -16
  607. package/runtime/slots/widget/iframe/IFrameContentWrapper.tsx +0 -84
  608. package/runtime/slots/widget/iframe/IFrameWidget.tsx +0 -59
  609. package/runtime/slots/widget/iframe/hooks.ts +0 -179
  610. package/runtime/slots/widget/utils.tsx +0 -201
  611. package/runtime/testing/initializeMockApp.test.ts +0 -66
  612. package/runtime/testing/mockMessages.ts +0 -23
  613. package/runtime/utils.test.js +0 -116
  614. package/shell/DefaultLayout.tsx +0 -18
  615. package/shell/DefaultMain.tsx +0 -7
  616. package/shell/Logo.test.tsx +0 -32
  617. package/shell/Logo.tsx +0 -28
  618. package/shell/Shell.messages.ts +0 -61
  619. package/shell/Shell.tsx +0 -18
  620. package/shell/__mocks__/file.js +0 -1
  621. package/shell/__mocks__/svg.js +0 -1
  622. package/shell/__mocks__/universal-cookie.js +0 -6
  623. package/shell/app.ts +0 -38
  624. package/shell/dev/devFooter/app.tsx +0 -43
  625. package/shell/dev/devHeader/BarContext.tsx +0 -13
  626. package/shell/dev/devHeader/BarLink.tsx +0 -16
  627. package/shell/dev/devHeader/BarProvider.tsx +0 -25
  628. package/shell/dev/devHeader/CoursesLink.tsx +0 -16
  629. package/shell/dev/devHeader/FooContext.tsx +0 -13
  630. package/shell/dev/devHeader/FooLink.tsx +0 -16
  631. package/shell/dev/devHeader/FooProvider.tsx +0 -25
  632. package/shell/dev/devHeader/app.tsx +0 -53
  633. package/shell/dev/devHeader/providers.tsx +0 -11
  634. package/shell/dev/devHome/HomePage.tsx +0 -28
  635. package/shell/dev/devHome/app.ts +0 -18
  636. package/shell/dev/devHome/i18n/index.ts +0 -27
  637. package/shell/dev/devHome/messages.ts +0 -11
  638. package/shell/dev/devUser/app.tsx +0 -24
  639. package/shell/dev/slotShowcase/HorizontalSlotLayout.tsx +0 -11
  640. package/shell/dev/slotShowcase/LayoutWithOptions.tsx +0 -17
  641. package/shell/dev/slotShowcase/SlotShowcasePage.tsx +0 -66
  642. package/shell/dev/slotShowcase/WidgetWithOptions.tsx +0 -11
  643. package/shell/dev/slotShowcase/app.tsx +0 -373
  644. package/shell/footer/CenterLinks.tsx +0 -11
  645. package/shell/footer/CopyrightNotice.tsx +0 -36
  646. package/shell/footer/Footer.tsx +0 -34
  647. package/shell/footer/LabeledLinkColumn.tsx +0 -19
  648. package/shell/footer/LanguageMenu.tsx +0 -35
  649. package/shell/footer/LanguageMenuItem.tsx +0 -23
  650. package/shell/footer/LeftLinks.tsx +0 -11
  651. package/shell/footer/LegalNotices.tsx +0 -17
  652. package/shell/footer/PoweredBy.tsx +0 -17
  653. package/shell/footer/RevealLinks.tsx +0 -43
  654. package/shell/footer/RightLinks.tsx +0 -11
  655. package/shell/footer/app.tsx +0 -73
  656. package/shell/footer/data/api.ts +0 -48
  657. package/shell/header/AuthenticatedMenu.tsx +0 -32
  658. package/shell/header/Header.tsx +0 -17
  659. package/shell/header/anonymous-menu/AnonymousMenu.tsx +0 -14
  660. package/shell/header/anonymous-menu/LoginButton.tsx +0 -14
  661. package/shell/header/anonymous-menu/RegisterButton.tsx +0 -15
  662. package/shell/header/app.tsx +0 -142
  663. package/shell/header/desktop/DesktopLayout.tsx +0 -22
  664. package/shell/header/desktop/PrimaryNavLinks.tsx +0 -10
  665. package/shell/header/desktop/SecondaryNavLinks.tsx +0 -10
  666. package/shell/header/mobile/MobileLayout.tsx +0 -47
  667. package/shell/header/mobile/MobileNavLinks.tsx +0 -10
  668. package/shell/i18n/index.ts +0 -25
  669. package/shell/jest.config.js +0 -31
  670. package/shell/menus/LinkMenuItem.tsx +0 -64
  671. package/shell/menus/NavDropdownMenuSlot.tsx +0 -29
  672. package/shell/menus/ProfileLinkMenuItem.tsx +0 -33
  673. package/shell/menus/data/utils.ts +0 -19
  674. package/shell/public/index.html +0 -10
  675. package/shell/router/createRouter.test.tsx +0 -50
  676. package/shell/router/getAppRoutes.test.tsx +0 -59
  677. package/shell/router/getAppRoutes.ts +0 -21
  678. package/shell/site.config.dev.tsx +0 -49
  679. package/shell/site.config.test.tsx +0 -16
  680. package/shell/site.tsx +0 -41
  681. package/tools/dist/babel/babel.config.js +0 -28
  682. package/tools/dist/config-helpers/createConfig.js +0 -13
  683. package/tools/dist/config-helpers/createLintConfig.js +0 -16
  684. package/tools/dist/config-helpers/getBaseConfig.js +0 -12
  685. package/tools/dist/defaultConfigPaths.js +0 -35
  686. package/tools/dist/eslint/base.eslint.config.js +0 -113
  687. package/tools/dist/index.js +0 -12
  688. package/tools/dist/types.js +0 -23
  689. package/tools/dist/webpack/common-config/all/getCodeRules.js +0 -52
  690. package/tools/dist/webpack/common-config/all/getFileLoaderRules.js +0 -26
  691. package/tools/dist/webpack/common-config/all/getIgnoreWarnings.js +0 -14
  692. package/tools/dist/webpack/common-config/all/getImageMinimizer.js +0 -25
  693. package/tools/dist/webpack/common-config/all/getStylesheetRule.js +0 -112
  694. package/tools/dist/webpack/common-config/dev/getDevServer.js +0 -38
  695. package/tools/dist/webpack/common-config/index.js +0 -18
  696. package/tools/dist/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -16
  697. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -91
  698. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -7
  699. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
  700. package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -3
  701. package/tools/dist/webpack/utils/getLocalAliases.js +0 -65
  702. package/tools/dist/webpack/utils/getPublicPath.js +0 -6
  703. package/tools/dist/webpack/utils/getResolvedSiteConfigPath.js +0 -32
  704. package/tools/dist/webpack/webpack.config.build.js +0 -70
  705. package/types.ts +0 -119
  706. /package/{runtime/react/hooks/theme/index.ts → dist/runtime/react/hooks/theme/index.d.ts} +0 -0
  707. /package/{runtime/routing/index.ts → dist/runtime/routing/index.d.ts} +0 -0
  708. /package/{runtime/scripts/index.ts → dist/runtime/scripts/index.d.ts} +0 -0
  709. /package/{runtime/slots/index.ts → dist/runtime/slots/index.d.ts} +0 -0
  710. /package/{runtime/slots/layout/index.ts → dist/runtime/slots/layout/index.d.ts} +0 -0
  711. /package/{runtime/slots/widget/index.ts → dist/runtime/slots/widget/index.d.ts} +0 -0
  712. /package/{shell → dist/shell}/app.scss +0 -0
  713. /package/{shell/dev/devFooter/index.ts → dist/shell/dev/devFooter/index.d.ts} +0 -0
  714. /package/{shell/dev/devHeader/index.ts → dist/shell/dev/devHeader/index.d.ts} +0 -0
  715. /package/{shell/dev/devHome/index.ts → dist/shell/dev/devHome/index.d.ts} +0 -0
  716. /package/{shell/dev/devUser/index.ts → dist/shell/dev/devUser/index.d.ts} +0 -0
  717. /package/{shell/dev/index.ts → dist/shell/dev/index.d.ts} +0 -0
  718. /package/{shell/dev/slotShowcase/index.ts → dist/shell/dev/slotShowcase/index.d.ts} +0 -0
  719. /package/{shell/footer/index.ts → dist/shell/footer/index.d.ts} +0 -0
  720. /package/{shell/header/index.ts → dist/shell/header/index.d.ts} +0 -0
  721. /package/{shell/index.ts → dist/shell/index.d.ts} +0 -0
  722. /package/{config → dist/tools}/babel/babel.config.js +0 -0
  723. /package/{tools/dist → dist/tools}/cli/commands/serve.js +0 -0
  724. /package/{tools/dist → dist/tools}/cli/intl-imports.js +0 -0
  725. /package/{tools/dist → dist/tools}/cli/intl-imports.test.js +0 -0
  726. /package/{tools/dist → dist/tools}/cli/transifex-utils.js +0 -0
  727. /package/{tools/dist → dist/tools}/cli/utils/ensureConfigFilenameOption.js +0 -0
  728. /package/{tools/dist → dist/tools}/cli/utils/formatter.js +0 -0
  729. /package/{tools/dist → dist/tools}/cli/utils/getResolvedConfigPath.js +0 -0
  730. /package/{tools/dist → dist/tools}/cli/utils/prettyPrintTitle.js +0 -0
  731. /package/{tools/dist → dist/tools}/cli/utils/printUsage.js +0 -0
  732. /package/{config → dist/tools}/config-helpers/createConfig.js +0 -0
  733. /package/{config → dist/tools}/config-helpers/createLintConfig.js +0 -0
  734. /package/{config → dist/tools}/config-helpers/getBaseConfig.js +0 -0
  735. /package/{config → dist/tools}/defaultConfigPaths.js +0 -0
  736. /package/{config → dist/tools}/eslint/base.eslint.config.js +0 -0
  737. /package/{tools/dist → dist/tools}/eslint.config.js +0 -0
  738. /package/{config → dist/tools}/index.js +0 -0
  739. /package/{config → dist/tools}/jest/jest.config.js +0 -0
  740. /package/{tools/dist → dist/tools}/jest.config.js +0 -0
  741. /package/{config → dist/tools}/types.js +0 -0
  742. /package/{config → dist/tools}/webpack/common-config/all/getCodeRules.js +0 -0
  743. /package/{config → dist/tools}/webpack/common-config/all/getFileLoaderRules.js +0 -0
  744. /package/{config → dist/tools}/webpack/common-config/all/getImageMinimizer.js +0 -0
  745. /package/{config → dist/tools}/webpack/common-config/all/getStylesheetRule.js +0 -0
  746. /package/{config → dist/tools}/webpack/common-config/dev/getDevServer.js +0 -0
  747. /package/{config → dist/tools}/webpack/common-config/index.js +0 -0
  748. /package/{config → dist/tools}/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -0
  749. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -0
  750. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -0
  751. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -0
  752. /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -0
  753. /package/{config → dist/tools}/webpack/utils/getPublicPath.js +0 -0
  754. /package/{config → dist/tools}/webpack/utils/getResolvedSiteConfigPath.js +0 -0
@@ -1,242 +0,0 @@
1
- import {
2
- configureAnalytics,
3
- identifyAnonymousUser,
4
- identifyAuthenticatedUser,
5
- sendPageEvent,
6
- sendTrackEvent,
7
- sendTrackingLogEvent,
8
- SegmentAnalyticsService,
9
- } from './index';
10
-
11
- const eventType = 'test.event';
12
- const eventData = {
13
- testShallow: 'test-shallow',
14
- testObject: {
15
- testDeep: 'test-deep',
16
- },
17
- };
18
- const testUserId = 99;
19
- const mockLoggingService = {
20
- logError: jest.fn(),
21
- logInfo: jest.fn(),
22
- };
23
- // The actual ApiClient is a function, so while this feels weird, it accurately models the real
24
- // thing.
25
- const mockAuthApiClient = () => {
26
- };
27
- mockAuthApiClient.post = jest.fn().mockResolvedValue(undefined);
28
-
29
- // SegmentAnalyticsService inserts a script before the first script element
30
- // in the document. Add one here.
31
- document.body.innerHTML = '<script id="stub" />';
32
-
33
- describe('Analytics', () => {
34
- let service;
35
- let userIdFunction;
36
-
37
- beforeEach(() => {
38
- window.analytics = [];
39
- });
40
-
41
- function afterConfigure() {
42
- mockLoggingService.logError.mockReset();
43
- mockAuthApiClient.post.mockReset();
44
- mockAuthApiClient.post.mockResolvedValue(undefined);
45
- window.analytics.identify = jest.fn();
46
- window.analytics.page = jest.fn();
47
- window.analytics.track = jest.fn();
48
- window.analytics.reset = jest.fn();
49
- userIdFunction = jest.fn();
50
- window.analytics.user = jest.fn(() => ({
51
- id: userIdFunction,
52
- }));
53
- window.analytics.ready = jest.fn((callback) => {
54
- if (callback) {
55
- callback();
56
- }
57
- });
58
- }
59
-
60
- describe('with valid segmentKey', () => {
61
- beforeEach(() => {
62
- service = configureAnalytics(SegmentAnalyticsService, {
63
- loggingService: mockLoggingService,
64
- httpClient: mockAuthApiClient,
65
- config: {
66
- lmsBaseUrl: 'https://example.com',
67
- segmentKey: 'test-key',
68
- },
69
- });
70
-
71
- afterConfigure();
72
-
73
- expect(global.analytics.invoked).toBe(true);
74
- expect(service.segmentInitialized).toBe(true);
75
- });
76
-
77
- describe('analytics sendTrackingLogEvent', () => {
78
- it('posts expected data when successful', () => {
79
- expect.assertions(6);
80
- return sendTrackingLogEvent(eventType, eventData)
81
- .then(() => {
82
- expect(mockAuthApiClient.post.mock.calls.length).toEqual(1);
83
- expect(mockAuthApiClient.post.mock.calls[0][0]).toEqual('https://example.com/event');
84
- const expectedData = 'event_type=test.event&event=%7B%22test_shallow%22%3A%22test-shallow%22%2C%22test_object%22%3A%7B%22test_deep%22%3A%22test-deep%22%7D%7D&page=http%3A%2F%2Flocalhost%2F';
85
- expect(mockAuthApiClient.post.mock.calls[0][1]).toEqual(expectedData);
86
- const config = mockAuthApiClient.post.mock.calls[0][2];
87
- expect(config.headers['Content-Type']).toEqual('application/x-www-form-urlencoded');
88
- });
89
- });
90
-
91
- it('calls loggingService.logError on error', () => {
92
- mockAuthApiClient.post.mockRejectedValue('test-error');
93
- expect.assertions(4);
94
- return sendTrackingLogEvent(eventType, eventData)
95
- .then(() => {
96
- expect(mockLoggingService.logError.mock.calls.length).toBe(1);
97
- expect(mockLoggingService.logError).toBeCalledWith('test-error');
98
- });
99
- });
100
- });
101
-
102
- describe('analytics identifyAuthenticatedUser', () => {
103
- it('calls Segment identify on success', () => {
104
- const testTraits = { anything: 'Yay!' };
105
- identifyAuthenticatedUser(testUserId, testTraits);
106
-
107
- expect(window.analytics.identify.mock.calls.length).toBe(1);
108
- expect(window.analytics.identify).toBeCalledWith(testUserId, testTraits);
109
- });
110
-
111
- it('throws error if userId is not supplied', () => {
112
- expect(() => identifyAuthenticatedUser(null))
113
- .toThrowError(new Error('UserId is required for identifyAuthenticatedUser.'));
114
- });
115
- });
116
-
117
- describe('analytics identifyAnonymousUser', () => {
118
- it('does not call segment reset for no previous segment user', () => {
119
- window.analytics.user = () => ({ id: () => null });
120
- const testTraits = { anything: 'Yay!' };
121
- identifyAnonymousUser(testTraits);
122
-
123
- expect(window.analytics.reset.mock.calls.length).toBe(0);
124
- });
125
-
126
- it('calls segment reset for a previous segment user', () => {
127
- window.analytics.user = () => ({ id: () => 7 });
128
- const testTraits = { anything: 'Yay!' };
129
- identifyAnonymousUser(testTraits);
130
-
131
- expect(window.analytics.reset.mock.calls.length).toBe(1);
132
- });
133
- });
134
-
135
- function testSendPageAfterIdentify(identifyFunction) {
136
- identifyFunction();
137
-
138
- const testCategory = 'test-category';
139
- const testName = 'test-name';
140
- const testProperties = { anything: 'Yay!' };
141
- sendPageEvent(testCategory, testName, testProperties);
142
-
143
- expect(window.analytics.page.mock.calls.length).toBe(1);
144
- expect(window.analytics.page).toBeCalledWith(testCategory, testName, testProperties);
145
- }
146
-
147
- describe('analytics send Page event', () => {
148
- it('calls Segment page on success after identifyAuthenticatedUser', () => {
149
- const userId = 1;
150
- testSendPageAfterIdentify(() => identifyAuthenticatedUser(userId));
151
- });
152
-
153
- it('calls Segment page on success after identifyAnonymousUser', () => {
154
- testSendPageAfterIdentify(identifyAnonymousUser);
155
- });
156
-
157
- it('fails if page called with no identify', () => {
158
- sendPageEvent();
159
-
160
- expect(mockLoggingService.logError.mock.calls.length).toBe(1);
161
- expect(mockLoggingService.logError).toBeCalledWith('Identify must be called before other tracking events.');
162
- });
163
- });
164
-
165
- function testSendTrackEventAfterIdentify(identifyFunction) {
166
- identifyFunction();
167
-
168
- const testName = 'test-name';
169
- const testProperties = { anything: 'Yay!' };
170
- sendTrackEvent(testName, testProperties);
171
-
172
- expect(window.analytics.track.mock.calls.length).toBe(1);
173
- expect(window.analytics.track).toBeCalledWith(testName, testProperties);
174
- }
175
-
176
- describe('analytics send Track event', () => {
177
- it('calls Segment track on success after identifyAuthenticatedUser', () => {
178
- const userId = 1;
179
- testSendTrackEventAfterIdentify(() => identifyAuthenticatedUser(userId));
180
- });
181
-
182
- it('calls Segment track on success after identifyAnonymousUser', () => {
183
- testSendTrackEventAfterIdentify(identifyAnonymousUser);
184
- });
185
-
186
- it('fails if track called with no identify', () => {
187
- sendTrackEvent();
188
-
189
- expect(mockLoggingService.logError.mock.calls.length).toBe(1);
190
- expect(mockLoggingService.logError).toBeCalledWith('Identify must be called before other tracking events.');
191
- });
192
- });
193
- });
194
-
195
- describe('with invalid segmentKey', () => {
196
- beforeEach(() => {
197
- service = configureAnalytics(SegmentAnalyticsService, {
198
- loggingService: mockLoggingService,
199
- httpClient: mockAuthApiClient,
200
- config: {
201
- lmsBaseUrl: 'https://example.com',
202
- segmentKey: '',
203
- },
204
- });
205
-
206
- afterConfigure();
207
- });
208
-
209
- it('should not initialize Segment analytics', () => {
210
- expect(global.analytics.invoked).toBeFalsy();
211
- expect(service.segmentInitialized).toBe(false);
212
- });
213
-
214
- it('should not call segment track in sendTrackEvent', () => {
215
- sendTrackEvent();
216
- expect(window.analytics.track).not.toHaveBeenCalled();
217
- });
218
-
219
- it('should not call segment page in sendPageEvent', () => {
220
- sendPageEvent();
221
- expect(window.analytics.page).not.toHaveBeenCalled();
222
- });
223
-
224
- it('should not call ready, user, reset, or identify in identifyAnonymousUser', () => {
225
- identifyAnonymousUser();
226
-
227
- expect(window.analytics.ready).not.toHaveBeenCalled();
228
- expect(window.analytics.user).not.toHaveBeenCalled();
229
- expect(userIdFunction).not.toHaveBeenCalled();
230
- expect(window.analytics.reset).not.toHaveBeenCalled();
231
- expect(window.analytics.identify).not.toHaveBeenCalled();
232
- expect(service.hasIdentifyBeenCalled).toBe(false);
233
- });
234
-
235
- it('should not call identify in identifyAuthenticatedUser', () => {
236
- identifyAuthenticatedUser(testUserId);
237
-
238
- expect(window.analytics.identify).not.toHaveBeenCalled();
239
- expect(service.hasIdentifyBeenCalled).toBe(false);
240
- });
241
- });
242
- });
@@ -1,60 +0,0 @@
1
- import axios from 'axios';
2
- import { getUrlParts, processAxiosErrorAndThrow } from './utils';
3
-
4
- export default class AxiosCsrfTokenService {
5
- constructor(csrfTokenApiPath) {
6
- this.csrfTokenApiPath = csrfTokenApiPath;
7
- this.httpClient = axios.create();
8
- // Set withCredentials to true. Enables cross-site Access-Control requests
9
- // to be made using cookies, authorization headers or TLS client
10
- // certificates. More on MDN:
11
- // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
12
- this.httpClient.defaults.withCredentials = true;
13
- this.httpClient.defaults.headers['USE-JWT-COOKIE'] = true;
14
-
15
- this.csrfTokenCache = {};
16
- this.csrfTokenRequestPromises = {};
17
- }
18
-
19
- async getCsrfToken(url) {
20
- let urlParts;
21
- try {
22
- urlParts = getUrlParts(url);
23
- } catch (e) {
24
- // If the url is not parsable it's likely because a relative
25
- // path was supplied as the url. This is acceptable and in
26
- // this case we should use the current origin of the page.
27
- urlParts = getUrlParts(global.location.origin);
28
- }
29
-
30
- const { protocol, domain } = urlParts;
31
- const csrfToken = this.csrfTokenCache[domain];
32
-
33
- if (csrfToken) {
34
- return csrfToken;
35
- }
36
-
37
- if (!this.csrfTokenRequestPromises[domain]) {
38
- this.csrfTokenRequestPromises[domain] = this.httpClient
39
- .get(`${protocol}://${domain}${this.csrfTokenApiPath}`)
40
- .then((response) => {
41
- this.csrfTokenCache[domain] = response.data.csrfToken;
42
- return this.csrfTokenCache[domain];
43
- })
44
- .catch(processAxiosErrorAndThrow)
45
- .finally(() => {
46
- delete this.csrfTokenRequestPromises[domain];
47
- });
48
- }
49
-
50
- return this.csrfTokenRequestPromises[domain];
51
- }
52
-
53
- clearCsrfTokenCache() {
54
- this.csrfTokenCache = {};
55
- }
56
-
57
- getHttpClient() {
58
- return this.httpClient;
59
- }
60
- }
@@ -1,363 +0,0 @@
1
- import axios from 'axios';
2
- import PropTypes from 'prop-types';
3
- import { camelCaseObject } from '../utils';
4
- import AxiosCsrfTokenService from './AxiosCsrfTokenService';
5
- import AxiosJwtTokenService from './AxiosJwtTokenService';
6
- import createCsrfTokenProviderInterceptor from './interceptors/createCsrfTokenProviderInterceptor';
7
- import createJwtTokenProviderInterceptor from './interceptors/createJwtTokenProviderInterceptor';
8
- import createProcessAxiosRequestErrorInterceptor from './interceptors/createProcessAxiosRequestErrorInterceptor';
9
- import configureCache from './LocalForageCache';
10
- import { logFrontendAuthError } from './utils';
11
-
12
- const optionsPropTypes = {
13
- config: PropTypes.shape({
14
- baseUrl: PropTypes.string.isRequired,
15
- lmsBaseUrl: PropTypes.string.isRequired,
16
- loginUrl: PropTypes.string.isRequired,
17
- logoutUrl: PropTypes.string.isRequired,
18
- refreshAccessTokenApiPath: PropTypes.string.isRequired,
19
- accessTokenCookieName: PropTypes.string.isRequired,
20
- csrfTokenApiPath: PropTypes.string.isRequired,
21
- }).isRequired,
22
- loggingService: PropTypes.shape({
23
- logError: PropTypes.func.isRequired,
24
- logInfo: PropTypes.func.isRequired,
25
- }).isRequired,
26
- };
27
-
28
- /**
29
- * @implements {AuthService}
30
- * @memberof module:Auth
31
- */
32
- class AxiosJwtAuthService {
33
- /**
34
- * @param {Object} options
35
- * @param {Object} options.config
36
- * @param {string} options.config.baseUrl
37
- * @param {string} options.config.lmsBaseUrl
38
- * @param {string} options.config.loginUrl
39
- * @param {string} options.config.logoutUrl
40
- * @param {string} options.config.refreshAccessTokenApiPath
41
- * @param {string} options.config.accessTokenCookieName
42
- * @param {string} options.config.csrfTokenApiPath
43
- * @param {Object} options.loggingService requires logError and logInfo methods
44
- */
45
- constructor(options) {
46
- this.authenticatedHttpClient = null;
47
- this.httpClient = null;
48
- this.cachedAuthenticatedHttpClient = null;
49
- this.cachedHttpClient = null;
50
- this.authenticatedUser = null;
51
-
52
- PropTypes.checkPropTypes(optionsPropTypes, options, 'options', 'AuthService');
53
-
54
- this.config = options.config;
55
- this.loggingService = options.loggingService;
56
- this.jwtTokenService = new AxiosJwtTokenService(
57
- this.loggingService,
58
- this.config.accessTokenCookieName,
59
- this.config.lmsBaseUrl,
60
- this.config.refreshAccessTokenApiPath,
61
- );
62
- this.csrfTokenService = new AxiosCsrfTokenService(this.config.csrfTokenApiPath);
63
- this.authenticatedHttpClient = this.addAuthenticationToHttpClient(axios.create());
64
- this.httpClient = axios.create();
65
- configureCache()
66
- .then((cachedAxiosClient) => {
67
- this.cachedAuthenticatedHttpClient = this.addAuthenticationToHttpClient(cachedAxiosClient);
68
- this.cachedHttpClient = cachedAxiosClient;
69
- })
70
- .catch((e) => {
71
- // fallback to non-cached HTTP clients and log error
72
- this.cachedAuthenticatedHttpClient = this.authenticatedHttpClient;
73
- this.cachedHttpClient = this.httpClient;
74
- logFrontendAuthError(this.loggingService, `configureCache failed with error: ${e.message}`);
75
- }).finally(() => {
76
- this.middleware = options.middleware;
77
- this.applyMiddleware(options.middleware);
78
- });
79
- }
80
-
81
- /**
82
- * Applies middleware to the axios instances in this service.
83
- *
84
- * @param {Array} middleware Middleware to apply.
85
- */
86
- applyMiddleware(middleware = []) {
87
- const clients = [
88
- this.authenticatedHttpClient, this.httpClient,
89
- this.cachedAuthenticatedHttpClient, this.cachedHttpClient,
90
- ];
91
- try {
92
- (middleware).forEach((middlewareFn) => {
93
- clients.forEach((client) => client && middlewareFn(client));
94
- });
95
- } catch (error) {
96
- logFrontendAuthError(this.loggingService, error);
97
- throw error;
98
- }
99
- }
100
-
101
- /**
102
- * Gets the authenticated HTTP client for the service. This is an axios instance.
103
- *
104
- * @param {Object} [options] Optional options for how the HTTP client should be configured.
105
- * @param {boolean} [options.useCache] Whether to use front end caching for all requests made
106
- * with the returned client.
107
- *
108
- * @returns {HttpClient} A configured axios http client which can be used for authenticated
109
- * requests.
110
- */
111
- getAuthenticatedHttpClient(options = {}) {
112
- if (options.useCache) {
113
- return this.cachedAuthenticatedHttpClient;
114
- }
115
-
116
- return this.authenticatedHttpClient;
117
- }
118
-
119
- /**
120
- * Gets the unauthenticated HTTP client for the service. This is an axios instance.
121
- *
122
- * @param {Object} [options] Optional options for how the HTTP client should be configured.
123
- * @param {boolean} [options.useCache] Whether to use front end caching for all requests made
124
- * with the returned client.
125
- * @returns {HttpClient} A configured axios http client.
126
- */
127
- getHttpClient(options = {}) {
128
- if (options.useCache) {
129
- return this.cachedHttpClient;
130
- }
131
-
132
- return this.httpClient;
133
- }
134
-
135
- /**
136
- * Used primarily for testing.
137
- *
138
- * @ignore
139
- */
140
- getJwtTokenService() {
141
- return this.jwtTokenService;
142
- }
143
-
144
- /**
145
- * Used primarily for testing.
146
- *
147
- * @ignore
148
- */
149
- getCsrfTokenService() {
150
- return this.csrfTokenService;
151
- }
152
-
153
- /**
154
- * Builds a URL to the login page with a post-login redirect URL attached as a query parameter.
155
- *
156
- * ```
157
- * const url = getLoginRedirectUrl('http://localhost/mypage');
158
- * console.log(url); // http://localhost/login?next=http%3A%2F%2Flocalhost%2Fmypage
159
- * ```
160
- *
161
- * @param {string} redirectUrl The URL the user should be redirected to after logging in.
162
- */
163
- getLoginRedirectUrl(redirectUrl = this.config.baseUrl) {
164
- return `${this.config.loginUrl}?next=${encodeURIComponent(redirectUrl)}`;
165
- }
166
-
167
- /**
168
- * Redirects the user to the login page.
169
- *
170
- * @param {string} redirectUrl The URL the user should be redirected to after logging in.
171
- */
172
- redirectToLogin(redirectUrl = this.config.baseUrl) {
173
- global.location.assign(this.getLoginRedirectUrl(redirectUrl));
174
- }
175
-
176
- /**
177
- * Builds a URL to the logout page with a post-logout redirect URL attached as a query parameter.
178
- *
179
- * ```
180
- * const url = getLogoutRedirectUrl('http://localhost/mypage');
181
- * console.log(url); // http://localhost/logout?next=http%3A%2F%2Flocalhost%2Fmypage
182
- * ```
183
- *
184
- * @param {string} redirectUrl The URL the user should be redirected to after logging out.
185
- */
186
- getLogoutRedirectUrl(redirectUrl = this.config.baseUrl) {
187
- return `${this.config.logoutUrl}?redirect_url=${encodeURIComponent(redirectUrl)}`;
188
- }
189
-
190
- /**
191
- * Redirects the user to the logout page.
192
- *
193
- * @param {string} redirectUrl The URL the user should be redirected to after logging out.
194
- */
195
- redirectToLogout(redirectUrl = this.config.baseUrl) {
196
- global.location.assign(this.getLogoutRedirectUrl(redirectUrl));
197
- }
198
-
199
- /**
200
- * If it exists, returns the user data representing the currently authenticated user. If the
201
- * user is anonymous, returns null.
202
- *
203
- * @returns {UserData|null}
204
- */
205
- getAuthenticatedUser() {
206
- return this.authenticatedUser;
207
- }
208
-
209
- /**
210
- * Sets the authenticated user to the provided value.
211
- *
212
- * @param {UserData} authUser
213
- */
214
- setAuthenticatedUser(authUser) {
215
- this.authenticatedUser = authUser;
216
- }
217
-
218
- /**
219
- * Reads the authenticated user's access token. Resolves to null if the user is
220
- * unauthenticated.
221
- *
222
- * @returns {Promise<UserData>|Promise<null>} Resolves to the user's access token if they are
223
- * logged in.
224
- */
225
- async fetchAuthenticatedUser(options = {}) {
226
- const decodedAccessToken = await this.jwtTokenService.getJwtToken(options.forceRefresh || false);
227
-
228
- if (decodedAccessToken !== null) {
229
- this.setAuthenticatedUser({
230
- email: decodedAccessToken.email,
231
- userId: decodedAccessToken.user_id,
232
- username: decodedAccessToken.preferred_username,
233
- roles: decodedAccessToken.roles || [],
234
- administrator: decodedAccessToken.administrator,
235
- name: decodedAccessToken.name,
236
- });
237
- // Sets userId as a custom attribute that will be included with all subsequent log messages.
238
- // Very helpful for debugging.
239
- this.loggingService.setCustomAttribute('userId', decodedAccessToken.user_id);
240
- } else {
241
- this.setAuthenticatedUser(null);
242
- // Intentionally not setting `userId` in the logging service here because it would be useful
243
- // to know the previously logged in user for debugging refresh issues.
244
- }
245
-
246
- return this.getAuthenticatedUser();
247
- }
248
-
249
- /**
250
- * Ensures a user is authenticated. It will redirect to login when not
251
- * authenticated.
252
- *
253
- * @param {string} [redirectUrl=config.baseUrl] to return user after login when not
254
- * authenticated.
255
- * @returns {Promise<UserData>}
256
- */
257
- async ensureAuthenticatedUser(redirectUrl = this.config.baseUrl) {
258
- await this.fetchAuthenticatedUser();
259
-
260
- if (this.getAuthenticatedUser() === null) {
261
- const isRedirectFromLoginPage = global.document.referrer?.startsWith(this.config.loginUrl);
262
-
263
- if (isRedirectFromLoginPage) {
264
- const redirectLoopError = new Error('Redirect from login page. Rejecting to avoid infinite redirect loop.');
265
- logFrontendAuthError(this.loggingService, redirectLoopError);
266
- throw redirectLoopError;
267
- }
268
-
269
- // The user is not authenticated, send them to the login page.
270
- this.redirectToLogin(redirectUrl);
271
-
272
- const unauthorizedError = new Error('Failed to ensure the user is authenticated');
273
- unauthorizedError.isRedirecting = true;
274
- throw unauthorizedError;
275
- }
276
-
277
- return this.getAuthenticatedUser();
278
- }
279
-
280
- /**
281
- * Fetches additional user account information for the authenticated user and merges it into the
282
- * existing authenticatedUser object, available via getAuthenticatedUser().
283
- *
284
- * ```
285
- * console.log(authenticatedUser); // Will be sparse and only contain basic information.
286
- * await hydrateAuthenticatedUser()
287
- * const authenticatedUser = getAuthenticatedUser();
288
- * console.log(authenticatedUser); // Will contain additional user information
289
- * ```
290
- *
291
- * @returns {Promise<null>}
292
- */
293
- async hydrateAuthenticatedUser() {
294
- const user = this.getAuthenticatedUser();
295
- if (user !== null) {
296
- const response = await this.authenticatedHttpClient
297
- .get(`${this.config.lmsBaseUrl}/api/user/v1/accounts/${user.username}`);
298
- this.setAuthenticatedUser({ ...user, ...camelCaseObject(response.data) });
299
- }
300
- }
301
-
302
- /**
303
- * Adds authentication defaults and interceptors to an HTTP client instance.
304
- *
305
- * @param {HttpClient} newHttpClient
306
- * @param {Object} config
307
- * @param {string} [config.refreshAccessTokenApiPath]
308
- * @param {string} [config.accessTokenCookieName]
309
- * @param {string} [config.csrfTokenApiPath]
310
- * @returns {HttpClient} A configured Axios HTTP client.
311
- */
312
- addAuthenticationToHttpClient(newHttpClient) {
313
- const httpClient = Object.create(newHttpClient);
314
- // Set withCredentials to true. Enables cross-site Access-Control requests
315
- // to be made using cookies, authorization headers or TLS client
316
- // certificates. More on MDN:
317
- // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
318
- httpClient.defaults.withCredentials = true;
319
-
320
- // Axios interceptors
321
-
322
- // The JWT access token interceptor attempts to refresh the user's jwt token
323
- // before any request unless the isPublic flag is set on the request config.
324
- const refreshAccessTokenInterceptor = createJwtTokenProviderInterceptor({
325
- jwtTokenService: this.jwtTokenService,
326
- shouldSkip: axiosRequestConfig => axiosRequestConfig.isPublic,
327
- });
328
- // The CSRF token intercepter fetches and caches a csrf token for any post,
329
- // put, patch, or delete request. That token is then added to the request
330
- // headers.
331
- const attachCsrfTokenInterceptor = createCsrfTokenProviderInterceptor({
332
- csrfTokenService: this.csrfTokenService,
333
- csrfTokenApiPath: this.config.csrfTokenApiPath,
334
- shouldSkip: (axiosRequestConfig) => {
335
- const { method, isCsrfExempt } = axiosRequestConfig;
336
- const CSRF_PROTECTED_METHODS = ['post', 'put', 'patch', 'delete'];
337
- return isCsrfExempt || !CSRF_PROTECTED_METHODS.includes(method);
338
- },
339
- });
340
-
341
- const processAxiosRequestErrorInterceptor = createProcessAxiosRequestErrorInterceptor({
342
- loggingService: this.loggingService,
343
- });
344
-
345
- // Request interceptors: Axios runs the interceptors in reverse order from
346
- // how they are listed. After fetching csrf tokens no longer require jwt
347
- // authentication, it won't matter which happens first. This change is
348
- // coming soon in edx-platform. Nov. 2019
349
- httpClient.interceptors.request.use(attachCsrfTokenInterceptor);
350
- httpClient.interceptors.request.use(refreshAccessTokenInterceptor);
351
-
352
- // Response interceptor: moves axios response error data into the error
353
- // object at error.customAttributes
354
- httpClient.interceptors.response.use(
355
- response => response,
356
- processAxiosRequestErrorInterceptor,
357
- );
358
-
359
- return httpClient;
360
- }
361
- }
362
-
363
- export default AxiosJwtAuthService;