@strapi/admin 5.37.1 → 5.38.1
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/dist/admin/admin/src/App.js +1 -1
- package/dist/admin/admin/src/App.js.map +1 -1
- package/dist/admin/admin/src/App.mjs +1 -1
- package/dist/admin/admin/src/App.mjs.map +1 -1
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +2 -2
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/assets/images/free-trial.png.js.map +1 -1
- package/dist/admin/admin/src/assets/images/free-trial.png.mjs.map +1 -1
- package/dist/admin/admin/src/assets/images/logo-strapi-2022.svg.js.map +1 -1
- package/dist/admin/admin/src/assets/images/logo-strapi-2022.svg.mjs.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.js.map +1 -1
- package/dist/admin/admin/src/components/ContentBox.mjs.map +1 -1
- package/dist/admin/admin/src/components/Context.js.map +1 -1
- package/dist/admin/admin/src/components/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/DragLayer.js.map +1 -1
- package/dist/admin/admin/src/components/DragLayer.mjs.map +1 -1
- package/dist/admin/admin/src/components/ErrorElement.js.map +1 -1
- package/dist/admin/admin/src/components/ErrorElement.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +1 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +14 -0
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +15 -1
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Checkbox.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Checkbox.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Date.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/DateTime.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/DateTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Email.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Email.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Json.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Password.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Password.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Renderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Textarea.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Textarea.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.js.map +1 -1
- package/dist/admin/admin/src/components/GapDropZone.mjs.map +1 -1
- package/dist/admin/admin/src/components/GradientBadge.js.map +1 -1
- package/dist/admin/admin/src/components/GradientBadge.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/GuidedTourProvider.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/GuidedTourProvider.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs +2 -2
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +2 -2
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -1
- package/dist/admin/admin/src/components/LanguageProvider.js.map +1 -1
- package/dist/admin/admin/src/components/LanguageProvider.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ActionLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ContentLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/ContentLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/GridLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.mjs +1 -1
- package/dist/admin/admin/src/components/Layouts/Layout.mjs.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNav.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +1 -1
- package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBrand.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBrand.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs +2 -2
- package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs +2 -2
- package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs +2 -2
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.mjs +1 -1
- package/dist/admin/admin/src/components/MainNav/TrialCountdown.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs +2 -2
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
- package/dist/admin/admin/src/components/PluginsInitializer.js.map +1 -1
- package/dist/admin/admin/src/components/PluginsInitializer.mjs.map +1 -1
- package/dist/admin/admin/src/components/PrivateRoute.js.map +1 -1
- package/dist/admin/admin/src/components/PrivateRoute.mjs.map +1 -1
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.js.map +1 -1
- package/dist/admin/admin/src/components/ResizeIndicator.mjs.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.js.map +1 -1
- package/dist/admin/admin/src/components/SearchInput.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +3 -3
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +1 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/Theme.js.map +1 -1
- package/dist/admin/admin/src/components/Theme.mjs.map +1 -1
- package/dist/admin/admin/src/components/UnauthenticatedLogo.js.map +1 -1
- package/dist/admin/admin/src/components/UnauthenticatedLogo.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/WidgetHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetHelpers.mjs +3 -3
- package/dist/admin/admin/src/components/WidgetHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs +2 -2
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +3 -3
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/constants/filters.js.map +1 -1
- package/dist/admin/admin/src/constants/filters.mjs.map +1 -1
- package/dist/admin/admin/src/constants/theme.js.map +1 -1
- package/dist/admin/admin/src/constants/theme.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.js.map +1 -1
- package/dist/admin/admin/src/core/apis/CustomFields.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/rbac.js.map +1 -1
- package/dist/admin/admin/src/core/apis/rbac.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/router.js.map +1 -1
- package/dist/admin/admin/src/core/apis/router.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/configure.js.map +1 -1
- package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/hooks.js.map +1 -1
- package/dist/admin/admin/src/core/store/hooks.mjs.map +1 -1
- package/dist/admin/admin/src/core/utils/basename.js.map +1 -1
- package/dist/admin/admin/src/core/utils/basename.mjs.map +1 -1
- package/dist/admin/admin/src/core/utils/createHook.js.map +1 -1
- package/dist/admin/admin/src/core/utils/createHook.mjs.map +1 -1
- package/dist/admin/admin/src/features/AppInfo.js.map +1 -1
- package/dist/admin/admin/src/features/AppInfo.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +0 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +1 -2
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/BackButton.js.map +1 -1
- package/dist/admin/admin/src/features/BackButton.mjs.map +1 -1
- package/dist/admin/admin/src/features/Configuration.js.map +1 -1
- package/dist/admin/admin/src/features/Configuration.mjs.map +1 -1
- package/dist/admin/admin/src/features/Notifications.js.map +1 -1
- package/dist/admin/admin/src/features/Notifications.mjs.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/features/Widgets.js.map +1 -1
- package/dist/admin/admin/src/features/Widgets.mjs +1 -1
- package/dist/admin/admin/src/features/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAdminRoles.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAdminRoles.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useClipboard.js.map +1 -1
- package/dist/admin/admin/src/hooks/useClipboard.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useControllableState.js.map +1 -1
- package/dist/admin/admin/src/hooks/useControllableState.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useDebounce.js.map +1 -1
- package/dist/admin/admin/src/hooks/useDebounce.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useDeviceType.js.map +1 -1
- package/dist/admin/admin/src/hooks/useDeviceType.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useElementOnScreen.js.map +1 -1
- package/dist/admin/admin/src/hooks/useElementOnScreen.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useEnterprise.js.map +1 -1
- package/dist/admin/admin/src/hooks/useEnterprise.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useFetchClient.js.map +1 -1
- package/dist/admin/admin/src/hooks/useFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useFocusInputField.js.map +1 -1
- package/dist/admin/admin/src/hooks/useFocusInputField.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useForceUpdate.js.map +1 -1
- package/dist/admin/admin/src/hooks/useForceUpdate.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useInjectReducer.js.map +1 -1
- package/dist/admin/admin/src/hooks/useInjectReducer.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useIsMounted.js.map +1 -1
- package/dist/admin/admin/src/hooks/useIsMounted.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useMediaQuery.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMediaQuery.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useMenu.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useOnce.js.map +1 -1
- package/dist/admin/admin/src/hooks/useOnce.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.js.map +1 -1
- package/dist/admin/admin/src/hooks/usePersistentState.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/usePrev.js.map +1 -1
- package/dist/admin/admin/src/hooks/usePrev.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.js.map +1 -1
- package/dist/admin/admin/src/hooks/useQueryParams.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useSettingsMenu.js.map +1 -1
- package/dist/admin/admin/src/hooks/useSettingsMenu.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.js.map +1 -1
- package/dist/admin/admin/src/hooks/useThrottledCallback.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.js.map +1 -1
- package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.mjs +1 -1
- package/dist/admin/admin/src/layouts/UnauthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/AuthPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/AuthPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ForgotPassword.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ForgotPasswordSuccess.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ForgotPasswordSuccess.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Oops.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Oops.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/AddWidgetModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialWelcomeModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/NotFoundPage.js.map +1 -1
- package/dist/admin/admin/src/pages/NotFoundPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/Layout.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/Layout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-audit-logs-illustration-dark.jpg.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-audit-logs-illustration-dark.jpg.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-audit-logs-illustration-light.jpg.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-audit-logs-illustration-light.jpg.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-content-history-illustration-dark.jpg.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-content-history-illustration-dark.jpg.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-content-history-illustration-light.jpg.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-content-history-illustration-light.jpg.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-sso-illustration-dark.jpg.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-sso-illustration-dark.jpg.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-sso-illustration-light.jpg.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/assets/purchase-page-sso-illustration-light.jpg.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/LifeSpanInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +2 -2
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenDescription.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenDescription.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/CreateView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/CreateView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/apiTokenPermissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/apiTokenPermissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ContentTypesSection.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ContentTypesSection.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/reducer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/getDateOfExpiration.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs +2 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/LogoInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/utils/files.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/InstalledPlugins.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapseLabel.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsButton.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ConditionsModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypeCollapses.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypes.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/ContentTypes.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/GlobalActions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/HiddenAction.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RequiredSign.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RequiredSign.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleRow.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleRow.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RowLabelWithCheckbox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RowLabelWithCheckbox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/constants.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/constants.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/createArrayOfValues.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/difference.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/forms.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/getCheckboxState.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/getCheckboxState.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/layouts.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/removeConditionKeyFromData.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/removeConditionKeyFromData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateConditionsToFalse.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/utils/updateValues.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/CreateView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/CreateView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/CreateActionCE.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkCE.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkWrapper.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/MagicLinkWrapper.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/SelectRoles.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/utils/validation.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +2 -4
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/EventsTable.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/EventsTable.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/TriggerContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/TriggerContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/utils/forms.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/utils/forms.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/reducer.js.map +1 -1
- package/dist/admin/admin/src/reducer.mjs +1 -1
- package/dist/admin/admin/src/reducer.mjs.map +1 -1
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/router.js +4 -4
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/selectors.js.map +1 -1
- package/dist/admin/admin/src/selectors.mjs.map +1 -1
- package/dist/admin/admin/src/services/admin.js.map +1 -1
- package/dist/admin/admin/src/services/admin.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/auth.js.map +1 -1
- package/dist/admin/admin/src/services/auth.mjs.map +1 -1
- package/dist/admin/admin/src/services/contentApi.js.map +1 -1
- package/dist/admin/admin/src/services/contentApi.mjs.map +1 -1
- package/dist/admin/admin/src/services/homepage.js.map +1 -1
- package/dist/admin/admin/src/services/homepage.mjs.map +1 -1
- package/dist/admin/admin/src/services/transferTokens.js.map +1 -1
- package/dist/admin/admin/src/services/transferTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/services/webhooks.js.map +1 -1
- package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +356 -120
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +355 -121
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +126 -1
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +126 -1
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.js.map +1 -1
- package/dist/admin/admin/src/translations/languageNativeNames.mjs.map +1 -1
- package/dist/admin/admin/src/utils/arrays.js.map +1 -1
- package/dist/admin/admin/src/utils/arrays.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/src/utils/deviceId.js.map +1 -1
- package/dist/admin/admin/src/utils/deviceId.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +1 -3
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +1 -3
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getPrefixedId.js.map +1 -1
- package/dist/admin/admin/src/utils/getPrefixedId.mjs.map +1 -1
- package/dist/admin/admin/src/utils/locales.js.map +1 -1
- package/dist/admin/admin/src/utils/locales.mjs.map +1 -1
- package/dist/admin/admin/src/utils/normalizeAPIError.js.map +1 -1
- package/dist/admin/admin/src/utils/normalizeAPIError.mjs.map +1 -1
- package/dist/admin/admin/src/utils/objects.js.map +1 -1
- package/dist/admin/admin/src/utils/objects.mjs.map +1 -1
- package/dist/admin/admin/src/utils/once.js.map +1 -1
- package/dist/admin/admin/src/utils/once.mjs.map +1 -1
- package/dist/admin/admin/src/utils/resizeHandlers.js.map +1 -1
- package/dist/admin/admin/src/utils/resizeHandlers.mjs.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.mjs.map +1 -1
- package/dist/admin/admin/src/utils/shims.js.map +1 -1
- package/dist/admin/admin/src/utils/shims.mjs.map +1 -1
- package/dist/admin/admin/src/utils/strings.js.map +1 -1
- package/dist/admin/admin/src/utils/strings.mjs.map +1 -1
- package/dist/admin/admin/src/utils/translatedErrors.js.map +1 -1
- package/dist/admin/admin/src/utils/translatedErrors.mjs.map +1 -1
- package/dist/admin/admin/src/utils/urls.js.map +1 -1
- package/dist/admin/admin/src/utils/urls.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/admin/src/utils/widgetLayout.js.map +1 -1
- package/dist/admin/admin/src/utils/widgetLayout.mjs.map +1 -1
- package/dist/admin/admin/tests/mockData.js.map +1 -1
- package/dist/admin/admin/tests/mockData.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/admin/tests/store.js.map +1 -1
- package/dist/admin/admin/tests/store.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +1 -1
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/GlobalNotifications.js.map +1 -1
- package/dist/admin/ee/admin/src/components/GlobalNotifications.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIAvailability.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useAIUsageWarning.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.mjs.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimits.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimits.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Login.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/Providers.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthResponse.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/HomePage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/HomePage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ComboboxFilter.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/Modal.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useAuditLogsData.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useFormatTimeStamp.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/MagicLinkEE.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Webhooks/components/EventsTable.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Webhooks/components/EventsTable.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.mjs.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/index.js +10 -6
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/DefaultDocument.js.map +1 -1
- package/dist/admin/src/components/DefaultDocument.mjs.map +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -0
- package/dist/admin/src/components/NoJavascript.js.map +1 -1
- package/dist/admin/src/components/NoJavascript.mjs.map +1 -1
- package/dist/admin/src/index.d.ts +1 -0
- package/dist/server/ee/server/src/ai/containers/ai.js +0 -4
- package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/containers/ai.mjs +0 -4
- package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.js +0 -4
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +0 -4
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/content-types/audit-log.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/content-types/audit-log.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/bootstrap.js.map +1 -1
- package/dist/server/ee/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/ee/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/ee/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/ee/server/src/content-types/index.js.map +1 -1
- package/dist/server/ee/server/src/content-types/index.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/constants.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/constants.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js +5 -5
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/index.js.map +1 -1
- package/dist/server/ee/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/role.js.map +1 -1
- package/dist/server/ee/server/src/controllers/role.mjs +1 -1
- package/dist/server/ee/server/src/controllers/role.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js +4 -4
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +16 -16
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/register.js.map +1 -1
- package/dist/server/ee/server/src/register.mjs.map +1 -1
- package/dist/server/ee/server/src/routes/index.js.map +1 -1
- package/dist/server/ee/server/src/routes/index.mjs.map +1 -1
- package/dist/server/ee/server/src/routes/license-limit.js.map +1 -1
- package/dist/server/ee/server/src/routes/license-limit.mjs.map +1 -1
- package/dist/server/ee/server/src/routes/sso.js.map +1 -1
- package/dist/server/ee/server/src/routes/sso.mjs.map +1 -1
- package/dist/server/ee/server/src/routes/utils.js.map +1 -1
- package/dist/server/ee/server/src/routes/utils.mjs.map +1 -1
- package/dist/server/ee/server/src/services/auth.js.map +1 -1
- package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
- package/dist/server/ee/server/src/services/index.js.map +1 -1
- package/dist/server/ee/server/src/services/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/metrics.js.map +1 -1
- package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
- package/dist/server/ee/server/src/services/passport/provider-registry.js.map +1 -1
- package/dist/server/ee/server/src/services/passport/provider-registry.mjs.map +1 -1
- package/dist/server/ee/server/src/services/passport/sso.js.map +1 -1
- package/dist/server/ee/server/src/services/passport/sso.mjs.map +1 -1
- package/dist/server/ee/server/src/services/passport.js.map +1 -1
- package/dist/server/ee/server/src/services/passport.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +4 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/ee/server/src/services/role.js.map +1 -1
- package/dist/server/ee/server/src/services/role.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/ee/server/src/services/user.mjs +1 -1
- package/dist/server/ee/server/src/services/user.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/index.js.map +1 -1
- package/dist/server/ee/server/src/utils/index.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/authentication.js.map +1 -1
- package/dist/server/ee/server/src/validation/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/role.js.map +1 -1
- package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/user.js.map +1 -1
- package/dist/server/ee/server/src/validation/user.mjs.map +1 -1
- package/dist/server/index.js +18 -18
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +2 -2
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +1 -1
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- package/dist/server/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/server/src/config/admin-conditions.js.map +1 -1
- package/dist/server/server/src/config/admin-conditions.mjs.map +1 -1
- package/dist/server/server/src/config/email-templates/forgot-password.js.map +1 -1
- package/dist/server/server/src/config/email-templates/forgot-password.mjs.map +1 -1
- package/dist/server/server/src/config/index.js.map +1 -1
- package/dist/server/server/src/config/index.mjs.map +1 -1
- package/dist/server/server/src/content-types/Permission.js.map +1 -1
- package/dist/server/server/src/content-types/Permission.mjs.map +1 -1
- package/dist/server/server/src/content-types/Role.js.map +1 -1
- package/dist/server/server/src/content-types/Role.mjs.map +1 -1
- package/dist/server/server/src/content-types/User.js.map +1 -1
- package/dist/server/server/src/content-types/User.mjs.map +1 -1
- package/dist/server/server/src/content-types/api-token-permission.js.map +1 -1
- package/dist/server/server/src/content-types/api-token-permission.mjs.map +1 -1
- package/dist/server/server/src/content-types/api-token.js.map +1 -1
- package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
- package/dist/server/server/src/content-types/index.js.map +1 -1
- package/dist/server/server/src/content-types/index.mjs.map +1 -1
- package/dist/server/server/src/content-types/session.js.map +1 -1
- package/dist/server/server/src/content-types/session.mjs.map +1 -1
- package/dist/server/server/src/content-types/transfer-token-permission.js.map +1 -1
- package/dist/server/server/src/content-types/transfer-token-permission.mjs.map +1 -1
- package/dist/server/server/src/content-types/transfer-token.js.map +1 -1
- package/dist/server/server/src/content-types/transfer-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/api-token.js.map +1 -1
- package/dist/server/server/src/controllers/api-token.mjs +3 -3
- package/dist/server/server/src/controllers/api-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/authenticated-user.js.map +1 -1
- package/dist/server/server/src/controllers/authenticated-user.mjs.map +1 -1
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.mjs +2 -2
- package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/server/src/controllers/content-api.js.map +1 -1
- package/dist/server/server/src/controllers/content-api.mjs.map +1 -1
- package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
- package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
- package/dist/server/server/src/controllers/homepage.js.map +1 -1
- package/dist/server/server/src/controllers/homepage.mjs.map +1 -1
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/permission.js.map +1 -1
- package/dist/server/server/src/controllers/permission.mjs.map +1 -1
- package/dist/server/server/src/controllers/role.js.map +1 -1
- package/dist/server/server/src/controllers/role.mjs +1 -1
- package/dist/server/server/src/controllers/role.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/runner.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/runner.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.mjs +2 -2
- package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/controllers/user.js.map +1 -1
- package/dist/server/server/src/controllers/user.mjs +1 -1
- package/dist/server/server/src/controllers/user.mjs.map +1 -1
- package/dist/server/server/src/controllers/validation/schema.js.map +1 -1
- package/dist/server/server/src/controllers/validation/schema.mjs.map +1 -1
- package/dist/server/server/src/controllers/webhooks.js.map +1 -1
- package/dist/server/server/src/controllers/webhooks.mjs.map +1 -1
- package/dist/server/server/src/destroy.js.map +1 -1
- package/dist/server/server/src/destroy.mjs.map +1 -1
- package/dist/server/server/src/domain/action/index.js.map +1 -1
- package/dist/server/server/src/domain/action/index.mjs.map +1 -1
- package/dist/server/server/src/domain/action/provider.js.map +1 -1
- package/dist/server/server/src/domain/action/provider.mjs +1 -1
- package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/provider.js.map +1 -1
- package/dist/server/server/src/domain/condition/provider.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs +1 -1
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/domain/user.js.map +1 -1
- package/dist/server/server/src/domain/user.mjs.map +1 -1
- package/dist/server/server/src/middlewares/data-transfer.js.map +1 -1
- package/dist/server/server/src/middlewares/data-transfer.mjs.map +1 -1
- package/dist/server/server/src/middlewares/index.js.map +1 -1
- package/dist/server/server/src/middlewares/index.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/policies/hasPermissions.js.map +1 -1
- package/dist/server/server/src/policies/hasPermissions.mjs.map +1 -1
- package/dist/server/server/src/policies/index.js.map +1 -1
- package/dist/server/server/src/policies/index.mjs.map +1 -1
- package/dist/server/server/src/policies/isAuthenticatedAdmin.js.map +1 -1
- package/dist/server/server/src/policies/isAuthenticatedAdmin.mjs.map +1 -1
- package/dist/server/server/src/policies/isTelemetryEnabled.js.map +1 -1
- package/dist/server/server/src/policies/isTelemetryEnabled.mjs.map +1 -1
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin.js.map +1 -1
- package/dist/server/server/src/routes/admin.mjs.map +1 -1
- package/dist/server/server/src/routes/api-tokens.js.map +1 -1
- package/dist/server/server/src/routes/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/routes/authentication.js.map +1 -1
- package/dist/server/server/src/routes/authentication.mjs.map +1 -1
- package/dist/server/server/src/routes/content-api.js.map +1 -1
- package/dist/server/server/src/routes/content-api.mjs.map +1 -1
- package/dist/server/server/src/routes/homepage.js.map +1 -1
- package/dist/server/server/src/routes/homepage.mjs.map +1 -1
- package/dist/server/server/src/routes/index.js.map +1 -1
- package/dist/server/server/src/routes/index.mjs.map +1 -1
- package/dist/server/server/src/routes/permissions.js.map +1 -1
- package/dist/server/server/src/routes/permissions.mjs.map +1 -1
- package/dist/server/server/src/routes/roles.js.map +1 -1
- package/dist/server/server/src/routes/roles.mjs.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.mjs.map +1 -1
- package/dist/server/server/src/routes/transfer.js.map +1 -1
- package/dist/server/server/src/routes/transfer.mjs.map +1 -1
- package/dist/server/server/src/routes/users.js.map +1 -1
- package/dist/server/server/src/routes/users.mjs.map +1 -1
- package/dist/server/server/src/routes/webhooks.js.map +1 -1
- package/dist/server/server/src/routes/webhooks.mjs.map +1 -1
- package/dist/server/server/src/services/action.js.map +1 -1
- package/dist/server/server/src/services/action.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/condition.js.map +1 -1
- package/dist/server/server/src/services/condition.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js +9 -9
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs +1 -1
- package/dist/server/server/src/services/content-type.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs +1 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/server/src/services/metrics.js.map +1 -1
- package/dist/server/server/src/services/metrics.mjs.map +1 -1
- package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
- package/dist/server/server/src/services/passport.js.map +1 -1
- package/dist/server/server/src/services/passport.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/query-builders.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/query-builders.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs +2 -2
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs +2 -2
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +9 -9
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +1 -1
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/builder.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/builder.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js +10 -10
- package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/index.mjs +1 -1
- package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
- package/dist/server/server/src/services/permission.js.map +1 -1
- package/dist/server/server/src/services/permission.mjs.map +1 -1
- package/dist/server/server/src/services/project-settings.js.map +1 -1
- package/dist/server/server/src/services/project-settings.mjs.map +1 -1
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +2 -2
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/token.js.map +1 -1
- package/dist/server/server/src/services/token.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs +1 -1
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/utils.js.map +1 -1
- package/dist/server/server/src/services/transfer/utils.mjs.map +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +2 -2
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/strategies/admin.js.map +1 -1
- package/dist/server/server/src/strategies/admin.mjs.map +1 -1
- package/dist/server/server/src/strategies/api-token.js.map +1 -1
- package/dist/server/server/src/strategies/api-token.mjs.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.mjs.map +1 -1
- package/dist/server/server/src/utils/index.js.map +1 -1
- package/dist/server/server/src/utils/index.mjs.map +1 -1
- package/dist/server/server/src/validation/action-provider.js.map +1 -1
- package/dist/server/server/src/validation/action-provider.mjs.map +1 -1
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/authentication/forgot-password.js.map +1 -1
- package/dist/server/server/src/validation/authentication/forgot-password.mjs.map +1 -1
- package/dist/server/server/src/validation/authentication/login.js.map +1 -1
- package/dist/server/server/src/validation/authentication/login.mjs.map +1 -1
- package/dist/server/server/src/validation/authentication/register.js.map +1 -1
- package/dist/server/server/src/validation/authentication/register.mjs.map +1 -1
- package/dist/server/server/src/validation/authentication/reset-password.js.map +1 -1
- package/dist/server/server/src/validation/authentication/reset-password.mjs.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.mjs.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.js.map +1 -1
- package/dist/server/server/src/validation/common-functions/check-fields-dont-have-duplicates.mjs.map +1 -1
- package/dist/server/server/src/validation/common-validators.js +2 -4
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs +4 -5
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/server/src/validation/permission.js.map +1 -1
- package/dist/server/server/src/validation/permission.mjs.map +1 -1
- package/dist/server/server/src/validation/policies/hasPermissions.js.map +1 -1
- package/dist/server/server/src/validation/policies/hasPermissions.mjs.map +1 -1
- package/dist/server/server/src/validation/project-settings.js.map +1 -1
- package/dist/server/server/src/validation/project-settings.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/validation/transfer/token.js.map +1 -1
- package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/validation/user.js +1 -4
- package/dist/server/server/src/validation/user.js.map +1 -1
- package/dist/server/server/src/validation/user.mjs +1 -4
- package/dist/server/server/src/validation/user.mjs.map +1 -1
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/dist/server/shared/utils/session-auth.mjs.map +1 -1
- package/package.json +17 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.mjs","sources":["../../../../../../admin/src/core/store/hooks.ts"],"sourcesContent":["import { createSelector, Selector } from '@reduxjs/toolkit';\nimport { useDispatch, useStore, TypedUseSelectorHook, useSelector } from 'react-redux';\n\nimport type { RootState, Store } from './configure';\n\ntype AppDispatch = Store['dispatch'];\n\nconst useTypedDispatch: () => AppDispatch = useDispatch;\nconst useTypedStore = useStore as () => Store;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nconst createTypedSelector = <TResult>(selector: Selector<RootState, TResult>) =>\n createSelector((state: RootState) => state, selector);\n\nexport { useTypedDispatch, useTypedStore, useTypedSelector, createTypedSelector };\n"],"names":["useTypedDispatch","useDispatch","useTypedStore","useStore","useTypedSelector","useSelector","createTypedSelector","selector","createSelector","state"],"mappings":";;;AAOA,MAAMA,
|
|
1
|
+
{"version":3,"file":"hooks.mjs","sources":["../../../../../../admin/src/core/store/hooks.ts"],"sourcesContent":["import { createSelector, Selector } from '@reduxjs/toolkit';\nimport { useDispatch, useStore, TypedUseSelectorHook, useSelector } from 'react-redux';\n\nimport type { RootState, Store } from './configure';\n\ntype AppDispatch = Store['dispatch'];\n\nconst useTypedDispatch: () => AppDispatch = useDispatch;\nconst useTypedStore = useStore as () => Store;\nconst useTypedSelector: TypedUseSelectorHook<RootState> = useSelector;\n\nconst createTypedSelector = <TResult>(selector: Selector<RootState, TResult>) =>\n createSelector((state: RootState) => state, selector);\n\nexport { useTypedDispatch, useTypedStore, useTypedSelector, createTypedSelector };\n"],"names":["useTypedDispatch","useDispatch","useTypedStore","useStore","useTypedSelector","useSelector","createTypedSelector","selector","createSelector","state"],"mappings":";;;AAOA,MAAMA,gBAAAA,GAAsCC;AAC5C,MAAMC,aAAAA,GAAgBC;AACtB,MAAMC,gBAAAA,GAAoDC;AAE1D,MAAMC,sBAAsB,CAAUC,QAAAA,GACpCC,cAAAA,CAAe,CAACC,QAAqBA,KAAAA,EAAOF,QAAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basename.js","sources":["../../../../../../admin/src/core/utils/basename.ts"],"sourcesContent":["export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n"],"names":["getBasename","process","env","ADMIN_PATH","replace","window","location","origin"],"mappings":";;MAAaA,
|
|
1
|
+
{"version":3,"file":"basename.js","sources":["../../../../../../admin/src/core/utils/basename.ts"],"sourcesContent":["export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n"],"names":["getBasename","process","env","ADMIN_PATH","replace","window","location","origin"],"mappings":";;MAAaA,WAAAA,GAAc,IAAM,CAACC,OAAAA,CAAQC,GAAG,CAACC,UAAU,IAAI,EAAC,EAAGC,OAAO,CAACC,MAAAA,CAAOC,QAAQ,CAACC,MAAM,EAAE,EAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basename.mjs","sources":["../../../../../../admin/src/core/utils/basename.ts"],"sourcesContent":["export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n"],"names":["getBasename","process","env","ADMIN_PATH","replace","window","location","origin"],"mappings":"MAAaA,
|
|
1
|
+
{"version":3,"file":"basename.mjs","sources":["../../../../../../admin/src/core/utils/basename.ts"],"sourcesContent":["export const getBasename = () => (process.env.ADMIN_PATH ?? '').replace(window.location.origin, '');\n"],"names":["getBasename","process","env","ADMIN_PATH","replace","window","location","origin"],"mappings":"MAAaA,WAAAA,GAAc,IAAM,CAACC,OAAAA,CAAQC,GAAG,CAACC,UAAU,IAAI,EAAC,EAAGC,OAAO,CAACC,MAAAA,CAAOC,QAAQ,CAACC,MAAM,EAAE,EAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHook.js","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":";;AAAA,sFAOaA,
|
|
1
|
+
{"version":3,"file":"createHook.js","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":";;AAAA,sFAOaA,UAAAA,GAAa,IAAA;AACxB,IAAA,MAAMC,YAAuB,EAAE;IAE/B,OAAO;AACLC,QAAAA,QAAAA,CAAAA,CAASC,EAAW,EAAA;AAClBF,YAAAA,SAAAA,CAAUG,IAAI,CAACD,EAAAA,CAAAA;AACjB,QAAA,CAAA;AACAE,QAAAA,MAAAA,CAAAA,CAAOC,OAAgB,EAAA;AACrBL,YAAAA,SAAAA,CAAUM,MAAM,CAACN,SAAAA,CAAUO,OAAO,CAACF,OAAAA,CAAAA,EAAU,CAAA,CAAA;AAC/C,QAAA,CAAA;QACAG,YAAAA,CAAAA,CAAgBC,IAAO,EAAEC,KAAa,EAAA;YACpC,OAAOV,SAAAA,CAAUW,MAAM,CAAC,CAACC,KAAKV,EAAAA,GAAOA,EAAAA,CAAGU,KAAKF,KAAAA,CAAAA,EAAQD,IAAAA,CAAAA;AACvD,QAAA,CAAA;QACA,MAAMI,iBAAAA,CAAAA,CAAqBJ,IAAO,EAAEC,KAAa,EAAA;AAC/C,YAAA,IAAII,MAAAA,GAASL,IAAAA;YAEb,KAAK,MAAMP,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,GAAS,MAAMZ,GAAGY,MAAAA,EAAQJ,KAAAA,CAAAA;AAC5B,YAAA;YAEA,OAAOI,MAAAA;AACT,QAAA,CAAA;AACAC,QAAAA,SAAAA,CAAAA,CAA2B,GAAGN,IAAO,EAAA;AACnC,YAAA,OAAOT,SAAAA,CAAUgB,GAAG,CAAC,CAACd,KAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AACrC,QAAA,CAAA;QACA,MAAMQ,cAAAA,CAAAA,CAAgC,GAAGR,IAAO,EAAA;AAC9C,YAAA,MAAMK,SAAS,EAAE;YAEjB,KAAK,MAAMZ,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,CAAOX,IAAI,CAAC,MAAMD,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AAC1B,YAAA;YAEA,OAAOK,MAAAA;AACT,QAAA,CAAA;AACAI,QAAAA,WAAAA,CAAAA,CAA6B,GAAGT,IAAO,EAAA;AACrC,YAAA,OAAOU,QAAQC,GAAG,CAChBpB,SAAAA,CAAUgB,GAAG,CAAC,CAACd,EAAAA,GAAAA;AACb,gBAAA,OAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA;AACf,YAAA,CAAA,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createHook.mjs","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":"AAAA,sFAOaA,
|
|
1
|
+
{"version":3,"file":"createHook.mjs","sources":["../../../../../../admin/src/core/utils/createHook.ts"],"sourcesContent":["/* eslint-disable no-await-in-loop */\n/* eslint-disable no-restricted-syntax */\n\nimport type { Store } from '../store/configure';\n\nexport type Handler = (...args: any[]) => any;\n\nexport const createHook = () => {\n const _handlers: Handler[] = [];\n\n return {\n register(fn: Handler) {\n _handlers.push(fn);\n },\n delete(handler: Handler) {\n _handlers.splice(_handlers.indexOf(handler), 1);\n },\n runWaterfall<T>(args: T, store?: Store) {\n return _handlers.reduce((acc, fn) => fn(acc, store), args);\n },\n async runWaterfallAsync<T>(args: T, store?: Store) {\n let result = args;\n\n for (const fn of _handlers) {\n result = await fn(result, store);\n }\n\n return result;\n },\n runSeries<T extends any[]>(...args: T) {\n return _handlers.map((fn) => fn(...args));\n },\n async runSeriesAsync<T extends any[]>(...args: T) {\n const result = [];\n\n for (const fn of _handlers) {\n result.push(await fn(...args));\n }\n\n return result;\n },\n runParallel<T extends any[]>(...args: T) {\n return Promise.all(\n _handlers.map((fn) => {\n return fn(...args);\n })\n );\n },\n };\n};\n"],"names":["createHook","_handlers","register","fn","push","delete","handler","splice","indexOf","runWaterfall","args","store","reduce","acc","runWaterfallAsync","result","runSeries","map","runSeriesAsync","runParallel","Promise","all"],"mappings":"AAAA,sFAOaA,UAAAA,GAAa,IAAA;AACxB,IAAA,MAAMC,YAAuB,EAAE;IAE/B,OAAO;AACLC,QAAAA,QAAAA,CAAAA,CAASC,EAAW,EAAA;AAClBF,YAAAA,SAAAA,CAAUG,IAAI,CAACD,EAAAA,CAAAA;AACjB,QAAA,CAAA;AACAE,QAAAA,MAAAA,CAAAA,CAAOC,OAAgB,EAAA;AACrBL,YAAAA,SAAAA,CAAUM,MAAM,CAACN,SAAAA,CAAUO,OAAO,CAACF,OAAAA,CAAAA,EAAU,CAAA,CAAA;AAC/C,QAAA,CAAA;QACAG,YAAAA,CAAAA,CAAgBC,IAAO,EAAEC,KAAa,EAAA;YACpC,OAAOV,SAAAA,CAAUW,MAAM,CAAC,CAACC,KAAKV,EAAAA,GAAOA,EAAAA,CAAGU,KAAKF,KAAAA,CAAAA,EAAQD,IAAAA,CAAAA;AACvD,QAAA,CAAA;QACA,MAAMI,iBAAAA,CAAAA,CAAqBJ,IAAO,EAAEC,KAAa,EAAA;AAC/C,YAAA,IAAII,MAAAA,GAASL,IAAAA;YAEb,KAAK,MAAMP,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,GAAS,MAAMZ,GAAGY,MAAAA,EAAQJ,KAAAA,CAAAA;AAC5B,YAAA;YAEA,OAAOI,MAAAA;AACT,QAAA,CAAA;AACAC,QAAAA,SAAAA,CAAAA,CAA2B,GAAGN,IAAO,EAAA;AACnC,YAAA,OAAOT,SAAAA,CAAUgB,GAAG,CAAC,CAACd,KAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AACrC,QAAA,CAAA;QACA,MAAMQ,cAAAA,CAAAA,CAAgC,GAAGR,IAAO,EAAA;AAC9C,YAAA,MAAMK,SAAS,EAAE;YAEjB,KAAK,MAAMZ,MAAMF,SAAAA,CAAW;gBAC1Bc,MAAAA,CAAOX,IAAI,CAAC,MAAMD,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA,CAAAA;AAC1B,YAAA;YAEA,OAAOK,MAAAA;AACT,QAAA,CAAA;AACAI,QAAAA,WAAAA,CAAAA,CAA6B,GAAGT,IAAO,EAAA;AACrC,YAAA,OAAOU,QAAQC,GAAG,CAChBpB,SAAAA,CAAUgB,GAAG,CAAC,CAACd,EAAAA,GAAAA;AACb,gBAAA,OAAOA,EAAAA,CAAAA,GAAMO,IAAAA,CAAAA;AACf,YAAA,CAAA,CAAA,CAAA;AAEJ,QAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppInfo.js","sources":["../../../../../admin/src/features/AppInfo.tsx"],"sourcesContent":["import { createContext } from '../components/Context';\n\ninterface AppInfoContextValue {\n autoReload?: boolean;\n communityEdition?: boolean;\n currentEnvironment?: string;\n dependencies?: Record<string, string>;\n latestStrapiReleaseTag?: string;\n nodeVersion?: string;\n projectId?: string | null;\n shouldUpdateStrapi?: boolean;\n strapiVersion?: string | null;\n useYarn?: boolean;\n userId?: string;\n}\n\nconst [AppInfoProvider, useAppInfo] = createContext<AppInfoContextValue>('AppInfo', {});\n\nexport { AppInfoProvider, useAppInfo };\n\nexport type { AppInfoContextValue };\n"],"names":["AppInfoProvider","useAppInfo","createContext"],"mappings":";;;;AAgBA,MAAM,CAACA,
|
|
1
|
+
{"version":3,"file":"AppInfo.js","sources":["../../../../../admin/src/features/AppInfo.tsx"],"sourcesContent":["import { createContext } from '../components/Context';\n\ninterface AppInfoContextValue {\n autoReload?: boolean;\n communityEdition?: boolean;\n currentEnvironment?: string;\n dependencies?: Record<string, string>;\n latestStrapiReleaseTag?: string;\n nodeVersion?: string;\n projectId?: string | null;\n shouldUpdateStrapi?: boolean;\n strapiVersion?: string | null;\n useYarn?: boolean;\n userId?: string;\n}\n\nconst [AppInfoProvider, useAppInfo] = createContext<AppInfoContextValue>('AppInfo', {});\n\nexport { AppInfoProvider, useAppInfo };\n\nexport type { AppInfoContextValue };\n"],"names":["AppInfoProvider","useAppInfo","createContext"],"mappings":";;;;AAgBA,MAAM,CAACA,eAAAA,EAAiBC,UAAAA,CAAW,GAAGC,qBAAAA,CAAmC,WAAW,EAAC;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppInfo.mjs","sources":["../../../../../admin/src/features/AppInfo.tsx"],"sourcesContent":["import { createContext } from '../components/Context';\n\ninterface AppInfoContextValue {\n autoReload?: boolean;\n communityEdition?: boolean;\n currentEnvironment?: string;\n dependencies?: Record<string, string>;\n latestStrapiReleaseTag?: string;\n nodeVersion?: string;\n projectId?: string | null;\n shouldUpdateStrapi?: boolean;\n strapiVersion?: string | null;\n useYarn?: boolean;\n userId?: string;\n}\n\nconst [AppInfoProvider, useAppInfo] = createContext<AppInfoContextValue>('AppInfo', {});\n\nexport { AppInfoProvider, useAppInfo };\n\nexport type { AppInfoContextValue };\n"],"names":["AppInfoProvider","useAppInfo","createContext"],"mappings":";;AAgBA,MAAM,CAACA,
|
|
1
|
+
{"version":3,"file":"AppInfo.mjs","sources":["../../../../../admin/src/features/AppInfo.tsx"],"sourcesContent":["import { createContext } from '../components/Context';\n\ninterface AppInfoContextValue {\n autoReload?: boolean;\n communityEdition?: boolean;\n currentEnvironment?: string;\n dependencies?: Record<string, string>;\n latestStrapiReleaseTag?: string;\n nodeVersion?: string;\n projectId?: string | null;\n shouldUpdateStrapi?: boolean;\n strapiVersion?: string | null;\n useYarn?: boolean;\n userId?: string;\n}\n\nconst [AppInfoProvider, useAppInfo] = createContext<AppInfoContextValue>('AppInfo', {});\n\nexport { AppInfoProvider, useAppInfo };\n\nexport type { AppInfoContextValue };\n"],"names":["AppInfoProvider","useAppInfo","createContext"],"mappings":";;AAgBA,MAAM,CAACA,eAAAA,EAAiBC,UAAAA,CAAW,GAAGC,aAAAA,CAAmC,WAAW,EAAC;;;;"}
|
|
@@ -34,7 +34,6 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
34
34
|
|
|
35
35
|
const [Provider, useAuth] = Context.createContext('Auth');
|
|
36
36
|
const STORAGE_KEYS = {
|
|
37
|
-
TOKEN: 'jwtToken',
|
|
38
37
|
STATUS: 'isLoggedIn'
|
|
39
38
|
};
|
|
40
39
|
const AuthProvider = ({ children, _defaultPermissions = [], _disableRenewToken = false })=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.js","sources":["../../../../../admin/src/features/Auth.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { Login } from '../../../shared/contracts/authentication';\nimport { createContext } from '../components/Context';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useQueryParams } from '../hooks/useQueryParams';\nimport { login as loginAction, logout as logoutAction, setLocale, setToken } from '../reducer';\nimport { adminApi } from '../services/api';\nimport {\n useGetMeQuery,\n useGetMyPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useLoginMutation,\n useLogoutMutation,\n} from '../services/auth';\nimport { getOrCreateDeviceId } from '../utils/deviceId';\nimport { setOnTokenUpdate } from '../utils/getFetchClient';\n\nimport type {\n Permission as PermissionContract,\n SanitizedAdminUser,\n} from '../../../shared/contracts/shared';\n\ninterface Permission\n extends Pick<PermissionContract, 'action' | 'subject'>,\n Partial<Omit<PermissionContract, 'action' | 'subject'>> {}\n\ninterface User\n extends Pick<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>,\n Partial<Omit<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>> {}\n\ninterface AuthContextValue {\n login: (\n body: Login.Request['body'] & { rememberMe: boolean }\n ) => Promise<Awaited<ReturnType<ReturnType<typeof useLoginMutation>[0]>>>;\n logout: () => Promise<void>;\n /**\n * @alpha\n * @description given a list of permissions, this function checks\n * those against the current user's permissions or those passed as\n * the second argument, if the user has those permissions the complete\n * permission object form the API is returned. Therefore, if the list is\n * empty, the user does not have any of those permissions.\n */\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>,\n passedPermissions?: Permission[],\n rawQueryContext?: string\n ) => Promise<Permission[]>;\n isLoading: boolean;\n permissions: Permission[];\n refetchPermissions: () => Promise<void>;\n token: string | null;\n user?: User;\n}\n\nconst [Provider, useAuth] = createContext<AuthContextValue>('Auth');\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n /**\n * @internal could be removed at any time.\n */\n _defaultPermissions?: Permission[];\n\n // NOTE: this is used for testing purposed only\n _disableRenewToken?: boolean;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n STATUS: 'isLoggedIn',\n};\n\nconst AuthProvider = ({\n children,\n _defaultPermissions = [],\n _disableRenewToken = false,\n}: AuthProviderProps) => {\n const dispatch = useTypedDispatch();\n const runRbacMiddleware = useStrapiApp('AuthProvider', (state) => state.rbac.run);\n const location = useLocation();\n const [{ rawQuery }] = useQueryParams();\n\n const locationRef = React.useRef(location);\n\n // Update ref without causing re-render\n React.useEffect(() => {\n locationRef.current = location;\n }, [location]);\n\n const token = useTypedSelector((state) => state.admin_app.token ?? null);\n\n const { data: user, isLoading: isLoadingUser } = useGetMeQuery(undefined, {\n /**\n * If there's no token, we don't try to fetch\n * the user data because it will fail.\n */\n skip: !token,\n });\n\n const {\n data: userPermissions = _defaultPermissions,\n refetch,\n isUninitialized,\n isLoading: isLoadingPermissions,\n } = useGetMyPermissionsQuery(undefined, {\n skip: !token,\n });\n\n const navigate = useNavigate();\n\n const [loginMutation] = useLoginMutation();\n const [logoutMutation] = useLogoutMutation();\n\n const clearStateAndLogout = React.useCallback(() => {\n dispatch(adminApi.util.resetApiState());\n dispatch(logoutAction());\n navigate('/auth/login');\n }, [dispatch, navigate]);\n\n React.useEffect(() => {\n if (user) {\n if (user.preferedLanguage) {\n dispatch(setLocale(user.preferedLanguage));\n }\n }\n }, [dispatch, user]);\n\n /**\n * Register a callback to update Redux state when the token is refreshed.\n * This ensures the app state stays in sync with the token stored in localStorage/cookies.\n */\n React.useEffect(() => {\n setOnTokenUpdate((newToken) => {\n dispatch(setToken(newToken));\n });\n\n return () => {\n setOnTokenUpdate(null);\n };\n }, [dispatch]);\n\n React.useEffect(() => {\n /**\n * This will log a user out of all tabs if they log out in one tab.\n */\n const handleUserStorageChange = (event: StorageEvent) => {\n if (event.key === STORAGE_KEYS.STATUS && event.newValue === null) {\n clearStateAndLogout();\n }\n };\n\n window.addEventListener('storage', handleUserStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleUserStorageChange);\n };\n });\n\n const login = React.useCallback<AuthContextValue['login']>(\n async ({ rememberMe, ...body }) => {\n const res = await loginMutation({ ...body, deviceId: getOrCreateDeviceId(), rememberMe });\n\n /**\n * There will always be a `data` key in the response\n * because if something fails, it will throw an error.\n */\n if ('data' in res) {\n const { token } = res.data;\n\n dispatch(\n loginAction({\n token,\n persist: rememberMe,\n })\n );\n }\n\n return res;\n },\n [dispatch, loginMutation]\n );\n\n const logout = React.useCallback(async () => {\n await logoutMutation({ deviceId: getOrCreateDeviceId() });\n clearStateAndLogout();\n }, [clearStateAndLogout, logoutMutation]);\n\n const refetchPermissions = React.useCallback(async () => {\n if (!isUninitialized) {\n await refetch();\n }\n }, [isUninitialized, refetch]);\n\n const [checkPermissions] = useLazyCheckPermissionsQuery();\n const checkUserHasPermissions: AuthContextValue['checkUserHasPermissions'] = React.useCallback(\n async (\n permissions,\n passedPermissions,\n // TODO:\n // Here we have parameterised checkUserHasPermissions in order to pass\n // query context from elsewhere in the application.\n // See packages/core/content-manager/admin/src/features/DocumentRBAC.tsx\n\n // This is in order to calculate permissions on accurate query params.\n // We should be able to rely on the query params in this provider\n // If we need to pass additional context to the RBAC middleware\n // we should define a better context type.\n rawQueryContext\n ) => {\n /**\n * If there's no permissions to check, then we allow it to\n * pass to preserve existing behaviours.\n *\n * TODO: should we review this? it feels more dangerous than useful.\n */\n if (!permissions || permissions.length === 0) {\n return [{ action: '', subject: '' }];\n }\n\n /**\n * Given the provided permissions, return the permissions from either passedPermissions\n * or userPermissions as this is expected to be the full permission entity.\n */\n const actualUserPermissions = passedPermissions ?? userPermissions;\n\n const matchingPermissions = actualUserPermissions.filter(\n (permission) =>\n permissions.findIndex(\n (perm) =>\n perm.action === permission.action &&\n // Only check the subject if it's provided\n (perm.subject == undefined || perm.subject === permission.subject)\n ) >= 0\n );\n\n const middlewaredPermissions = await runRbacMiddleware(\n {\n user,\n permissions: userPermissions,\n pathname: locationRef.current.pathname,\n search: (rawQueryContext || rawQuery).split('?')[1] ?? '',\n },\n matchingPermissions\n );\n\n const shouldCheckConditions = middlewaredPermissions.some(\n (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0\n );\n\n if (!shouldCheckConditions) {\n return middlewaredPermissions;\n }\n\n const { data, error } = await checkPermissions({\n permissions: middlewaredPermissions.map((perm) => ({\n action: perm.action,\n subject: perm.subject,\n })),\n });\n\n if (error) {\n throw error;\n } else {\n return middlewaredPermissions.filter((_, index) => data?.data[index] === true);\n }\n },\n [checkPermissions, rawQuery, runRbacMiddleware, user, userPermissions]\n );\n\n const isLoading = isLoadingUser || isLoadingPermissions;\n\n return (\n <Provider\n token={token}\n user={user}\n login={login}\n logout={logout}\n permissions={userPermissions}\n checkUserHasPermissions={checkUserHasPermissions}\n refetchPermissions={refetchPermissions}\n isLoading={isLoading}\n >\n {children}\n </Provider>\n );\n};\n\nexport { AuthProvider, useAuth, STORAGE_KEYS };\nexport type { AuthContextValue, Permission, User };\n"],"names":["Provider","useAuth","createContext","STORAGE_KEYS","TOKEN","STATUS","AuthProvider","children","_defaultPermissions","_disableRenewToken","dispatch","useTypedDispatch","runRbacMiddleware","useStrapiApp","state","rbac","run","location","useLocation","rawQuery","useQueryParams","locationRef","React","useRef","useEffect","current","token","useTypedSelector","admin_app","data","user","isLoading","isLoadingUser","useGetMeQuery","undefined","skip","userPermissions","refetch","isUninitialized","isLoadingPermissions","useGetMyPermissionsQuery","navigate","useNavigate","loginMutation","useLoginMutation","logoutMutation","useLogoutMutation","clearStateAndLogout","useCallback","adminApi","util","resetApiState","logoutAction","preferedLanguage","setLocale","setOnTokenUpdate","newToken","setToken","handleUserStorageChange","event","key","newValue","window","addEventListener","removeEventListener","login","rememberMe","body","res","deviceId","getOrCreateDeviceId","loginAction","persist","logout","refetchPermissions","checkPermissions","useLazyCheckPermissionsQuery","checkUserHasPermissions","permissions","passedPermissions","rawQueryContext","length","action","subject","actualUserPermissions","matchingPermissions","filter","permission","findIndex","perm","middlewaredPermissions","pathname","search","split","shouldCheckConditions","some","Array","isArray","conditions","error","map","_","index","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Auth.js","sources":["../../../../../admin/src/features/Auth.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { Login } from '../../../shared/contracts/authentication';\nimport { createContext } from '../components/Context';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useQueryParams } from '../hooks/useQueryParams';\nimport { login as loginAction, logout as logoutAction, setLocale, setToken } from '../reducer';\nimport { adminApi } from '../services/api';\nimport {\n useGetMeQuery,\n useGetMyPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useLoginMutation,\n useLogoutMutation,\n} from '../services/auth';\nimport { getOrCreateDeviceId } from '../utils/deviceId';\nimport { setOnTokenUpdate } from '../utils/getFetchClient';\n\nimport type {\n Permission as PermissionContract,\n SanitizedAdminUser,\n} from '../../../shared/contracts/shared';\n\ninterface Permission\n extends Pick<PermissionContract, 'action' | 'subject'>,\n Partial<Omit<PermissionContract, 'action' | 'subject'>> {}\n\ninterface User\n extends Pick<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>,\n Partial<Omit<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>> {}\n\ninterface AuthContextValue {\n login: (\n body: Login.Request['body'] & { rememberMe: boolean }\n ) => Promise<Awaited<ReturnType<ReturnType<typeof useLoginMutation>[0]>>>;\n logout: () => Promise<void>;\n /**\n * @alpha\n * @description given a list of permissions, this function checks\n * those against the current user's permissions or those passed as\n * the second argument, if the user has those permissions the complete\n * permission object form the API is returned. Therefore, if the list is\n * empty, the user does not have any of those permissions.\n */\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>,\n passedPermissions?: Permission[],\n rawQueryContext?: string\n ) => Promise<Permission[]>;\n isLoading: boolean;\n permissions: Permission[];\n refetchPermissions: () => Promise<void>;\n token: string | null;\n user?: User;\n}\n\nconst [Provider, useAuth] = createContext<AuthContextValue>('Auth');\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n /**\n * @internal could be removed at any time.\n */\n _defaultPermissions?: Permission[];\n\n // NOTE: this is used for testing purposed only\n _disableRenewToken?: boolean;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n STATUS: 'isLoggedIn',\n};\n\nconst AuthProvider = ({\n children,\n _defaultPermissions = [],\n _disableRenewToken = false,\n}: AuthProviderProps) => {\n const dispatch = useTypedDispatch();\n const runRbacMiddleware = useStrapiApp('AuthProvider', (state) => state.rbac.run);\n const location = useLocation();\n const [{ rawQuery }] = useQueryParams();\n\n const locationRef = React.useRef(location);\n\n // Update ref without causing re-render\n React.useEffect(() => {\n locationRef.current = location;\n }, [location]);\n\n const token = useTypedSelector((state) => state.admin_app.token ?? null);\n\n const { data: user, isLoading: isLoadingUser } = useGetMeQuery(undefined, {\n /**\n * If there's no token, we don't try to fetch\n * the user data because it will fail.\n */\n skip: !token,\n });\n\n const {\n data: userPermissions = _defaultPermissions,\n refetch,\n isUninitialized,\n isLoading: isLoadingPermissions,\n } = useGetMyPermissionsQuery(undefined, {\n skip: !token,\n });\n\n const navigate = useNavigate();\n\n const [loginMutation] = useLoginMutation();\n const [logoutMutation] = useLogoutMutation();\n\n const clearStateAndLogout = React.useCallback(() => {\n dispatch(adminApi.util.resetApiState());\n dispatch(logoutAction());\n navigate('/auth/login');\n }, [dispatch, navigate]);\n\n React.useEffect(() => {\n if (user) {\n if (user.preferedLanguage) {\n dispatch(setLocale(user.preferedLanguage));\n }\n }\n }, [dispatch, user]);\n\n /**\n * Register a callback to update Redux state when the token is refreshed.\n * This ensures the app state stays in sync with the token stored in localStorage/cookies.\n */\n React.useEffect(() => {\n setOnTokenUpdate((newToken) => {\n dispatch(setToken(newToken));\n });\n\n return () => {\n setOnTokenUpdate(null);\n };\n }, [dispatch]);\n\n React.useEffect(() => {\n /**\n * This will log a user out of all tabs if they log out in one tab.\n */\n const handleUserStorageChange = (event: StorageEvent) => {\n if (event.key === STORAGE_KEYS.STATUS && event.newValue === null) {\n clearStateAndLogout();\n }\n };\n\n window.addEventListener('storage', handleUserStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleUserStorageChange);\n };\n });\n\n const login = React.useCallback<AuthContextValue['login']>(\n async ({ rememberMe, ...body }) => {\n const res = await loginMutation({ ...body, deviceId: getOrCreateDeviceId(), rememberMe });\n\n /**\n * There will always be a `data` key in the response\n * because if something fails, it will throw an error.\n */\n if ('data' in res) {\n const { token } = res.data;\n\n dispatch(\n loginAction({\n token,\n persist: rememberMe,\n })\n );\n }\n\n return res;\n },\n [dispatch, loginMutation]\n );\n\n const logout = React.useCallback(async () => {\n await logoutMutation({ deviceId: getOrCreateDeviceId() });\n clearStateAndLogout();\n }, [clearStateAndLogout, logoutMutation]);\n\n const refetchPermissions = React.useCallback(async () => {\n if (!isUninitialized) {\n await refetch();\n }\n }, [isUninitialized, refetch]);\n\n const [checkPermissions] = useLazyCheckPermissionsQuery();\n const checkUserHasPermissions: AuthContextValue['checkUserHasPermissions'] = React.useCallback(\n async (\n permissions,\n passedPermissions,\n // TODO:\n // Here we have parameterised checkUserHasPermissions in order to pass\n // query context from elsewhere in the application.\n // See packages/core/content-manager/admin/src/features/DocumentRBAC.tsx\n\n // This is in order to calculate permissions on accurate query params.\n // We should be able to rely on the query params in this provider\n // If we need to pass additional context to the RBAC middleware\n // we should define a better context type.\n rawQueryContext\n ) => {\n /**\n * If there's no permissions to check, then we allow it to\n * pass to preserve existing behaviours.\n *\n * TODO: should we review this? it feels more dangerous than useful.\n */\n if (!permissions || permissions.length === 0) {\n return [{ action: '', subject: '' }];\n }\n\n /**\n * Given the provided permissions, return the permissions from either passedPermissions\n * or userPermissions as this is expected to be the full permission entity.\n */\n const actualUserPermissions = passedPermissions ?? userPermissions;\n\n const matchingPermissions = actualUserPermissions.filter(\n (permission) =>\n permissions.findIndex(\n (perm) =>\n perm.action === permission.action &&\n // Only check the subject if it's provided\n (perm.subject == undefined || perm.subject === permission.subject)\n ) >= 0\n );\n\n const middlewaredPermissions = await runRbacMiddleware(\n {\n user,\n permissions: userPermissions,\n pathname: locationRef.current.pathname,\n search: (rawQueryContext || rawQuery).split('?')[1] ?? '',\n },\n matchingPermissions\n );\n\n const shouldCheckConditions = middlewaredPermissions.some(\n (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0\n );\n\n if (!shouldCheckConditions) {\n return middlewaredPermissions;\n }\n\n const { data, error } = await checkPermissions({\n permissions: middlewaredPermissions.map((perm) => ({\n action: perm.action,\n subject: perm.subject,\n })),\n });\n\n if (error) {\n throw error;\n } else {\n return middlewaredPermissions.filter((_, index) => data?.data[index] === true);\n }\n },\n [checkPermissions, rawQuery, runRbacMiddleware, user, userPermissions]\n );\n\n const isLoading = isLoadingUser || isLoadingPermissions;\n\n return (\n <Provider\n token={token}\n user={user}\n login={login}\n logout={logout}\n permissions={userPermissions}\n checkUserHasPermissions={checkUserHasPermissions}\n refetchPermissions={refetchPermissions}\n isLoading={isLoading}\n >\n {children}\n </Provider>\n );\n};\n\nexport { AuthProvider, useAuth, STORAGE_KEYS };\nexport type { AuthContextValue, Permission, User };\n"],"names":["Provider","useAuth","createContext","STORAGE_KEYS","STATUS","AuthProvider","children","_defaultPermissions","_disableRenewToken","dispatch","useTypedDispatch","runRbacMiddleware","useStrapiApp","state","rbac","run","location","useLocation","rawQuery","useQueryParams","locationRef","React","useRef","useEffect","current","token","useTypedSelector","admin_app","data","user","isLoading","isLoadingUser","useGetMeQuery","undefined","skip","userPermissions","refetch","isUninitialized","isLoadingPermissions","useGetMyPermissionsQuery","navigate","useNavigate","loginMutation","useLoginMutation","logoutMutation","useLogoutMutation","clearStateAndLogout","useCallback","adminApi","util","resetApiState","logoutAction","preferedLanguage","setLocale","setOnTokenUpdate","newToken","setToken","handleUserStorageChange","event","key","newValue","window","addEventListener","removeEventListener","login","rememberMe","body","res","deviceId","getOrCreateDeviceId","loginAction","persist","logout","refetchPermissions","checkPermissions","useLazyCheckPermissionsQuery","checkUserHasPermissions","permissions","passedPermissions","rawQueryContext","length","action","subject","actualUserPermissions","matchingPermissions","filter","permission","findIndex","perm","middlewaredPermissions","pathname","search","split","shouldCheckConditions","some","Array","isArray","conditions","error","map","_","index","_jsx"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { createContext } from '../components/Context.mjs';
|
|
|
5
5
|
import { useTypedDispatch, useTypedSelector } from '../core/store/hooks.mjs';
|
|
6
6
|
import { useStrapiApp } from './StrapiApp.mjs';
|
|
7
7
|
import { useQueryParams } from '../hooks/useQueryParams.mjs';
|
|
8
|
-
import { logout, setLocale,
|
|
8
|
+
import { logout, setLocale, login, setToken } from '../reducer.mjs';
|
|
9
9
|
import { adminApi } from '../services/api.mjs';
|
|
10
10
|
import { useGetMeQuery, useGetMyPermissionsQuery, useLoginMutation, useLogoutMutation, useLazyCheckPermissionsQuery } from '../services/auth.mjs';
|
|
11
11
|
import { getOrCreateDeviceId } from '../utils/deviceId.mjs';
|
|
@@ -13,7 +13,6 @@ import { setOnTokenUpdate } from '../utils/getFetchClient.mjs';
|
|
|
13
13
|
|
|
14
14
|
const [Provider, useAuth] = createContext('Auth');
|
|
15
15
|
const STORAGE_KEYS = {
|
|
16
|
-
TOKEN: 'jwtToken',
|
|
17
16
|
STATUS: 'isLoggedIn'
|
|
18
17
|
};
|
|
19
18
|
const AuthProvider = ({ children, _defaultPermissions = [], _disableRenewToken = false })=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Auth.mjs","sources":["../../../../../admin/src/features/Auth.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { Login } from '../../../shared/contracts/authentication';\nimport { createContext } from '../components/Context';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useQueryParams } from '../hooks/useQueryParams';\nimport { login as loginAction, logout as logoutAction, setLocale, setToken } from '../reducer';\nimport { adminApi } from '../services/api';\nimport {\n useGetMeQuery,\n useGetMyPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useLoginMutation,\n useLogoutMutation,\n} from '../services/auth';\nimport { getOrCreateDeviceId } from '../utils/deviceId';\nimport { setOnTokenUpdate } from '../utils/getFetchClient';\n\nimport type {\n Permission as PermissionContract,\n SanitizedAdminUser,\n} from '../../../shared/contracts/shared';\n\ninterface Permission\n extends Pick<PermissionContract, 'action' | 'subject'>,\n Partial<Omit<PermissionContract, 'action' | 'subject'>> {}\n\ninterface User\n extends Pick<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>,\n Partial<Omit<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>> {}\n\ninterface AuthContextValue {\n login: (\n body: Login.Request['body'] & { rememberMe: boolean }\n ) => Promise<Awaited<ReturnType<ReturnType<typeof useLoginMutation>[0]>>>;\n logout: () => Promise<void>;\n /**\n * @alpha\n * @description given a list of permissions, this function checks\n * those against the current user's permissions or those passed as\n * the second argument, if the user has those permissions the complete\n * permission object form the API is returned. Therefore, if the list is\n * empty, the user does not have any of those permissions.\n */\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>,\n passedPermissions?: Permission[],\n rawQueryContext?: string\n ) => Promise<Permission[]>;\n isLoading: boolean;\n permissions: Permission[];\n refetchPermissions: () => Promise<void>;\n token: string | null;\n user?: User;\n}\n\nconst [Provider, useAuth] = createContext<AuthContextValue>('Auth');\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n /**\n * @internal could be removed at any time.\n */\n _defaultPermissions?: Permission[];\n\n // NOTE: this is used for testing purposed only\n _disableRenewToken?: boolean;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n STATUS: 'isLoggedIn',\n};\n\nconst AuthProvider = ({\n children,\n _defaultPermissions = [],\n _disableRenewToken = false,\n}: AuthProviderProps) => {\n const dispatch = useTypedDispatch();\n const runRbacMiddleware = useStrapiApp('AuthProvider', (state) => state.rbac.run);\n const location = useLocation();\n const [{ rawQuery }] = useQueryParams();\n\n const locationRef = React.useRef(location);\n\n // Update ref without causing re-render\n React.useEffect(() => {\n locationRef.current = location;\n }, [location]);\n\n const token = useTypedSelector((state) => state.admin_app.token ?? null);\n\n const { data: user, isLoading: isLoadingUser } = useGetMeQuery(undefined, {\n /**\n * If there's no token, we don't try to fetch\n * the user data because it will fail.\n */\n skip: !token,\n });\n\n const {\n data: userPermissions = _defaultPermissions,\n refetch,\n isUninitialized,\n isLoading: isLoadingPermissions,\n } = useGetMyPermissionsQuery(undefined, {\n skip: !token,\n });\n\n const navigate = useNavigate();\n\n const [loginMutation] = useLoginMutation();\n const [logoutMutation] = useLogoutMutation();\n\n const clearStateAndLogout = React.useCallback(() => {\n dispatch(adminApi.util.resetApiState());\n dispatch(logoutAction());\n navigate('/auth/login');\n }, [dispatch, navigate]);\n\n React.useEffect(() => {\n if (user) {\n if (user.preferedLanguage) {\n dispatch(setLocale(user.preferedLanguage));\n }\n }\n }, [dispatch, user]);\n\n /**\n * Register a callback to update Redux state when the token is refreshed.\n * This ensures the app state stays in sync with the token stored in localStorage/cookies.\n */\n React.useEffect(() => {\n setOnTokenUpdate((newToken) => {\n dispatch(setToken(newToken));\n });\n\n return () => {\n setOnTokenUpdate(null);\n };\n }, [dispatch]);\n\n React.useEffect(() => {\n /**\n * This will log a user out of all tabs if they log out in one tab.\n */\n const handleUserStorageChange = (event: StorageEvent) => {\n if (event.key === STORAGE_KEYS.STATUS && event.newValue === null) {\n clearStateAndLogout();\n }\n };\n\n window.addEventListener('storage', handleUserStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleUserStorageChange);\n };\n });\n\n const login = React.useCallback<AuthContextValue['login']>(\n async ({ rememberMe, ...body }) => {\n const res = await loginMutation({ ...body, deviceId: getOrCreateDeviceId(), rememberMe });\n\n /**\n * There will always be a `data` key in the response\n * because if something fails, it will throw an error.\n */\n if ('data' in res) {\n const { token } = res.data;\n\n dispatch(\n loginAction({\n token,\n persist: rememberMe,\n })\n );\n }\n\n return res;\n },\n [dispatch, loginMutation]\n );\n\n const logout = React.useCallback(async () => {\n await logoutMutation({ deviceId: getOrCreateDeviceId() });\n clearStateAndLogout();\n }, [clearStateAndLogout, logoutMutation]);\n\n const refetchPermissions = React.useCallback(async () => {\n if (!isUninitialized) {\n await refetch();\n }\n }, [isUninitialized, refetch]);\n\n const [checkPermissions] = useLazyCheckPermissionsQuery();\n const checkUserHasPermissions: AuthContextValue['checkUserHasPermissions'] = React.useCallback(\n async (\n permissions,\n passedPermissions,\n // TODO:\n // Here we have parameterised checkUserHasPermissions in order to pass\n // query context from elsewhere in the application.\n // See packages/core/content-manager/admin/src/features/DocumentRBAC.tsx\n\n // This is in order to calculate permissions on accurate query params.\n // We should be able to rely on the query params in this provider\n // If we need to pass additional context to the RBAC middleware\n // we should define a better context type.\n rawQueryContext\n ) => {\n /**\n * If there's no permissions to check, then we allow it to\n * pass to preserve existing behaviours.\n *\n * TODO: should we review this? it feels more dangerous than useful.\n */\n if (!permissions || permissions.length === 0) {\n return [{ action: '', subject: '' }];\n }\n\n /**\n * Given the provided permissions, return the permissions from either passedPermissions\n * or userPermissions as this is expected to be the full permission entity.\n */\n const actualUserPermissions = passedPermissions ?? userPermissions;\n\n const matchingPermissions = actualUserPermissions.filter(\n (permission) =>\n permissions.findIndex(\n (perm) =>\n perm.action === permission.action &&\n // Only check the subject if it's provided\n (perm.subject == undefined || perm.subject === permission.subject)\n ) >= 0\n );\n\n const middlewaredPermissions = await runRbacMiddleware(\n {\n user,\n permissions: userPermissions,\n pathname: locationRef.current.pathname,\n search: (rawQueryContext || rawQuery).split('?')[1] ?? '',\n },\n matchingPermissions\n );\n\n const shouldCheckConditions = middlewaredPermissions.some(\n (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0\n );\n\n if (!shouldCheckConditions) {\n return middlewaredPermissions;\n }\n\n const { data, error } = await checkPermissions({\n permissions: middlewaredPermissions.map((perm) => ({\n action: perm.action,\n subject: perm.subject,\n })),\n });\n\n if (error) {\n throw error;\n } else {\n return middlewaredPermissions.filter((_, index) => data?.data[index] === true);\n }\n },\n [checkPermissions, rawQuery, runRbacMiddleware, user, userPermissions]\n );\n\n const isLoading = isLoadingUser || isLoadingPermissions;\n\n return (\n <Provider\n token={token}\n user={user}\n login={login}\n logout={logout}\n permissions={userPermissions}\n checkUserHasPermissions={checkUserHasPermissions}\n refetchPermissions={refetchPermissions}\n isLoading={isLoading}\n >\n {children}\n </Provider>\n );\n};\n\nexport { AuthProvider, useAuth, STORAGE_KEYS };\nexport type { AuthContextValue, Permission, User };\n"],"names":["Provider","useAuth","createContext","STORAGE_KEYS","TOKEN","STATUS","AuthProvider","children","_defaultPermissions","_disableRenewToken","dispatch","useTypedDispatch","runRbacMiddleware","useStrapiApp","state","rbac","run","location","useLocation","rawQuery","useQueryParams","locationRef","React","useRef","useEffect","current","token","useTypedSelector","admin_app","data","user","isLoading","isLoadingUser","useGetMeQuery","undefined","skip","userPermissions","refetch","isUninitialized","isLoadingPermissions","useGetMyPermissionsQuery","navigate","useNavigate","loginMutation","useLoginMutation","logoutMutation","useLogoutMutation","clearStateAndLogout","useCallback","adminApi","util","resetApiState","logoutAction","preferedLanguage","setLocale","setOnTokenUpdate","newToken","setToken","handleUserStorageChange","event","key","newValue","window","addEventListener","removeEventListener","login","rememberMe","body","res","deviceId","getOrCreateDeviceId","loginAction","persist","logout","refetchPermissions","checkPermissions","useLazyCheckPermissionsQuery","checkUserHasPermissions","permissions","passedPermissions","rawQueryContext","length","action","subject","actualUserPermissions","matchingPermissions","filter","permission","findIndex","perm","middlewaredPermissions","pathname","search","split","shouldCheckConditions","some","Array","isArray","conditions","error","map","_","index","_jsx"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Auth.mjs","sources":["../../../../../admin/src/features/Auth.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport { Login } from '../../../shared/contracts/authentication';\nimport { createContext } from '../components/Context';\nimport { useTypedDispatch, useTypedSelector } from '../core/store/hooks';\nimport { useStrapiApp } from '../features/StrapiApp';\nimport { useQueryParams } from '../hooks/useQueryParams';\nimport { login as loginAction, logout as logoutAction, setLocale, setToken } from '../reducer';\nimport { adminApi } from '../services/api';\nimport {\n useGetMeQuery,\n useGetMyPermissionsQuery,\n useLazyCheckPermissionsQuery,\n useLoginMutation,\n useLogoutMutation,\n} from '../services/auth';\nimport { getOrCreateDeviceId } from '../utils/deviceId';\nimport { setOnTokenUpdate } from '../utils/getFetchClient';\n\nimport type {\n Permission as PermissionContract,\n SanitizedAdminUser,\n} from '../../../shared/contracts/shared';\n\ninterface Permission\n extends Pick<PermissionContract, 'action' | 'subject'>,\n Partial<Omit<PermissionContract, 'action' | 'subject'>> {}\n\ninterface User\n extends Pick<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>,\n Partial<Omit<SanitizedAdminUser, 'email' | 'firstname' | 'lastname' | 'username' | 'roles'>> {}\n\ninterface AuthContextValue {\n login: (\n body: Login.Request['body'] & { rememberMe: boolean }\n ) => Promise<Awaited<ReturnType<ReturnType<typeof useLoginMutation>[0]>>>;\n logout: () => Promise<void>;\n /**\n * @alpha\n * @description given a list of permissions, this function checks\n * those against the current user's permissions or those passed as\n * the second argument, if the user has those permissions the complete\n * permission object form the API is returned. Therefore, if the list is\n * empty, the user does not have any of those permissions.\n */\n checkUserHasPermissions: (\n permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>,\n passedPermissions?: Permission[],\n rawQueryContext?: string\n ) => Promise<Permission[]>;\n isLoading: boolean;\n permissions: Permission[];\n refetchPermissions: () => Promise<void>;\n token: string | null;\n user?: User;\n}\n\nconst [Provider, useAuth] = createContext<AuthContextValue>('Auth');\n\ninterface AuthProviderProps {\n children: React.ReactNode;\n /**\n * @internal could be removed at any time.\n */\n _defaultPermissions?: Permission[];\n\n // NOTE: this is used for testing purposed only\n _disableRenewToken?: boolean;\n}\n\nconst STORAGE_KEYS = {\n TOKEN: 'jwtToken',\n STATUS: 'isLoggedIn',\n};\n\nconst AuthProvider = ({\n children,\n _defaultPermissions = [],\n _disableRenewToken = false,\n}: AuthProviderProps) => {\n const dispatch = useTypedDispatch();\n const runRbacMiddleware = useStrapiApp('AuthProvider', (state) => state.rbac.run);\n const location = useLocation();\n const [{ rawQuery }] = useQueryParams();\n\n const locationRef = React.useRef(location);\n\n // Update ref without causing re-render\n React.useEffect(() => {\n locationRef.current = location;\n }, [location]);\n\n const token = useTypedSelector((state) => state.admin_app.token ?? null);\n\n const { data: user, isLoading: isLoadingUser } = useGetMeQuery(undefined, {\n /**\n * If there's no token, we don't try to fetch\n * the user data because it will fail.\n */\n skip: !token,\n });\n\n const {\n data: userPermissions = _defaultPermissions,\n refetch,\n isUninitialized,\n isLoading: isLoadingPermissions,\n } = useGetMyPermissionsQuery(undefined, {\n skip: !token,\n });\n\n const navigate = useNavigate();\n\n const [loginMutation] = useLoginMutation();\n const [logoutMutation] = useLogoutMutation();\n\n const clearStateAndLogout = React.useCallback(() => {\n dispatch(adminApi.util.resetApiState());\n dispatch(logoutAction());\n navigate('/auth/login');\n }, [dispatch, navigate]);\n\n React.useEffect(() => {\n if (user) {\n if (user.preferedLanguage) {\n dispatch(setLocale(user.preferedLanguage));\n }\n }\n }, [dispatch, user]);\n\n /**\n * Register a callback to update Redux state when the token is refreshed.\n * This ensures the app state stays in sync with the token stored in localStorage/cookies.\n */\n React.useEffect(() => {\n setOnTokenUpdate((newToken) => {\n dispatch(setToken(newToken));\n });\n\n return () => {\n setOnTokenUpdate(null);\n };\n }, [dispatch]);\n\n React.useEffect(() => {\n /**\n * This will log a user out of all tabs if they log out in one tab.\n */\n const handleUserStorageChange = (event: StorageEvent) => {\n if (event.key === STORAGE_KEYS.STATUS && event.newValue === null) {\n clearStateAndLogout();\n }\n };\n\n window.addEventListener('storage', handleUserStorageChange);\n\n return () => {\n window.removeEventListener('storage', handleUserStorageChange);\n };\n });\n\n const login = React.useCallback<AuthContextValue['login']>(\n async ({ rememberMe, ...body }) => {\n const res = await loginMutation({ ...body, deviceId: getOrCreateDeviceId(), rememberMe });\n\n /**\n * There will always be a `data` key in the response\n * because if something fails, it will throw an error.\n */\n if ('data' in res) {\n const { token } = res.data;\n\n dispatch(\n loginAction({\n token,\n persist: rememberMe,\n })\n );\n }\n\n return res;\n },\n [dispatch, loginMutation]\n );\n\n const logout = React.useCallback(async () => {\n await logoutMutation({ deviceId: getOrCreateDeviceId() });\n clearStateAndLogout();\n }, [clearStateAndLogout, logoutMutation]);\n\n const refetchPermissions = React.useCallback(async () => {\n if (!isUninitialized) {\n await refetch();\n }\n }, [isUninitialized, refetch]);\n\n const [checkPermissions] = useLazyCheckPermissionsQuery();\n const checkUserHasPermissions: AuthContextValue['checkUserHasPermissions'] = React.useCallback(\n async (\n permissions,\n passedPermissions,\n // TODO:\n // Here we have parameterised checkUserHasPermissions in order to pass\n // query context from elsewhere in the application.\n // See packages/core/content-manager/admin/src/features/DocumentRBAC.tsx\n\n // This is in order to calculate permissions on accurate query params.\n // We should be able to rely on the query params in this provider\n // If we need to pass additional context to the RBAC middleware\n // we should define a better context type.\n rawQueryContext\n ) => {\n /**\n * If there's no permissions to check, then we allow it to\n * pass to preserve existing behaviours.\n *\n * TODO: should we review this? it feels more dangerous than useful.\n */\n if (!permissions || permissions.length === 0) {\n return [{ action: '', subject: '' }];\n }\n\n /**\n * Given the provided permissions, return the permissions from either passedPermissions\n * or userPermissions as this is expected to be the full permission entity.\n */\n const actualUserPermissions = passedPermissions ?? userPermissions;\n\n const matchingPermissions = actualUserPermissions.filter(\n (permission) =>\n permissions.findIndex(\n (perm) =>\n perm.action === permission.action &&\n // Only check the subject if it's provided\n (perm.subject == undefined || perm.subject === permission.subject)\n ) >= 0\n );\n\n const middlewaredPermissions = await runRbacMiddleware(\n {\n user,\n permissions: userPermissions,\n pathname: locationRef.current.pathname,\n search: (rawQueryContext || rawQuery).split('?')[1] ?? '',\n },\n matchingPermissions\n );\n\n const shouldCheckConditions = middlewaredPermissions.some(\n (perm) => Array.isArray(perm.conditions) && perm.conditions.length > 0\n );\n\n if (!shouldCheckConditions) {\n return middlewaredPermissions;\n }\n\n const { data, error } = await checkPermissions({\n permissions: middlewaredPermissions.map((perm) => ({\n action: perm.action,\n subject: perm.subject,\n })),\n });\n\n if (error) {\n throw error;\n } else {\n return middlewaredPermissions.filter((_, index) => data?.data[index] === true);\n }\n },\n [checkPermissions, rawQuery, runRbacMiddleware, user, userPermissions]\n );\n\n const isLoading = isLoadingUser || isLoadingPermissions;\n\n return (\n <Provider\n token={token}\n user={user}\n login={login}\n logout={logout}\n permissions={userPermissions}\n checkUserHasPermissions={checkUserHasPermissions}\n refetchPermissions={refetchPermissions}\n isLoading={isLoading}\n >\n {children}\n </Provider>\n );\n};\n\nexport { AuthProvider, useAuth, STORAGE_KEYS };\nexport type { AuthContextValue, Permission, User };\n"],"names":["Provider","useAuth","createContext","STORAGE_KEYS","STATUS","AuthProvider","children","_defaultPermissions","_disableRenewToken","dispatch","useTypedDispatch","runRbacMiddleware","useStrapiApp","state","rbac","run","location","useLocation","rawQuery","useQueryParams","locationRef","React","useRef","useEffect","current","token","useTypedSelector","admin_app","data","user","isLoading","isLoadingUser","useGetMeQuery","undefined","skip","userPermissions","refetch","isUninitialized","isLoadingPermissions","useGetMyPermissionsQuery","navigate","useNavigate","loginMutation","useLoginMutation","logoutMutation","useLogoutMutation","clearStateAndLogout","useCallback","adminApi","util","resetApiState","logoutAction","preferedLanguage","setLocale","setOnTokenUpdate","newToken","setToken","handleUserStorageChange","event","key","newValue","window","addEventListener","removeEventListener","login","rememberMe","body","res","deviceId","getOrCreateDeviceId","loginAction","persist","logout","refetchPermissions","checkPermissions","useLazyCheckPermissionsQuery","checkUserHasPermissions","permissions","passedPermissions","rawQueryContext","length","action","subject","actualUserPermissions","matchingPermissions","filter","permission","findIndex","perm","middlewaredPermissions","pathname","search","split","shouldCheckConditions","some","Array","isArray","conditions","error","map","_","index","_jsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackButton.js","sources":["../../../../../admin/src/features/BackButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Link, LinkProps } from '@strapi/design-system';\nimport { ArrowLeft } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { NavLink, type To, useLocation, useNavigate, useNavigationType } from 'react-router-dom';\n\nimport { createContext } from '../components/Context';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\ninterface HistoryState {\n /**\n * The history of the user's navigation within our application\n * during their current session.\n */\n history: string[];\n /**\n * The index of the current location in the history array.\n */\n currentLocationIndex: number;\n /**\n * The current location of the user within our application.\n */\n currentLocation: string;\n /**\n * Whether the user can go back in the history.\n */\n canGoBack: boolean;\n}\n\ninterface HistoryContextValue extends HistoryState {\n /**\n * @description Push a new state to the history. You can\n * either pass a string or an object.\n */\n pushState: (\n path:\n | {\n to: string;\n search: string;\n }\n | string\n ) => void;\n /**\n * @description Go back in the history. This calls `navigate(-1)` internally\n * to keep the browser in sync with the application state.\n */\n goBack: () => void;\n}\n\nconst [Provider, useHistory] = createContext<HistoryContextValue>('History', {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n pushState: () => {\n throw new Error('You must use the `HistoryProvider` to access the `pushState` function.');\n },\n goBack: () => {\n throw new Error('You must use the `HistoryProvider` to access the `goBack` function.');\n },\n});\n\ninterface HistoryProviderProps {\n children: React.ReactNode;\n}\n\nconst HistoryProvider = ({ children }: HistoryProviderProps) => {\n const location = useLocation();\n const navigationType = useNavigationType();\n const navigate = useNavigate();\n const [state, dispatch] = React.useReducer(reducer, {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n });\n\n const isGoingBack = React.useRef(false);\n\n const pushState: HistoryContextValue['pushState'] = React.useCallback((path) => {\n dispatch({\n type: 'PUSH_STATE',\n payload: typeof path === 'string' ? { to: path, search: '' } : path,\n });\n }, []);\n\n const goBack: HistoryContextValue['goBack'] = React.useCallback(() => {\n /**\n * Perform the browser back action, dispatch the goBack action to keep the state in sync\n * and set the ref to avoid an infinite loop and incorrect state pushing\n */\n navigate(-1);\n dispatch({ type: 'GO_BACK' });\n isGoingBack.current = true;\n }, [navigate]);\n\n /**\n * This is a semi-listener pattern to keep the `canGoBack` state in sync.\n */\n const prevIndex = React.useRef(state.currentLocationIndex);\n React.useEffect(() => {\n if (state.currentLocationIndex !== prevIndex.current) {\n dispatch({\n type: 'SET_CAN_GO_BACK',\n payload: state.currentLocationIndex > 1 && state.history.length > 1,\n });\n prevIndex.current = state.currentLocationIndex;\n }\n }, [prevIndex, state.currentLocationIndex, state.history.length]);\n\n /**\n * This effect is responsible for pushing the new state to the history\n * when the user navigates to a new location assuming they're not going back.\n */\n React.useLayoutEffect(() => {\n if (isGoingBack.current) {\n isGoingBack.current = false;\n } else if (navigationType === 'REPLACE') {\n // Prevent appending to the history when the location changes via a replace:true navigation\n dispatch({\n type: 'REPLACE_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n } else {\n // this should only occur on link movements, not back/forward clicks\n dispatch({\n type: 'PUSH_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n }\n }, [dispatch, location.pathname, location.search, navigationType]);\n\n return (\n <Provider pushState={pushState} goBack={goBack} {...state}>\n {children}\n </Provider>\n );\n};\n\ntype HistoryActions =\n | {\n type: 'PUSH_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'REPLACE_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'GO_BACK';\n }\n | {\n type: 'SET_CAN_GO_BACK';\n payload: boolean;\n };\n\nconst reducer = (state: HistoryState, action: HistoryActions) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'PUSH_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n if (state.currentLocationIndex === state.history.length) {\n // add the new place\n draft.history = [...state.history, path];\n } else {\n // delete all the history after the current place and then add the new place\n draft.history = [...state.history.slice(0, state.currentLocationIndex), path];\n }\n\n draft.currentLocation = path;\n draft.currentLocationIndex += 1;\n\n break;\n }\n case 'REPLACE_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n draft.history = [...state.history.slice(0, state.currentLocationIndex - 1), path];\n draft.currentLocation = path;\n break;\n }\n case 'GO_BACK': {\n const newIndex = state.currentLocationIndex - 1;\n\n draft.currentLocation = state.history[newIndex - 1];\n draft.currentLocationIndex = newIndex;\n break;\n }\n case 'SET_CAN_GO_BACK': {\n draft.canGoBack = action.payload;\n break;\n }\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * BackButton\n * -----------------------------------------------------------------------------------------------*/\ninterface BackButtonProps extends Pick<LinkProps, 'disabled'> {\n fallback?: To;\n}\n\n/**\n * @beta\n * @description The universal back button for the Strapi application. This uses the internal history\n * context to navigate the user back to the previous location. It can be completely disabled in a\n * specific user case. When no history is available, you can provide a fallback destination,\n * otherwise the link will be disabled.\n */\nconst BackButton = React.forwardRef<HTMLAnchorElement, BackButtonProps>(\n ({ disabled, fallback = '' }, ref) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const currentLocationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n const hasFallback = fallback !== '';\n const shouldBeDisabled = disabled || (!canGoBack && !hasFallback);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n\n if (canGoBack) {\n goBack();\n } else if (hasFallback) {\n navigate(fallback);\n }\n };\n\n // The link destination from the history. Undefined if there is only 1 location in the history.\n const historyTo = canGoBack ? history.at(currentLocationIndex - 2) : undefined;\n // If no link destination from the history, use the fallback.\n const toWithFallback = historyTo ?? fallback;\n\n return (\n <Link\n ref={ref}\n tag={NavLink}\n to={toWithFallback}\n onClick={handleClick}\n disabled={shouldBeDisabled}\n aria-disabled={shouldBeDisabled}\n startIcon={<ArrowLeft />}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n );\n }\n);\n\nexport { BackButton, HistoryProvider, useHistory };\nexport type { BackButtonProps, HistoryProviderProps, HistoryContextValue, HistoryState };\n"],"names":["Provider","useHistory","createContext","history","currentLocationIndex","currentLocation","canGoBack","pushState","Error","goBack","HistoryProvider","children","location","useLocation","navigationType","useNavigationType","navigate","useNavigate","state","dispatch","React","useReducer","reducer","isGoingBack","useRef","useCallback","path","type","payload","to","search","current","prevIndex","useEffect","length","useLayoutEffect","pathname","_jsx","action","produce","draft","slice","newIndex","BackButton","forwardRef","disabled","fallback","ref","formatMessage","useIntl","hasFallback","shouldBeDisabled","handleClick","e","preventDefault","historyTo","at","undefined","toWithFallback","Link","tag","NavLink","onClick","aria-disabled","startIcon","ArrowLeft","id","defaultMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BackButton.js","sources":["../../../../../admin/src/features/BackButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Link, LinkProps } from '@strapi/design-system';\nimport { ArrowLeft } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { NavLink, type To, useLocation, useNavigate, useNavigationType } from 'react-router-dom';\n\nimport { createContext } from '../components/Context';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\ninterface HistoryState {\n /**\n * The history of the user's navigation within our application\n * during their current session.\n */\n history: string[];\n /**\n * The index of the current location in the history array.\n */\n currentLocationIndex: number;\n /**\n * The current location of the user within our application.\n */\n currentLocation: string;\n /**\n * Whether the user can go back in the history.\n */\n canGoBack: boolean;\n}\n\ninterface HistoryContextValue extends HistoryState {\n /**\n * @description Push a new state to the history. You can\n * either pass a string or an object.\n */\n pushState: (\n path:\n | {\n to: string;\n search: string;\n }\n | string\n ) => void;\n /**\n * @description Go back in the history. This calls `navigate(-1)` internally\n * to keep the browser in sync with the application state.\n */\n goBack: () => void;\n}\n\nconst [Provider, useHistory] = createContext<HistoryContextValue>('History', {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n pushState: () => {\n throw new Error('You must use the `HistoryProvider` to access the `pushState` function.');\n },\n goBack: () => {\n throw new Error('You must use the `HistoryProvider` to access the `goBack` function.');\n },\n});\n\ninterface HistoryProviderProps {\n children: React.ReactNode;\n}\n\nconst HistoryProvider = ({ children }: HistoryProviderProps) => {\n const location = useLocation();\n const navigationType = useNavigationType();\n const navigate = useNavigate();\n const [state, dispatch] = React.useReducer(reducer, {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n });\n\n const isGoingBack = React.useRef(false);\n\n const pushState: HistoryContextValue['pushState'] = React.useCallback((path) => {\n dispatch({\n type: 'PUSH_STATE',\n payload: typeof path === 'string' ? { to: path, search: '' } : path,\n });\n }, []);\n\n const goBack: HistoryContextValue['goBack'] = React.useCallback(() => {\n /**\n * Perform the browser back action, dispatch the goBack action to keep the state in sync\n * and set the ref to avoid an infinite loop and incorrect state pushing\n */\n navigate(-1);\n dispatch({ type: 'GO_BACK' });\n isGoingBack.current = true;\n }, [navigate]);\n\n /**\n * This is a semi-listener pattern to keep the `canGoBack` state in sync.\n */\n const prevIndex = React.useRef(state.currentLocationIndex);\n React.useEffect(() => {\n if (state.currentLocationIndex !== prevIndex.current) {\n dispatch({\n type: 'SET_CAN_GO_BACK',\n payload: state.currentLocationIndex > 1 && state.history.length > 1,\n });\n prevIndex.current = state.currentLocationIndex;\n }\n }, [prevIndex, state.currentLocationIndex, state.history.length]);\n\n /**\n * This effect is responsible for pushing the new state to the history\n * when the user navigates to a new location assuming they're not going back.\n */\n React.useLayoutEffect(() => {\n if (isGoingBack.current) {\n isGoingBack.current = false;\n } else if (navigationType === 'REPLACE') {\n // Prevent appending to the history when the location changes via a replace:true navigation\n dispatch({\n type: 'REPLACE_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n } else {\n // this should only occur on link movements, not back/forward clicks\n dispatch({\n type: 'PUSH_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n }\n }, [dispatch, location.pathname, location.search, navigationType]);\n\n return (\n <Provider pushState={pushState} goBack={goBack} {...state}>\n {children}\n </Provider>\n );\n};\n\ntype HistoryActions =\n | {\n type: 'PUSH_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'REPLACE_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'GO_BACK';\n }\n | {\n type: 'SET_CAN_GO_BACK';\n payload: boolean;\n };\n\nconst reducer = (state: HistoryState, action: HistoryActions) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'PUSH_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n if (state.currentLocationIndex === state.history.length) {\n // add the new place\n draft.history = [...state.history, path];\n } else {\n // delete all the history after the current place and then add the new place\n draft.history = [...state.history.slice(0, state.currentLocationIndex), path];\n }\n\n draft.currentLocation = path;\n draft.currentLocationIndex += 1;\n\n break;\n }\n case 'REPLACE_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n draft.history = [...state.history.slice(0, state.currentLocationIndex - 1), path];\n draft.currentLocation = path;\n break;\n }\n case 'GO_BACK': {\n const newIndex = state.currentLocationIndex - 1;\n\n draft.currentLocation = state.history[newIndex - 1];\n draft.currentLocationIndex = newIndex;\n break;\n }\n case 'SET_CAN_GO_BACK': {\n draft.canGoBack = action.payload;\n break;\n }\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * BackButton\n * -----------------------------------------------------------------------------------------------*/\ninterface BackButtonProps extends Pick<LinkProps, 'disabled'> {\n fallback?: To;\n}\n\n/**\n * @beta\n * @description The universal back button for the Strapi application. This uses the internal history\n * context to navigate the user back to the previous location. It can be completely disabled in a\n * specific user case. When no history is available, you can provide a fallback destination,\n * otherwise the link will be disabled.\n */\nconst BackButton = React.forwardRef<HTMLAnchorElement, BackButtonProps>(\n ({ disabled, fallback = '' }, ref) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const currentLocationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n const hasFallback = fallback !== '';\n const shouldBeDisabled = disabled || (!canGoBack && !hasFallback);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n\n if (canGoBack) {\n goBack();\n } else if (hasFallback) {\n navigate(fallback);\n }\n };\n\n // The link destination from the history. Undefined if there is only 1 location in the history.\n const historyTo = canGoBack ? history.at(currentLocationIndex - 2) : undefined;\n // If no link destination from the history, use the fallback.\n const toWithFallback = historyTo ?? fallback;\n\n return (\n <Link\n ref={ref}\n tag={NavLink}\n to={toWithFallback}\n onClick={handleClick}\n disabled={shouldBeDisabled}\n aria-disabled={shouldBeDisabled}\n startIcon={<ArrowLeft />}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n );\n }\n);\n\nexport { BackButton, HistoryProvider, useHistory };\nexport type { BackButtonProps, HistoryProviderProps, HistoryContextValue, HistoryState };\n"],"names":["Provider","useHistory","createContext","history","currentLocationIndex","currentLocation","canGoBack","pushState","Error","goBack","HistoryProvider","children","location","useLocation","navigationType","useNavigationType","navigate","useNavigate","state","dispatch","React","useReducer","reducer","isGoingBack","useRef","useCallback","path","type","payload","to","search","current","prevIndex","useEffect","length","useLayoutEffect","pathname","_jsx","action","produce","draft","slice","newIndex","BackButton","forwardRef","disabled","fallback","ref","formatMessage","useIntl","hasFallback","shouldBeDisabled","handleClick","e","preventDefault","historyTo","at","undefined","toWithFallback","Link","tag","NavLink","onClick","aria-disabled","startIcon","ArrowLeft","id","defaultMessage"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackButton.mjs","sources":["../../../../../admin/src/features/BackButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Link, LinkProps } from '@strapi/design-system';\nimport { ArrowLeft } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { NavLink, type To, useLocation, useNavigate, useNavigationType } from 'react-router-dom';\n\nimport { createContext } from '../components/Context';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\ninterface HistoryState {\n /**\n * The history of the user's navigation within our application\n * during their current session.\n */\n history: string[];\n /**\n * The index of the current location in the history array.\n */\n currentLocationIndex: number;\n /**\n * The current location of the user within our application.\n */\n currentLocation: string;\n /**\n * Whether the user can go back in the history.\n */\n canGoBack: boolean;\n}\n\ninterface HistoryContextValue extends HistoryState {\n /**\n * @description Push a new state to the history. You can\n * either pass a string or an object.\n */\n pushState: (\n path:\n | {\n to: string;\n search: string;\n }\n | string\n ) => void;\n /**\n * @description Go back in the history. This calls `navigate(-1)` internally\n * to keep the browser in sync with the application state.\n */\n goBack: () => void;\n}\n\nconst [Provider, useHistory] = createContext<HistoryContextValue>('History', {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n pushState: () => {\n throw new Error('You must use the `HistoryProvider` to access the `pushState` function.');\n },\n goBack: () => {\n throw new Error('You must use the `HistoryProvider` to access the `goBack` function.');\n },\n});\n\ninterface HistoryProviderProps {\n children: React.ReactNode;\n}\n\nconst HistoryProvider = ({ children }: HistoryProviderProps) => {\n const location = useLocation();\n const navigationType = useNavigationType();\n const navigate = useNavigate();\n const [state, dispatch] = React.useReducer(reducer, {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n });\n\n const isGoingBack = React.useRef(false);\n\n const pushState: HistoryContextValue['pushState'] = React.useCallback((path) => {\n dispatch({\n type: 'PUSH_STATE',\n payload: typeof path === 'string' ? { to: path, search: '' } : path,\n });\n }, []);\n\n const goBack: HistoryContextValue['goBack'] = React.useCallback(() => {\n /**\n * Perform the browser back action, dispatch the goBack action to keep the state in sync\n * and set the ref to avoid an infinite loop and incorrect state pushing\n */\n navigate(-1);\n dispatch({ type: 'GO_BACK' });\n isGoingBack.current = true;\n }, [navigate]);\n\n /**\n * This is a semi-listener pattern to keep the `canGoBack` state in sync.\n */\n const prevIndex = React.useRef(state.currentLocationIndex);\n React.useEffect(() => {\n if (state.currentLocationIndex !== prevIndex.current) {\n dispatch({\n type: 'SET_CAN_GO_BACK',\n payload: state.currentLocationIndex > 1 && state.history.length > 1,\n });\n prevIndex.current = state.currentLocationIndex;\n }\n }, [prevIndex, state.currentLocationIndex, state.history.length]);\n\n /**\n * This effect is responsible for pushing the new state to the history\n * when the user navigates to a new location assuming they're not going back.\n */\n React.useLayoutEffect(() => {\n if (isGoingBack.current) {\n isGoingBack.current = false;\n } else if (navigationType === 'REPLACE') {\n // Prevent appending to the history when the location changes via a replace:true navigation\n dispatch({\n type: 'REPLACE_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n } else {\n // this should only occur on link movements, not back/forward clicks\n dispatch({\n type: 'PUSH_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n }\n }, [dispatch, location.pathname, location.search, navigationType]);\n\n return (\n <Provider pushState={pushState} goBack={goBack} {...state}>\n {children}\n </Provider>\n );\n};\n\ntype HistoryActions =\n | {\n type: 'PUSH_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'REPLACE_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'GO_BACK';\n }\n | {\n type: 'SET_CAN_GO_BACK';\n payload: boolean;\n };\n\nconst reducer = (state: HistoryState, action: HistoryActions) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'PUSH_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n if (state.currentLocationIndex === state.history.length) {\n // add the new place\n draft.history = [...state.history, path];\n } else {\n // delete all the history after the current place and then add the new place\n draft.history = [...state.history.slice(0, state.currentLocationIndex), path];\n }\n\n draft.currentLocation = path;\n draft.currentLocationIndex += 1;\n\n break;\n }\n case 'REPLACE_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n draft.history = [...state.history.slice(0, state.currentLocationIndex - 1), path];\n draft.currentLocation = path;\n break;\n }\n case 'GO_BACK': {\n const newIndex = state.currentLocationIndex - 1;\n\n draft.currentLocation = state.history[newIndex - 1];\n draft.currentLocationIndex = newIndex;\n break;\n }\n case 'SET_CAN_GO_BACK': {\n draft.canGoBack = action.payload;\n break;\n }\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * BackButton\n * -----------------------------------------------------------------------------------------------*/\ninterface BackButtonProps extends Pick<LinkProps, 'disabled'> {\n fallback?: To;\n}\n\n/**\n * @beta\n * @description The universal back button for the Strapi application. This uses the internal history\n * context to navigate the user back to the previous location. It can be completely disabled in a\n * specific user case. When no history is available, you can provide a fallback destination,\n * otherwise the link will be disabled.\n */\nconst BackButton = React.forwardRef<HTMLAnchorElement, BackButtonProps>(\n ({ disabled, fallback = '' }, ref) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const currentLocationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n const hasFallback = fallback !== '';\n const shouldBeDisabled = disabled || (!canGoBack && !hasFallback);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n\n if (canGoBack) {\n goBack();\n } else if (hasFallback) {\n navigate(fallback);\n }\n };\n\n // The link destination from the history. Undefined if there is only 1 location in the history.\n const historyTo = canGoBack ? history.at(currentLocationIndex - 2) : undefined;\n // If no link destination from the history, use the fallback.\n const toWithFallback = historyTo ?? fallback;\n\n return (\n <Link\n ref={ref}\n tag={NavLink}\n to={toWithFallback}\n onClick={handleClick}\n disabled={shouldBeDisabled}\n aria-disabled={shouldBeDisabled}\n startIcon={<ArrowLeft />}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n );\n }\n);\n\nexport { BackButton, HistoryProvider, useHistory };\nexport type { BackButtonProps, HistoryProviderProps, HistoryContextValue, HistoryState };\n"],"names":["Provider","useHistory","createContext","history","currentLocationIndex","currentLocation","canGoBack","pushState","Error","goBack","HistoryProvider","children","location","useLocation","navigationType","useNavigationType","navigate","useNavigate","state","dispatch","React","useReducer","reducer","isGoingBack","useRef","useCallback","path","type","payload","to","search","current","prevIndex","useEffect","length","useLayoutEffect","pathname","_jsx","action","produce","draft","slice","newIndex","BackButton","forwardRef","disabled","fallback","ref","formatMessage","useIntl","hasFallback","shouldBeDisabled","handleClick","e","preventDefault","historyTo","at","undefined","toWithFallback","Link","tag","NavLink","onClick","aria-disabled","startIcon","ArrowLeft","id","defaultMessage"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BackButton.mjs","sources":["../../../../../admin/src/features/BackButton.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Link, LinkProps } from '@strapi/design-system';\nimport { ArrowLeft } from '@strapi/icons';\nimport { produce } from 'immer';\nimport { useIntl } from 'react-intl';\nimport { NavLink, type To, useLocation, useNavigate, useNavigationType } from 'react-router-dom';\n\nimport { createContext } from '../components/Context';\n\n/* -------------------------------------------------------------------------------------------------\n * HistoryProvider\n * -----------------------------------------------------------------------------------------------*/\ninterface HistoryState {\n /**\n * The history of the user's navigation within our application\n * during their current session.\n */\n history: string[];\n /**\n * The index of the current location in the history array.\n */\n currentLocationIndex: number;\n /**\n * The current location of the user within our application.\n */\n currentLocation: string;\n /**\n * Whether the user can go back in the history.\n */\n canGoBack: boolean;\n}\n\ninterface HistoryContextValue extends HistoryState {\n /**\n * @description Push a new state to the history. You can\n * either pass a string or an object.\n */\n pushState: (\n path:\n | {\n to: string;\n search: string;\n }\n | string\n ) => void;\n /**\n * @description Go back in the history. This calls `navigate(-1)` internally\n * to keep the browser in sync with the application state.\n */\n goBack: () => void;\n}\n\nconst [Provider, useHistory] = createContext<HistoryContextValue>('History', {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n pushState: () => {\n throw new Error('You must use the `HistoryProvider` to access the `pushState` function.');\n },\n goBack: () => {\n throw new Error('You must use the `HistoryProvider` to access the `goBack` function.');\n },\n});\n\ninterface HistoryProviderProps {\n children: React.ReactNode;\n}\n\nconst HistoryProvider = ({ children }: HistoryProviderProps) => {\n const location = useLocation();\n const navigationType = useNavigationType();\n const navigate = useNavigate();\n const [state, dispatch] = React.useReducer(reducer, {\n history: [],\n currentLocationIndex: 0,\n currentLocation: '',\n canGoBack: false,\n });\n\n const isGoingBack = React.useRef(false);\n\n const pushState: HistoryContextValue['pushState'] = React.useCallback((path) => {\n dispatch({\n type: 'PUSH_STATE',\n payload: typeof path === 'string' ? { to: path, search: '' } : path,\n });\n }, []);\n\n const goBack: HistoryContextValue['goBack'] = React.useCallback(() => {\n /**\n * Perform the browser back action, dispatch the goBack action to keep the state in sync\n * and set the ref to avoid an infinite loop and incorrect state pushing\n */\n navigate(-1);\n dispatch({ type: 'GO_BACK' });\n isGoingBack.current = true;\n }, [navigate]);\n\n /**\n * This is a semi-listener pattern to keep the `canGoBack` state in sync.\n */\n const prevIndex = React.useRef(state.currentLocationIndex);\n React.useEffect(() => {\n if (state.currentLocationIndex !== prevIndex.current) {\n dispatch({\n type: 'SET_CAN_GO_BACK',\n payload: state.currentLocationIndex > 1 && state.history.length > 1,\n });\n prevIndex.current = state.currentLocationIndex;\n }\n }, [prevIndex, state.currentLocationIndex, state.history.length]);\n\n /**\n * This effect is responsible for pushing the new state to the history\n * when the user navigates to a new location assuming they're not going back.\n */\n React.useLayoutEffect(() => {\n if (isGoingBack.current) {\n isGoingBack.current = false;\n } else if (navigationType === 'REPLACE') {\n // Prevent appending to the history when the location changes via a replace:true navigation\n dispatch({\n type: 'REPLACE_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n } else {\n // this should only occur on link movements, not back/forward clicks\n dispatch({\n type: 'PUSH_STATE',\n payload: { to: location.pathname, search: location.search },\n });\n }\n }, [dispatch, location.pathname, location.search, navigationType]);\n\n return (\n <Provider pushState={pushState} goBack={goBack} {...state}>\n {children}\n </Provider>\n );\n};\n\ntype HistoryActions =\n | {\n type: 'PUSH_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'REPLACE_STATE';\n payload: {\n to: string;\n search: string;\n };\n }\n | {\n type: 'GO_BACK';\n }\n | {\n type: 'SET_CAN_GO_BACK';\n payload: boolean;\n };\n\nconst reducer = (state: HistoryState, action: HistoryActions) =>\n produce(state, (draft) => {\n switch (action.type) {\n case 'PUSH_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n if (state.currentLocationIndex === state.history.length) {\n // add the new place\n draft.history = [...state.history, path];\n } else {\n // delete all the history after the current place and then add the new place\n draft.history = [...state.history.slice(0, state.currentLocationIndex), path];\n }\n\n draft.currentLocation = path;\n draft.currentLocationIndex += 1;\n\n break;\n }\n case 'REPLACE_STATE': {\n const path = `${action.payload.to}${action.payload.search}`;\n draft.history = [...state.history.slice(0, state.currentLocationIndex - 1), path];\n draft.currentLocation = path;\n break;\n }\n case 'GO_BACK': {\n const newIndex = state.currentLocationIndex - 1;\n\n draft.currentLocation = state.history[newIndex - 1];\n draft.currentLocationIndex = newIndex;\n break;\n }\n case 'SET_CAN_GO_BACK': {\n draft.canGoBack = action.payload;\n break;\n }\n default:\n break;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * BackButton\n * -----------------------------------------------------------------------------------------------*/\ninterface BackButtonProps extends Pick<LinkProps, 'disabled'> {\n fallback?: To;\n}\n\n/**\n * @beta\n * @description The universal back button for the Strapi application. This uses the internal history\n * context to navigate the user back to the previous location. It can be completely disabled in a\n * specific user case. When no history is available, you can provide a fallback destination,\n * otherwise the link will be disabled.\n */\nconst BackButton = React.forwardRef<HTMLAnchorElement, BackButtonProps>(\n ({ disabled, fallback = '' }, ref) => {\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n\n const canGoBack = useHistory('BackButton', (state) => state.canGoBack);\n const goBack = useHistory('BackButton', (state) => state.goBack);\n const history = useHistory('BackButton', (state) => state.history);\n const currentLocationIndex = useHistory('BackButton', (state) => state.currentLocationIndex);\n const hasFallback = fallback !== '';\n const shouldBeDisabled = disabled || (!canGoBack && !hasFallback);\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>) => {\n e.preventDefault();\n\n if (canGoBack) {\n goBack();\n } else if (hasFallback) {\n navigate(fallback);\n }\n };\n\n // The link destination from the history. Undefined if there is only 1 location in the history.\n const historyTo = canGoBack ? history.at(currentLocationIndex - 2) : undefined;\n // If no link destination from the history, use the fallback.\n const toWithFallback = historyTo ?? fallback;\n\n return (\n <Link\n ref={ref}\n tag={NavLink}\n to={toWithFallback}\n onClick={handleClick}\n disabled={shouldBeDisabled}\n aria-disabled={shouldBeDisabled}\n startIcon={<ArrowLeft />}\n >\n {formatMessage({\n id: 'global.back',\n defaultMessage: 'Back',\n })}\n </Link>\n );\n }\n);\n\nexport { BackButton, HistoryProvider, useHistory };\nexport type { BackButtonProps, HistoryProviderProps, HistoryContextValue, HistoryState };\n"],"names":["Provider","useHistory","createContext","history","currentLocationIndex","currentLocation","canGoBack","pushState","Error","goBack","HistoryProvider","children","location","useLocation","navigationType","useNavigationType","navigate","useNavigate","state","dispatch","React","useReducer","reducer","isGoingBack","useRef","useCallback","path","type","payload","to","search","current","prevIndex","useEffect","length","useLayoutEffect","pathname","_jsx","action","produce","draft","slice","newIndex","BackButton","forwardRef","disabled","fallback","ref","formatMessage","useIntl","hasFallback","shouldBeDisabled","handleClick","e","preventDefault","historyTo","at","undefined","toWithFallback","Link","tag","NavLink","onClick","aria-disabled","startIcon","ArrowLeft","id","defaultMessage"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Configuration.js","sources":["../../../../../admin/src/features/Configuration.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useIntl } from 'react-intl';\n\nimport { UpdateProjectSettings } from '../../../shared/contracts/admin';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../hooks/useRBAC';\nimport {\n ConfigurationLogo,\n useInitQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n} from '../services/admin';\n\nimport { useAuth } from './Auth';\nimport { useNotification } from './Notifications';\nimport { useTracking } from './Tracking';\n\nimport type { StrapiApp } from '../StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UpdateProjectSettingsBody {\n authLogo:\n | ((UpdateProjectSettings.Request['body']['authLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n menuLogo:\n | ((UpdateProjectSettings.Request['body']['menuLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n}\n\ninterface ConfigurationContextValue {\n logos: {\n auth: ConfigurationLogo;\n menu: ConfigurationLogo;\n };\n showReleaseNotification: boolean;\n updateProjectSettings: (body: UpdateProjectSettingsBody) => Promise<void>;\n}\n\nconst [ConfigurationContextProvider, useConfiguration] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n defaultAuthLogo: StrapiApp['configurations']['authLogo'];\n defaultMenuLogo: StrapiApp['configurations']['menuLogo'];\n showReleaseNotification?: boolean;\n}\n\nconst ConfigurationProvider = ({\n children,\n defaultAuthLogo,\n defaultMenuLogo,\n showReleaseNotification = false,\n}: ConfigurationProviderProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['project-settings']\n );\n const token = useAuth('ConfigurationProvider', (state) => state.token);\n\n const {\n allowedActions: { canRead },\n } = useRBAC(permissions);\n\n const {\n data: { authLogo: customAuthLogo, menuLogo: customMenuLogo } = {},\n error,\n isLoading,\n } = useInitQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'app.containers.App.notification.error.init' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n const { data, isSuccess } = useProjectSettingsQuery(undefined, {\n skip: !token || !canRead,\n });\n\n const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();\n\n const updateProjectSettings = React.useCallback(\n async (body: UpdateProjectSettingsBody) => {\n const formData = new FormData();\n\n /**\n * We either only send files or we send null values.\n * Null removes the logo. If you don't want to effect\n * an existing logo, don't send anything.\n */\n Object.entries(body).forEach(([key, value]) => {\n if (value?.rawFile) {\n formData.append(key, value.rawFile);\n } else if (value === null) {\n formData.append(key, JSON.stringify(value));\n }\n });\n\n const res = await updateProjectSettingsMutation(formData);\n\n if ('data' in res) {\n const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;\n const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;\n\n if (updatedMenuLogo) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (updatedAuthLogo) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n },\n [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ConfigurationContextProvider\n showReleaseNotification={showReleaseNotification}\n logos={{\n menu: {\n custom: isSuccess\n ? data?.menuLogo\n : {\n url: customMenuLogo ?? '',\n },\n default: defaultMenuLogo,\n },\n auth: {\n custom: isSuccess\n ? data?.authLogo\n : {\n url: customAuthLogo ?? '',\n },\n default: defaultAuthLogo,\n },\n }}\n updateProjectSettings={updateProjectSettings}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport {\n ConfigurationContextProvider as _internalConfigurationContextProvider,\n ConfigurationProvider,\n useConfiguration,\n};\nexport type {\n ConfigurationProviderProps,\n ConfigurationContextValue,\n ConfigurationLogo,\n UpdateProjectSettingsBody,\n};\n"],"names":["ConfigurationContextProvider","useConfiguration","createContext","ConfigurationProvider","children","defaultAuthLogo","defaultMenuLogo","showReleaseNotification","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","permissions","useTypedSelector","state","admin_app","settings","token","useAuth","allowedActions","canRead","useRBAC","data","authLogo","customAuthLogo","menuLogo","customMenuLogo","error","isLoading","useInitQuery","React","useEffect","type","message","id","isSuccess","useProjectSettingsQuery","undefined","skip","updateProjectSettingsMutation","useUpdateProjectSettingsMutation","updateProjectSettings","useCallback","body","formData","FormData","Object","entries","forEach","key","value","rawFile","append","JSON","stringify","res","updatedMenuLogo","updatedAuthLogo","logo","defaultMessage","_jsx","Page","Loading","logos","menu","custom","url","default","auth"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,MAAM,CAACA,4BAAAA,EAA8BC,gBAAiB,CAAA,GACpDC,0BAAyC,CAAA,sBAAA;AAarCC,MAAAA,qBAAAA,GAAwB,CAAC,EAC7BC,QAAQ,EACRC,eAAe,EACfC,eAAe,EACfC,uBAA0B,GAAA,KAAK,EACJ,GAAA;IAC3B,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;IACvB,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,qCAAAA,EAAAA;AACpD,IAAA,MAAMC,WAAcC,GAAAA,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,kBAAmB,CAAA,CAAA;AAEvE,IAAA,MAAMC,QAAQC,YAAQ,CAAA,uBAAA,EAAyB,CAACJ,KAAAA,GAAUA,MAAMG,KAAK,CAAA;AAErE,IAAA,MAAM,EACJE,cAAgB,EAAA,EAAEC,OAAO,EAAE,EAC5B,GAAGC,eAAQT,CAAAA,WAAAA,CAAAA;AAEZ,IAAA,MAAM,EACJU,IAAM,EAAA,EAAEC,QAAUC,EAAAA,cAAc,EAAEC,QAAUC,EAAAA,cAAc,EAAE,GAAG,EAAE,EACjEC,KAAK,EACLC,SAAS,EACV,GAAGC,kBAAAA,EAAAA;AAEJC,IAAAA,gBAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIJ,KAAO,EAAA;YACTpB,kBAAmB,CAAA;gBACjByB,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAS5B,aAAc,CAAA;oBAAE6B,EAAI,EAAA;AAA6C,iBAAA;AAC5E,aAAA,CAAA;AACF;KACC,EAAA;AAACP,QAAAA,KAAAA;AAAOtB,QAAAA,aAAAA;AAAeE,QAAAA;AAAmB,KAAA,CAAA;AAE7C,IAAA,MAAM,EAAEe,IAAI,EAAEa,SAAS,EAAE,GAAGC,8BAAwBC,SAAW,EAAA;QAC7DC,IAAM,EAAA,CAACrB,SAAS,CAACG;AACnB,KAAA,CAAA;IAEA,MAAM,CAACmB,8BAA8B,GAAGC,sCAAAA,EAAAA;AAExC,IAAA,MAAMC,qBAAwBX,GAAAA,gBAAAA,CAAMY,WAAW,CAC7C,OAAOC,IAAAA,GAAAA;AACL,QAAA,MAAMC,WAAW,IAAIC,QAAAA,EAAAA;AAErB;;;;UAKAC,MAAAA,CAAOC,OAAO,CAACJ,IAAAA,CAAAA,CAAMK,OAAO,CAAC,CAAC,CAACC,GAAAA,EAAKC,KAAM,CAAA,GAAA;AACxC,YAAA,IAAIA,OAAOC,OAAS,EAAA;AAClBP,gBAAAA,QAAAA,CAASQ,MAAM,CAACH,GAAKC,EAAAA,KAAAA,CAAMC,OAAO,CAAA;aAC7B,MAAA,IAAID,UAAU,IAAM,EAAA;AACzBN,gBAAAA,QAAAA,CAASQ,MAAM,CAACH,GAAKI,EAAAA,IAAAA,CAAKC,SAAS,CAACJ,KAAAA,CAAAA,CAAAA;AACtC;AACF,SAAA,CAAA;QAEA,MAAMK,GAAAA,GAAM,MAAMhB,6BAA8BK,CAAAA,QAAAA,CAAAA;AAEhD,QAAA,IAAI,UAAUW,GAAK,EAAA;AACjB,YAAA,MAAMC,eAAkB,GAAA,CAAC,CAACD,GAAAA,CAAIjC,IAAI,CAACG,QAAQ,IAAI,CAAC,CAACkB,IAAKlB,CAAAA,QAAQ,EAAE0B,OAAAA;AAChE,YAAA,MAAMM,eAAkB,GAAA,CAAC,CAACF,GAAAA,CAAIjC,IAAI,CAACC,QAAQ,IAAI,CAAC,CAACoB,IAAKpB,CAAAA,QAAQ,EAAE4B,OAAAA;AAEhE,YAAA,IAAIK,eAAiB,EAAA;AACnBrD,gBAAAA,UAAAA,CAAW,eAAiB,EAAA;oBAC1BuD,IAAM,EAAA;AACR,iBAAA,CAAA;AACF;AAEA,YAAA,IAAID,eAAiB,EAAA;AACnBtD,gBAAAA,UAAAA,CAAW,eAAiB,EAAA;oBAC1BuD,IAAM,EAAA;AACR,iBAAA,CAAA;AACF;YAEAnD,kBAAmB,CAAA;gBACjByB,IAAM,EAAA,SAAA;AACNC,gBAAAA,OAAAA,EAAS5B,aAAc,CAAA;oBAAE6B,EAAI,EAAA,KAAA;oBAAOyB,cAAgB,EAAA;AAAQ,iBAAA;AAC9D,aAAA,CAAA;SACK,MAAA;YACLpD,kBAAmB,CAAA;gBACjByB,IAAM,EAAA,QAAA;gBACNC,OAASvB,EAAAA,cAAAA,CAAe6C,IAAI5B,KAAK;AACnC,aAAA,CAAA;AACF;KAEF,EAAA;AAACjB,QAAAA,cAAAA;AAAgBL,QAAAA,aAAAA;AAAeE,QAAAA,kBAAAA;AAAoBJ,QAAAA,UAAAA;AAAYoC,QAAAA;AAA8B,KAAA,CAAA;AAGhG,IAAA,IAAIX,SAAW,EAAA;QACb,qBAAOgC,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;AAEA,IAAA,qBACEF,cAACjE,CAAAA,4BAAAA,EAAAA;QACCO,uBAAyBA,EAAAA,uBAAAA;QACzB6D,KAAO,EAAA;YACLC,IAAM,EAAA;gBACJC,MAAQ9B,EAAAA,SAAAA,GACJb,MAAMG,QACN,GAAA;AACEyC,oBAAAA,GAAAA,EAAKxC,cAAkB,IAAA;AACzB,iBAAA;gBACJyC,OAASlE,EAAAA;AACX,aAAA;YACAmE,IAAM,EAAA;gBACJH,MAAQ9B,EAAAA,SAAAA,GACJb,MAAMC,QACN,GAAA;AACE2C,oBAAAA,GAAAA,EAAK1C,cAAkB,IAAA;AACzB,iBAAA;gBACJ2C,OAASnE,EAAAA;AACX;AACF,SAAA;QACAyC,qBAAuBA,EAAAA,qBAAAA;AAEtB1C,QAAAA,QAAAA,EAAAA;;AAGP;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Configuration.js","sources":["../../../../../admin/src/features/Configuration.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useIntl } from 'react-intl';\n\nimport { UpdateProjectSettings } from '../../../shared/contracts/admin';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../hooks/useRBAC';\nimport {\n ConfigurationLogo,\n useInitQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n} from '../services/admin';\n\nimport { useAuth } from './Auth';\nimport { useNotification } from './Notifications';\nimport { useTracking } from './Tracking';\n\nimport type { StrapiApp } from '../StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UpdateProjectSettingsBody {\n authLogo:\n | ((UpdateProjectSettings.Request['body']['authLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n menuLogo:\n | ((UpdateProjectSettings.Request['body']['menuLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n}\n\ninterface ConfigurationContextValue {\n logos: {\n auth: ConfigurationLogo;\n menu: ConfigurationLogo;\n };\n showReleaseNotification: boolean;\n updateProjectSettings: (body: UpdateProjectSettingsBody) => Promise<void>;\n}\n\nconst [ConfigurationContextProvider, useConfiguration] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n defaultAuthLogo: StrapiApp['configurations']['authLogo'];\n defaultMenuLogo: StrapiApp['configurations']['menuLogo'];\n showReleaseNotification?: boolean;\n}\n\nconst ConfigurationProvider = ({\n children,\n defaultAuthLogo,\n defaultMenuLogo,\n showReleaseNotification = false,\n}: ConfigurationProviderProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['project-settings']\n );\n const token = useAuth('ConfigurationProvider', (state) => state.token);\n\n const {\n allowedActions: { canRead },\n } = useRBAC(permissions);\n\n const {\n data: { authLogo: customAuthLogo, menuLogo: customMenuLogo } = {},\n error,\n isLoading,\n } = useInitQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'app.containers.App.notification.error.init' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n const { data, isSuccess } = useProjectSettingsQuery(undefined, {\n skip: !token || !canRead,\n });\n\n const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();\n\n const updateProjectSettings = React.useCallback(\n async (body: UpdateProjectSettingsBody) => {\n const formData = new FormData();\n\n /**\n * We either only send files or we send null values.\n * Null removes the logo. If you don't want to effect\n * an existing logo, don't send anything.\n */\n Object.entries(body).forEach(([key, value]) => {\n if (value?.rawFile) {\n formData.append(key, value.rawFile);\n } else if (value === null) {\n formData.append(key, JSON.stringify(value));\n }\n });\n\n const res = await updateProjectSettingsMutation(formData);\n\n if ('data' in res) {\n const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;\n const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;\n\n if (updatedMenuLogo) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (updatedAuthLogo) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n },\n [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ConfigurationContextProvider\n showReleaseNotification={showReleaseNotification}\n logos={{\n menu: {\n custom: isSuccess\n ? data?.menuLogo\n : {\n url: customMenuLogo ?? '',\n },\n default: defaultMenuLogo,\n },\n auth: {\n custom: isSuccess\n ? data?.authLogo\n : {\n url: customAuthLogo ?? '',\n },\n default: defaultAuthLogo,\n },\n }}\n updateProjectSettings={updateProjectSettings}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport {\n ConfigurationContextProvider as _internalConfigurationContextProvider,\n ConfigurationProvider,\n useConfiguration,\n};\nexport type {\n ConfigurationProviderProps,\n ConfigurationContextValue,\n ConfigurationLogo,\n UpdateProjectSettingsBody,\n};\n"],"names":["ConfigurationContextProvider","useConfiguration","createContext","ConfigurationProvider","children","defaultAuthLogo","defaultMenuLogo","showReleaseNotification","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","permissions","useTypedSelector","state","admin_app","settings","token","useAuth","allowedActions","canRead","useRBAC","data","authLogo","customAuthLogo","menuLogo","customMenuLogo","error","isLoading","useInitQuery","React","useEffect","type","message","id","isSuccess","useProjectSettingsQuery","undefined","skip","updateProjectSettingsMutation","useUpdateProjectSettingsMutation","updateProjectSettings","useCallback","body","formData","FormData","Object","entries","forEach","key","value","rawFile","append","JSON","stringify","res","updatedMenuLogo","updatedAuthLogo","logo","defaultMessage","_jsx","Page","Loading","logos","menu","custom","url","default","auth"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Configuration.mjs","sources":["../../../../../admin/src/features/Configuration.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useIntl } from 'react-intl';\n\nimport { UpdateProjectSettings } from '../../../shared/contracts/admin';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../hooks/useRBAC';\nimport {\n ConfigurationLogo,\n useInitQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n} from '../services/admin';\n\nimport { useAuth } from './Auth';\nimport { useNotification } from './Notifications';\nimport { useTracking } from './Tracking';\n\nimport type { StrapiApp } from '../StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UpdateProjectSettingsBody {\n authLogo:\n | ((UpdateProjectSettings.Request['body']['authLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n menuLogo:\n | ((UpdateProjectSettings.Request['body']['menuLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n}\n\ninterface ConfigurationContextValue {\n logos: {\n auth: ConfigurationLogo;\n menu: ConfigurationLogo;\n };\n showReleaseNotification: boolean;\n updateProjectSettings: (body: UpdateProjectSettingsBody) => Promise<void>;\n}\n\nconst [ConfigurationContextProvider, useConfiguration] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n defaultAuthLogo: StrapiApp['configurations']['authLogo'];\n defaultMenuLogo: StrapiApp['configurations']['menuLogo'];\n showReleaseNotification?: boolean;\n}\n\nconst ConfigurationProvider = ({\n children,\n defaultAuthLogo,\n defaultMenuLogo,\n showReleaseNotification = false,\n}: ConfigurationProviderProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['project-settings']\n );\n const token = useAuth('ConfigurationProvider', (state) => state.token);\n\n const {\n allowedActions: { canRead },\n } = useRBAC(permissions);\n\n const {\n data: { authLogo: customAuthLogo, menuLogo: customMenuLogo } = {},\n error,\n isLoading,\n } = useInitQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'app.containers.App.notification.error.init' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n const { data, isSuccess } = useProjectSettingsQuery(undefined, {\n skip: !token || !canRead,\n });\n\n const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();\n\n const updateProjectSettings = React.useCallback(\n async (body: UpdateProjectSettingsBody) => {\n const formData = new FormData();\n\n /**\n * We either only send files or we send null values.\n * Null removes the logo. If you don't want to effect\n * an existing logo, don't send anything.\n */\n Object.entries(body).forEach(([key, value]) => {\n if (value?.rawFile) {\n formData.append(key, value.rawFile);\n } else if (value === null) {\n formData.append(key, JSON.stringify(value));\n }\n });\n\n const res = await updateProjectSettingsMutation(formData);\n\n if ('data' in res) {\n const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;\n const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;\n\n if (updatedMenuLogo) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (updatedAuthLogo) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n },\n [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ConfigurationContextProvider\n showReleaseNotification={showReleaseNotification}\n logos={{\n menu: {\n custom: isSuccess\n ? data?.menuLogo\n : {\n url: customMenuLogo ?? '',\n },\n default: defaultMenuLogo,\n },\n auth: {\n custom: isSuccess\n ? data?.authLogo\n : {\n url: customAuthLogo ?? '',\n },\n default: defaultAuthLogo,\n },\n }}\n updateProjectSettings={updateProjectSettings}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport {\n ConfigurationContextProvider as _internalConfigurationContextProvider,\n ConfigurationProvider,\n useConfiguration,\n};\nexport type {\n ConfigurationProviderProps,\n ConfigurationContextValue,\n ConfigurationLogo,\n UpdateProjectSettingsBody,\n};\n"],"names":["ConfigurationContextProvider","useConfiguration","createContext","ConfigurationProvider","children","defaultAuthLogo","defaultMenuLogo","showReleaseNotification","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","permissions","useTypedSelector","state","admin_app","settings","token","useAuth","allowedActions","canRead","useRBAC","data","authLogo","customAuthLogo","menuLogo","customMenuLogo","error","isLoading","useInitQuery","React","useEffect","type","message","id","isSuccess","useProjectSettingsQuery","undefined","skip","updateProjectSettingsMutation","useUpdateProjectSettingsMutation","updateProjectSettings","useCallback","body","formData","FormData","Object","entries","forEach","key","value","rawFile","append","JSON","stringify","res","updatedMenuLogo","updatedAuthLogo","logo","defaultMessage","_jsx","Page","Loading","logos","menu","custom","url","default","auth"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Configuration.mjs","sources":["../../../../../admin/src/features/Configuration.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { createContext } from '@radix-ui/react-context';\nimport { useIntl } from 'react-intl';\n\nimport { UpdateProjectSettings } from '../../../shared/contracts/admin';\nimport { Page } from '../components/PageHelpers';\nimport { useTypedSelector } from '../core/store/hooks';\nimport { useAPIErrorHandler } from '../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../hooks/useRBAC';\nimport {\n ConfigurationLogo,\n useInitQuery,\n useProjectSettingsQuery,\n useUpdateProjectSettingsMutation,\n} from '../services/admin';\n\nimport { useAuth } from './Auth';\nimport { useNotification } from './Notifications';\nimport { useTracking } from './Tracking';\n\nimport type { StrapiApp } from '../StrapiApp';\n\n/* -------------------------------------------------------------------------------------------------\n * Configuration Context\n * -----------------------------------------------------------------------------------------------*/\n\ninterface UpdateProjectSettingsBody {\n authLogo:\n | ((UpdateProjectSettings.Request['body']['authLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n menuLogo:\n | ((UpdateProjectSettings.Request['body']['menuLogo'] | ConfigurationLogo['custom']) & {\n rawFile?: File;\n })\n | null;\n}\n\ninterface ConfigurationContextValue {\n logos: {\n auth: ConfigurationLogo;\n menu: ConfigurationLogo;\n };\n showReleaseNotification: boolean;\n updateProjectSettings: (body: UpdateProjectSettingsBody) => Promise<void>;\n}\n\nconst [ConfigurationContextProvider, useConfiguration] =\n createContext<ConfigurationContextValue>('ConfigurationContext');\n\n/* -------------------------------------------------------------------------------------------------\n * ConfigurationProvider\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ConfigurationProviderProps {\n children: React.ReactNode;\n defaultAuthLogo: StrapiApp['configurations']['authLogo'];\n defaultMenuLogo: StrapiApp['configurations']['menuLogo'];\n showReleaseNotification?: boolean;\n}\n\nconst ConfigurationProvider = ({\n children,\n defaultAuthLogo,\n defaultMenuLogo,\n showReleaseNotification = false,\n}: ConfigurationProviderProps) => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['project-settings']\n );\n const token = useAuth('ConfigurationProvider', (state) => state.token);\n\n const {\n allowedActions: { canRead },\n } = useRBAC(permissions);\n\n const {\n data: { authLogo: customAuthLogo, menuLogo: customMenuLogo } = {},\n error,\n isLoading,\n } = useInitQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'app.containers.App.notification.error.init' }),\n });\n }\n }, [error, formatMessage, toggleNotification]);\n\n const { data, isSuccess } = useProjectSettingsQuery(undefined, {\n skip: !token || !canRead,\n });\n\n const [updateProjectSettingsMutation] = useUpdateProjectSettingsMutation();\n\n const updateProjectSettings = React.useCallback(\n async (body: UpdateProjectSettingsBody) => {\n const formData = new FormData();\n\n /**\n * We either only send files or we send null values.\n * Null removes the logo. If you don't want to effect\n * an existing logo, don't send anything.\n */\n Object.entries(body).forEach(([key, value]) => {\n if (value?.rawFile) {\n formData.append(key, value.rawFile);\n } else if (value === null) {\n formData.append(key, JSON.stringify(value));\n }\n });\n\n const res = await updateProjectSettingsMutation(formData);\n\n if ('data' in res) {\n const updatedMenuLogo = !!res.data.menuLogo && !!body.menuLogo?.rawFile;\n const updatedAuthLogo = !!res.data.authLogo && !!body.authLogo?.rawFile;\n\n if (updatedMenuLogo) {\n trackUsage('didChangeLogo', {\n logo: 'menu',\n });\n }\n\n if (updatedAuthLogo) {\n trackUsage('didChangeLogo', {\n logo: 'auth',\n });\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'app', defaultMessage: 'Saved' }),\n });\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n },\n [formatAPIError, formatMessage, toggleNotification, trackUsage, updateProjectSettingsMutation]\n );\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ConfigurationContextProvider\n showReleaseNotification={showReleaseNotification}\n logos={{\n menu: {\n custom: isSuccess\n ? data?.menuLogo\n : {\n url: customMenuLogo ?? '',\n },\n default: defaultMenuLogo,\n },\n auth: {\n custom: isSuccess\n ? data?.authLogo\n : {\n url: customAuthLogo ?? '',\n },\n default: defaultAuthLogo,\n },\n }}\n updateProjectSettings={updateProjectSettings}\n >\n {children}\n </ConfigurationContextProvider>\n );\n};\n\nexport {\n ConfigurationContextProvider as _internalConfigurationContextProvider,\n ConfigurationProvider,\n useConfiguration,\n};\nexport type {\n ConfigurationProviderProps,\n ConfigurationContextValue,\n ConfigurationLogo,\n UpdateProjectSettingsBody,\n};\n"],"names":["ConfigurationContextProvider","useConfiguration","createContext","ConfigurationProvider","children","defaultAuthLogo","defaultMenuLogo","showReleaseNotification","trackUsage","useTracking","formatMessage","useIntl","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","permissions","useTypedSelector","state","admin_app","settings","token","useAuth","allowedActions","canRead","useRBAC","data","authLogo","customAuthLogo","menuLogo","customMenuLogo","error","isLoading","useInitQuery","React","useEffect","type","message","id","isSuccess","useProjectSettingsQuery","undefined","skip","updateProjectSettingsMutation","useUpdateProjectSettingsMutation","updateProjectSettings","useCallback","body","formData","FormData","Object","entries","forEach","key","value","rawFile","append","JSON","stringify","res","updatedMenuLogo","updatedAuthLogo","logo","defaultMessage","_jsx","Page","Loading","logos","menu","custom","url","default","auth"],"mappings":"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"}
|