@strapi/admin 5.29.0 → 5.30.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/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.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/DescriptionComponentRenderer.js.map +1 -1
- package/dist/admin/admin/src/components/DescriptionComponentRenderer.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +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 +8 -3
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +8 -3
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Number.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 +2 -1
- package/dist/admin/admin/src/components/FormInputs/String.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/String.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/String.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/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.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.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 +8 -4
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.js.map +1 -1
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs +8 -4
- package/dist/admin/admin/src/components/Layouts/HeaderLayout.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +5 -3
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +5 -3
- 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.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/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/Table.js +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 +34 -1
- package/dist/admin/admin/src/components/Theme.js.map +1 -1
- package/dist/admin/admin/src/components/Theme.mjs +34 -1
- package/dist/admin/admin/src/components/Theme.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.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 +0 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs +0 -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/features/BackButton.js.map +1 -1
- package/dist/admin/admin/src/features/BackButton.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.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/useRBAC.js.map +1 -1
- package/dist/admin/admin/src/hooks/useRBAC.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.js +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 +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Login.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/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js +2 -2
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs +2 -2
- package/dist/admin/admin/src/pages/Marketplace/MarketplacePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/NpmPackagesFilters.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/components/PageHeader.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.js.map +1 -1
- package/dist/admin/admin/src/pages/Marketplace/hooks/useMarketplaceData.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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +8 -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 +9 -2
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.js +1 -0
- 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 +1 -0
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenName.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/components/CollapsableContentType.js.map +1 -1
- 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/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 +2 -0
- 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 +2 -0
- 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.map +1 -1
- 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 +1 -0
- 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 +1 -0
- 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/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/Roles/CreatePage.js +10 -2
- 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 +10 -2
- 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 +9 -2
- 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 +9 -2
- 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.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.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.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/Permissions.js.map +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/RoleForm.js +2 -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 +2 -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/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/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/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 +2 -0
- 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 +2 -0
- 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 +9 -2
- 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 +9 -2
- 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 +3 -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 +3 -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/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/SelectRoles.js.map +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/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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +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/WebhookForm.js +9 -2
- 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 +9 -2
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +1 -0
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -0
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js +2 -1
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs +2 -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/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/en.json.js +4 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +4 -0
- package/dist/admin/admin/src/translations/en.json.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/getFetchClient.js.map +1 -1
- 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/rulesEngine.js.map +1 -1
- package/dist/admin/admin/src/utils/rulesEngine.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/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/hooks/useLicenseLimitNotification.js.map +1 -1
- package/dist/admin/ee/admin/src/hooks/useLicenseLimitNotification.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.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/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js.map +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/AuditLogs/ListPage.js +3 -3
- 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 +3 -3
- 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/Modal.js.map +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/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/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/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/services/ai.js +14 -1
- package/dist/admin/ee/admin/src/services/ai.js.map +1 -1
- package/dist/admin/ee/admin/src/services/ai.mjs +14 -2
- 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/ee.js +1 -0
- package/dist/admin/ee.js.map +1 -1
- package/dist/admin/ee.mjs +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +2 -2
- package/dist/admin/src/ee.d.ts +1 -1
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -2
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +13 -13
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +3 -3
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/tests/utils.d.ts +1 -1
- package/dist/ee/admin/src/services/ai.d.ts +6 -3
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/ai/containers/ai.d.ts +11 -0
- package/dist/ee/server/src/ai/containers/ai.d.ts.map +1 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts +1 -0
- package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -1
- package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/ai/containers/ai.js +18 -0
- package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -0
- package/dist/server/ee/server/src/ai/containers/ai.mjs +16 -0
- package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js +6 -0
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +6 -0
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.js +11 -0
- package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.mjs +11 -0
- package/dist/server/ee/server/src/ai/routes/ai.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/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/utils.js.map +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.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- 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 +7 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +7 -0
- package/dist/server/ee/server/src/index.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/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/utils/index.js.map +1 -1
- package/dist/server/ee/server/src/utils/index.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/user.js +10 -0
- package/dist/server/server/src/controllers/user.js.map +1 -1
- package/dist/server/server/src/controllers/user.mjs +10 -0
- package/dist/server/server/src/controllers/user.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/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.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.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/routes/serve-admin-panel.js.map +1 -1
- package/dist/server/server/src/routes/serve-admin-panel.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/content-type.js.map +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.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.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.map +1 -1
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.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.map +1 -1
- package/dist/server/server/src/services/user.js +30 -0
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +30 -0
- package/dist/server/server/src/services/user.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/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-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/src/controllers/user.d.ts.map +1 -1
- package/dist/server/src/services/user.d.ts.map +1 -1
- package/dist/shared/contracts/ai.d.ts +16 -0
- package/dist/shared/contracts/ai.d.ts.map +1 -1
- package/package.json +7 -7
|
@@ -406,6 +406,10 @@ attributes)=>{
|
|
|
406
406
|
});
|
|
407
407
|
return users.map((user)=>user.preferedLanguage || 'en');
|
|
408
408
|
};
|
|
409
|
+
/**
|
|
410
|
+
* In-memory cache for AI tokens
|
|
411
|
+
* Key format: `${projectId}:${userId}`
|
|
412
|
+
*/ const aiTokenCache = new Map();
|
|
409
413
|
/**
|
|
410
414
|
* Generate an AI token for the user performing the request
|
|
411
415
|
*/ const getAiToken = async ()=>{
|
|
@@ -448,6 +452,23 @@ attributes)=>{
|
|
|
448
452
|
strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);
|
|
449
453
|
throw new Error('AI token request failed. Check server logs for details.');
|
|
450
454
|
}
|
|
455
|
+
// Check cache for existing valid token
|
|
456
|
+
const cacheKey = `${projectId}:${userIdentifier}`;
|
|
457
|
+
const cachedToken = aiTokenCache.get(cacheKey);
|
|
458
|
+
if (cachedToken) {
|
|
459
|
+
const now = Date.now();
|
|
460
|
+
// Check if token is still valid (with buffer so it has time to to be used)
|
|
461
|
+
const bufferMs = 2 * 60 * 1000; // 2 minutes
|
|
462
|
+
if (cachedToken.expiresAtMs && cachedToken.expiresAtMs - bufferMs > now) {
|
|
463
|
+
strapi.log.info('Using cached AI token');
|
|
464
|
+
return {
|
|
465
|
+
token: cachedToken.token,
|
|
466
|
+
expiresAt: cachedToken.expiresAt
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
// Token expired or will expire soon, remove from cache
|
|
470
|
+
aiTokenCache.delete(cacheKey);
|
|
471
|
+
}
|
|
451
472
|
strapi.log.http('Contacting AI Server for token generation');
|
|
452
473
|
try {
|
|
453
474
|
// Call the AI server's getAiJWT endpoint
|
|
@@ -500,6 +521,15 @@ attributes)=>{
|
|
|
500
521
|
userId: user.id,
|
|
501
522
|
expiresAt: data.expiresAt
|
|
502
523
|
});
|
|
524
|
+
// Cache the token if it has an expiration time
|
|
525
|
+
if (data.expiresAt) {
|
|
526
|
+
const expiresAtMs = new Date(data.expiresAt).getTime();
|
|
527
|
+
aiTokenCache.set(cacheKey, {
|
|
528
|
+
token: data.jwt,
|
|
529
|
+
expiresAt: data.expiresAt,
|
|
530
|
+
expiresAtMs
|
|
531
|
+
});
|
|
532
|
+
}
|
|
503
533
|
// Return the AI JWT with metadata
|
|
504
534
|
// Note: Token expires in 1 hour, client should handle refresh
|
|
505
535
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.mjs","sources":["../../../../../server/src/services/user.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport _ from 'lodash';\nimport { defaults } from 'lodash/fp';\nimport { arrays, errors } from '@strapi/utils';\nimport type { Data } from '@strapi/types';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\nimport { createUser, hasSuperAdminRole } from '../domain/user';\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n SanitizedAdminUser,\n SanitizedAdminRole,\n AdminUserUpdatePayload,\n // eslint-disable-next-line node/no-unpublished-import\n} from '../../../shared/contracts/shared';\nimport { password as passwordValidator } from '../validation/common-validators';\nimport { getService } from '../utils';\nimport constants from './constants';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\nconst { ValidationError } = errors;\nconst sanitizeUserRoles = (role: AdminRole): SanitizedAdminRole =>\n _.pick(role, ['id', 'name', 'description', 'code']);\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\n/**\n * Remove private user fields\n * @param user - user to sanitize\n */\nconst sanitizeUser = (user: AdminUser): SanitizedAdminUser => {\n return {\n ..._.omit(user, ['password', 'resetPasswordToken', 'registrationToken', 'roles']),\n roles: user.roles && user.roles.map(sanitizeUserRoles),\n };\n};\n\n/**\n * Create and save a user in database\n * @param attributes A partial user object\n */\nconst create = async (\n // isActive is added in the controller, it's not sent by the API.\n attributes: Partial<AdminUserCreationPayload> & { isActive?: true }\n): Promise<AdminUser> => {\n const userInfo = {\n registrationToken: getService('token').createToken(),\n ...attributes,\n };\n\n if (_.has(attributes, 'password')) {\n userInfo.password = await getService('auth').hashPassword(attributes.password!);\n }\n\n const user = createUser(userInfo);\n\n const createdUser = await strapi.db\n .query('admin::user')\n .create({ data: user, populate: ['roles'] });\n\n getService('metrics').sendDidInviteUser();\n\n strapi.eventHub.emit('user.create', { user: sanitizeUser(createdUser) });\n\n return createdUser;\n};\n\n/**\n * Update a user in database\n * @param id query params to find the user to update\n * @param attributes A partial user object\n */\nconst updateById = async (\n id: Data.ID,\n attributes: Partial<AdminUserUpdatePayload>\n): Promise<AdminUser> => {\n // Check at least one super admin remains\n if (_.has(attributes, 'roles')) {\n const lastAdminUser = await isLastSuperAdminUser(id);\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n const willRemoveSuperAdminRole = !arrays.includesString(attributes.roles!, superAdminRole.id);\n\n if (lastAdminUser && willRemoveSuperAdminRole) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n }\n\n // cannot disable last super admin\n if (attributes.isActive === false) {\n const lastAdminUser = await isLastSuperAdminUser(id);\n if (lastAdminUser) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n }\n\n // hash password if a new one is sent\n if (_.has(attributes, 'password')) {\n const hashedPassword = await getService('auth').hashPassword(attributes.password!);\n\n const updatedUser = await strapi.db.query('admin::user').update({\n where: { id },\n data: {\n ...attributes,\n password: hashedPassword,\n },\n populate: ['roles'],\n });\n\n strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });\n\n return updatedUser;\n }\n\n const updatedUser = await strapi.db.query('admin::user').update({\n where: { id },\n data: attributes,\n populate: ['roles'],\n });\n\n if (updatedUser) {\n strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });\n }\n\n return updatedUser;\n};\n\n/**\n * Reset a user password by email. (Used in admin:reset CLI)\n * @param email - user email\n * @param password - new password\n */\nconst resetPasswordByEmail = async (email: string, password: string) => {\n const user = await strapi.db\n .query('admin::user')\n .findOne({ where: { email }, populate: ['roles'] });\n\n if (!user) {\n throw new Error(`User not found for email: ${email}`);\n }\n\n try {\n await passwordValidator.validate(password);\n } catch (error) {\n throw new ValidationError(\n 'Invalid password. Expected a minimum of 8 characters with at least one number and one uppercase letter'\n );\n }\n\n await updateById(user.id, { password });\n};\n\n/**\n * Check if a user is the last super admin\n * @param userId user's id to look for\n */\nconst isLastSuperAdminUser = async (userId: Data.ID): Promise<boolean> => {\n const user = (await findOne(userId)) as AdminUser | null;\n if (!user) return false;\n\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n\n return superAdminRole.usersCount === 1 && hasSuperAdminRole(user);\n};\n\n/**\n * Check if a user is the first super admin\n * @param userId user's id to look for\n */\nconst isFirstSuperAdminUser = async (userId: Data.ID): Promise<boolean> => {\n const currentUser = (await findOne(userId)) as AdminUser | null;\n\n if (!currentUser || !hasSuperAdminRole(currentUser)) return false;\n\n const [oldestUser] = await strapi.db.query('admin::user').findMany({\n populate: {\n roles: {\n where: {\n code: { $eq: SUPER_ADMIN_CODE },\n },\n },\n },\n orderBy: { createdAt: 'asc' },\n limit: 1,\n select: ['id'],\n });\n\n return oldestUser.id === currentUser.id;\n};\n\n/**\n * Check if a user with specific attributes exists in the database\n * @param attributes A partial user object\n */\nconst exists = async (attributes = {} as unknown): Promise<boolean> => {\n return (await strapi.db.query('admin::user').count({ where: attributes })) > 0;\n};\n\n/**\n * Returns a user registration info\n * @param registrationToken - a user registration token\n * @returns - Returns user email, firstname and lastname\n */\nconst findRegistrationInfo = async (\n registrationToken: string\n): Promise<Pick<AdminUser, 'email' | 'firstname' | 'lastname'> | undefined> => {\n const user = await strapi.db.query('admin::user').findOne({ where: { registrationToken } });\n\n if (!user) {\n return undefined;\n }\n\n return _.pick(user, ['email', 'firstname', 'lastname']);\n};\n\n/**\n * Registers a user based on a registrationToken and some informations to update\n * @param params\n * @param params.registrationToken registration token\n * @param params.userInfo user info\n */\nconst register = async ({\n registrationToken,\n userInfo,\n}: {\n registrationToken: string;\n userInfo: Partial<AdminUser>;\n}) => {\n const matchingUser = await strapi.db\n .query('admin::user')\n .findOne({ where: { registrationToken } });\n\n if (!matchingUser) {\n throw new ValidationError('Invalid registration info');\n }\n\n return getService('user').updateById(matchingUser.id, {\n password: userInfo.password,\n firstname: userInfo.firstname,\n lastname: userInfo.lastname,\n registrationToken: null,\n isActive: true,\n });\n};\n\n/**\n * Find one user\n */\nconst findOne = async (id: Data.ID, populate = ['roles']) => {\n return strapi.db.query('admin::user').findOne({ where: { id }, populate });\n};\n\n/**\n * Find one user by its email\n * @param email\n * @param populate\n * @returns\n */\nconst findOneByEmail = async (email: string, populate = []) => {\n return strapi.db.query('admin::user').findOne({\n where: { email: { $eqi: email } },\n populate,\n });\n};\n\n/** Find many users (paginated)\n * @param params\n */\nconst findPage = async (params = {}): Promise<unknown> => {\n const query = strapi\n .get('query-params')\n .transform('admin::user', defaults({ populate: ['roles'] }, params));\n\n return strapi.db.query('admin::user').findPage(query);\n};\n\n/** Delete a user\n * @param id id of the user to delete\n */\nconst deleteById = async (id: Data.ID): Promise<AdminUser | null> => {\n // Check at least one super admin remains\n const userToDelete: AdminUser | null = await strapi.db.query('admin::user').findOne({\n where: { id },\n populate: ['roles'],\n });\n\n if (!userToDelete) {\n return null;\n }\n\n if (userToDelete) {\n if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE)) {\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n if (superAdminRole.usersCount === 1) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n }\n }\n\n const deletedUser = await strapi.db\n .query('admin::user')\n .delete({ where: { id }, populate: ['roles'] });\n\n // Invalidate all sessions for the deleted user\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('admin')) {\n await sessionManager('admin').invalidateRefreshToken(String(id));\n }\n\n strapi.eventHub.emit('user.delete', { user: sanitizeUser(deletedUser) });\n\n return deletedUser;\n};\n\n/** Delete a user\n * @param ids ids of the users to delete\n */\nconst deleteByIds = async (ids: (string | number)[]): Promise<AdminUser[]> => {\n // Check at least one super admin remains\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n const nbOfSuperAdminToDelete = await strapi.db.query('admin::user').count({\n where: {\n id: ids,\n roles: { id: superAdminRole.id },\n },\n });\n\n if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n\n const deletedUsers = [] as AdminUser[];\n for (const id of ids) {\n const deletedUser = await strapi.db.query('admin::user').delete({\n where: { id },\n populate: ['roles'],\n });\n\n // Invalidate all sessions for the deleted user\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('admin')) {\n await sessionManager('admin').invalidateRefreshToken(String(id));\n }\n\n deletedUsers.push(deletedUser);\n }\n\n strapi.eventHub.emit('user.delete', {\n users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser)),\n });\n\n return deletedUsers;\n};\n\n/** Count the users that don't have any associated roles\n */\nconst countUsersWithoutRole = async (): Promise<number> => {\n return strapi.db.query('admin::user').count({\n where: {\n roles: {\n id: { $null: true },\n },\n },\n });\n};\n\n/**\n * Count the number of users based on search params\n * @param params params used for the query\n */\nconst count = async (where = {}): Promise<number> => {\n return strapi.db.query('admin::user').count({ where });\n};\n\n/**\n * Assign some roles to several users\n */\nconst assignARoleToAll = async (roleId: Data.ID): Promise<void> => {\n const users = await strapi.db.query('admin::user').findMany({\n select: ['id'],\n where: {\n roles: { id: { $null: true } },\n },\n });\n\n await Promise.all(\n users.map((user) => {\n return strapi.db.query('admin::user').update({\n where: { id: user.id },\n data: { roles: [roleId] },\n });\n })\n );\n};\n\n/** Display a warning if some users don't have at least one role\n */\nconst displayWarningIfUsersDontHaveRole = async (): Promise<void> => {\n const count = await countUsersWithoutRole();\n\n if (count > 0) {\n strapi.log.warn(`Some users (${count}) don't have any role.`);\n }\n};\n\n/** Returns an array of interface languages currently used by users\n */\nconst getLanguagesInUse = async (): Promise<string[]> => {\n const users = await strapi.db.query('admin::user').findMany({ select: ['preferedLanguage'] });\n\n return users.map((user) => user.preferedLanguage || 'en');\n};\n\n/**\n * Generate an AI token for the user performing the request\n */\nconst getAiToken = async (): Promise<{ token: string; expiresAt?: string }> => {\n const ERROR_PREFIX = 'AI token request failed:';\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n // Create a secure user identifier using only user ID\n const user = strapi.requestContext.get()?.state?.user as AdminUser | undefined;\n if (!user) {\n strapi.log.error(`${ERROR_PREFIX} No authenticated user in request context`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n return {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n throw fetchError;\n }\n};\n\nexport default {\n create,\n updateById,\n exists,\n findRegistrationInfo,\n register,\n sanitizeUser,\n findOne,\n findOneByEmail,\n findPage,\n deleteById,\n deleteByIds,\n countUsersWithoutRole,\n count,\n assignARoleToAll,\n displayWarningIfUsersDontHaveRole,\n resetPasswordByEmail,\n getLanguagesInUse,\n isFirstSuperAdminUser,\n getAiToken,\n};\n"],"names":["SUPER_ADMIN_CODE","constants","ValidationError","errors","sanitizeUserRoles","role","_","pick","getSessionManager","manager","strapi","sessionManager","sanitizeUser","user","omit","roles","map","create","attributes","userInfo","registrationToken","getService","createToken","has","password","hashPassword","createUser","createdUser","db","query","data","populate","sendDidInviteUser","eventHub","emit","updateById","id","lastAdminUser","isLastSuperAdminUser","superAdminRole","getSuperAdminWithUsersCount","willRemoveSuperAdminRole","arrays","includesString","isActive","hashedPassword","updatedUser","update","where","resetPasswordByEmail","email","findOne","Error","passwordValidator","validate","error","userId","usersCount","hasSuperAdminRole","isFirstSuperAdminUser","currentUser","oldestUser","findMany","code","$eq","orderBy","createdAt","limit","select","exists","count","findRegistrationInfo","undefined","register","matchingUser","firstname","lastname","findOneByEmail","$eqi","findPage","params","get","transform","defaults","deleteById","userToDelete","some","r","deletedUser","delete","hasOrigin","invalidateRefreshToken","String","deleteByIds","ids","nbOfSuperAdminToDelete","deletedUsers","push","users","countUsersWithoutRole","$null","assignARoleToAll","roleId","Promise","all","displayWarningIfUsersDontHaveRole","log","warn","getLanguagesInUse","preferedLanguage","getAiToken","ERROR_PREFIX","ee","isEE","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","requestContext","state","userIdentifier","projectId","config","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","json","parseError","jwt","info","expiresAt","token","fetchError","name"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"user.mjs","sources":["../../../../../server/src/services/user.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport _ from 'lodash';\nimport { defaults } from 'lodash/fp';\nimport { arrays, errors } from '@strapi/utils';\nimport type { Data } from '@strapi/types';\nimport crypto from 'crypto';\nimport fs from 'fs';\nimport path from 'path';\nimport { createUser, hasSuperAdminRole } from '../domain/user';\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n SanitizedAdminUser,\n SanitizedAdminRole,\n AdminUserUpdatePayload,\n // eslint-disable-next-line node/no-unpublished-import\n} from '../../../shared/contracts/shared';\nimport { password as passwordValidator } from '../validation/common-validators';\nimport { getService } from '../utils';\nimport constants from './constants';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\nconst { ValidationError } = errors;\nconst sanitizeUserRoles = (role: AdminRole): SanitizedAdminRole =>\n _.pick(role, ['id', 'name', 'description', 'code']);\n\nconst getSessionManager = () => {\n const manager = strapi.sessionManager;\n return manager ?? null;\n};\n\n/**\n * Remove private user fields\n * @param user - user to sanitize\n */\nconst sanitizeUser = (user: AdminUser): SanitizedAdminUser => {\n return {\n ..._.omit(user, ['password', 'resetPasswordToken', 'registrationToken', 'roles']),\n roles: user.roles && user.roles.map(sanitizeUserRoles),\n };\n};\n\n/**\n * Create and save a user in database\n * @param attributes A partial user object\n */\nconst create = async (\n // isActive is added in the controller, it's not sent by the API.\n attributes: Partial<AdminUserCreationPayload> & { isActive?: true }\n): Promise<AdminUser> => {\n const userInfo = {\n registrationToken: getService('token').createToken(),\n ...attributes,\n };\n\n if (_.has(attributes, 'password')) {\n userInfo.password = await getService('auth').hashPassword(attributes.password!);\n }\n\n const user = createUser(userInfo);\n\n const createdUser = await strapi.db\n .query('admin::user')\n .create({ data: user, populate: ['roles'] });\n\n getService('metrics').sendDidInviteUser();\n\n strapi.eventHub.emit('user.create', { user: sanitizeUser(createdUser) });\n\n return createdUser;\n};\n\n/**\n * Update a user in database\n * @param id query params to find the user to update\n * @param attributes A partial user object\n */\nconst updateById = async (\n id: Data.ID,\n attributes: Partial<AdminUserUpdatePayload>\n): Promise<AdminUser> => {\n // Check at least one super admin remains\n if (_.has(attributes, 'roles')) {\n const lastAdminUser = await isLastSuperAdminUser(id);\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n const willRemoveSuperAdminRole = !arrays.includesString(attributes.roles!, superAdminRole.id);\n\n if (lastAdminUser && willRemoveSuperAdminRole) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n }\n\n // cannot disable last super admin\n if (attributes.isActive === false) {\n const lastAdminUser = await isLastSuperAdminUser(id);\n if (lastAdminUser) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n }\n\n // hash password if a new one is sent\n if (_.has(attributes, 'password')) {\n const hashedPassword = await getService('auth').hashPassword(attributes.password!);\n\n const updatedUser = await strapi.db.query('admin::user').update({\n where: { id },\n data: {\n ...attributes,\n password: hashedPassword,\n },\n populate: ['roles'],\n });\n\n strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });\n\n return updatedUser;\n }\n\n const updatedUser = await strapi.db.query('admin::user').update({\n where: { id },\n data: attributes,\n populate: ['roles'],\n });\n\n if (updatedUser) {\n strapi.eventHub.emit('user.update', { user: sanitizeUser(updatedUser) });\n }\n\n return updatedUser;\n};\n\n/**\n * Reset a user password by email. (Used in admin:reset CLI)\n * @param email - user email\n * @param password - new password\n */\nconst resetPasswordByEmail = async (email: string, password: string) => {\n const user = await strapi.db\n .query('admin::user')\n .findOne({ where: { email }, populate: ['roles'] });\n\n if (!user) {\n throw new Error(`User not found for email: ${email}`);\n }\n\n try {\n await passwordValidator.validate(password);\n } catch (error) {\n throw new ValidationError(\n 'Invalid password. Expected a minimum of 8 characters with at least one number and one uppercase letter'\n );\n }\n\n await updateById(user.id, { password });\n};\n\n/**\n * Check if a user is the last super admin\n * @param userId user's id to look for\n */\nconst isLastSuperAdminUser = async (userId: Data.ID): Promise<boolean> => {\n const user = (await findOne(userId)) as AdminUser | null;\n if (!user) return false;\n\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n\n return superAdminRole.usersCount === 1 && hasSuperAdminRole(user);\n};\n\n/**\n * Check if a user is the first super admin\n * @param userId user's id to look for\n */\nconst isFirstSuperAdminUser = async (userId: Data.ID): Promise<boolean> => {\n const currentUser = (await findOne(userId)) as AdminUser | null;\n\n if (!currentUser || !hasSuperAdminRole(currentUser)) return false;\n\n const [oldestUser] = await strapi.db.query('admin::user').findMany({\n populate: {\n roles: {\n where: {\n code: { $eq: SUPER_ADMIN_CODE },\n },\n },\n },\n orderBy: { createdAt: 'asc' },\n limit: 1,\n select: ['id'],\n });\n\n return oldestUser.id === currentUser.id;\n};\n\n/**\n * Check if a user with specific attributes exists in the database\n * @param attributes A partial user object\n */\nconst exists = async (attributes = {} as unknown): Promise<boolean> => {\n return (await strapi.db.query('admin::user').count({ where: attributes })) > 0;\n};\n\n/**\n * Returns a user registration info\n * @param registrationToken - a user registration token\n * @returns - Returns user email, firstname and lastname\n */\nconst findRegistrationInfo = async (\n registrationToken: string\n): Promise<Pick<AdminUser, 'email' | 'firstname' | 'lastname'> | undefined> => {\n const user = await strapi.db.query('admin::user').findOne({ where: { registrationToken } });\n\n if (!user) {\n return undefined;\n }\n\n return _.pick(user, ['email', 'firstname', 'lastname']);\n};\n\n/**\n * Registers a user based on a registrationToken and some informations to update\n * @param params\n * @param params.registrationToken registration token\n * @param params.userInfo user info\n */\nconst register = async ({\n registrationToken,\n userInfo,\n}: {\n registrationToken: string;\n userInfo: Partial<AdminUser>;\n}) => {\n const matchingUser = await strapi.db\n .query('admin::user')\n .findOne({ where: { registrationToken } });\n\n if (!matchingUser) {\n throw new ValidationError('Invalid registration info');\n }\n\n return getService('user').updateById(matchingUser.id, {\n password: userInfo.password,\n firstname: userInfo.firstname,\n lastname: userInfo.lastname,\n registrationToken: null,\n isActive: true,\n });\n};\n\n/**\n * Find one user\n */\nconst findOne = async (id: Data.ID, populate = ['roles']) => {\n return strapi.db.query('admin::user').findOne({ where: { id }, populate });\n};\n\n/**\n * Find one user by its email\n * @param email\n * @param populate\n * @returns\n */\nconst findOneByEmail = async (email: string, populate = []) => {\n return strapi.db.query('admin::user').findOne({\n where: { email: { $eqi: email } },\n populate,\n });\n};\n\n/** Find many users (paginated)\n * @param params\n */\nconst findPage = async (params = {}): Promise<unknown> => {\n const query = strapi\n .get('query-params')\n .transform('admin::user', defaults({ populate: ['roles'] }, params));\n\n return strapi.db.query('admin::user').findPage(query);\n};\n\n/** Delete a user\n * @param id id of the user to delete\n */\nconst deleteById = async (id: Data.ID): Promise<AdminUser | null> => {\n // Check at least one super admin remains\n const userToDelete: AdminUser | null = await strapi.db.query('admin::user').findOne({\n where: { id },\n populate: ['roles'],\n });\n\n if (!userToDelete) {\n return null;\n }\n\n if (userToDelete) {\n if (userToDelete.roles.some((r) => r.code === SUPER_ADMIN_CODE)) {\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n if (superAdminRole.usersCount === 1) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n }\n }\n\n const deletedUser = await strapi.db\n .query('admin::user')\n .delete({ where: { id }, populate: ['roles'] });\n\n // Invalidate all sessions for the deleted user\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('admin')) {\n await sessionManager('admin').invalidateRefreshToken(String(id));\n }\n\n strapi.eventHub.emit('user.delete', { user: sanitizeUser(deletedUser) });\n\n return deletedUser;\n};\n\n/** Delete a user\n * @param ids ids of the users to delete\n */\nconst deleteByIds = async (ids: (string | number)[]): Promise<AdminUser[]> => {\n // Check at least one super admin remains\n const superAdminRole = await getService('role').getSuperAdminWithUsersCount();\n const nbOfSuperAdminToDelete = await strapi.db.query('admin::user').count({\n where: {\n id: ids,\n roles: { id: superAdminRole.id },\n },\n });\n\n if (superAdminRole.usersCount === nbOfSuperAdminToDelete) {\n throw new ValidationError('You must have at least one user with super admin role.');\n }\n\n const deletedUsers = [] as AdminUser[];\n for (const id of ids) {\n const deletedUser = await strapi.db.query('admin::user').delete({\n where: { id },\n populate: ['roles'],\n });\n\n // Invalidate all sessions for the deleted user\n const sessionManager = getSessionManager();\n if (sessionManager && sessionManager.hasOrigin('admin')) {\n await sessionManager('admin').invalidateRefreshToken(String(id));\n }\n\n deletedUsers.push(deletedUser);\n }\n\n strapi.eventHub.emit('user.delete', {\n users: deletedUsers.map((deletedUser) => sanitizeUser(deletedUser)),\n });\n\n return deletedUsers;\n};\n\n/** Count the users that don't have any associated roles\n */\nconst countUsersWithoutRole = async (): Promise<number> => {\n return strapi.db.query('admin::user').count({\n where: {\n roles: {\n id: { $null: true },\n },\n },\n });\n};\n\n/**\n * Count the number of users based on search params\n * @param params params used for the query\n */\nconst count = async (where = {}): Promise<number> => {\n return strapi.db.query('admin::user').count({ where });\n};\n\n/**\n * Assign some roles to several users\n */\nconst assignARoleToAll = async (roleId: Data.ID): Promise<void> => {\n const users = await strapi.db.query('admin::user').findMany({\n select: ['id'],\n where: {\n roles: { id: { $null: true } },\n },\n });\n\n await Promise.all(\n users.map((user) => {\n return strapi.db.query('admin::user').update({\n where: { id: user.id },\n data: { roles: [roleId] },\n });\n })\n );\n};\n\n/** Display a warning if some users don't have at least one role\n */\nconst displayWarningIfUsersDontHaveRole = async (): Promise<void> => {\n const count = await countUsersWithoutRole();\n\n if (count > 0) {\n strapi.log.warn(`Some users (${count}) don't have any role.`);\n }\n};\n\n/** Returns an array of interface languages currently used by users\n */\nconst getLanguagesInUse = async (): Promise<string[]> => {\n const users = await strapi.db.query('admin::user').findMany({ select: ['preferedLanguage'] });\n\n return users.map((user) => user.preferedLanguage || 'en');\n};\n\n/**\n * In-memory cache for AI tokens\n * Key format: `${projectId}:${userId}`\n */\nconst aiTokenCache = new Map<\n string,\n {\n token: string;\n expiresAt?: string;\n expiresAtMs?: number;\n }\n>();\n\n/**\n * Generate an AI token for the user performing the request\n */\nconst getAiToken = async (): Promise<{ token: string; expiresAt?: string }> => {\n const ERROR_PREFIX = 'AI token request failed:';\n\n // Check if EE features are enabled first\n if (!strapi.ee?.isEE) {\n strapi.log.error(`${ERROR_PREFIX} Enterprise Edition features are not enabled`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n // Get the EE license\n // First try environment variable, then try reading from file\n let eeLicense = process.env.STRAPI_LICENSE;\n\n if (!eeLicense) {\n try {\n const licensePath = path.join(strapi.dirs.app.root, 'license.txt');\n eeLicense = fs.readFileSync(licensePath).toString();\n } catch (error) {\n // License file doesn't exist or can't be read\n }\n }\n\n if (!eeLicense) {\n strapi.log.error(\n `${ERROR_PREFIX} No EE license found. Please ensure STRAPI_LICENSE environment variable is set or license.txt file exists.`\n );\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n const aiServerUrl = process.env.STRAPI_AI_URL || 'https://strapi-ai.apps.strapi.io';\n\n if (!aiServerUrl) {\n strapi.log.error(\n `${ERROR_PREFIX} AI server URL not configured. Please set STRAPI_AI_URL environment variable.`\n );\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n // Create a secure user identifier using only user ID\n const user = strapi.requestContext.get()?.state?.user as AdminUser | undefined;\n if (!user) {\n strapi.log.error(`${ERROR_PREFIX} No authenticated user in request context`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n const userIdentifier = user.id.toString();\n\n // Get project ID\n const projectId = strapi.config.get('uuid');\n if (!projectId) {\n strapi.log.error(`${ERROR_PREFIX} Project ID not configured`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n // Check cache for existing valid token\n const cacheKey = `${projectId}:${userIdentifier}`;\n const cachedToken = aiTokenCache.get(cacheKey);\n\n if (cachedToken) {\n const now = Date.now();\n // Check if token is still valid (with buffer so it has time to to be used)\n const bufferMs = 2 * 60 * 1000; // 2 minutes\n\n if (cachedToken.expiresAtMs && cachedToken.expiresAtMs - bufferMs > now) {\n strapi.log.info('Using cached AI token');\n\n return {\n token: cachedToken.token,\n expiresAt: cachedToken.expiresAt,\n };\n }\n\n // Token expired or will expire soon, remove from cache\n aiTokenCache.delete(cacheKey);\n }\n\n strapi.log.http('Contacting AI Server for token generation');\n\n try {\n // Call the AI server's getAiJWT endpoint\n const response = await fetch(`${aiServerUrl}/auth/getAiJWT`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n // No authorization header needed for public endpoint\n // Add request ID for tracing\n 'X-Request-Id': crypto.randomUUID(),\n },\n body: JSON.stringify({\n eeLicense,\n userIdentifier,\n projectId,\n }),\n });\n\n if (!response.ok) {\n let errorData;\n let errorText;\n try {\n errorText = await response.text();\n errorData = JSON.parse(errorText);\n } catch {\n errorData = { error: errorText || 'Failed to parse error response' };\n }\n\n strapi.log.error(`${ERROR_PREFIX} ${errorData?.error || 'Unknown error'}`, {\n status: response.status,\n statusText: response.statusText,\n error: errorData,\n errorText,\n projectId,\n });\n\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n let data;\n try {\n data = (await response.json()) as {\n jwt: string;\n expiresAt?: string;\n };\n } catch (parseError) {\n strapi.log.error(`${ERROR_PREFIX} Failed to parse AI server response`, parseError);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n if (!data.jwt) {\n strapi.log.error(`${ERROR_PREFIX} Invalid response: missing JWT token`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n strapi.log.info('AI token generated successfully', {\n userId: user.id,\n expiresAt: data.expiresAt,\n });\n\n // Cache the token if it has an expiration time\n if (data.expiresAt) {\n const expiresAtMs = new Date(data.expiresAt).getTime();\n aiTokenCache.set(cacheKey, {\n token: data.jwt,\n expiresAt: data.expiresAt,\n expiresAtMs,\n });\n }\n\n // Return the AI JWT with metadata\n // Note: Token expires in 1 hour, client should handle refresh\n return {\n token: data.jwt,\n expiresAt: data.expiresAt, // 1 hour from generation\n };\n } catch (fetchError) {\n if (fetchError instanceof Error && fetchError.name === 'AbortError') {\n strapi.log.error(`${ERROR_PREFIX} Request to AI server timed out`);\n throw new Error('AI token request failed. Check server logs for details.');\n }\n\n throw fetchError;\n }\n};\n\nexport default {\n create,\n updateById,\n exists,\n findRegistrationInfo,\n register,\n sanitizeUser,\n findOne,\n findOneByEmail,\n findPage,\n deleteById,\n deleteByIds,\n countUsersWithoutRole,\n count,\n assignARoleToAll,\n displayWarningIfUsersDontHaveRole,\n resetPasswordByEmail,\n getLanguagesInUse,\n isFirstSuperAdminUser,\n getAiToken,\n};\n"],"names":["SUPER_ADMIN_CODE","constants","ValidationError","errors","sanitizeUserRoles","role","_","pick","getSessionManager","manager","strapi","sessionManager","sanitizeUser","user","omit","roles","map","create","attributes","userInfo","registrationToken","getService","createToken","has","password","hashPassword","createUser","createdUser","db","query","data","populate","sendDidInviteUser","eventHub","emit","updateById","id","lastAdminUser","isLastSuperAdminUser","superAdminRole","getSuperAdminWithUsersCount","willRemoveSuperAdminRole","arrays","includesString","isActive","hashedPassword","updatedUser","update","where","resetPasswordByEmail","email","findOne","Error","passwordValidator","validate","error","userId","usersCount","hasSuperAdminRole","isFirstSuperAdminUser","currentUser","oldestUser","findMany","code","$eq","orderBy","createdAt","limit","select","exists","count","findRegistrationInfo","undefined","register","matchingUser","firstname","lastname","findOneByEmail","$eqi","findPage","params","get","transform","defaults","deleteById","userToDelete","some","r","deletedUser","delete","hasOrigin","invalidateRefreshToken","String","deleteByIds","ids","nbOfSuperAdminToDelete","deletedUsers","push","users","countUsersWithoutRole","$null","assignARoleToAll","roleId","Promise","all","displayWarningIfUsersDontHaveRole","log","warn","getLanguagesInUse","preferedLanguage","aiTokenCache","Map","getAiToken","ERROR_PREFIX","ee","isEE","eeLicense","process","env","STRAPI_LICENSE","licensePath","path","join","dirs","app","root","fs","readFileSync","toString","aiServerUrl","STRAPI_AI_URL","requestContext","state","userIdentifier","projectId","config","cacheKey","cachedToken","now","Date","bufferMs","expiresAtMs","info","token","expiresAt","http","response","fetch","method","headers","crypto","randomUUID","body","JSON","stringify","ok","errorData","errorText","text","parse","status","statusText","json","parseError","jwt","getTime","set","fetchError","name"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../server/src/utils/index.js"],"sourcesContent":["const getService = (name) => {\n return strapi.service(`admin::${name}`);\n};\n\nexport { getService };\n"],"names":["getService","name","strapi","service"],"mappings":";;AAAA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AAClB,IAAA,OAAOC,OAAOC,OAAO,CAAC,CAAC,OAAO,EAAEF,
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../server/src/utils/index.js"],"sourcesContent":["const getService = (name) => {\n return strapi.service(`admin::${name}`);\n};\n\nexport { getService };\n"],"names":["getService","name","strapi","service"],"mappings":";;AAAA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AAClB,IAAA,OAAOC,OAAOC,OAAO,CAAC,CAAC,OAAO,EAAEF,IAAM,CAAA,CAAA,CAAA;AACxC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../../server/src/utils/index.js"],"sourcesContent":["const getService = (name) => {\n return strapi.service(`admin::${name}`);\n};\n\nexport { getService };\n"],"names":["getService","name","strapi","service"],"mappings":"AAAA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AAClB,IAAA,OAAOC,OAAOC,OAAO,CAAC,CAAC,OAAO,EAAEF,
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../../server/src/utils/index.js"],"sourcesContent":["const getService = (name) => {\n return strapi.service(`admin::${name}`);\n};\n\nexport { getService };\n"],"names":["getService","name","strapi","service"],"mappings":"AAAA,MAAMA,aAAa,CAACC,IAAAA,GAAAA;AAClB,IAAA,OAAOC,OAAOC,OAAO,CAAC,CAAC,OAAO,EAAEF,IAAM,CAAA,CAAA,CAAA;AACxC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-provider.js","sources":["../../../../../server/src/validation/action-provider.ts"],"sourcesContent":["import { yup, validateYupSchemaSync } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst registerProviderActionSchema = yup\n .array()\n .required()\n .of(\n yup\n .object()\n .shape({\n uid: yup\n .string()\n .matches(\n /^[a-z]([a-z|.|-]+)[a-z]$/,\n (v) => `${v.path}: The uid can only contain lowercase letters, dots and hyphens.`\n )\n .required(),\n section: yup.string().oneOf(['contentTypes', 'plugins', 'settings', 'internal']).required(),\n pluginName: yup.mixed().when('section', {\n is: 'plugins',\n then: validators.isAPluginName.required(),\n otherwise: validators.isAPluginName,\n }),\n subjects: yup.mixed().when('section', {\n is: 'contentTypes',\n then: yup.array().of(yup.string()).required(),\n otherwise: yup\n .mixed()\n .oneOf([undefined], 'subjects should only be defined for the \"contentTypes\" section'),\n }),\n displayName: yup.string().required(),\n category: yup.mixed().when('section', {\n is: 'settings',\n then: yup.string().required(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsCategory',\n 'category should only be defined for the \"settings\" section',\n (cat) => cat === undefined\n ),\n }),\n subCategory: yup.mixed().when('section', {\n is: (section: any) => ['settings', 'plugins'].includes(section),\n then: yup.string(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsSubCategory',\n 'subCategory should only be defined for \"plugins\" and \"settings\" sections',\n (subCat) => {\n return subCat === undefined;\n }\n ),\n }),\n options: yup.object({\n applyToProperties: yup.array().of(yup.string()),\n }),\n aliases: yup\n .array(\n yup.object({\n actionId: yup.string(),\n subjects: yup.array(yup.string()).nullable(),\n })\n )\n .nullable(),\n })\n .noUnknown()\n );\n\nexport const validateRegisterProviderAction = validateYupSchemaSync(registerProviderActionSchema);\n\nexport default {\n validateRegisterProviderAction,\n};\n"],"names":["registerProviderActionSchema","yup","array","required","of","object","shape","uid","string","matches","v","path","section","oneOf","pluginName","mixed","when","is","then","validators","isAPluginName","otherwise","subjects","undefined","displayName","category","test","cat","subCategory","includes","subCat","options","applyToProperties","aliases","actionId","nullable","noUnknown","validateRegisterProviderAction","validateYupSchemaSync"],"mappings":";;;;;AAGA,MAAMA,4BAA+BC,GAAAA,SAAAA,CAClCC,KAAK,EAAA,CACLC,QAAQ,EAAA,CACRC,EAAE,CACDH,SACGI,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLC,IAAAA,GAAAA,EAAKN,
|
|
1
|
+
{"version":3,"file":"action-provider.js","sources":["../../../../../server/src/validation/action-provider.ts"],"sourcesContent":["import { yup, validateYupSchemaSync } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst registerProviderActionSchema = yup\n .array()\n .required()\n .of(\n yup\n .object()\n .shape({\n uid: yup\n .string()\n .matches(\n /^[a-z]([a-z|.|-]+)[a-z]$/,\n (v) => `${v.path}: The uid can only contain lowercase letters, dots and hyphens.`\n )\n .required(),\n section: yup.string().oneOf(['contentTypes', 'plugins', 'settings', 'internal']).required(),\n pluginName: yup.mixed().when('section', {\n is: 'plugins',\n then: validators.isAPluginName.required(),\n otherwise: validators.isAPluginName,\n }),\n subjects: yup.mixed().when('section', {\n is: 'contentTypes',\n then: yup.array().of(yup.string()).required(),\n otherwise: yup\n .mixed()\n .oneOf([undefined], 'subjects should only be defined for the \"contentTypes\" section'),\n }),\n displayName: yup.string().required(),\n category: yup.mixed().when('section', {\n is: 'settings',\n then: yup.string().required(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsCategory',\n 'category should only be defined for the \"settings\" section',\n (cat) => cat === undefined\n ),\n }),\n subCategory: yup.mixed().when('section', {\n is: (section: any) => ['settings', 'plugins'].includes(section),\n then: yup.string(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsSubCategory',\n 'subCategory should only be defined for \"plugins\" and \"settings\" sections',\n (subCat) => {\n return subCat === undefined;\n }\n ),\n }),\n options: yup.object({\n applyToProperties: yup.array().of(yup.string()),\n }),\n aliases: yup\n .array(\n yup.object({\n actionId: yup.string(),\n subjects: yup.array(yup.string()).nullable(),\n })\n )\n .nullable(),\n })\n .noUnknown()\n );\n\nexport const validateRegisterProviderAction = validateYupSchemaSync(registerProviderActionSchema);\n\nexport default {\n validateRegisterProviderAction,\n};\n"],"names":["registerProviderActionSchema","yup","array","required","of","object","shape","uid","string","matches","v","path","section","oneOf","pluginName","mixed","when","is","then","validators","isAPluginName","otherwise","subjects","undefined","displayName","category","test","cat","subCategory","includes","subCat","options","applyToProperties","aliases","actionId","nullable","noUnknown","validateRegisterProviderAction","validateYupSchemaSync"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-provider.mjs","sources":["../../../../../server/src/validation/action-provider.ts"],"sourcesContent":["import { yup, validateYupSchemaSync } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst registerProviderActionSchema = yup\n .array()\n .required()\n .of(\n yup\n .object()\n .shape({\n uid: yup\n .string()\n .matches(\n /^[a-z]([a-z|.|-]+)[a-z]$/,\n (v) => `${v.path}: The uid can only contain lowercase letters, dots and hyphens.`\n )\n .required(),\n section: yup.string().oneOf(['contentTypes', 'plugins', 'settings', 'internal']).required(),\n pluginName: yup.mixed().when('section', {\n is: 'plugins',\n then: validators.isAPluginName.required(),\n otherwise: validators.isAPluginName,\n }),\n subjects: yup.mixed().when('section', {\n is: 'contentTypes',\n then: yup.array().of(yup.string()).required(),\n otherwise: yup\n .mixed()\n .oneOf([undefined], 'subjects should only be defined for the \"contentTypes\" section'),\n }),\n displayName: yup.string().required(),\n category: yup.mixed().when('section', {\n is: 'settings',\n then: yup.string().required(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsCategory',\n 'category should only be defined for the \"settings\" section',\n (cat) => cat === undefined\n ),\n }),\n subCategory: yup.mixed().when('section', {\n is: (section: any) => ['settings', 'plugins'].includes(section),\n then: yup.string(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsSubCategory',\n 'subCategory should only be defined for \"plugins\" and \"settings\" sections',\n (subCat) => {\n return subCat === undefined;\n }\n ),\n }),\n options: yup.object({\n applyToProperties: yup.array().of(yup.string()),\n }),\n aliases: yup\n .array(\n yup.object({\n actionId: yup.string(),\n subjects: yup.array(yup.string()).nullable(),\n })\n )\n .nullable(),\n })\n .noUnknown()\n );\n\nexport const validateRegisterProviderAction = validateYupSchemaSync(registerProviderActionSchema);\n\nexport default {\n validateRegisterProviderAction,\n};\n"],"names":["registerProviderActionSchema","yup","array","required","of","object","shape","uid","string","matches","v","path","section","oneOf","pluginName","mixed","when","is","then","validators","isAPluginName","otherwise","subjects","undefined","displayName","category","test","cat","subCategory","includes","subCat","options","applyToProperties","aliases","actionId","nullable","noUnknown","validateRegisterProviderAction","validateYupSchemaSync"],"mappings":";;;AAGA,MAAMA,4BAA+BC,GAAAA,GAAAA,CAClCC,KAAK,EAAA,CACLC,QAAQ,EAAA,CACRC,EAAE,CACDH,GACGI,CAAAA,MAAM,EACNC,CAAAA,KAAK,CAAC;AACLC,IAAAA,GAAAA,EAAKN,
|
|
1
|
+
{"version":3,"file":"action-provider.mjs","sources":["../../../../../server/src/validation/action-provider.ts"],"sourcesContent":["import { yup, validateYupSchemaSync } from '@strapi/utils';\nimport validators from './common-validators';\n\nconst registerProviderActionSchema = yup\n .array()\n .required()\n .of(\n yup\n .object()\n .shape({\n uid: yup\n .string()\n .matches(\n /^[a-z]([a-z|.|-]+)[a-z]$/,\n (v) => `${v.path}: The uid can only contain lowercase letters, dots and hyphens.`\n )\n .required(),\n section: yup.string().oneOf(['contentTypes', 'plugins', 'settings', 'internal']).required(),\n pluginName: yup.mixed().when('section', {\n is: 'plugins',\n then: validators.isAPluginName.required(),\n otherwise: validators.isAPluginName,\n }),\n subjects: yup.mixed().when('section', {\n is: 'contentTypes',\n then: yup.array().of(yup.string()).required(),\n otherwise: yup\n .mixed()\n .oneOf([undefined], 'subjects should only be defined for the \"contentTypes\" section'),\n }),\n displayName: yup.string().required(),\n category: yup.mixed().when('section', {\n is: 'settings',\n then: yup.string().required(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsCategory',\n 'category should only be defined for the \"settings\" section',\n (cat) => cat === undefined\n ),\n }),\n subCategory: yup.mixed().when('section', {\n is: (section: any) => ['settings', 'plugins'].includes(section),\n then: yup.string(),\n otherwise: yup\n .mixed()\n .test(\n 'settingsSubCategory',\n 'subCategory should only be defined for \"plugins\" and \"settings\" sections',\n (subCat) => {\n return subCat === undefined;\n }\n ),\n }),\n options: yup.object({\n applyToProperties: yup.array().of(yup.string()),\n }),\n aliases: yup\n .array(\n yup.object({\n actionId: yup.string(),\n subjects: yup.array(yup.string()).nullable(),\n })\n )\n .nullable(),\n })\n .noUnknown()\n );\n\nexport const validateRegisterProviderAction = validateYupSchemaSync(registerProviderActionSchema);\n\nexport default {\n validateRegisterProviderAction,\n};\n"],"names":["registerProviderActionSchema","yup","array","required","of","object","shape","uid","string","matches","v","path","section","oneOf","pluginName","mixed","when","is","then","validators","isAPluginName","otherwise","subjects","undefined","displayName","category","test","cat","subCategory","includes","subCat","options","applyToProperties","aliases","actionId","nullable","noUnknown","validateRegisterProviderAction","validateYupSchemaSync"],"mappings":"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"}
|
package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-fields-are-correctly-nested.js","sources":["../../../../../../server/src/validation/common-functions/check-fields-are-correctly-nested.ts"],"sourcesContent":["import _ from 'lodash';\n\nconst checkFieldsAreCorrectlyNested = (fields: unknown) => {\n if (_.isNil(fields)) {\n // Only check if the fields exist\n return true;\n }\n if (!Array.isArray(fields)) {\n return false;\n }\n\n let failed = false;\n for (let indexA = 0; indexA < fields.length; indexA += 1) {\n failed = fields\n .slice(indexA + 1)\n .some(\n (fieldB) =>\n fieldB.startsWith(`${fields[indexA]}.`) || fields[indexA].startsWith(`${fieldB}.`)\n );\n if (failed) break;\n }\n\n return !failed;\n};\n\nexport default checkFieldsAreCorrectlyNested;\n"],"names":["checkFieldsAreCorrectlyNested","fields","_","isNil","Array","isArray","failed","indexA","length","slice","some","fieldB","startsWith"],"mappings":";;;;AAEA,MAAMA,gCAAgC,CAACC,MAAAA,GAAAA;IACrC,IAAIC,CAAAA,CAAEC,KAAK,CAACF,MAAS,CAAA,EAAA;;QAEnB,OAAO,IAAA;AACT;AACA,IAAA,IAAI,CAACG,KAAAA,CAAMC,OAAO,CAACJ,MAAS,CAAA,EAAA;QAC1B,OAAO,KAAA;AACT;AAEA,IAAA,IAAIK,MAAS,GAAA,KAAA;IACb,IAAK,IAAIC,SAAS,CAAGA,EAAAA,MAAAA,GAASN,OAAOO,MAAM,EAAED,UAAU,CAAG,CAAA;AACxDD,QAAAA,MAAAA,GAASL,MACNQ,CAAAA,KAAK,CAACF,MAAAA,GAAS,CACfG,CAAAA,CAAAA,IAAI,CACH,CAACC,MACCA,GAAAA,MAAAA,CAAOC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"check-fields-are-correctly-nested.js","sources":["../../../../../../server/src/validation/common-functions/check-fields-are-correctly-nested.ts"],"sourcesContent":["import _ from 'lodash';\n\nconst checkFieldsAreCorrectlyNested = (fields: unknown) => {\n if (_.isNil(fields)) {\n // Only check if the fields exist\n return true;\n }\n if (!Array.isArray(fields)) {\n return false;\n }\n\n let failed = false;\n for (let indexA = 0; indexA < fields.length; indexA += 1) {\n failed = fields\n .slice(indexA + 1)\n .some(\n (fieldB) =>\n fieldB.startsWith(`${fields[indexA]}.`) || fields[indexA].startsWith(`${fieldB}.`)\n );\n if (failed) break;\n }\n\n return !failed;\n};\n\nexport default checkFieldsAreCorrectlyNested;\n"],"names":["checkFieldsAreCorrectlyNested","fields","_","isNil","Array","isArray","failed","indexA","length","slice","some","fieldB","startsWith"],"mappings":";;;;AAEA,MAAMA,gCAAgC,CAACC,MAAAA,GAAAA;IACrC,IAAIC,CAAAA,CAAEC,KAAK,CAACF,MAAS,CAAA,EAAA;;QAEnB,OAAO,IAAA;AACT;AACA,IAAA,IAAI,CAACG,KAAAA,CAAMC,OAAO,CAACJ,MAAS,CAAA,EAAA;QAC1B,OAAO,KAAA;AACT;AAEA,IAAA,IAAIK,MAAS,GAAA,KAAA;IACb,IAAK,IAAIC,SAAS,CAAGA,EAAAA,MAAAA,GAASN,OAAOO,MAAM,EAAED,UAAU,CAAG,CAAA;AACxDD,QAAAA,MAAAA,GAASL,MACNQ,CAAAA,KAAK,CAACF,MAAAA,GAAS,CACfG,CAAAA,CAAAA,IAAI,CACH,CAACC,MACCA,GAAAA,MAAAA,CAAOC,UAAU,CAAC,CAAGX,EAAAA,MAAM,CAACM,MAAAA,CAAO,CAAC,CAAC,CAAC,CAAA,IAAKN,MAAM,CAACM,MAAO,CAAA,CAACK,UAAU,CAAC,CAAGD,EAAAA,MAAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAEvF,QAAA,IAAIL,MAAQ,EAAA;AACd;AAEA,IAAA,OAAO,CAACA,MAAAA;AACV;;;;"}
|
package/dist/server/server/src/validation/common-functions/check-fields-are-correctly-nested.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-fields-are-correctly-nested.mjs","sources":["../../../../../../server/src/validation/common-functions/check-fields-are-correctly-nested.ts"],"sourcesContent":["import _ from 'lodash';\n\nconst checkFieldsAreCorrectlyNested = (fields: unknown) => {\n if (_.isNil(fields)) {\n // Only check if the fields exist\n return true;\n }\n if (!Array.isArray(fields)) {\n return false;\n }\n\n let failed = false;\n for (let indexA = 0; indexA < fields.length; indexA += 1) {\n failed = fields\n .slice(indexA + 1)\n .some(\n (fieldB) =>\n fieldB.startsWith(`${fields[indexA]}.`) || fields[indexA].startsWith(`${fieldB}.`)\n );\n if (failed) break;\n }\n\n return !failed;\n};\n\nexport default checkFieldsAreCorrectlyNested;\n"],"names":["checkFieldsAreCorrectlyNested","fields","_","isNil","Array","isArray","failed","indexA","length","slice","some","fieldB","startsWith"],"mappings":";;AAEA,MAAMA,gCAAgC,CAACC,MAAAA,GAAAA;IACrC,IAAIC,UAAAA,CAAEC,KAAK,CAACF,MAAS,CAAA,EAAA;;QAEnB,OAAO,IAAA;AACT;AACA,IAAA,IAAI,CAACG,KAAAA,CAAMC,OAAO,CAACJ,MAAS,CAAA,EAAA;QAC1B,OAAO,KAAA;AACT;AAEA,IAAA,IAAIK,MAAS,GAAA,KAAA;IACb,IAAK,IAAIC,SAAS,CAAGA,EAAAA,MAAAA,GAASN,OAAOO,MAAM,EAAED,UAAU,CAAG,CAAA;AACxDD,QAAAA,MAAAA,GAASL,MACNQ,CAAAA,KAAK,CAACF,MAAAA,GAAS,CACfG,CAAAA,CAAAA,IAAI,CACH,CAACC,MACCA,GAAAA,MAAAA,CAAOC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"check-fields-are-correctly-nested.mjs","sources":["../../../../../../server/src/validation/common-functions/check-fields-are-correctly-nested.ts"],"sourcesContent":["import _ from 'lodash';\n\nconst checkFieldsAreCorrectlyNested = (fields: unknown) => {\n if (_.isNil(fields)) {\n // Only check if the fields exist\n return true;\n }\n if (!Array.isArray(fields)) {\n return false;\n }\n\n let failed = false;\n for (let indexA = 0; indexA < fields.length; indexA += 1) {\n failed = fields\n .slice(indexA + 1)\n .some(\n (fieldB) =>\n fieldB.startsWith(`${fields[indexA]}.`) || fields[indexA].startsWith(`${fieldB}.`)\n );\n if (failed) break;\n }\n\n return !failed;\n};\n\nexport default checkFieldsAreCorrectlyNested;\n"],"names":["checkFieldsAreCorrectlyNested","fields","_","isNil","Array","isArray","failed","indexA","length","slice","some","fieldB","startsWith"],"mappings":";;AAEA,MAAMA,gCAAgC,CAACC,MAAAA,GAAAA;IACrC,IAAIC,UAAAA,CAAEC,KAAK,CAACF,MAAS,CAAA,EAAA;;QAEnB,OAAO,IAAA;AACT;AACA,IAAA,IAAI,CAACG,KAAAA,CAAMC,OAAO,CAACJ,MAAS,CAAA,EAAA;QAC1B,OAAO,KAAA;AACT;AAEA,IAAA,IAAIK,MAAS,GAAA,KAAA;IACb,IAAK,IAAIC,SAAS,CAAGA,EAAAA,MAAAA,GAASN,OAAOO,MAAM,EAAED,UAAU,CAAG,CAAA;AACxDD,QAAAA,MAAAA,GAASL,MACNQ,CAAAA,KAAK,CAACF,MAAAA,GAAS,CACfG,CAAAA,CAAAA,IAAI,CACH,CAACC,MACCA,GAAAA,MAAAA,CAAOC,UAAU,CAAC,CAAGX,EAAAA,MAAM,CAACM,MAAAA,CAAO,CAAC,CAAC,CAAC,CAAA,IAAKN,MAAM,CAACM,MAAO,CAAA,CAACK,UAAU,CAAC,CAAGD,EAAAA,MAAAA,CAAO,CAAC,CAAC,CAAA,CAAA;AAEvF,QAAA,IAAIL,MAAQ,EAAA;AACd;AAEA,IAAA,OAAO,CAACA,MAAAA;AACV;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-validators.js","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { isEmpty, has, isNil, isArray } from 'lodash/fp';\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n .test('required-byte-size', '${path} must be less than 73 bytes', function (value) {\n if (!value) return true;\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function (value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function (value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function (fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (isNil(action)) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || isNil(fields);\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test('action-validity', 'action is not an existing permission action', function (actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (isNil(actionId)) {\n return true;\n }\n\n return !!getActionFromProvider(actionId);\n }),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test('subject-validity', 'Invalid subject submitted', function (subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (isNil(action.subjects)) {\n return isNil(subject);\n }\n\n if (isArray(action.subjects) && !isNil(subject)) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }),\n properties: yup\n .object()\n .test('properties-structure', 'Invalid property set at ${path}', function (properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || isNil(properties);\n\n if (!has('options.applyToProperties', action)) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n })\n .test(\n 'fields-property',\n 'Invalid fields property at ${path}',\n async function (properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","arrayOfConditionNames","of","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","actionParameters","options","parent","subjects","properties","hasNoProperties","isEmpty","has","applyToProperties","property","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions"],"mappings":";;;;;;;;;;;;AAUA,MAAMA,wBAAwB,CAACC,QAAAA,GAAAA;AAC7B,IAAA,OAAOC,kBAAW,CAAA,YAAA,CAAA,CAAcC,cAAc,CAACC,GAAG,CAACH,QAAAA,CAAAA;AACrD,CAAA;AAEO,MAAMI,QAAQC,SAAIC,CAAAA,MAAM,GAAGF,KAAK,EAAA,CAAGG,SAAS;AAE5C,MAAMC,YAAYH,SAAIC,CAAAA,MAAM,GAAGG,IAAI,EAAA,CAAGC,GAAG,CAAC,CAAG;AAEvCC,MAAAA,QAAAA,GAAWN,SAAIC,CAAAA,MAAM;MAErBM,QAAWP,GAAAA,SAAAA,CAAIC,MAAM,EAAGI,CAAAA,GAAG,CAAC,CAAG;AAE/BG,MAAAA,QAAAA,GAAWR,SACrBC,CAAAA,MAAM,EACNI,CAAAA,GAAG,CAAC,CAAA,CAAA,CACJI,IAAI,CAAC,oBAAsB,EAAA,oCAAA,EAAsC,SAAUC,KAAK,EAAA;IAC/E,IAAI,CAACA,OAAO,OAAO,IAAA;AACnB,IAAA,MAAMC,WAAW,IAAIC,WAAAA,EAAAA,CAAcC,MAAM,CAACH,OAAOI,MAAM;AACvD,IAAA,OAAOH,QAAY,IAAA,EAAA;AACrB,CACCI,CAAAA,CAAAA,OAAO,CAAC,OAAA,EAAS,uDACjBA,CAAAA,CAAAA,OAAO,CAAC,OAAA,EAAS,uDACjBA,CAAAA,CAAAA,OAAO,CAAC,IAAA,EAAM,0CAA4C;AAEtD,MAAMC,KAAQhB,GAAAA,SAAAA,CAAIiB,KAAK,CAACjB,UAAIkB,QAAQ,EAAA,CAAA,CAAIb,GAAG,CAAC,CAAG;AAEtD,MAAMc,aAAAA,GAAgBnB,UACnBC,MAAM,EAAA,CACNQ,IAAI,CAAC,kBAAA,EAAoB,sBAAwB,EAAA,SAAUC,KAAK,EAAA;IAC/D,OAAO;AAACU,QAAAA,SAAAA;AAAW,QAAA,OAAA;WAAYC,MAAOC,CAAAA,IAAI,CAACC,MAAAA,CAAOC,OAAO;AAAE,KAAA,CAACC,QAAQ,CAACf,KAAAA,CAAAA,GACjE,OACA,IAAI,CAACgB,WAAW,CAAC;QAAEC,IAAM,EAAA,IAAI,CAACA,IAAI;AAAEC,QAAAA,OAAAA,EAAS,CAAC,EAAE,IAAI,CAACD,IAAI,CAAC,0BAA0B;AAAE,KAAA,CAAA;AAC5F,CAAA,CAAA;AAEWE,MAAAA,qBAAAA,GAAwB7B,SAClCiB,CAAAA,KAAK,GACLa,EAAE,CAAC9B,SAAIC,CAAAA,MAAM,IACbQ,IAAI,CAAC,2BAA6B,EAAA,sBAAA,EAAwB,SAAUC,KAAK,EAAA;AACxE,IAAA,MAAMqB,MAAMR,MAAOS,CAAAA,OAAO,CAAC,mBAAqBC,CAAAA,CAAAA,iBAAiB,CAACX,IAAI,EAAA;AACtE,IAAA,OAAOY,EAAEC,WAAW,CAACzB,KAAUwB,CAAAA,IAAAA,CAAAA,CAAEE,UAAU,CAAC1B,KAAAA,EAAOqB,GAAKjB,CAAAA,CAAAA,MAAM,KAAK,CAC/D,GAAA,IAAA,GACA,IAAI,CAACY,WAAW,CAAC;QAAEC,IAAM,EAAA,IAAI,CAACA,IAAI;QAAEC,OAAS,EAAA,CAAC,oCAAoC;AAAE,KAAA,CAAA;AAC1F,CAAG;AAEQS,MAAAA,oBAAAA,GAAuB,CAACC,CAAAA,EAAQC,CAC3CD,GAAAA,CAAAA,CAAEE,MAAM,KAAKD,CAAEC,CAAAA,MAAM,KAAKF,EAAEG,OAAO,KAAKF,CAAEE,CAAAA,OAAO,IAAKP,CAAAA,CAAEQ,KAAK,CAACJ,CAAEG,CAAAA,OAAO,CAAKP,IAAAA,CAAAA,CAAEQ,KAAK,CAACH,CAAEE,CAAAA,OAAO,CAAC;AAEhG,MAAME,4BAAAA,GAA+B,CAACC,WAAAA,GACpC,CAACC,KAAAA,CAAMC,OAAO,CAACF,WAAAA,CAAAA,IACfA,WAAYG,CAAAA,KAAK,CAAC,CAACC,OAAOC,CACxBL,GAAAA,WAAAA,CAAYM,KAAK,CAACD,CAAI,GAAA,CAAA,CAAA,CAAGF,KAAK,CAAC,CAACI,KAAAA,GAAU,CAACd,oBAAAA,CAAqBW,KAAOG,EAAAA,KAAAA,CAAAA,CAAAA,CAAAA;AAG3E,MAAMC,cAAiB,GAAA,CAACZ,MACtB,GAAA,SAAUa,MAA2B,EAAA;;AAEnC,QAAA,IAAIX,SAAMF,MAAS,CAAA,EAAA;YACjB,OAAO,IAAA;AACT;AAEA,QAAA,OAAOc,KAAaC,CAAAA,iBAAiB,CAAC,QAAA,EAAUf,WAAWE,QAAMW,CAAAA,MAAAA,CAAAA;AACnE,KAAA;AAEF,MAAMG,wBAAAA,GAA2B,CAAChB,MAAAA,GAChCxC,SACGiB,CAAAA,KAAK,EACLa,CAAAA,EAAE,CAAC9B,SAAAA,CAAIC,MAAM,EAAA,CAAA,CACbwD,QAAQ,EAAA,CACRhD,IAAI,CACH,cACA,EAAA,4CAAA,EACAiD,6BAEDjD,CAAAA,CAAAA,IAAI,CACH,cAAA,EACA,2CACAkD,EAAAA,6BAAAA,CAAAA,CAEDlD,IAAI,CACH,oBACA,EAAA,qEAAA;IAEA2C,cAAeZ,CAAAA,MAAAA,CAAAA,CAAAA;MAGRoB,UAAa5D,GAAAA,SAAAA,CACvB6D,MAAM,EAAA,CACNC,KAAK,CAAC;IACLtB,MAAQxC,EAAAA,SAAAA,CACLC,MAAM,EAAA,CACN8D,QAAQ,EAAA,CACRtD,IAAI,CAAC,iBAAA,EAAmB,6CAA+C,EAAA,SAAUd,QAAQ,EAAA;;AAExF,QAAA,IAAI+C,SAAM/C,QAAW,CAAA,EAAA;YACnB,OAAO,IAAA;AACT;QAEA,OAAO,CAAC,CAACD,qBAAsBC,CAAAA,QAAAA,CAAAA;AACjC,KAAA,CAAA;IACFqE,gBAAkBhE,EAAAA,SAAAA,CAAI6D,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IACvChB,OAASzC,EAAAA,SAAAA,CACNC,MAAM,EAAA,CACNwD,QAAQ,EAAA,CACRhD,IAAI,CAAC,kBAAA,EAAoB,2BAA6B,EAAA,SAAUgC,OAAO,EAAA;;QAEtE,MAAMD,MAAAA,GAAS9C,sBAAsB,IAAI,CAACuE,OAAO,CAACC,MAAM,CAAC1B,MAAM,CAAA;AAE/D,QAAA,IAAI,CAACA,MAAQ,EAAA;YACX,OAAO,IAAA;AACT;QAEA,IAAIE,QAAAA,CAAMF,MAAO2B,CAAAA,QAAQ,CAAG,EAAA;AAC1B,YAAA,OAAOzB,QAAMD,CAAAA,OAAAA,CAAAA;AACf;AAEA,QAAA,IAAIK,WAAQN,MAAO2B,CAAAA,QAAQ,CAAK,IAAA,CAACzB,SAAMD,OAAU,CAAA,EAAA;AAC/C,YAAA,OAAOD,MAAO2B,CAAAA,QAAQ,CAAC1C,QAAQ,CAACgB,OAAAA,CAAAA;AAClC;QAEA,OAAO,KAAA;AACT,KAAA,CAAA;IACF2B,UAAYpE,EAAAA,SAAAA,CACT6D,MAAM,EACNpD,CAAAA,IAAI,CAAC,sBAAwB,EAAA,iCAAA,EAAmC,SAAU2D,UAAU,EAAA;;QAEnF,MAAM5B,MAAAA,GAAS9C,sBAAsB,IAAI,CAACuE,OAAO,CAACC,MAAM,CAAC1B,MAAM,CAAA;QAC/D,MAAM6B,eAAAA,GAAkBC,UAAQF,CAAAA,UAAAA,CAAAA,IAAe1B,QAAM0B,CAAAA,UAAAA,CAAAA;QAErD,IAAI,CAACG,MAAI,CAAA,2BAAA,EAA6B/B,MAAS,CAAA,EAAA;YAC7C,OAAO6B,eAAAA;AACT;AAEA,QAAA,IAAIA,eAAiB,EAAA;YACnB,OAAO,IAAA;AACT;AAEA,QAAA,MAAM,EAAEG,iBAAiB,EAAE,GAAGhC,OAAOyB,OAAO;QAE5C,IAAI,CAACnB,WAAQ0B,iBAAoB,CAAA,EAAA;YAC/B,OAAO,KAAA;AACT;QAEA,OAAOnD,MAAAA,CAAOC,IAAI,CAAC8C,UAAYrB,CAAAA,CAAAA,KAAK,CAAC,CAAC0B,QAAAA,GAAaD,iBAAkB/C,CAAAA,QAAQ,CAACgD,QAAAA,CAAAA,CAAAA;AAChF,KAAA,CAAA,CACChE,IAAI,CACH,iBAAA,EACA,sCACA,eAAgB2D,UAAAA,GAAa,EAAE,EAAA;;QAE7B,MAAM5B,MAAAA,GAAS9C,sBAAsB,IAAI,CAACuE,OAAO,CAACC,MAAM,CAAC1B,MAAM,CAAA;QAE/D,IAAI,CAACA,MAAU,IAAA,CAAC4B,UAAY,EAAA;YAC1B,OAAO,IAAA;AACT;AAEA,QAAA,IAAI,CAACd,KAAAA,CAAaC,iBAAiB,CAAC,UAAUf,MAAS,CAAA,EAAA;YACrD,OAAO,IAAA;AACT;QAEA,IAAI;AACF,YAAA,MAAMgB,yBAAyBhB,MAAQkC,CAAAA,CAAAA,QAAQ,CAACN,UAAAA,CAAWf,MAAM,EAAE;gBACjEsB,MAAQ,EAAA,IAAA;gBACRC,UAAY,EAAA;AACd,aAAA,CAAA;YACA,OAAO,IAAA;AACT,SAAA,CAAE,OAAOC,CAAQ,EAAA;;YAEf,MAAM,IAAI,CAACnD,WAAW,CAAC;AACrBE,gBAAAA,OAAAA,EAASiD,EAAEjD,OAAO;AAClBD,gBAAAA,IAAAA,EAAM,CAAC,EAAE,IAAI,CAACA,IAAI,CAAC,OAAO;AAC5B,aAAA,CAAA;AACF;AACF,KAAA,CAAA;AAEJmD,IAAAA,UAAAA,EAAY9E,UAAIiB,KAAK,EAAA,CAAGa,EAAE,CAAC9B,UAAIC,MAAM,EAAA;AACvC,CAAA,CAAA,CACC8E,SAAS;MAECC,iBAAoBhF,GAAAA,SAAAA,CAC9B6D,MAAM,EAAA,CACNC,KAAK,CAAC;IACLlB,WAAa5C,EAAAA,SAAAA,CACViB,KAAK,EAAA,CACL8C,QAAQ,EAAA,CACRjC,EAAE,CAAC8B,UACHnD,CAAAA,CAAAA,IAAI,CACH,wBAAA,EACA,2DACAkC,EAAAA,4BAAAA;AAEN,CACCoB,CAAAA,CAAAA,QAAQ,EACRgB,CAAAA,SAAS;AAEZ,iBAAe;AACbhF,IAAAA,KAAAA;AACAI,IAAAA,SAAAA;AACAG,IAAAA,QAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,QAAAA;AACAQ,IAAAA,KAAAA;AACAG,IAAAA,aAAAA;AACAU,IAAAA,qBAAAA;AACA+B,IAAAA,UAAAA;AACAoB,IAAAA;AACF,CAAE;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"common-validators.js","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { isEmpty, has, isNil, isArray } from 'lodash/fp';\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n .test('required-byte-size', '${path} must be less than 73 bytes', function (value) {\n if (!value) return true;\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function (value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function (value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function (fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (isNil(action)) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || isNil(fields);\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test('action-validity', 'action is not an existing permission action', function (actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (isNil(actionId)) {\n return true;\n }\n\n return !!getActionFromProvider(actionId);\n }),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test('subject-validity', 'Invalid subject submitted', function (subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (isNil(action.subjects)) {\n return isNil(subject);\n }\n\n if (isArray(action.subjects) && !isNil(subject)) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }),\n properties: yup\n .object()\n .test('properties-structure', 'Invalid property set at ${path}', function (properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || isNil(properties);\n\n if (!has('options.applyToProperties', action)) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n })\n .test(\n 'fields-property',\n 'Invalid fields property at ${path}',\n async function (properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","arrayOfConditionNames","of","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","actionParameters","options","parent","subjects","properties","hasNoProperties","isEmpty","has","applyToProperties","property","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-validators.mjs","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { isEmpty, has, isNil, isArray } from 'lodash/fp';\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n .test('required-byte-size', '${path} must be less than 73 bytes', function (value) {\n if (!value) return true;\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function (value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function (value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function (fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (isNil(action)) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || isNil(fields);\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test('action-validity', 'action is not an existing permission action', function (actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (isNil(actionId)) {\n return true;\n }\n\n return !!getActionFromProvider(actionId);\n }),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test('subject-validity', 'Invalid subject submitted', function (subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (isNil(action.subjects)) {\n return isNil(subject);\n }\n\n if (isArray(action.subjects) && !isNil(subject)) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }),\n properties: yup\n .object()\n .test('properties-structure', 'Invalid property set at ${path}', function (properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || isNil(properties);\n\n if (!has('options.applyToProperties', action)) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n })\n .test(\n 'fields-property',\n 'Invalid fields property at ${path}',\n async function (properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","arrayOfConditionNames","of","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","actionParameters","options","parent","subjects","properties","hasNoProperties","isEmpty","has","applyToProperties","property","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"common-validators.mjs","sources":["../../../../../server/src/validation/common-validators.ts"],"sourcesContent":["import { yup } from '@strapi/utils';\nimport _ from 'lodash';\nimport { isEmpty, has, isNil, isArray } from 'lodash/fp';\nimport { getService } from '../utils';\nimport actionDomain, { type Action } from '../domain/action';\nimport { checkFieldsAreCorrectlyNested, checkFieldsDontHaveDuplicates } from './common-functions';\nimport actions from '../domain/action/index';\n\nconst { actionFields } = actions;\n\nconst getActionFromProvider = (actionId: string) => {\n return getService('permission').actionProvider.get(actionId);\n};\n\nexport const email = yup.string().email().lowercase();\n\nexport const firstname = yup.string().trim().min(1);\n\nexport const lastname = yup.string();\n\nexport const username = yup.string().min(1);\n\nexport const password = yup\n .string()\n .min(8)\n .test('required-byte-size', '${path} must be less than 73 bytes', function (value) {\n if (!value) return true;\n const byteSize = new TextEncoder().encode(value).length;\n return byteSize <= 72;\n })\n .matches(/[a-z]/, '${path} must contain at least one lowercase character')\n .matches(/[A-Z]/, '${path} must contain at least one uppercase character')\n .matches(/\\d/, '${path} must contain at least one number');\n\nexport const roles = yup.array(yup.strapiID()).min(1);\n\nconst isAPluginName = yup\n .string()\n .test('is-a-plugin-name', 'is not a plugin name', function (value) {\n return [undefined, 'admin', ...Object.keys(strapi.plugins)].includes(value)\n ? true\n : this.createError({ path: this.path, message: `${this.path} is not an existing plugin` });\n });\n\nexport const arrayOfConditionNames = yup\n .array()\n .of(yup.string())\n .test('is-an-array-of-conditions', 'is not a plugin name', function (value) {\n const ids = strapi.service('admin::permission').conditionProvider.keys();\n return _.isUndefined(value) || _.difference(value, ids).length === 0\n ? true\n : this.createError({ path: this.path, message: `contains conditions that don't exist` });\n });\n\nexport const permissionsAreEquals = (a: any, b: any) =>\n a.action === b.action && (a.subject === b.subject || (_.isNil(a.subject) && _.isNil(b.subject)));\n\nconst checkNoDuplicatedPermissions = (permissions: unknown) =>\n !Array.isArray(permissions) ||\n permissions.every((permA, i) =>\n permissions.slice(i + 1).every((permB) => !permissionsAreEquals(permA, permB))\n );\n\nconst checkNilFields = (action: Action) =>\n function (fields: typeof actionFields) {\n // If the parent has no action field, then we ignore this test\n if (isNil(action)) {\n return true;\n }\n\n return actionDomain.appliesToProperty('fields', action) || isNil(fields);\n };\n\nconst fieldsPropertyValidation = (action: Action) =>\n yup\n .array()\n .of(yup.string())\n .nullable()\n .test(\n 'field-nested',\n 'Fields format are incorrect (bad nesting).',\n checkFieldsAreCorrectlyNested\n )\n .test(\n 'field-nested',\n 'Fields format are incorrect (duplicates).',\n checkFieldsDontHaveDuplicates\n )\n .test(\n 'fields-restriction',\n 'The permission at ${path} must have fields set to null or undefined',\n // @ts-expect-error yup types\n checkNilFields(action)\n );\n\nexport const permission = yup\n .object()\n .shape({\n action: yup\n .string()\n .required()\n .test('action-validity', 'action is not an existing permission action', function (actionId) {\n // If the action field is Nil, ignore the test and let the required check handle the error\n if (isNil(actionId)) {\n return true;\n }\n\n return !!getActionFromProvider(actionId);\n }),\n actionParameters: yup.object().nullable(),\n subject: yup\n .string()\n .nullable()\n .test('subject-validity', 'Invalid subject submitted', function (subject) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action);\n\n if (!action) {\n return true;\n }\n\n if (isNil(action.subjects)) {\n return isNil(subject);\n }\n\n if (isArray(action.subjects) && !isNil(subject)) {\n return action.subjects.includes(subject);\n }\n\n return false;\n }),\n properties: yup\n .object()\n .test('properties-structure', 'Invalid property set at ${path}', function (properties) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n const hasNoProperties = isEmpty(properties) || isNil(properties);\n\n if (!has('options.applyToProperties', action)) {\n return hasNoProperties;\n }\n\n if (hasNoProperties) {\n return true;\n }\n\n const { applyToProperties } = action.options;\n\n if (!isArray(applyToProperties)) {\n return false;\n }\n\n return Object.keys(properties).every((property) => applyToProperties.includes(property));\n })\n .test(\n 'fields-property',\n 'Invalid fields property at ${path}',\n async function (properties = {}) {\n // @ts-expect-error yup types\n const action = getActionFromProvider(this.options.parent.action) as any;\n\n if (!action || !properties) {\n return true;\n }\n\n if (!actionDomain.appliesToProperty('fields', action)) {\n return true;\n }\n\n try {\n await fieldsPropertyValidation(action).validate(properties.fields, {\n strict: true,\n abortEarly: false,\n });\n return true;\n } catch (e: any) {\n // Propagate fieldsPropertyValidation error with updated path\n throw this.createError({\n message: e.message,\n path: `${this.path}.fields`,\n });\n }\n }\n ),\n conditions: yup.array().of(yup.string()),\n })\n .noUnknown();\n\nexport const updatePermissions = yup\n .object()\n .shape({\n permissions: yup\n .array()\n .required()\n .of(permission)\n .test(\n 'duplicated-permissions',\n 'Some permissions are duplicated (same action and subject)',\n checkNoDuplicatedPermissions\n ),\n })\n .required()\n .noUnknown();\n\nexport default {\n email,\n firstname,\n lastname,\n username,\n password,\n roles,\n isAPluginName,\n arrayOfConditionNames,\n permission,\n updatePermissions,\n};\n"],"names":["getActionFromProvider","actionId","getService","actionProvider","get","email","yup","string","lowercase","firstname","trim","min","lastname","username","password","test","value","byteSize","TextEncoder","encode","length","matches","roles","array","strapiID","isAPluginName","undefined","Object","keys","strapi","plugins","includes","createError","path","message","arrayOfConditionNames","of","ids","service","conditionProvider","_","isUndefined","difference","permissionsAreEquals","a","b","action","subject","isNil","checkNoDuplicatedPermissions","permissions","Array","isArray","every","permA","i","slice","permB","checkNilFields","fields","actionDomain","appliesToProperty","fieldsPropertyValidation","nullable","checkFieldsAreCorrectlyNested","checkFieldsDontHaveDuplicates","permission","object","shape","required","actionParameters","options","parent","subjects","properties","hasNoProperties","isEmpty","has","applyToProperties","property","validate","strict","abortEarly","e","conditions","noUnknown","updatePermissions"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;gBAuBf,OAAO;cAkCT,OAAO;iBAsBJ,OAAO;gBAcR,OAAO;mBA4BJ,OAAO;
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/controllers/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;;gBAuBf,OAAO;cAkCT,OAAO;iBAsBJ,OAAO;gBAcR,OAAO;mBA4BJ,OAAO;IAmB5B;;;OAGG;oBACmB,OAAO;;AA1H/B,wBA4IE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/services/user.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAK1C,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACxB,kBAAkB,EAElB,sBAAsB,EAEvB,MAAM,kCAAkC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/services/user.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAK1C,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACxB,kBAAkB,EAElB,sBAAsB,EAEvB,MAAM,kCAAkC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqkB1C,wBAoBE"}
|
|
@@ -38,3 +38,19 @@ export declare namespace GetAiUsage {
|
|
|
38
38
|
};
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* GET /ai-feature-config - Get AI feature config
|
|
43
|
+
*/
|
|
44
|
+
export declare namespace GetAIFeatureConfig {
|
|
45
|
+
interface Request {
|
|
46
|
+
query: {};
|
|
47
|
+
body: {};
|
|
48
|
+
}
|
|
49
|
+
interface Response {
|
|
50
|
+
data: {
|
|
51
|
+
isAIi18nConfigured: boolean;
|
|
52
|
+
isAIMediaLibraryConfigured: boolean;
|
|
53
|
+
};
|
|
54
|
+
error?: errors.ApplicationError;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../shared/contracts/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,UAAiB,OAAO;QACtB,KAAK,EAAE,EAAE,CAAC;QACV,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,UAAiB,OAAO;QACtB,KAAK,EAAE,EAAE,CAAC;QACV,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE;YACZ,cAAc,EAAE,MAAM,CAAC;YACvB,WAAW,EAAE,MAAM,CAAC;YACpB,kBAAkB,EAAE,MAAM,CAAC;YAC3B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,YAAY,EAAE,OAAO,CAAC;YACtB,gBAAgB,EAAE,MAAM,CAAC;YACzB,oBAAoB,EAAE,MAAM,CAAC;YAC7B,gBAAgB,EAAE,MAAM,CAAC;YACzB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH;CACF"}
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../../shared/contracts/ai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE5C;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,UAAiB,OAAO;QACtB,KAAK,EAAE,EAAE,CAAC;QACV,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,UAAiB,OAAO;QACtB,KAAK,EAAE,EAAE,CAAC;QACV,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE;YACZ,cAAc,EAAE,MAAM,CAAC;YACvB,WAAW,EAAE,MAAM,CAAC;YACpB,kBAAkB,EAAE,MAAM,CAAC;YAC3B,oBAAoB,EAAE,OAAO,CAAC;YAC9B,YAAY,EAAE,OAAO,CAAC;YACtB,gBAAgB,EAAE,MAAM,CAAC;YACzB,oBAAoB,EAAE,MAAM,CAAC;YAC7B,gBAAgB,EAAE,MAAM,CAAC;YACzB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH;CACF;AAED;;GAEG;AACH,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,KAAK,EAAE,EAAE,CAAC;QACV,IAAI,EAAE,EAAE,CAAC;KACV;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,kBAAkB,EAAE,OAAO,CAAC;YAC5B,0BAA0B,EAAE,OAAO,CAAC;SACrC,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC;KACjC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/admin",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.30.1",
|
|
4
4
|
"description": "Strapi Admin",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -86,10 +86,10 @@
|
|
|
86
86
|
"@reduxjs/toolkit": "1.9.7",
|
|
87
87
|
"@strapi/design-system": "2.0.0-rc.30",
|
|
88
88
|
"@strapi/icons": "2.0.0-rc.30",
|
|
89
|
-
"@strapi/permissions": "5.
|
|
90
|
-
"@strapi/types": "5.
|
|
91
|
-
"@strapi/typescript-utils": "5.
|
|
92
|
-
"@strapi/utils": "5.
|
|
89
|
+
"@strapi/permissions": "5.30.1",
|
|
90
|
+
"@strapi/types": "5.30.1",
|
|
91
|
+
"@strapi/typescript-utils": "5.30.1",
|
|
92
|
+
"@strapi/utils": "5.30.1",
|
|
93
93
|
"@testing-library/dom": "10.1.0",
|
|
94
94
|
"@testing-library/react": "15.0.7",
|
|
95
95
|
"@testing-library/user-event": "14.5.2",
|
|
@@ -143,8 +143,8 @@
|
|
|
143
143
|
"zod": "3.25.67"
|
|
144
144
|
},
|
|
145
145
|
"devDependencies": {
|
|
146
|
-
"@strapi/admin-test-utils": "5.
|
|
147
|
-
"@strapi/data-transfer": "5.
|
|
146
|
+
"@strapi/admin-test-utils": "5.30.1",
|
|
147
|
+
"@strapi/data-transfer": "5.30.1",
|
|
148
148
|
"@types/codemirror5": "npm:@types/codemirror@^5.60.15",
|
|
149
149
|
"@types/fs-extra": "11.0.4",
|
|
150
150
|
"@types/invariant": "2.2.36",
|