@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.
- package/{index.ts → dist/index.d.ts} +0 -3
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/analytics/MockAnalyticsService.d.ts +50 -0
- package/dist/runtime/analytics/MockAnalyticsService.js +64 -0
- package/dist/runtime/analytics/MockAnalyticsService.js.map +1 -0
- package/dist/runtime/analytics/SegmentAnalyticsService.d.ts +64 -0
- package/dist/runtime/analytics/SegmentAnalyticsService.js +218 -0
- package/dist/runtime/analytics/SegmentAnalyticsService.js.map +1 -0
- package/dist/runtime/analytics/index.d.ts +3 -0
- package/dist/runtime/analytics/index.js +4 -0
- package/dist/runtime/analytics/index.js.map +1 -0
- package/dist/runtime/analytics/interface.d.ts +53 -0
- package/{runtime → dist/runtime}/analytics/interface.js +26 -38
- package/dist/runtime/analytics/interface.js.map +1 -0
- package/dist/runtime/auth/AxiosCsrfTokenService.d.ts +10 -0
- package/dist/runtime/auth/AxiosCsrfTokenService.js +64 -0
- package/dist/runtime/auth/AxiosCsrfTokenService.js.map +1 -0
- package/dist/runtime/auth/AxiosJwtAuthService.d.ts +182 -0
- package/dist/runtime/auth/AxiosJwtAuthService.js +339 -0
- package/dist/runtime/auth/AxiosJwtAuthService.js.map +1 -0
- package/dist/runtime/auth/AxiosJwtTokenService.d.ts +16 -0
- package/dist/runtime/auth/AxiosJwtTokenService.js +130 -0
- package/dist/runtime/auth/AxiosJwtTokenService.js.map +1 -0
- package/dist/runtime/auth/LocalForageCache.d.ts +7 -0
- package/dist/runtime/auth/LocalForageCache.js +78 -0
- package/dist/runtime/auth/LocalForageCache.js.map +1 -0
- package/dist/runtime/auth/MockAuthService.d.ts +209 -0
- package/dist/runtime/auth/MockAuthService.js +256 -0
- package/dist/runtime/auth/MockAuthService.js.map +1 -0
- package/dist/runtime/auth/index.d.ts +3 -0
- package/dist/runtime/auth/index.js +4 -0
- package/dist/runtime/auth/index.js.map +1 -0
- package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.d.ts +2 -0
- package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +42 -0
- package/dist/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js.map +1 -0
- package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.d.ts +2 -0
- package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +40 -0
- package/dist/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js.map +1 -0
- package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.d.ts +2 -0
- package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +26 -0
- package/dist/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js.map +1 -0
- package/dist/runtime/auth/interceptors/createRetryInterceptor.d.ts +3 -0
- package/dist/runtime/auth/interceptors/createRetryInterceptor.js +67 -0
- package/dist/runtime/auth/interceptors/createRetryInterceptor.js.map +1 -0
- package/dist/runtime/auth/interface.d.ts +133 -0
- package/{runtime → dist/runtime}/auth/interface.js +65 -72
- package/dist/runtime/auth/interface.js.map +1 -0
- package/dist/runtime/auth/utils.d.ts +13 -0
- package/dist/runtime/auth/utils.js +66 -0
- package/dist/runtime/auth/utils.js.map +1 -0
- package/dist/runtime/babel.config.d.ts +2 -0
- package/{shell → dist/runtime}/babel.config.js +2 -1
- package/dist/runtime/babel.config.js.map +1 -0
- package/{runtime/config/index.ts → dist/runtime/config/index.d.ts} +28 -123
- package/dist/runtime/config/index.js +323 -0
- package/dist/runtime/config/index.js.map +1 -0
- package/dist/runtime/constants.d.ts +57 -0
- package/{runtime/constants.ts → dist/runtime/constants.js} +1 -11
- package/dist/runtime/constants.js.map +1 -0
- package/dist/runtime/i18n/index.d.ts +3 -0
- package/{runtime → dist/runtime}/i18n/index.js +4 -44
- package/dist/runtime/i18n/index.js.map +1 -0
- package/dist/runtime/i18n/injectIntlWithShim.d.ts +11 -0
- package/dist/runtime/i18n/injectIntlWithShim.js +45 -0
- package/dist/runtime/i18n/injectIntlWithShim.js.map +1 -0
- package/dist/runtime/i18n/lib.d.ts +119 -0
- package/dist/runtime/i18n/lib.js +236 -0
- package/dist/runtime/i18n/lib.js.map +1 -0
- package/dist/runtime/index.d.ts +13 -0
- package/dist/runtime/index.js +14 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/initialize.d.ts +91 -0
- package/dist/runtime/initialize.js +312 -0
- package/dist/runtime/initialize.js.map +1 -0
- package/dist/runtime/jest.config.d.ts +17 -0
- package/dist/runtime/jest.config.js +35 -0
- package/dist/runtime/jest.config.js.map +1 -0
- package/dist/runtime/logging/MockLoggingService.d.ts +28 -0
- package/dist/runtime/logging/MockLoggingService.js +31 -0
- package/dist/runtime/logging/MockLoggingService.js.map +1 -0
- package/dist/runtime/logging/NewRelicLoggingService.d.ts +67 -0
- package/dist/runtime/logging/NewRelicLoggingService.js +175 -0
- package/dist/runtime/logging/NewRelicLoggingService.js.map +1 -0
- package/{runtime/logging/index.ts → dist/runtime/logging/index.d.ts} +1 -7
- package/dist/runtime/logging/index.js +4 -0
- package/dist/runtime/logging/index.js.map +1 -0
- package/dist/runtime/logging/interface.d.ts +38 -0
- package/{runtime → dist/runtime}/logging/interface.js +16 -26
- package/dist/runtime/logging/interface.js.map +1 -0
- package/dist/runtime/logging/types.d.ts +4 -0
- package/dist/runtime/logging/types.js +2 -0
- package/dist/runtime/logging/types.js.map +1 -0
- package/dist/runtime/react/AuthenticatedPageRoute.d.ts +28 -0
- package/{runtime/react/AuthenticatedPageRoute.jsx → dist/runtime/react/AuthenticatedPageRoute.js} +11 -18
- package/dist/runtime/react/AuthenticatedPageRoute.js.map +1 -0
- package/dist/runtime/react/CombinedAppProvider.d.ts +6 -0
- package/dist/runtime/react/CombinedAppProvider.js +24 -0
- package/dist/runtime/react/CombinedAppProvider.js.map +1 -0
- package/dist/runtime/react/CurrentAppContext.d.ts +20 -0
- package/{runtime/react/CurrentAppContext.tsx → dist/runtime/react/CurrentAppContext.js} +3 -7
- package/dist/runtime/react/CurrentAppContext.js.map +1 -0
- package/dist/runtime/react/CurrentAppProvider.d.ts +23 -0
- package/dist/runtime/react/CurrentAppProvider.js +33 -0
- package/dist/runtime/react/CurrentAppProvider.js.map +1 -0
- package/dist/runtime/react/Divider.d.ts +1 -0
- package/dist/runtime/react/Divider.js +5 -0
- package/dist/runtime/react/Divider.js.map +1 -0
- package/dist/runtime/react/ErrorBoundary.d.ts +32 -0
- package/dist/runtime/react/ErrorBoundary.js +40 -0
- package/dist/runtime/react/ErrorBoundary.js.map +1 -0
- package/dist/runtime/react/ErrorPage.d.ts +17 -0
- package/dist/runtime/react/ErrorPage.js +29 -0
- package/dist/runtime/react/ErrorPage.js.map +1 -0
- package/dist/runtime/react/LoginRedirect.d.ts +8 -0
- package/{runtime/react/LoginRedirect.jsx → dist/runtime/react/LoginRedirect.js} +5 -5
- package/dist/runtime/react/LoginRedirect.js.map +1 -0
- package/dist/runtime/react/PageWrap.d.ts +8 -0
- package/{runtime/react/PageWrap.jsx → dist/runtime/react/PageWrap.js} +7 -10
- package/dist/runtime/react/PageWrap.js.map +1 -0
- package/dist/runtime/react/SiteContext.d.ts +24 -0
- package/{runtime/react/SiteContext.tsx → dist/runtime/react/SiteContext.js} +5 -11
- package/dist/runtime/react/SiteContext.js.map +1 -0
- package/dist/runtime/react/SiteProvider.d.ts +29 -0
- package/dist/runtime/react/SiteProvider.js +69 -0
- package/dist/runtime/react/SiteProvider.js.map +1 -0
- package/dist/runtime/react/constants.d.ts +3 -0
- package/{runtime/react/constants.ts → dist/runtime/react/constants.js} +1 -0
- package/dist/runtime/react/constants.js.map +1 -0
- package/{runtime/react/hooks/index.ts → dist/runtime/react/hooks/index.d.ts} +0 -1
- package/dist/runtime/react/hooks/index.js +8 -0
- package/dist/runtime/react/hooks/index.js.map +1 -0
- package/dist/runtime/react/hooks/theme/index.js +3 -0
- package/dist/runtime/react/hooks/theme/index.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useTheme.d.ts +35 -0
- package/dist/runtime/react/hooks/theme/useTheme.js +153 -0
- package/dist/runtime/react/hooks/theme/useTheme.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useThemeConfig.d.ts +16 -0
- package/{runtime/react/hooks/theme/useThemeConfig.ts → dist/runtime/react/hooks/theme/useThemeConfig.js} +11 -16
- package/dist/runtime/react/hooks/theme/useThemeConfig.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useThemeCore.d.ts +10 -0
- package/dist/runtime/react/hooks/theme/useThemeCore.js +40 -0
- package/dist/runtime/react/hooks/theme/useThemeCore.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useThemeVariants.d.ts +17 -0
- package/dist/runtime/react/hooks/theme/useThemeVariants.js +90 -0
- package/dist/runtime/react/hooks/theme/useThemeVariants.js.map +1 -0
- package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.d.ts +8 -0
- package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js +30 -0
- package/dist/runtime/react/hooks/theme/useTrackColorSchemeChoice.js.map +1 -0
- package/dist/runtime/react/hooks/theme/utils.d.ts +6 -0
- package/{runtime/react/hooks/theme/utils.ts → dist/runtime/react/hooks/theme/utils.js} +4 -4
- package/dist/runtime/react/hooks/theme/utils.js.map +1 -0
- package/dist/runtime/react/hooks/useActiveRoles.d.ts +2 -0
- package/{runtime/react/hooks/useActiveRoles.ts → dist/runtime/react/hooks/useActiveRoles.js} +6 -8
- package/dist/runtime/react/hooks/useActiveRoles.js.map +1 -0
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.d.ts +2 -0
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js +26 -0
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js.map +1 -0
- package/dist/runtime/react/hooks/useAppConfig.d.ts +2 -0
- package/{runtime/react/hooks/useAppConfig.ts → dist/runtime/react/hooks/useAppConfig.js} +3 -4
- package/dist/runtime/react/hooks/useAppConfig.js.map +1 -0
- package/dist/runtime/react/hooks/useAuthenticatedUser.d.ts +2 -0
- package/{runtime/react/hooks/useAuthenticatedUser.ts → dist/runtime/react/hooks/useAuthenticatedUser.js} +3 -4
- package/dist/runtime/react/hooks/useAuthenticatedUser.js.map +1 -0
- package/dist/runtime/react/hooks/useSiteConfig.d.ts +2 -0
- package/{runtime/react/hooks/useSiteConfig.ts → dist/runtime/react/hooks/useSiteConfig.js} +3 -4
- package/dist/runtime/react/hooks/useSiteConfig.js.map +1 -0
- package/dist/runtime/react/hooks/useSiteEvent.d.ts +12 -0
- package/{runtime/react/hooks/useSiteEvent.ts → dist/runtime/react/hooks/useSiteEvent.js} +7 -9
- package/dist/runtime/react/hooks/useSiteEvent.js.map +1 -0
- package/{runtime/react/index.ts → dist/runtime/react/index.d.ts} +0 -1
- package/dist/runtime/react/index.js +19 -0
- package/dist/runtime/react/index.js.map +1 -0
- package/dist/runtime/react/reducers.d.ts +11 -0
- package/dist/runtime/react/reducers.js +28 -0
- package/dist/runtime/react/reducers.js.map +1 -0
- package/dist/runtime/routing/index.js +2 -0
- package/dist/runtime/routing/index.js.map +1 -0
- package/dist/runtime/routing/utils.d.ts +4 -0
- package/dist/runtime/routing/utils.js +28 -0
- package/dist/runtime/routing/utils.js.map +1 -0
- package/dist/runtime/scripts/GoogleAnalyticsLoader.d.ts +12 -0
- package/dist/runtime/scripts/GoogleAnalyticsLoader.js +49 -0
- package/dist/runtime/scripts/GoogleAnalyticsLoader.js.map +1 -0
- package/dist/runtime/scripts/index.js +2 -0
- package/dist/runtime/scripts/index.js.map +1 -0
- package/dist/runtime/setupTest.d.ts +1 -0
- package/{runtime → dist/runtime}/setupTest.js +6 -8
- package/dist/runtime/setupTest.js.map +1 -0
- package/dist/runtime/slots/Slot.d.ts +9 -0
- package/dist/runtime/slots/Slot.js +30 -0
- package/dist/runtime/slots/Slot.js.map +1 -0
- package/dist/runtime/slots/SlotContext.d.ts +7 -0
- package/dist/runtime/slots/SlotContext.js +7 -0
- package/dist/runtime/slots/SlotContext.js.map +1 -0
- package/dist/runtime/slots/hooks.d.ts +12 -0
- package/dist/runtime/slots/hooks.js +29 -0
- package/dist/runtime/slots/hooks.js.map +1 -0
- package/dist/runtime/slots/index.js +7 -0
- package/dist/runtime/slots/index.js.map +1 -0
- package/dist/runtime/slots/layout/DefaultSlotLayout.d.ts +1 -0
- package/dist/runtime/slots/layout/DefaultSlotLayout.js +7 -0
- package/dist/runtime/slots/layout/DefaultSlotLayout.js.map +1 -0
- package/dist/runtime/slots/layout/hooks.d.ts +10 -0
- package/dist/runtime/slots/layout/hooks.js +57 -0
- package/dist/runtime/slots/layout/hooks.js.map +1 -0
- package/dist/runtime/slots/layout/index.js +5 -0
- package/dist/runtime/slots/layout/index.js.map +1 -0
- package/{runtime/slots/layout/types.ts → dist/runtime/slots/layout/types.d.ts} +10 -25
- package/dist/runtime/slots/layout/types.js +12 -0
- package/dist/runtime/slots/layout/types.js.map +1 -0
- package/dist/runtime/slots/layout/utils.d.ts +5 -0
- package/dist/runtime/slots/layout/utils.js +11 -0
- package/dist/runtime/slots/layout/utils.js.map +1 -0
- package/{runtime/slots/types.ts → dist/runtime/slots/types.d.ts} +6 -12
- package/dist/runtime/slots/types.js +7 -0
- package/dist/runtime/slots/types.js.map +1 -0
- package/dist/runtime/slots/utils.d.ts +3 -0
- package/dist/runtime/slots/utils.js +66 -0
- package/dist/runtime/slots/utils.js.map +1 -0
- package/dist/runtime/slots/widget/WidgetContext.d.ts +6 -0
- package/dist/runtime/slots/widget/WidgetContext.js +8 -0
- package/dist/runtime/slots/widget/WidgetContext.js.map +1 -0
- package/dist/runtime/slots/widget/WidgetProvider.d.ts +9 -0
- package/dist/runtime/slots/widget/WidgetProvider.js +18 -0
- package/dist/runtime/slots/widget/WidgetProvider.js.map +1 -0
- package/dist/runtime/slots/widget/hooks.d.ts +13 -0
- package/dist/runtime/slots/widget/hooks.js +104 -0
- package/dist/runtime/slots/widget/hooks.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.d.ts +10 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js +42 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.d.ts +13 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js +15 -0
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.messages.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/IFrameWidget.d.ts +6 -0
- package/dist/runtime/slots/widget/iframe/IFrameWidget.js +32 -0
- package/dist/runtime/slots/widget/iframe/IFrameWidget.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/constants.d.ts +15 -0
- package/{runtime/slots/widget/iframe/constants.ts → dist/runtime/slots/widget/iframe/constants.js} +2 -4
- package/dist/runtime/slots/widget/iframe/constants.js.map +1 -0
- package/dist/runtime/slots/widget/iframe/hooks.d.ts +64 -0
- package/dist/runtime/slots/widget/iframe/hooks.js +144 -0
- package/dist/runtime/slots/widget/iframe/hooks.js.map +1 -0
- package/{runtime/slots/widget/iframe/index.ts → dist/runtime/slots/widget/iframe/index.d.ts} +1 -4
- package/dist/runtime/slots/widget/iframe/index.js +3 -0
- package/dist/runtime/slots/widget/iframe/index.js.map +1 -0
- package/{runtime/slots/widget/iframe/types.ts → dist/runtime/slots/widget/iframe/types.d.ts} +2 -4
- package/dist/runtime/slots/widget/iframe/types.js +3 -0
- package/dist/runtime/slots/widget/iframe/types.js.map +1 -0
- package/dist/runtime/slots/widget/index.js +6 -0
- package/dist/runtime/slots/widget/index.js.map +1 -0
- package/{runtime/slots/widget/types.ts → dist/runtime/slots/widget/types.d.ts} +50 -84
- package/dist/runtime/slots/widget/types.js +41 -0
- package/dist/runtime/slots/widget/types.js.map +1 -0
- package/dist/runtime/slots/widget/utils.d.ts +22 -0
- package/dist/runtime/slots/widget/utils.js +166 -0
- package/dist/runtime/slots/widget/utils.js.map +1 -0
- package/{runtime/subscriptions.ts → dist/runtime/subscriptions.d.ts} +5 -41
- package/dist/runtime/subscriptions.js +48 -0
- package/dist/runtime/subscriptions.js.map +1 -0
- package/{runtime/testing/index.ts → dist/runtime/testing/index.d.ts} +0 -1
- package/dist/runtime/testing/index.js +9 -0
- package/dist/runtime/testing/index.js.map +1 -0
- package/dist/runtime/testing/initializeMockApp.d.ts +46 -0
- package/{runtime/testing/initializeMockApp.ts → dist/runtime/testing/initializeMockApp.js} +26 -41
- package/dist/runtime/testing/initializeMockApp.js.map +1 -0
- package/dist/runtime/testing/mockMessages.d.ts +22 -0
- package/dist/runtime/testing/mockMessages.js +23 -0
- package/dist/runtime/testing/mockMessages.js.map +1 -0
- package/dist/runtime/utils.d.ts +95 -0
- package/{runtime → dist/runtime}/utils.js +55 -70
- package/dist/runtime/utils.js.map +1 -0
- package/dist/shell/DefaultLayout.d.ts +1 -0
- package/dist/shell/DefaultLayout.js +7 -0
- package/dist/shell/DefaultLayout.js.map +1 -0
- package/dist/shell/DefaultMain.d.ts +1 -0
- package/dist/shell/DefaultMain.js +6 -0
- package/dist/shell/DefaultMain.js.map +1 -0
- package/dist/shell/Logo.d.ts +6 -0
- package/dist/shell/Logo.js +11 -0
- package/dist/shell/Logo.js.map +1 -0
- package/dist/shell/Shell.d.ts +1 -0
- package/dist/shell/Shell.js +10 -0
- package/dist/shell/Shell.js.map +1 -0
- package/dist/shell/Shell.messages.d.ts +58 -0
- package/dist/shell/Shell.messages.js +60 -0
- package/dist/shell/Shell.messages.js.map +1 -0
- package/dist/shell/app.d.ts +3 -0
- package/dist/shell/app.js +35 -0
- package/dist/shell/app.js.map +1 -0
- package/dist/shell/babel.config.d.ts +2 -0
- package/{runtime → dist/shell}/babel.config.js +2 -1
- package/dist/shell/babel.config.js.map +1 -0
- package/dist/shell/dev/devFooter/app.d.ts +3 -0
- package/dist/shell/dev/devFooter/app.js +36 -0
- package/dist/shell/dev/devFooter/app.js.map +1 -0
- package/dist/shell/dev/devFooter/index.js +2 -0
- package/dist/shell/dev/devFooter/index.js.map +1 -0
- package/dist/shell/dev/devHeader/BarContext.d.ts +7 -0
- package/dist/shell/dev/devHeader/BarContext.js +8 -0
- package/dist/shell/dev/devHeader/BarContext.js.map +1 -0
- package/dist/shell/dev/devHeader/BarLink.d.ts +1 -0
- package/dist/shell/dev/devHeader/BarLink.js +10 -0
- package/dist/shell/dev/devHeader/BarLink.js.map +1 -0
- package/dist/shell/dev/devHeader/BarProvider.d.ts +6 -0
- package/dist/shell/dev/devHeader/BarProvider.js +16 -0
- package/dist/shell/dev/devHeader/BarProvider.js.map +1 -0
- package/dist/shell/dev/devHeader/CoursesLink.d.ts +1 -0
- package/dist/shell/dev/devHeader/CoursesLink.js +10 -0
- package/dist/shell/dev/devHeader/CoursesLink.js.map +1 -0
- package/dist/shell/dev/devHeader/FooContext.d.ts +7 -0
- package/dist/shell/dev/devHeader/FooContext.js +8 -0
- package/dist/shell/dev/devHeader/FooContext.js.map +1 -0
- package/dist/shell/dev/devHeader/FooLink.d.ts +1 -0
- package/dist/shell/dev/devHeader/FooLink.js +10 -0
- package/dist/shell/dev/devHeader/FooLink.js.map +1 -0
- package/dist/shell/dev/devHeader/FooProvider.d.ts +6 -0
- package/dist/shell/dev/devHeader/FooProvider.js +16 -0
- package/dist/shell/dev/devHeader/FooProvider.js.map +1 -0
- package/dist/shell/dev/devHeader/app.d.ts +3 -0
- package/dist/shell/dev/devHeader/app.js +34 -0
- package/dist/shell/dev/devHeader/app.js.map +1 -0
- package/dist/shell/dev/devHeader/index.js +2 -0
- package/dist/shell/dev/devHeader/index.js.map +1 -0
- package/dist/shell/dev/devHeader/providers.d.ts +3 -0
- package/dist/shell/dev/devHeader/providers.js +8 -0
- package/dist/shell/dev/devHeader/providers.js.map +1 -0
- package/dist/shell/dev/devHome/HomePage.d.ts +1 -0
- package/dist/shell/dev/devHome/HomePage.js +13 -0
- package/dist/shell/dev/devHome/HomePage.js.map +1 -0
- package/dist/shell/dev/devHome/app.d.ts +3 -0
- package/dist/shell/dev/devHome/app.js +16 -0
- package/dist/shell/dev/devHome/app.js.map +1 -0
- package/dist/shell/dev/devHome/i18n/index.d.ts +27 -0
- package/dist/shell/dev/devHome/i18n/index.js +28 -0
- package/dist/shell/dev/devHome/i18n/index.js.map +1 -0
- package/dist/shell/dev/devHome/index.js +2 -0
- package/dist/shell/dev/devHome/index.js.map +1 -0
- package/dist/shell/dev/devHome/messages.d.ts +8 -0
- package/dist/shell/dev/devHome/messages.js +10 -0
- package/dist/shell/dev/devHome/messages.js.map +1 -0
- package/dist/shell/dev/devUser/app.d.ts +3 -0
- package/dist/shell/dev/devUser/app.js +22 -0
- package/dist/shell/dev/devUser/app.js.map +1 -0
- package/dist/shell/dev/devUser/index.js +2 -0
- package/dist/shell/dev/devUser/index.js.map +1 -0
- package/dist/shell/dev/index.js +6 -0
- package/dist/shell/dev/index.js.map +1 -0
- package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js +7 -0
- package/dist/shell/dev/slotShowcase/HorizontalSlotLayout.js.map +1 -0
- package/dist/shell/dev/slotShowcase/LayoutWithOptions.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/LayoutWithOptions.js +9 -0
- package/dist/shell/dev/slotShowcase/LayoutWithOptions.js.map +1 -0
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.js +8 -0
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.js.map +1 -0
- package/dist/shell/dev/slotShowcase/WidgetWithOptions.d.ts +1 -0
- package/dist/shell/dev/slotShowcase/WidgetWithOptions.js +8 -0
- package/dist/shell/dev/slotShowcase/WidgetWithOptions.js.map +1 -0
- package/dist/shell/dev/slotShowcase/app.d.ts +3 -0
- package/dist/shell/dev/slotShowcase/app.js +336 -0
- package/dist/shell/dev/slotShowcase/app.js.map +1 -0
- package/dist/shell/dev/slotShowcase/index.js +2 -0
- package/dist/shell/dev/slotShowcase/index.js.map +1 -0
- package/dist/shell/footer/CenterLinks.d.ts +1 -0
- package/dist/shell/footer/CenterLinks.js +7 -0
- package/dist/shell/footer/CenterLinks.js.map +1 -0
- package/dist/shell/footer/CopyrightNotice.d.ts +10 -0
- package/dist/shell/footer/CopyrightNotice.js +10 -0
- package/dist/shell/footer/CopyrightNotice.js.map +1 -0
- package/dist/shell/footer/Footer.d.ts +1 -0
- package/dist/shell/footer/Footer.js +12 -0
- package/dist/shell/footer/Footer.js.map +1 -0
- package/dist/shell/footer/LabeledLinkColumn.d.ts +1 -0
- package/dist/shell/footer/LabeledLinkColumn.js +11 -0
- package/dist/shell/footer/LabeledLinkColumn.js.map +1 -0
- package/dist/shell/footer/LanguageMenu.d.ts +1 -0
- package/dist/shell/footer/LanguageMenu.js +16 -0
- package/dist/shell/footer/LanguageMenu.js.map +1 -0
- package/dist/shell/footer/LanguageMenuItem.d.ts +8 -0
- package/dist/shell/footer/LanguageMenuItem.js +11 -0
- package/dist/shell/footer/LanguageMenuItem.js.map +1 -0
- package/dist/shell/footer/LeftLinks.d.ts +1 -0
- package/dist/shell/footer/LeftLinks.js +7 -0
- package/dist/shell/footer/LeftLinks.js.map +1 -0
- package/dist/shell/footer/LegalNotices.d.ts +1 -0
- package/dist/shell/footer/LegalNotices.js +10 -0
- package/dist/shell/footer/LegalNotices.js.map +1 -0
- package/dist/shell/footer/PoweredBy.d.ts +1 -0
- package/dist/shell/footer/PoweredBy.js +9 -0
- package/dist/shell/footer/PoweredBy.js.map +1 -0
- package/dist/shell/footer/RevealLinks.d.ts +1 -0
- package/dist/shell/footer/RevealLinks.js +16 -0
- package/dist/shell/footer/RevealLinks.js.map +1 -0
- package/dist/shell/footer/RightLinks.d.ts +1 -0
- package/dist/shell/footer/RightLinks.js +7 -0
- package/dist/shell/footer/RightLinks.js.map +1 -0
- package/dist/shell/footer/app.d.ts +3 -0
- package/dist/shell/footer/app.js +59 -0
- package/dist/shell/footer/app.js.map +1 -0
- package/dist/shell/footer/data/api.d.ts +1 -0
- package/dist/shell/footer/data/api.js +45 -0
- package/dist/shell/footer/data/api.js.map +1 -0
- package/dist/shell/footer/index.js +3 -0
- package/dist/shell/footer/index.js.map +1 -0
- package/dist/shell/header/AuthenticatedMenu.d.ts +5 -0
- package/dist/shell/header/AuthenticatedMenu.js +13 -0
- package/dist/shell/header/AuthenticatedMenu.js.map +1 -0
- package/dist/shell/header/Header.d.ts +1 -0
- package/dist/shell/header/Header.js +8 -0
- package/dist/shell/header/Header.js.map +1 -0
- package/dist/shell/header/anonymous-menu/AnonymousMenu.d.ts +5 -0
- package/dist/shell/header/anonymous-menu/AnonymousMenu.js +7 -0
- package/dist/shell/header/anonymous-menu/AnonymousMenu.js.map +1 -0
- package/dist/shell/header/anonymous-menu/LoginButton.d.ts +3 -0
- package/dist/shell/header/anonymous-menu/LoginButton.js +22 -0
- package/dist/shell/header/anonymous-menu/LoginButton.js.map +1 -0
- package/dist/shell/header/anonymous-menu/RegisterButton.d.ts +3 -0
- package/dist/shell/header/anonymous-menu/RegisterButton.js +22 -0
- package/dist/shell/header/anonymous-menu/RegisterButton.js.map +1 -0
- package/dist/shell/header/app.d.ts +3 -0
- package/dist/shell/header/app.js +119 -0
- package/dist/shell/header/app.js.map +1 -0
- package/dist/shell/header/desktop/DesktopLayout.d.ts +1 -0
- package/dist/shell/header/desktop/DesktopLayout.js +9 -0
- package/dist/shell/header/desktop/DesktopLayout.js.map +1 -0
- package/dist/shell/header/desktop/PrimaryNavLinks.d.ts +1 -0
- package/dist/shell/header/desktop/PrimaryNavLinks.js +7 -0
- package/dist/shell/header/desktop/PrimaryNavLinks.js.map +1 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.d.ts +1 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.js +7 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.js.map +1 -0
- package/dist/shell/header/index.js +3 -0
- package/dist/shell/header/index.js.map +1 -0
- package/dist/shell/header/mobile/MobileLayout.d.ts +1 -0
- package/dist/shell/header/mobile/MobileLayout.js +17 -0
- package/dist/shell/header/mobile/MobileLayout.js.map +1 -0
- package/dist/shell/header/mobile/MobileNavLinks.d.ts +1 -0
- package/dist/shell/header/mobile/MobileNavLinks.js +7 -0
- package/dist/shell/header/mobile/MobileNavLinks.js.map +1 -0
- package/dist/shell/i18n/index.d.ts +25 -0
- package/dist/shell/i18n/index.js +26 -0
- package/dist/shell/i18n/index.js.map +1 -0
- package/dist/shell/index.js +8 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/jest.config.d.ts +16 -0
- package/{tools/dist/jest → dist/shell}/jest.config.js +13 -11
- package/dist/shell/jest.config.js.map +1 -0
- package/dist/shell/menus/LinkMenuItem.d.ts +9 -0
- package/dist/shell/menus/LinkMenuItem.js +36 -0
- package/dist/shell/menus/LinkMenuItem.js.map +1 -0
- package/dist/shell/menus/NavDropdownMenuSlot.d.ts +7 -0
- package/dist/shell/menus/NavDropdownMenuSlot.js +14 -0
- package/dist/shell/menus/NavDropdownMenuSlot.js.map +1 -0
- package/dist/shell/menus/ProfileLinkMenuItem.d.ts +8 -0
- package/dist/shell/menus/ProfileLinkMenuItem.js +16 -0
- package/dist/shell/menus/ProfileLinkMenuItem.js.map +1 -0
- package/dist/shell/menus/data/utils.d.ts +4 -0
- package/dist/shell/menus/data/utils.js +13 -0
- package/dist/shell/menus/data/utils.js.map +1 -0
- package/dist/shell/router/createRouter.d.ts +1 -0
- package/{shell/router/createRouter.ts → dist/shell/router/createRouter.js} +9 -11
- package/dist/shell/router/createRouter.js.map +1 -0
- package/dist/shell/router/getAppRoutes.d.ts +2 -0
- package/dist/shell/router/getAppRoutes.js +14 -0
- package/dist/shell/router/getAppRoutes.js.map +1 -0
- package/dist/shell/setupTest.d.ts +1 -0
- package/{shell → dist/shell}/setupTest.js +6 -7
- package/dist/shell/setupTest.js.map +1 -0
- package/dist/shell/site.config.dev.d.ts +4 -0
- package/dist/shell/site.config.dev.js +43 -0
- package/dist/shell/site.config.dev.js.map +1 -0
- package/dist/shell/site.d.ts +1 -0
- package/dist/shell/site.js +35 -0
- package/dist/shell/site.js.map +1 -0
- package/dist/tools/babel/babel.config.d.ts +12 -0
- package/dist/tools/cli/commands/serve.d.ts +1 -0
- package/dist/tools/cli/intl-imports.d.ts +7 -0
- package/dist/tools/cli/intl-imports.test.d.ts +1 -0
- package/dist/tools/cli/openedx.d.ts +2 -0
- package/{tools/dist → dist/tools}/cli/openedx.js +1 -1
- package/dist/tools/cli/transifex-utils.d.ts +2 -0
- package/dist/tools/cli/utils/ensureConfigFilenameOption.d.ts +2 -0
- package/dist/tools/cli/utils/formatter.d.ts +1 -0
- package/dist/tools/cli/utils/getResolvedConfigPath.d.ts +2 -0
- package/dist/tools/cli/utils/prettyPrintTitle.d.ts +1 -0
- package/dist/tools/cli/utils/printUsage.d.ts +1 -0
- package/dist/tools/config-helpers/createConfig.d.ts +2 -0
- package/dist/tools/config-helpers/createLintConfig.d.ts +2 -0
- package/dist/tools/config-helpers/getBaseConfig.d.ts +2 -0
- package/dist/tools/defaultConfigPaths.d.ts +8 -0
- package/dist/tools/eslint/base.eslint.config.d.ts +3 -0
- package/dist/tools/eslint.config.d.ts +3 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/jest/jest.config.d.ts +15 -0
- package/dist/tools/jest.config.d.ts +8 -0
- package/dist/tools/types.d.ts +18 -0
- package/{tools/dist → dist/tools}/typescript/tsconfig.json +2 -1
- package/dist/tools/webpack/common-config/all/getCodeRules.d.ts +2 -0
- package/dist/tools/webpack/common-config/all/getFileLoaderRules.d.ts +11 -0
- package/dist/tools/webpack/common-config/all/getImageMinimizer.d.ts +5 -0
- package/dist/tools/webpack/common-config/all/getStylesheetRule.d.ts +8 -0
- package/dist/tools/webpack/common-config/dev/getDevServer.d.ts +2 -0
- package/dist/tools/webpack/common-config/index.d.ts +6 -0
- package/dist/tools/webpack/common-config/site/getHtmlWebpackPlugin.d.ts +2 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.d.ts +18 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/index.d.ts +2 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.d.ts +1 -0
- package/dist/tools/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.d.ts +1 -0
- package/dist/tools/webpack/utils/getPublicPath.d.ts +1 -0
- package/dist/tools/webpack/utils/getResolvedSiteConfigPath.d.ts +1 -0
- package/dist/tools/webpack/webpack.config.build.d.ts +3 -0
- package/{config → dist/tools}/webpack/webpack.config.build.js +8 -5
- package/dist/tools/webpack/webpack.config.dev.d.ts +3 -0
- package/{tools/dist → dist/tools}/webpack/webpack.config.dev.js +8 -5
- package/dist/tools/webpack/webpack.config.dev.shell.d.ts +3 -0
- package/{tools/dist → dist/tools}/webpack/webpack.config.dev.shell.js +0 -4
- package/dist/types.d.ts +82 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +21 -16
- package/config/tsconfig.json +0 -32
- package/config/webpack/common-config/all/getIgnoreWarnings.js +0 -14
- package/config/webpack/utils/getLocalAliases.js +0 -65
- package/config/webpack/webpack.config.dev.js +0 -70
- package/config/webpack/webpack.config.dev.shell.js +0 -104
- package/runtime/__mocks__/file.js +0 -1
- package/runtime/__mocks__/svg.js +0 -1
- package/runtime/__mocks__/universal-cookie.js +0 -6
- package/runtime/analytics/MockAnalyticsService.js +0 -71
- package/runtime/analytics/SegmentAnalyticsService.js +0 -243
- package/runtime/analytics/index.ts +0 -12
- package/runtime/analytics/interface.test.js +0 -242
- package/runtime/auth/AxiosCsrfTokenService.js +0 -60
- package/runtime/auth/AxiosJwtAuthService.js +0 -363
- package/runtime/auth/AxiosJwtAuthService.test.jsx +0 -1076
- package/runtime/auth/AxiosJwtTokenService.js +0 -134
- package/runtime/auth/LocalForageCache.js +0 -76
- package/runtime/auth/MockAuthService.js +0 -278
- package/runtime/auth/index.ts +0 -19
- package/runtime/auth/interceptors/createCsrfTokenProviderInterceptor.js +0 -36
- package/runtime/auth/interceptors/createJwtTokenProviderInterceptor.js +0 -37
- package/runtime/auth/interceptors/createProcessAxiosRequestErrorInterceptor.js +0 -20
- package/runtime/auth/interceptors/createRetryInterceptor.js +0 -74
- package/runtime/auth/interceptors/createRetryInterceptor.test.js +0 -23
- package/runtime/auth/utils.js +0 -105
- package/runtime/config/getExternalLinkUrl.test.js +0 -76
- package/runtime/i18n/injectIntlWithShim.jsx +0 -48
- package/runtime/i18n/lib.test.js +0 -230
- package/runtime/i18n/lib.ts +0 -272
- package/runtime/index.ts +0 -139
- package/runtime/initialize.async.function.config.test.js +0 -43
- package/runtime/initialize.const.config.test.js +0 -41
- package/runtime/initialize.function.config.test.js +0 -41
- package/runtime/initialize.js +0 -352
- package/runtime/initialize.test.js +0 -356
- package/runtime/jest.config.js +0 -33
- package/runtime/logging/MockLoggingService.js +0 -31
- package/runtime/logging/NewRelicLoggingService.js +0 -184
- package/runtime/logging/NewRelicLoggingService.test.js +0 -214
- package/runtime/logging/types.ts +0 -4
- package/runtime/react/AuthenticatedPageRoute.test.jsx +0 -135
- package/runtime/react/CombinedAppProvider.tsx +0 -46
- package/runtime/react/CurrentAppProvider.tsx +0 -46
- package/runtime/react/Divider.tsx +0 -5
- package/runtime/react/ErrorBoundary.jsx +0 -47
- package/runtime/react/ErrorBoundary.test.jsx +0 -83
- package/runtime/react/ErrorPage.jsx +0 -72
- package/runtime/react/SiteProvider.test.jsx +0 -66
- package/runtime/react/SiteProvider.tsx +0 -101
- package/runtime/react/hooks/theme/useTheme.test.ts +0 -221
- package/runtime/react/hooks/theme/useTheme.ts +0 -179
- package/runtime/react/hooks/theme/useThemeConfig.test.ts +0 -107
- package/runtime/react/hooks/theme/useThemeCore.test.ts +0 -65
- package/runtime/react/hooks/theme/useThemeCore.ts +0 -52
- package/runtime/react/hooks/theme/useThemeVariants.test.ts +0 -97
- package/runtime/react/hooks/theme/useThemeVariants.ts +0 -116
- package/runtime/react/hooks/theme/useTrackColorSchemeChoice.test.ts +0 -54
- package/runtime/react/hooks/theme/useTrackColorSchemeChoice.ts +0 -30
- package/runtime/react/hooks/useActiveRouteRoleWatcher.ts +0 -31
- package/runtime/react/hooks/useAuthenticatedUser.test.tsx +0 -41
- package/runtime/react/hooks/useSiteConfig.test.tsx +0 -13
- package/runtime/react/reducers.ts +0 -40
- package/runtime/routing/utils.test.ts +0 -7
- package/runtime/routing/utils.ts +0 -34
- package/runtime/scripts/GoogleAnalyticsLoader.test.ts +0 -77
- package/runtime/scripts/GoogleAnalyticsLoader.ts +0 -59
- package/runtime/site.config.test.tsx +0 -33
- package/runtime/slots/Slot.test.tsx +0 -40
- package/runtime/slots/Slot.tsx +0 -32
- package/runtime/slots/SlotContext.tsx +0 -8
- package/runtime/slots/hooks.ts +0 -35
- package/runtime/slots/layout/DefaultSlotLayout.test.tsx +0 -31
- package/runtime/slots/layout/DefaultSlotLayout.tsx +0 -9
- package/runtime/slots/layout/hooks.test.tsx +0 -178
- package/runtime/slots/layout/hooks.ts +0 -65
- package/runtime/slots/layout/utils.test.ts +0 -67
- package/runtime/slots/layout/utils.ts +0 -14
- package/runtime/slots/utils.test.ts +0 -64
- package/runtime/slots/utils.ts +0 -78
- package/runtime/slots/widget/WidgetContext.tsx +0 -9
- package/runtime/slots/widget/WidgetProvider.tsx +0 -30
- package/runtime/slots/widget/hooks.ts +0 -105
- package/runtime/slots/widget/iframe/IFrameContentWrapper.messages.tsx +0 -16
- package/runtime/slots/widget/iframe/IFrameContentWrapper.tsx +0 -84
- package/runtime/slots/widget/iframe/IFrameWidget.tsx +0 -59
- package/runtime/slots/widget/iframe/hooks.ts +0 -179
- package/runtime/slots/widget/utils.tsx +0 -201
- package/runtime/testing/initializeMockApp.test.ts +0 -66
- package/runtime/testing/mockMessages.ts +0 -23
- package/runtime/utils.test.js +0 -116
- package/shell/DefaultLayout.tsx +0 -18
- package/shell/DefaultMain.tsx +0 -7
- package/shell/Logo.test.tsx +0 -32
- package/shell/Logo.tsx +0 -28
- package/shell/Shell.messages.ts +0 -61
- package/shell/Shell.tsx +0 -18
- package/shell/__mocks__/file.js +0 -1
- package/shell/__mocks__/svg.js +0 -1
- package/shell/__mocks__/universal-cookie.js +0 -6
- package/shell/app.ts +0 -38
- package/shell/dev/devFooter/app.tsx +0 -43
- package/shell/dev/devHeader/BarContext.tsx +0 -13
- package/shell/dev/devHeader/BarLink.tsx +0 -16
- package/shell/dev/devHeader/BarProvider.tsx +0 -25
- package/shell/dev/devHeader/CoursesLink.tsx +0 -16
- package/shell/dev/devHeader/FooContext.tsx +0 -13
- package/shell/dev/devHeader/FooLink.tsx +0 -16
- package/shell/dev/devHeader/FooProvider.tsx +0 -25
- package/shell/dev/devHeader/app.tsx +0 -53
- package/shell/dev/devHeader/providers.tsx +0 -11
- package/shell/dev/devHome/HomePage.tsx +0 -28
- package/shell/dev/devHome/app.ts +0 -18
- package/shell/dev/devHome/i18n/index.ts +0 -27
- package/shell/dev/devHome/messages.ts +0 -11
- package/shell/dev/devUser/app.tsx +0 -24
- package/shell/dev/slotShowcase/HorizontalSlotLayout.tsx +0 -11
- package/shell/dev/slotShowcase/LayoutWithOptions.tsx +0 -17
- package/shell/dev/slotShowcase/SlotShowcasePage.tsx +0 -66
- package/shell/dev/slotShowcase/WidgetWithOptions.tsx +0 -11
- package/shell/dev/slotShowcase/app.tsx +0 -373
- package/shell/footer/CenterLinks.tsx +0 -11
- package/shell/footer/CopyrightNotice.tsx +0 -36
- package/shell/footer/Footer.tsx +0 -34
- package/shell/footer/LabeledLinkColumn.tsx +0 -19
- package/shell/footer/LanguageMenu.tsx +0 -35
- package/shell/footer/LanguageMenuItem.tsx +0 -23
- package/shell/footer/LeftLinks.tsx +0 -11
- package/shell/footer/LegalNotices.tsx +0 -17
- package/shell/footer/PoweredBy.tsx +0 -17
- package/shell/footer/RevealLinks.tsx +0 -43
- package/shell/footer/RightLinks.tsx +0 -11
- package/shell/footer/app.tsx +0 -73
- package/shell/footer/data/api.ts +0 -48
- package/shell/header/AuthenticatedMenu.tsx +0 -32
- package/shell/header/Header.tsx +0 -17
- package/shell/header/anonymous-menu/AnonymousMenu.tsx +0 -14
- package/shell/header/anonymous-menu/LoginButton.tsx +0 -14
- package/shell/header/anonymous-menu/RegisterButton.tsx +0 -15
- package/shell/header/app.tsx +0 -142
- package/shell/header/desktop/DesktopLayout.tsx +0 -22
- package/shell/header/desktop/PrimaryNavLinks.tsx +0 -10
- package/shell/header/desktop/SecondaryNavLinks.tsx +0 -10
- package/shell/header/mobile/MobileLayout.tsx +0 -47
- package/shell/header/mobile/MobileNavLinks.tsx +0 -10
- package/shell/i18n/index.ts +0 -25
- package/shell/jest.config.js +0 -31
- package/shell/menus/LinkMenuItem.tsx +0 -64
- package/shell/menus/NavDropdownMenuSlot.tsx +0 -29
- package/shell/menus/ProfileLinkMenuItem.tsx +0 -33
- package/shell/menus/data/utils.ts +0 -19
- package/shell/public/index.html +0 -10
- package/shell/router/createRouter.test.tsx +0 -50
- package/shell/router/getAppRoutes.test.tsx +0 -59
- package/shell/router/getAppRoutes.ts +0 -21
- package/shell/site.config.dev.tsx +0 -49
- package/shell/site.config.test.tsx +0 -16
- package/shell/site.tsx +0 -41
- package/tools/dist/babel/babel.config.js +0 -28
- package/tools/dist/config-helpers/createConfig.js +0 -13
- package/tools/dist/config-helpers/createLintConfig.js +0 -16
- package/tools/dist/config-helpers/getBaseConfig.js +0 -12
- package/tools/dist/defaultConfigPaths.js +0 -35
- package/tools/dist/eslint/base.eslint.config.js +0 -113
- package/tools/dist/index.js +0 -12
- package/tools/dist/types.js +0 -23
- package/tools/dist/webpack/common-config/all/getCodeRules.js +0 -52
- package/tools/dist/webpack/common-config/all/getFileLoaderRules.js +0 -26
- package/tools/dist/webpack/common-config/all/getIgnoreWarnings.js +0 -14
- package/tools/dist/webpack/common-config/all/getImageMinimizer.js +0 -25
- package/tools/dist/webpack/common-config/all/getStylesheetRule.js +0 -112
- package/tools/dist/webpack/common-config/dev/getDevServer.js +0 -38
- package/tools/dist/webpack/common-config/index.js +0 -18
- package/tools/dist/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -16
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -91
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -7
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -66
- package/tools/dist/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -3
- package/tools/dist/webpack/utils/getLocalAliases.js +0 -65
- package/tools/dist/webpack/utils/getPublicPath.js +0 -6
- package/tools/dist/webpack/utils/getResolvedSiteConfigPath.js +0 -32
- package/tools/dist/webpack/webpack.config.build.js +0 -70
- package/types.ts +0 -119
- /package/{runtime/react/hooks/theme/index.ts → dist/runtime/react/hooks/theme/index.d.ts} +0 -0
- /package/{runtime/routing/index.ts → dist/runtime/routing/index.d.ts} +0 -0
- /package/{runtime/scripts/index.ts → dist/runtime/scripts/index.d.ts} +0 -0
- /package/{runtime/slots/index.ts → dist/runtime/slots/index.d.ts} +0 -0
- /package/{runtime/slots/layout/index.ts → dist/runtime/slots/layout/index.d.ts} +0 -0
- /package/{runtime/slots/widget/index.ts → dist/runtime/slots/widget/index.d.ts} +0 -0
- /package/{shell → dist/shell}/app.scss +0 -0
- /package/{shell/dev/devFooter/index.ts → dist/shell/dev/devFooter/index.d.ts} +0 -0
- /package/{shell/dev/devHeader/index.ts → dist/shell/dev/devHeader/index.d.ts} +0 -0
- /package/{shell/dev/devHome/index.ts → dist/shell/dev/devHome/index.d.ts} +0 -0
- /package/{shell/dev/devUser/index.ts → dist/shell/dev/devUser/index.d.ts} +0 -0
- /package/{shell/dev/index.ts → dist/shell/dev/index.d.ts} +0 -0
- /package/{shell/dev/slotShowcase/index.ts → dist/shell/dev/slotShowcase/index.d.ts} +0 -0
- /package/{shell/footer/index.ts → dist/shell/footer/index.d.ts} +0 -0
- /package/{shell/header/index.ts → dist/shell/header/index.d.ts} +0 -0
- /package/{shell/index.ts → dist/shell/index.d.ts} +0 -0
- /package/{config → dist/tools}/babel/babel.config.js +0 -0
- /package/{tools/dist → dist/tools}/cli/commands/serve.js +0 -0
- /package/{tools/dist → dist/tools}/cli/intl-imports.js +0 -0
- /package/{tools/dist → dist/tools}/cli/intl-imports.test.js +0 -0
- /package/{tools/dist → dist/tools}/cli/transifex-utils.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/ensureConfigFilenameOption.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/formatter.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/getResolvedConfigPath.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/prettyPrintTitle.js +0 -0
- /package/{tools/dist → dist/tools}/cli/utils/printUsage.js +0 -0
- /package/{config → dist/tools}/config-helpers/createConfig.js +0 -0
- /package/{config → dist/tools}/config-helpers/createLintConfig.js +0 -0
- /package/{config → dist/tools}/config-helpers/getBaseConfig.js +0 -0
- /package/{config → dist/tools}/defaultConfigPaths.js +0 -0
- /package/{config → dist/tools}/eslint/base.eslint.config.js +0 -0
- /package/{tools/dist → dist/tools}/eslint.config.js +0 -0
- /package/{config → dist/tools}/index.js +0 -0
- /package/{config → dist/tools}/jest/jest.config.js +0 -0
- /package/{tools/dist → dist/tools}/jest.config.js +0 -0
- /package/{config → dist/tools}/types.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getCodeRules.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getFileLoaderRules.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getImageMinimizer.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/all/getStylesheetRule.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/dev/getDevServer.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/index.js +0 -0
- /package/{config → dist/tools}/webpack/common-config/site/getHtmlWebpackPlugin.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/HtmlWebpackNewRelicPlugin.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/index.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/HtmlWebpackNewRelicPlugin.test.js +0 -0
- /package/{config → dist/tools}/webpack/plugins/html-webpack-new-relic-plugin/test/fixtures/entry.js +0 -0
- /package/{config → dist/tools}/webpack/utils/getPublicPath.js +0 -0
- /package/{config → dist/tools}/webpack/utils/getResolvedSiteConfigPath.js +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export default class AxiosJwtTokenService {
|
|
2
|
+
static isTokenExpired(token: any): boolean;
|
|
3
|
+
constructor(loggingService: any, tokenCookieName: any, tokenRefreshBaseUrl: any, tokenRefreshPath: any);
|
|
4
|
+
loggingService: any;
|
|
5
|
+
tokenCookieName: any;
|
|
6
|
+
tokenRefreshBaseUrl: any;
|
|
7
|
+
tokenRefreshPath: any;
|
|
8
|
+
httpClient: import("axios").AxiosInstance;
|
|
9
|
+
cookies: Cookies;
|
|
10
|
+
refreshRequestPromises: {};
|
|
11
|
+
getHttpClient(): import("axios").AxiosInstance;
|
|
12
|
+
decodeJwtCookie(): unknown;
|
|
13
|
+
refresh(): any;
|
|
14
|
+
getJwtToken(forceRefresh?: boolean): Promise<any>;
|
|
15
|
+
}
|
|
16
|
+
import Cookies from 'universal-cookie';
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import axios from 'axios';
|
|
11
|
+
import jwtDecode from 'jwt-decode';
|
|
12
|
+
import Cookies from 'universal-cookie';
|
|
13
|
+
import createRetryInterceptor from './interceptors/createRetryInterceptor';
|
|
14
|
+
import { logFrontendAuthError, processAxiosErrorAndThrow } from './utils';
|
|
15
|
+
export default class AxiosJwtTokenService {
|
|
16
|
+
static isTokenExpired(token) {
|
|
17
|
+
return !token || token.exp < Date.now() / 1000;
|
|
18
|
+
}
|
|
19
|
+
constructor(loggingService, tokenCookieName, tokenRefreshBaseUrl, tokenRefreshPath) {
|
|
20
|
+
this.loggingService = loggingService;
|
|
21
|
+
this.tokenCookieName = tokenCookieName;
|
|
22
|
+
this.tokenRefreshBaseUrl = tokenRefreshBaseUrl;
|
|
23
|
+
this.tokenRefreshPath = tokenRefreshPath;
|
|
24
|
+
this.httpClient = axios.create();
|
|
25
|
+
// Set withCredentials to true. Enables cross-site Access-Control requests
|
|
26
|
+
// to be made using cookies, authorization headers or TLS client
|
|
27
|
+
// certificates. More on MDN:
|
|
28
|
+
// https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
|
|
29
|
+
this.httpClient.defaults.withCredentials = true;
|
|
30
|
+
// Add retries to this axios instance
|
|
31
|
+
this.httpClient.interceptors.response.use(response => response, createRetryInterceptor({ httpClient: this.httpClient }));
|
|
32
|
+
this.cookies = new Cookies();
|
|
33
|
+
this.refreshRequestPromises = {};
|
|
34
|
+
}
|
|
35
|
+
getHttpClient() {
|
|
36
|
+
return this.httpClient;
|
|
37
|
+
}
|
|
38
|
+
decodeJwtCookie() {
|
|
39
|
+
const cookieValue = this.cookies.get(this.tokenCookieName);
|
|
40
|
+
if (cookieValue) {
|
|
41
|
+
try {
|
|
42
|
+
return jwtDecode(cookieValue);
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
const error = Object.create(e);
|
|
46
|
+
error.message = 'Error decoding JWT token';
|
|
47
|
+
error.customAttributes = { cookieValue };
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
refresh() {
|
|
54
|
+
let responseServerEpochSeconds = 0;
|
|
55
|
+
if (this.refreshRequestPromises[this.tokenCookieName] === undefined) {
|
|
56
|
+
const makeRefreshRequest = () => __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
var _a;
|
|
58
|
+
let axiosResponse;
|
|
59
|
+
try {
|
|
60
|
+
try {
|
|
61
|
+
axiosResponse = yield this.httpClient.post(`${this.tokenRefreshBaseUrl}${this.tokenRefreshPath}`);
|
|
62
|
+
if ((_a = axiosResponse.data) === null || _a === void 0 ? void 0 : _a.response_epoch_seconds) {
|
|
63
|
+
responseServerEpochSeconds = axiosResponse.data.response_epoch_seconds;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
processAxiosErrorAndThrow(error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const userIsUnauthenticated = error.response && error.response.status === 401;
|
|
72
|
+
if (userIsUnauthenticated) {
|
|
73
|
+
// Clean up the cookie if it exists to eliminate any situation
|
|
74
|
+
// where the cookie is not expired but the jwt is expired.
|
|
75
|
+
this.cookies.remove(this.tokenCookieName);
|
|
76
|
+
const decodedJwtToken = null;
|
|
77
|
+
return decodedJwtToken;
|
|
78
|
+
}
|
|
79
|
+
// TODO: Network timeouts and other problems will end up in
|
|
80
|
+
// this block of code. We could add logic for retrying token
|
|
81
|
+
// refreshes if we wanted to.
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
const browserEpochSeconds = Date.now() / 1000;
|
|
85
|
+
const browserDriftSeconds = responseServerEpochSeconds > 0
|
|
86
|
+
? Math.abs(browserEpochSeconds - responseServerEpochSeconds)
|
|
87
|
+
: null;
|
|
88
|
+
const decodedJwtToken = this.decodeJwtCookie();
|
|
89
|
+
if (!decodedJwtToken) {
|
|
90
|
+
// This is an unexpected case. The refresh endpoint should set the
|
|
91
|
+
// cookie that is needed.
|
|
92
|
+
// For more details, see:
|
|
93
|
+
// docs/decisions/0005-token-null-after-successful-refresh.rst
|
|
94
|
+
const error = new Error('Access token is still null after successful refresh.');
|
|
95
|
+
error.customAttributes = { axiosResponse, browserDriftSeconds, browserEpochSeconds };
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
return decodedJwtToken;
|
|
99
|
+
});
|
|
100
|
+
this.refreshRequestPromises[this.tokenCookieName] = makeRefreshRequest().finally(() => {
|
|
101
|
+
delete this.refreshRequestPromises[this.tokenCookieName];
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
return this.refreshRequestPromises[this.tokenCookieName];
|
|
105
|
+
}
|
|
106
|
+
getJwtToken() {
|
|
107
|
+
return __awaiter(this, arguments, void 0, function* (forceRefresh = false) {
|
|
108
|
+
try {
|
|
109
|
+
const decodedJwtToken = this.decodeJwtCookie(this.tokenCookieName);
|
|
110
|
+
if (!AxiosJwtTokenService.isTokenExpired(decodedJwtToken) && !forceRefresh) {
|
|
111
|
+
return decodedJwtToken;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (e) {
|
|
115
|
+
// Log unexpected error and continue with attempt to refresh it.
|
|
116
|
+
// TODO: Fix these. They're still using loggingService as a singleton.
|
|
117
|
+
logFrontendAuthError(this.loggingService, e);
|
|
118
|
+
}
|
|
119
|
+
try {
|
|
120
|
+
return yield this.refresh();
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
// TODO: Fix these. They're still using loggingService as a singleton.
|
|
124
|
+
logFrontendAuthError(this.loggingService, e);
|
|
125
|
+
throw e;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=AxiosJwtTokenService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AxiosJwtTokenService.js","sourceRoot":"","sources":["../../../runtime/auth/AxiosJwtTokenService.js"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,sBAAsB,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,MAAM,CAAC,cAAc,CAAC,KAAK;QACzB,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IACjD,CAAC;IAED,YAAY,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB;QAChF,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAEzC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,0EAA0E;QAC1E,gEAAgE;QAChE,6BAA6B;QAC7B,kFAAkF;QAClF,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC;QAChD,qCAAqC;QACrC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACvC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EACpB,sBAAsB,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CACxD,CAAC;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,sBAAsB,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,eAAe;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE3D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,OAAO,SAAS,CAAC,WAAW,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,KAAK,CAAC,OAAO,GAAG,0BAA0B,CAAC;gBAC3C,KAAK,CAAC,gBAAgB,GAAG,EAAE,WAAW,EAAE,CAAC;gBACzC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,IAAI,0BAA0B,GAAG,CAAC,CAAC;QAEnC,IAAI,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,SAAS,EAAE,CAAC;YACpE,MAAM,kBAAkB,GAAG,GAAS,EAAE;;gBACpC,IAAI,aAAa,CAAC;gBAClB,IAAI,CAAC;oBACH,IAAI,CAAC;wBACH,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;wBAClG,IAAI,MAAA,aAAa,CAAC,IAAI,0CAAE,sBAAsB,EAAE,CAAC;4BAC/C,0BAA0B,GAAG,aAAa,CAAC,IAAI,CAAC,sBAAsB,CAAC;wBACzE,CAAC;oBACH,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,yBAAyB,CAAC,KAAK,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,qBAAqB,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC;oBAC9E,IAAI,qBAAqB,EAAE,CAAC;wBAC1B,8DAA8D;wBAC9D,0DAA0D;wBAC1D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBAC1C,MAAM,eAAe,GAAG,IAAI,CAAC;wBAC7B,OAAO,eAAe,CAAC;oBACzB,CAAC;oBAED,2DAA2D;oBAC3D,4DAA4D;oBAC5D,6BAA6B;oBAC7B,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;gBAC9C,MAAM,mBAAmB,GAAG,0BAA0B,GAAG,CAAC;oBACxD,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,0BAA0B,CAAC;oBAC5D,CAAC,CAAC,IAAI,CAAC;gBAET,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;gBAE/C,IAAI,CAAC,eAAe,EAAE,CAAC;oBACrB,kEAAkE;oBAClE,2BAA2B;oBAC3B,yBAAyB;oBACzB,gEAAgE;oBAChE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;oBAChF,KAAK,CAAC,gBAAgB,GAAG,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC;oBACrF,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,OAAO,eAAe,CAAC;YACzB,CAAC,CAAA,CAAC;YAEF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,kBAAkB,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;gBACpF,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;IAEK,WAAW;6DAAC,YAAY,GAAG,KAAK;YACpC,IAAI,CAAC;gBACH,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACnE,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;oBAC3E,OAAO,eAAe,CAAC;gBACzB,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,gEAAgE;gBAChE,uEAAuE;gBACvE,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;YAC/C,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,uEAAuE;gBACvE,oBAAoB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;gBAC7C,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;KAAA;CACF","sourcesContent":["import axios from 'axios';\nimport jwtDecode from 'jwt-decode';\nimport Cookies from 'universal-cookie';\nimport createRetryInterceptor from './interceptors/createRetryInterceptor';\nimport { logFrontendAuthError, processAxiosErrorAndThrow } from './utils';\n\nexport default class AxiosJwtTokenService {\n static isTokenExpired(token) {\n return !token || token.exp < Date.now() / 1000;\n }\n\n constructor(loggingService, tokenCookieName, tokenRefreshBaseUrl, tokenRefreshPath) {\n this.loggingService = loggingService;\n this.tokenCookieName = tokenCookieName;\n this.tokenRefreshBaseUrl = tokenRefreshBaseUrl;\n this.tokenRefreshPath = tokenRefreshPath;\n\n this.httpClient = axios.create();\n // Set withCredentials to true. Enables cross-site Access-Control requests\n // to be made using cookies, authorization headers or TLS client\n // certificates. More on MDN:\n // https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials\n this.httpClient.defaults.withCredentials = true;\n // Add retries to this axios instance\n this.httpClient.interceptors.response.use(\n response => response,\n createRetryInterceptor({ httpClient: this.httpClient }),\n );\n\n this.cookies = new Cookies();\n this.refreshRequestPromises = {};\n }\n\n getHttpClient() {\n return this.httpClient;\n }\n\n decodeJwtCookie() {\n const cookieValue = this.cookies.get(this.tokenCookieName);\n\n if (cookieValue) {\n try {\n return jwtDecode(cookieValue);\n } catch (e) {\n const error = Object.create(e);\n error.message = 'Error decoding JWT token';\n error.customAttributes = { cookieValue };\n throw error;\n }\n }\n\n return null;\n }\n\n refresh() {\n let responseServerEpochSeconds = 0;\n\n if (this.refreshRequestPromises[this.tokenCookieName] === undefined) {\n const makeRefreshRequest = async () => {\n let axiosResponse;\n try {\n try {\n axiosResponse = await this.httpClient.post(`${this.tokenRefreshBaseUrl}${this.tokenRefreshPath}`);\n if (axiosResponse.data?.response_epoch_seconds) {\n responseServerEpochSeconds = axiosResponse.data.response_epoch_seconds;\n }\n } catch (error) {\n processAxiosErrorAndThrow(error);\n }\n } catch (error) {\n const userIsUnauthenticated = error.response && error.response.status === 401;\n if (userIsUnauthenticated) {\n // Clean up the cookie if it exists to eliminate any situation\n // where the cookie is not expired but the jwt is expired.\n this.cookies.remove(this.tokenCookieName);\n const decodedJwtToken = null;\n return decodedJwtToken;\n }\n\n // TODO: Network timeouts and other problems will end up in\n // this block of code. We could add logic for retrying token\n // refreshes if we wanted to.\n throw error;\n }\n\n const browserEpochSeconds = Date.now() / 1000;\n const browserDriftSeconds = responseServerEpochSeconds > 0\n ? Math.abs(browserEpochSeconds - responseServerEpochSeconds)\n : null;\n\n const decodedJwtToken = this.decodeJwtCookie();\n\n if (!decodedJwtToken) {\n // This is an unexpected case. The refresh endpoint should set the\n // cookie that is needed.\n // For more details, see:\n // docs/decisions/0005-token-null-after-successful-refresh.rst\n const error = new Error('Access token is still null after successful refresh.');\n error.customAttributes = { axiosResponse, browserDriftSeconds, browserEpochSeconds };\n throw error;\n }\n\n return decodedJwtToken;\n };\n\n this.refreshRequestPromises[this.tokenCookieName] = makeRefreshRequest().finally(() => {\n delete this.refreshRequestPromises[this.tokenCookieName];\n });\n }\n\n return this.refreshRequestPromises[this.tokenCookieName];\n }\n\n async getJwtToken(forceRefresh = false) {\n try {\n const decodedJwtToken = this.decodeJwtCookie(this.tokenCookieName);\n if (!AxiosJwtTokenService.isTokenExpired(decodedJwtToken) && !forceRefresh) {\n return decodedJwtToken;\n }\n } catch (e) {\n // Log unexpected error and continue with attempt to refresh it.\n // TODO: Fix these. They're still using loggingService as a singleton.\n logFrontendAuthError(this.loggingService, e);\n }\n\n try {\n return await this.refresh();\n } catch (e) {\n // TODO: Fix these. They're still using loggingService as a singleton.\n logFrontendAuthError(this.loggingService, e);\n throw e;\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import axios from 'axios';
|
|
11
|
+
import { buildStorage, defaultHeaderInterpreter, defaultKeyGenerator, setupCache, } from 'axios-cache-interceptor';
|
|
12
|
+
import localforage from 'localforage';
|
|
13
|
+
import memoryDriver from 'localforage-memoryStorageDriver';
|
|
14
|
+
/**
|
|
15
|
+
* Async function to configure localforage and setup the cache
|
|
16
|
+
*
|
|
17
|
+
* @returns {Promise} A promise that, when resolved, returns an axios instance configured to
|
|
18
|
+
* use localforage as a cache.
|
|
19
|
+
*/
|
|
20
|
+
export default function configureCache() {
|
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
// Register the imported `memoryDriver` to `localforage`
|
|
23
|
+
yield localforage.defineDriver(memoryDriver);
|
|
24
|
+
// Create `localforage` instance
|
|
25
|
+
const forageStore = localforage.createInstance({
|
|
26
|
+
// List of drivers used
|
|
27
|
+
driver: [
|
|
28
|
+
localforage.INDEXEDDB,
|
|
29
|
+
localforage.LOCALSTORAGE,
|
|
30
|
+
memoryDriver._driver,
|
|
31
|
+
],
|
|
32
|
+
name: 'edx-cache',
|
|
33
|
+
});
|
|
34
|
+
const forageStoreAdapter = buildStorage({
|
|
35
|
+
find(key) {
|
|
36
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
const result = yield forageStore.getItem(`axios-cache:${key}`);
|
|
38
|
+
return JSON.parse(result);
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
set(key, value) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
yield forageStore.setItem(`axios-cache:${key}`, JSON.stringify(value));
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
remove(key) {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
48
|
+
yield forageStore.removeItem(`axios-cache:${key}`);
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
// only GET methods are cached by default
|
|
53
|
+
return setupCache(
|
|
54
|
+
// axios instance
|
|
55
|
+
axios.create(), {
|
|
56
|
+
ttl: 5 * 60 * 1000, // default maxAge of 5 minutes
|
|
57
|
+
// The storage to save the cache data. There are more available by default.
|
|
58
|
+
//
|
|
59
|
+
// https://axios-cache-interceptor.js.org/#/pages/storages
|
|
60
|
+
storage: forageStoreAdapter,
|
|
61
|
+
// The mechanism to generate a unique key for each request.
|
|
62
|
+
//
|
|
63
|
+
// https://axios-cache-interceptor.js.org/#/pages/request-id
|
|
64
|
+
generateKey: defaultKeyGenerator,
|
|
65
|
+
// The mechanism to interpret headers (when cache.interpretHeader is true).
|
|
66
|
+
//
|
|
67
|
+
// https://axios-cache-interceptor.js.org/#/pages/global-configuration?id=headerinterpreter
|
|
68
|
+
headerInterpreter: defaultHeaderInterpreter,
|
|
69
|
+
// The function that will receive debug information.
|
|
70
|
+
// NOTE: For this to work, you need to enable development mode.
|
|
71
|
+
//
|
|
72
|
+
// https://axios-cache-interceptor.js.org/#/pages/development-mode
|
|
73
|
+
// https://axios-cache-interceptor.js.org/#/pages/global-configuration?id=debug
|
|
74
|
+
debug: console.log,
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=LocalForageCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalForageCache.js","sourceRoot":"","sources":["../../../runtime/auth/LocalForageCache.js"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,GACX,MAAM,yBAAyB,CAAC;AACjC,OAAO,WAAW,MAAM,aAAa,CAAC;AACtC,OAAO,YAAY,MAAM,iCAAiC,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAgB,cAAc;;QAC1C,wDAAwD;QACxD,MAAM,WAAW,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAE7C,gCAAgC;QAChC,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC;YAC7C,uBAAuB;YACvB,MAAM,EAAE;gBACN,WAAW,CAAC,SAAS;gBACrB,WAAW,CAAC,YAAY;gBACxB,YAAY,CAAC,OAAO;aACrB;YACD,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,YAAY,CAAC;YAChC,IAAI,CAAC,GAAG;;oBACZ,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;oBAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC5B,CAAC;aAAA;YAEK,GAAG,CAAC,GAAG,EAAE,KAAK;;oBAClB,MAAM,WAAW,CAAC,OAAO,CAAC,eAAe,GAAG,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;gBACzE,CAAC;aAAA;YAEK,MAAM,CAAC,GAAG;;oBACd,MAAM,WAAW,CAAC,UAAU,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;gBACrD,CAAC;aAAA;SACF,CAAC,CAAC;QAEH,yCAAyC;QACzC,OAAO,UAAU;QACf,iBAAiB;QACjB,KAAK,CAAC,MAAM,EAAE,EACd;YACE,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,8BAA8B;YAClD,2EAA2E;YAC3E,EAAE;YACF,0DAA0D;YAC1D,OAAO,EAAE,kBAAkB;YAE3B,2DAA2D;YAC3D,EAAE;YACF,4DAA4D;YAC5D,WAAW,EAAE,mBAAmB;YAEhC,2EAA2E;YAC3E,EAAE;YACF,2FAA2F;YAC3F,iBAAiB,EAAE,wBAAwB;YAE3C,oDAAoD;YACpD,+DAA+D;YAC/D,EAAE;YACF,kEAAkE;YAClE,+EAA+E;YAC/E,KAAK,EAAE,OAAO,CAAC,GAAG;SACnB,CACF,CAAC;IACJ,CAAC;CAAA","sourcesContent":["import axios from 'axios';\nimport {\n buildStorage,\n defaultHeaderInterpreter,\n defaultKeyGenerator,\n setupCache,\n} from 'axios-cache-interceptor';\nimport localforage from 'localforage';\nimport memoryDriver from 'localforage-memoryStorageDriver';\n\n/**\n * Async function to configure localforage and setup the cache\n *\n * @returns {Promise} A promise that, when resolved, returns an axios instance configured to\n * use localforage as a cache.\n */\nexport default async function configureCache() {\n // Register the imported `memoryDriver` to `localforage`\n await localforage.defineDriver(memoryDriver);\n\n // Create `localforage` instance\n const forageStore = localforage.createInstance({\n // List of drivers used\n driver: [\n localforage.INDEXEDDB,\n localforage.LOCALSTORAGE,\n memoryDriver._driver,\n ],\n name: 'edx-cache',\n });\n\n const forageStoreAdapter = buildStorage({\n async find(key) {\n const result = await forageStore.getItem(`axios-cache:${key}`);\n return JSON.parse(result);\n },\n\n async set(key, value) {\n await forageStore.setItem(`axios-cache:${key}`, JSON.stringify(value));\n },\n\n async remove(key) {\n await forageStore.removeItem(`axios-cache:${key}`);\n },\n });\n\n // only GET methods are cached by default\n return setupCache(\n // axios instance\n axios.create(),\n {\n ttl: 5 * 60 * 1000, // default maxAge of 5 minutes\n // The storage to save the cache data. There are more available by default.\n //\n // https://axios-cache-interceptor.js.org/#/pages/storages\n storage: forageStoreAdapter,\n\n // The mechanism to generate a unique key for each request.\n //\n // https://axios-cache-interceptor.js.org/#/pages/request-id\n generateKey: defaultKeyGenerator,\n\n // The mechanism to interpret headers (when cache.interpretHeader is true).\n //\n // https://axios-cache-interceptor.js.org/#/pages/global-configuration?id=headerinterpreter\n headerInterpreter: defaultHeaderInterpreter,\n\n // The function that will receive debug information.\n // NOTE: For this to work, you need to enable development mode.\n //\n // https://axios-cache-interceptor.js.org/#/pages/development-mode\n // https://axios-cache-interceptor.js.org/#/pages/global-configuration?id=debug\n debug: console.log,\n },\n );\n}\n"]}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
export default MockAuthService;
|
|
2
|
+
/**
|
|
3
|
+
* The MockAuthService class mocks authenticated user-fetching logic and allows for manually
|
|
4
|
+
* setting user data. It is compatible with axios-mock-adapter to wrap its HttpClients so that
|
|
5
|
+
* they can be mocked for testing.
|
|
6
|
+
*
|
|
7
|
+
* It wraps all methods of the service with Jest mock functions (jest.fn()). This allows test code
|
|
8
|
+
* to assert expectations on all functions of the service while preserving sensible behaviors. For
|
|
9
|
+
* instance, the login/logout methods related to redirecting maintain their real behavior.
|
|
10
|
+
*
|
|
11
|
+
* This service is NOT suitable for use in an application itself - only tests. It depends on Jest,
|
|
12
|
+
* which should only be a dev dependency of your project. You don't want to pull the entire suite
|
|
13
|
+
* of test dependencies into your application at runtime, probably even in your dev server.
|
|
14
|
+
*
|
|
15
|
+
* In a test where you would like to mock out API requests - perhaps from a redux-thunk function -
|
|
16
|
+
* you could do the following to set up a MockAuthService for your test:
|
|
17
|
+
*
|
|
18
|
+
* ```
|
|
19
|
+
* import { getSiteConfig, mergeSiteConfig, configureAuth, MockAuthService } from '@openedx/frontend-base';
|
|
20
|
+
* import MockAdapter from 'axios-mock-adapter';
|
|
21
|
+
*
|
|
22
|
+
* const mockLoggingService = {
|
|
23
|
+
* logInfo: jest.fn(),
|
|
24
|
+
* logError: jest.fn(),
|
|
25
|
+
* };
|
|
26
|
+
* mergeSiteConfig({
|
|
27
|
+
* authenticatedUser: {
|
|
28
|
+
* userId: 'abc123',
|
|
29
|
+
* username: 'Mock User',
|
|
30
|
+
* roles: [],
|
|
31
|
+
* administrator: false,
|
|
32
|
+
* },
|
|
33
|
+
* });
|
|
34
|
+
* configureAuth(MockAuthService, { config: getSiteConfig(), loggingService: mockLoggingService });
|
|
35
|
+
* const mockAdapter = new MockAdapter(getAuthenticatedHttpClient());
|
|
36
|
+
* // Mock calls for your tests. This configuration can be done in any sort of test setup.
|
|
37
|
+
* mockAdapter.onGet(...);
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* Also see the `initializeMockApp` function which also automatically uses mock services for
|
|
41
|
+
* Logging and Analytics.
|
|
42
|
+
*
|
|
43
|
+
* @implements {AuthService}
|
|
44
|
+
* @memberof module:Auth
|
|
45
|
+
*/
|
|
46
|
+
declare class MockAuthService implements AuthService {
|
|
47
|
+
/**
|
|
48
|
+
* @param {Object} options
|
|
49
|
+
* @param {Object} options.config
|
|
50
|
+
* @param {string} options.config.baseUrl
|
|
51
|
+
* @param {string} options.config.lmsBaseUrl
|
|
52
|
+
* @param {string} options.config.loginUrl
|
|
53
|
+
* @param {string} options.config.logoutUrl
|
|
54
|
+
* @param {string} options.config.refreshAccessTokenApiPath
|
|
55
|
+
* @param {string} options.config.accessTokenCookieName
|
|
56
|
+
* @param {string} options.config.csrfTokenApiPath
|
|
57
|
+
* @param {Object} options.loggingService requires logError and logInfo methods
|
|
58
|
+
*/
|
|
59
|
+
constructor(options: {
|
|
60
|
+
config: {
|
|
61
|
+
baseUrl: string;
|
|
62
|
+
lmsBaseUrl: string;
|
|
63
|
+
loginUrl: string;
|
|
64
|
+
logoutUrl: string;
|
|
65
|
+
refreshAccessTokenApiPath: string;
|
|
66
|
+
accessTokenCookieName: string;
|
|
67
|
+
csrfTokenApiPath: string;
|
|
68
|
+
};
|
|
69
|
+
loggingService: any;
|
|
70
|
+
});
|
|
71
|
+
authenticatedHttpClient: import("axios").AxiosInstance;
|
|
72
|
+
httpClient: import("axios").AxiosInstance;
|
|
73
|
+
config: {
|
|
74
|
+
baseUrl: string;
|
|
75
|
+
lmsBaseUrl: string;
|
|
76
|
+
loginUrl: string;
|
|
77
|
+
logoutUrl: string;
|
|
78
|
+
refreshAccessTokenApiPath: string;
|
|
79
|
+
accessTokenCookieName: string;
|
|
80
|
+
csrfTokenApiPath: string;
|
|
81
|
+
};
|
|
82
|
+
loggingService: any;
|
|
83
|
+
authenticatedUser: any;
|
|
84
|
+
hydratedAuthenticatedUser: {};
|
|
85
|
+
/**
|
|
86
|
+
* A Jest mock function (jest.fn())
|
|
87
|
+
*
|
|
88
|
+
* Applies middleware to the axios instances in this service.
|
|
89
|
+
*
|
|
90
|
+
* @param {Array} middleware Middleware to apply.
|
|
91
|
+
*/
|
|
92
|
+
applyMiddleware(middleware?: any[]): void;
|
|
93
|
+
/**
|
|
94
|
+
* A Jest mock function (jest.fn())
|
|
95
|
+
*
|
|
96
|
+
* Gets the authenticated HTTP client instance, which is an axios client wrapped in
|
|
97
|
+
* MockAdapter from axios-mock-adapter.
|
|
98
|
+
*
|
|
99
|
+
* @returns {HttpClient} An HttpClient wrapped in MockAdapter.
|
|
100
|
+
*/
|
|
101
|
+
getAuthenticatedHttpClient: jest.Mock<import("axios").AxiosInstance, [], any>;
|
|
102
|
+
/**
|
|
103
|
+
* A Jest mock function (jest.fn())
|
|
104
|
+
*
|
|
105
|
+
* Gets the unauthenticated HTTP client instance, which is an axios client wrapped in
|
|
106
|
+
* MockAdapter from axios-mock-adapter.
|
|
107
|
+
*
|
|
108
|
+
* @returns {HttpClient} An HttpClient wrapped in MockAdapter.
|
|
109
|
+
*/
|
|
110
|
+
getHttpClient: jest.Mock<import("axios").AxiosInstance, [], any>;
|
|
111
|
+
/**
|
|
112
|
+
* A Jest mock function (jest.fn())
|
|
113
|
+
*
|
|
114
|
+
* Builds a URL to the login page with a post-login redirect URL attached as a query parameter.
|
|
115
|
+
*
|
|
116
|
+
* ```
|
|
117
|
+
* const url = getLoginRedirectUrl('http://localhost/mypage');
|
|
118
|
+
* console.log(url); // http://localhost/login?next=http%3A%2F%2Flocalhost%2Fmypage
|
|
119
|
+
* ```
|
|
120
|
+
*
|
|
121
|
+
* @param {string} redirectUrl The URL the user should be redirected to after logging in.
|
|
122
|
+
*/
|
|
123
|
+
getLoginRedirectUrl: jest.Mock<string, [redirectUrl?: any], any>;
|
|
124
|
+
/**
|
|
125
|
+
* A Jest mock function (jest.fn())
|
|
126
|
+
*
|
|
127
|
+
* Redirects the user to the logout page in the real implementation. Is a no-op here.
|
|
128
|
+
*
|
|
129
|
+
* @param {string} redirectUrl The URL the user should be redirected to after logging in.
|
|
130
|
+
*/
|
|
131
|
+
redirectToLogin: jest.Mock<void, [redirectUrl?: any], any>;
|
|
132
|
+
/**
|
|
133
|
+
* A Jest mock function (jest.fn())
|
|
134
|
+
*
|
|
135
|
+
* Builds a URL to the logout page with a post-logout redirect URL attached as a query parameter.
|
|
136
|
+
*
|
|
137
|
+
* ```
|
|
138
|
+
* const url = getLogoutRedirectUrl('http://localhost/mypage');
|
|
139
|
+
* console.log(url); // http://localhost/logout?next=http%3A%2F%2Flocalhost%2Fmypage
|
|
140
|
+
* ```
|
|
141
|
+
*
|
|
142
|
+
* @param {string} redirectUrl The URL the user should be redirected to after logging out.
|
|
143
|
+
*/
|
|
144
|
+
getLogoutRedirectUrl: jest.Mock<string, [redirectUrl?: any], any>;
|
|
145
|
+
/**
|
|
146
|
+
* A Jest mock function (jest.fn())
|
|
147
|
+
*
|
|
148
|
+
* Redirects the user to the logout page in the real implementation. Is a no-op here.
|
|
149
|
+
*
|
|
150
|
+
* @param {string} redirectUrl The URL the user should be redirected to after logging out.
|
|
151
|
+
*/
|
|
152
|
+
redirectToLogout: jest.Mock<void, [redirectUrl?: any], any>;
|
|
153
|
+
/**
|
|
154
|
+
* A Jest mock function (jest.fn())
|
|
155
|
+
*
|
|
156
|
+
* If it exists, returns the user data representing the currently authenticated user. If the
|
|
157
|
+
* user is anonymous, returns null.
|
|
158
|
+
*
|
|
159
|
+
* @returns {UserData|null}
|
|
160
|
+
*/
|
|
161
|
+
getAuthenticatedUser: jest.Mock<any, [], any>;
|
|
162
|
+
/**
|
|
163
|
+
* A Jest mock function (jest.fn())
|
|
164
|
+
*
|
|
165
|
+
* Sets the authenticated user to the provided value.
|
|
166
|
+
*
|
|
167
|
+
* @param {UserData} authUser
|
|
168
|
+
*/
|
|
169
|
+
setAuthenticatedUser: jest.Mock<void, [authUser: any], any>;
|
|
170
|
+
/**
|
|
171
|
+
* A Jest mock function (jest.fn())
|
|
172
|
+
*
|
|
173
|
+
* Returns the current authenticated user details, as supplied in the `authenticatedUser` field
|
|
174
|
+
* of the config options. Resolves to null if the user is unauthenticated / the config option
|
|
175
|
+
* has not been set.
|
|
176
|
+
*
|
|
177
|
+
* @returns {UserData|null} Resolves to the user's access token if they are
|
|
178
|
+
* logged in.
|
|
179
|
+
*/
|
|
180
|
+
fetchAuthenticatedUser: jest.Mock<any, [], any>;
|
|
181
|
+
/**
|
|
182
|
+
* A Jest mock function (jest.fn())
|
|
183
|
+
*
|
|
184
|
+
* Ensures a user is authenticated. It will redirect to login when not authenticated.
|
|
185
|
+
*
|
|
186
|
+
* @param {string} [redirectUrl=config.baseUrl] to return user after login when not
|
|
187
|
+
* authenticated.
|
|
188
|
+
* @returns {UserData|null} Resolves to the user's access token if they are
|
|
189
|
+
* logged in.
|
|
190
|
+
*/
|
|
191
|
+
ensureAuthenticatedUser: jest.Mock<any, [redirectUrl?: any], any>;
|
|
192
|
+
/**
|
|
193
|
+
* A Jest mock function (jest.fn())
|
|
194
|
+
*
|
|
195
|
+
* Adds the user data supplied in the `hydratedAuthenticatedUser` config option into the object
|
|
196
|
+
* returned by `getAuthenticatedUser`. This emulates the behavior of a real auth service which
|
|
197
|
+
* would make a request to fetch this data prior to merging it in.
|
|
198
|
+
*
|
|
199
|
+
* ```
|
|
200
|
+
* console.log(authenticatedUser); // Will be sparse and only contain basic information.
|
|
201
|
+
* await hydrateAuthenticatedUser()
|
|
202
|
+
* const authenticatedUser = getAuthenticatedUser();
|
|
203
|
+
* console.log(authenticatedUser); // Will contain additional user information
|
|
204
|
+
* ```
|
|
205
|
+
*
|
|
206
|
+
* @returns {Promise<null>}
|
|
207
|
+
*/
|
|
208
|
+
hydrateAuthenticatedUser: jest.Mock<void, [], any>;
|
|
209
|
+
}
|