@strapi/admin 5.57.0 → 5.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/ConfirmDialog.js +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.js.map +1 -1
- package/dist/admin/admin/src/components/ConfirmDialog.mjs +10 -9
- package/dist/admin/admin/src/components/ConfirmDialog.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +57 -12
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +57 -12
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/Form.js +3 -1
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +3 -1
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.js +3 -2
- package/dist/admin/admin/src/components/FormInputs/Boolean.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs +3 -2
- package/dist/admin/admin/src/components/FormInputs/Boolean.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js +5 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +5 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.js +2 -1
- package/dist/admin/admin/src/components/PageHelpers.js.map +1 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs +2 -1
- package/dist/admin/admin/src/components/PageHelpers.mjs.map +1 -1
- package/dist/admin/admin/src/components/Pagination.js +7 -6
- package/dist/admin/admin/src/components/Pagination.js.map +1 -1
- package/dist/admin/admin/src/components/Pagination.mjs +7 -6
- package/dist/admin/admin/src/components/Pagination.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +2 -1
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +2 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +6 -12
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +7 -13
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Table.js +3 -1
- package/dist/admin/admin/src/components/Table.js.map +1 -1
- package/dist/admin/admin/src/components/Table.mjs +3 -1
- package/dist/admin/admin/src/components/Table.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.js.map +1 -1
- package/dist/admin/admin/src/components/WidgetRoot.mjs.map +1 -1
- package/dist/admin/admin/src/constants.js +14 -0
- package/dist/admin/admin/src/constants.js.map +1 -1
- package/dist/admin/admin/src/constants.mjs +14 -0
- package/dist/admin/admin/src/constants.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Plugin.mjs.map +1 -1
- package/dist/admin/admin/src/features/Auth.js +2 -1
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +2 -1
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/features/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js +6 -12
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs +6 -12
- package/dist/admin/admin/src/pages/Auth/components/ResetPassword.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/components/FreeTrialEndedModal.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js +10 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs +10 -2
- package/dist/admin/admin/src/pages/Settings/components/SettingsNav.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormApiTokenContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +3 -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 +3 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenTypeSelect.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs +6 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -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 +4 -4
- 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 +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/utils/transformPermissionsData.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +7 -58
- 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 +7 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js +217 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs +195 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.mjs.map +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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js +185 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs +162 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js +342 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.js.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs +320 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.mjs.map +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/CollapsePropertyMatrix.js +9 -4
- 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 +9 -4
- 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 +15 -9
- 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 +15 -9
- 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 +5 -2
- 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 +5 -2
- 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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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 +2 -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/hooks/usePermissionsDataManager.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/hooks/usePermissionsDataManager.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +3 -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 +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs +4 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/Events.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +18 -3
- 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 +18 -3
- 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.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/router.js.map +1 -1
- package/dist/admin/admin/src/router.mjs.map +1 -1
- package/dist/admin/admin/src/services/admin.js +11 -1
- package/dist/admin/admin/src/services/admin.js.map +1 -1
- package/dist/admin/admin/src/services/admin.mjs +11 -2
- package/dist/admin/admin/src/services/admin.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/translations/en.json.js +71 -4
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +71 -4
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/eu.json.js +1 -1
- package/dist/admin/admin/src/translations/eu.json.mjs +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.mjs +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -1
- package/dist/admin/admin/src/utils/cookies.js +7 -6
- package/dist/admin/admin/src/utils/cookies.js.map +1 -1
- package/dist/admin/admin/src/utils/cookies.mjs +7 -6
- package/dist/admin/admin/src/utils/cookies.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +24 -0
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +24 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +2 -1
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +2 -1
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.js +52 -22
- 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 +53 -23
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +16 -29
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +18 -31
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js +473 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs +471 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +2 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/index.js +1 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.js +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/admin/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/admin/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/admin/shared/utils/get-project-type.js +49 -0
- package/dist/admin/shared/utils/get-project-type.js.map +1 -0
- package/dist/admin/shared/utils/get-project-type.mjs +46 -0
- package/dist/admin/shared/utils/get-project-type.mjs.map +1 -0
- package/dist/admin/src/components/Filters.d.ts +1 -1
- package/dist/admin/src/components/Form.d.ts +1 -1
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/pages/Settings/pages/ApiTokens/EditView/components/BoundRoute.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.d.ts +12 -0
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.d.ts +14 -0
- package/dist/admin/src/pages/Settings/pages/ApplicationInfo/components/SupportCard.d.ts +2 -0
- package/dist/admin/src/services/admin.d.ts +2 -2
- package/dist/admin/src/types/permissions.d.ts +1 -0
- package/dist/admin/src/utils/cookies.d.ts +7 -6
- package/dist/admin/src/utils/getFetchClient.d.ts +25 -0
- package/dist/ee/admin/src/hooks/useLicenseLimits.d.ts +29 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage.d.ts +6 -1
- package/dist/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.d.ts +2 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/entitlements.d.ts +8 -0
- package/dist/ee/server/src/audit-logs/entitlements.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +16 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/admin.d.ts +36 -10
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication-utils/middlewares.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +36 -10
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +36 -10
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts.map +1 -1
- package/dist/ee/server/src/validation/role.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/entitlements.js +25 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.mjs +23 -0
- package/dist/server/ee/server/src/audit-logs/entitlements.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +20 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +19 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.js +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +3 -3
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +76 -3
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +76 -3
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js +28 -10
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs +28 -10
- package/dist/server/ee/server/src/controllers/authentication-utils/middlewares.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +2 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +2 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/validation/role.js +4 -2
- package/dist/server/ee/server/src/validation/role.js.map +1 -1
- package/dist/server/ee/server/src/validation/role.mjs +4 -2
- package/dist/server/ee/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/ai/services/ai.js.map +1 -1
- package/dist/server/server/src/ai/services/ai.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/auth.js +72 -0
- package/dist/server/server/src/audit-logs/auth.js.map +1 -0
- package/dist/server/server/src/audit-logs/auth.mjs +67 -0
- package/dist/server/server/src/audit-logs/auth.mjs.map +1 -0
- package/dist/server/server/src/config/admin-actions.js +7 -0
- package/dist/server/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/server/src/config/admin-actions.mjs +7 -0
- package/dist/server/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +17 -12
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +17 -12
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/authentication.js +34 -8
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.mjs +34 -8
- package/dist/server/server/src/controllers/authentication.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/register.js +4 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +4 -0
- package/dist/server/server/src/register.mjs.map +1 -1
- package/dist/server/server/src/routes/admin.js +18 -0
- package/dist/server/server/src/routes/admin.js.map +1 -1
- package/dist/server/server/src/routes/admin.mjs +18 -0
- package/dist/server/server/src/routes/admin.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +4 -8
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +4 -8
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js +4 -2
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs +4 -3
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/constants.js +4 -0
- package/dist/server/server/src/services/constants.js.map +1 -1
- package/dist/server/server/src/services/constants.mjs +4 -0
- package/dist/server/server/src/services/constants.mjs.map +1 -1
- package/dist/server/server/src/services/debug-dump.js +173 -0
- package/dist/server/server/src/services/debug-dump.js.map +1 -0
- package/dist/server/server/src/services/debug-dump.mjs +166 -0
- package/dist/server/server/src/services/debug-dump.mjs.map +1 -0
- package/dist/server/server/src/services/index.js +3 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -1
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/handlers.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +8 -5
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +8 -5
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/utils/debug-dump/redact.js +197 -0
- package/dist/server/server/src/utils/debug-dump/redact.js.map +1 -0
- package/dist/server/server/src/utils/debug-dump/redact.mjs +194 -0
- package/dist/server/server/src/utils/debug-dump/redact.mjs.map +1 -0
- package/dist/server/server/src/validation/admin-tokens.js +4 -4
- package/dist/server/server/src/validation/admin-tokens.js.map +1 -1
- package/dist/server/server/src/validation/admin-tokens.mjs +4 -4
- package/dist/server/server/src/validation/admin-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/api-tokens.js +4 -4
- package/dist/server/server/src/validation/api-tokens.js.map +1 -1
- package/dist/server/server/src/validation/api-tokens.mjs +4 -4
- package/dist/server/server/src/validation/api-tokens.mjs.map +1 -1
- package/dist/server/server/src/validation/role.js +6 -4
- package/dist/server/server/src/validation/role.js.map +1 -1
- package/dist/server/server/src/validation/role.mjs +6 -4
- package/dist/server/server/src/validation/role.mjs.map +1 -1
- package/dist/server/server/src/validation/transfer/token.js +4 -4
- package/dist/server/server/src/validation/transfer/token.js.map +1 -1
- package/dist/server/server/src/validation/transfer/token.mjs +4 -4
- package/dist/server/server/src/validation/transfer/token.mjs.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.js +13 -10
- package/dist/server/shared/utils/auth-cookie-path.js.map +1 -1
- package/dist/server/shared/utils/auth-cookie-path.mjs +13 -10
- package/dist/server/shared/utils/auth-cookie-path.mjs.map +1 -1
- package/dist/server/shared/utils/get-project-type.js +49 -0
- package/dist/server/shared/utils/get-project-type.js.map +1 -0
- package/dist/server/shared/utils/get-project-type.mjs +46 -0
- package/dist/server/shared/utils/get-project-type.mjs.map +1 -0
- package/dist/server/shared/utils/session-auth.js +70 -3
- package/dist/server/shared/utils/session-auth.js.map +1 -1
- package/dist/server/shared/utils/session-auth.mjs +70 -4
- package/dist/server/shared/utils/session-auth.mjs.map +1 -1
- package/dist/server/src/ai/services/ai.d.ts.map +1 -1
- package/dist/server/src/audit-logs/auth.d.ts +72 -0
- package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +3 -0
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +3 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/permission/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +8 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/auth.d.ts +6 -0
- package/dist/server/src/services/auth.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +2 -0
- package/dist/server/src/services/constants.d.ts.map +1 -1
- package/dist/server/src/services/debug-dump.d.ts +9 -0
- package/dist/server/src/services/debug-dump.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +5 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/handlers.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/utils/debug-dump/redact.d.ts +8 -0
- package/dist/server/src/utils/debug-dump/redact.d.ts.map +1 -0
- package/dist/server/src/validation/role.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +106 -0
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/dist/shared/contracts/transfer.d.ts.map +1 -1
- package/dist/shared/utils/__tests__/get-project-type.test.d.ts +1 -0
- package/dist/shared/utils/__tests__/get-project-type.test.d.ts.map +1 -0
- package/dist/shared/utils/auth-cookie-path.d.ts +13 -10
- package/dist/shared/utils/auth-cookie-path.d.ts.map +1 -1
- package/dist/shared/utils/get-project-type.d.ts +37 -0
- package/dist/shared/utils/get-project-type.d.ts.map +1 -0
- package/dist/shared/utils/session-auth.d.ts +16 -0
- package/dist/shared/utils/session-auth.d.ts.map +1 -1
- package/package.json +8 -8
- package/dist/admin/admin/src/utils/getProjectType.js +0 -22
- package/dist/admin/admin/src/utils/getProjectType.js.map +0 -1
- package/dist/admin/admin/src/utils/getProjectType.mjs +0 -20
- package/dist/admin/admin/src/utils/getProjectType.mjs.map +0 -1
- package/dist/admin/src/utils/getProjectType.d.ts +0 -16
package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApplicationInfoPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { DIMENSION, SIZE } from './utils/constants';\n\nconst AdminSeatInfoCE = () => null;\nconst AIUageDataCE = () => null;\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const latestStrapiReleaseTag = useAppInfo(\n 'ApplicationInfoPage',\n (state) => state.latestStrapiReleaseTag\n );\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const AdminSeatInfo = useEnterprise(\n AdminSeatInfoCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo'\n )\n ).AdminSeatInfoEE\n );\n const isAiEnabled = window.strapi.ai?.enabled !== false;\n const AIUsageData = useEnterprise(\n AIUageDataCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AIUsage'\n )\n ).AIUsage,\n {\n enabled: isAiEnabled,\n }\n );\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n // block rendering until the EE component is fully loaded\n if (!AdminSeatInfo) {\n return null;\n }\n\n if (!AIUsageData) {\n return null;\n }\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />} fullWidth>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://github.com/strapi/strapi/releases/tag/${latestStrapiReleaseTag}`}\n endIcon={<ExternalLink />}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.plan-title',\n defaultMessage: 'current plan',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>{window.strapi.projectType}</Typography>\n <Link\n href=\"https://strapi.io/pricing-self-hosted\"\n endIcon={<ExternalLink />}\n target=\"_blank\"\n >\n {formatMessage({\n id: 'Settings.application.link-pricing',\n defaultMessage: 'See all pricing plans',\n })}\n </Link>\n </Flex>\n </Grid.Item>\n\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n <AdminSeatInfo />\n <AIUsageData />\n </Grid.Root>\n </Flex>\n {canRead && (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["AdminSeatInfoCE","AIUageDataCE","ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","latestStrapiReleaseTag","useAppInfo","state","nodeVersion","shouldUpdateStrapi","strapiVersion","AdminSeatInfo","useEnterprise","AdminSeatInfoEE","isAiEnabled","window","strapi","ai","enabled","AIUsageData","AIUsage","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","_Fragment","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Layouts","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","fullWidth","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Root","Item","col","xs","textColor","Link","href","endIcon","ExternalLink","target","rel","projectType","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ApplicationInfoPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Grid, Link, Typography } from '@strapi/design-system';\nimport { Check, ExternalLink } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useSelector } from 'react-redux';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useAppInfo } from '../../../../features/AppInfo';\nimport { useConfiguration } from '../../../../features/Configuration';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { selectAdminPermissions } from '../../../../selectors';\n\nimport { LogoInput, LogoInputProps } from './components/LogoInput';\nimport { PlanCard } from './components/PlanCard';\nimport { SupportCard } from './components/SupportCard';\nimport { DIMENSION, SIZE } from './utils/constants';\n\n/* -------------------------------------------------------------------------------------------------\n * ApplicationInfoPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ApplicationInfoPage = () => {\n const { trackUsage } = useTracking();\n const { formatMessage } = useIntl();\n const { logos: serverLogos, updateProjectSettings } = useConfiguration('ApplicationInfoPage');\n const [logos, setLogos] = React.useState({ menu: serverLogos.menu, auth: serverLogos.auth });\n const { settings } = useSelector(selectAdminPermissions);\n\n const nodeVersion = useAppInfo('ApplicationInfoPage', (state) => state.nodeVersion);\n const shouldUpdateStrapi = useAppInfo('ApplicationInfoPage', (state) => state.shouldUpdateStrapi);\n const strapiVersion = useAppInfo('ApplicationInfoPage', (state) => state.strapiVersion);\n\n const {\n allowedActions: { canRead, canUpdate },\n } = useRBAC(settings ? settings['project-settings'] : {});\n\n const handleSubmit: React.FormEventHandler<HTMLFormElement> = (e) => {\n e.preventDefault();\n\n updateProjectSettings({\n authLogo: logos.auth.custom ?? null,\n menuLogo: logos.menu.custom ?? null,\n });\n };\n\n const handleChangeLogo =\n (logo: 'menu' | 'auth'): LogoInputProps['onChangeLogo'] =>\n (newLogo) => {\n /**\n * If there's no newLogo value we can assume we're reseting.\n */\n if (newLogo === null) {\n trackUsage('didClickResetLogo', {\n logo,\n });\n }\n\n setLogos((prev) => ({\n ...prev,\n [logo]: {\n ...prev[logo],\n custom: newLogo,\n },\n }));\n };\n\n React.useEffect(() => {\n setLogos({\n menu: serverLogos.menu,\n auth: serverLogos.auth,\n });\n }, [serverLogos]);\n\n const isSaveDisabled =\n logos.auth.custom === serverLogos.auth.custom && logos.menu.custom === serverLogos.menu.custom;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'Settings.application.header',\n defaultMessage: 'Application',\n }),\n }\n )}\n </Page.Title>\n <Page.Main>\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n title={formatMessage({\n id: 'Settings.application.title',\n defaultMessage: 'Overview',\n })}\n subtitle={formatMessage({\n id: 'Settings.application.description',\n defaultMessage: 'Administration panel’s global information',\n })}\n primaryAction={\n canUpdate && (\n <Button disabled={isSaveDisabled} type=\"submit\" startIcon={<Check />} fullWidth>\n {formatMessage({ id: 'global.save', defaultMessage: 'Save' })}\n </Button>\n )\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n\n <Grid.Root gap={5} tag=\"dl\">\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.strapiVersion',\n defaultMessage: 'strapi version',\n })}\n </Typography>\n <Flex gap={3} direction=\"column\" alignItems=\"start\" tag=\"dd\">\n <Typography>v{strapiVersion}</Typography>\n {shouldUpdateStrapi && (\n <Link\n href={`https://docs.strapi.io/cms/upgrades`}\n endIcon={<ExternalLink />}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'Settings.application.link-upgrade',\n defaultMessage: 'Upgrade your admin panel',\n })}\n </Link>\n )}\n </Flex>\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"start\">\n <Typography variant=\"sigma\" textColor=\"neutral600\" tag=\"dt\">\n {formatMessage({\n id: 'Settings.application.node-version',\n defaultMessage: 'node version',\n })}\n </Typography>\n <Typography tag=\"dd\">{nodeVersion}</Typography>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n <PlanCard />\n {canRead && (\n <Box\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingRight={7}\n paddingLeft={7}\n >\n <Typography variant=\"delta\" tag=\"h3\">\n {formatMessage({\n id: 'Settings.application.customization',\n defaultMessage: 'Customization',\n })}\n </Typography>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage(\n {\n id: 'Settings.application.customization.size-details',\n defaultMessage:\n 'Max dimension: {dimension}×{dimension}, Max file size: {size}KB',\n },\n { dimension: DIMENSION, size: SIZE }\n )}\n </Typography>\n <Grid.Root paddingTop={4} gap={4}>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.menu.custom}\n defaultLogo={logos.menu.default}\n hint={formatMessage({\n id: 'Settings.application.customization.menu-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the main navigation',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.menu-logo.title',\n defaultMessage: 'Menu logo',\n })}\n onChangeLogo={handleChangeLogo('menu')}\n />\n </Grid.Item>\n <Grid.Item col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LogoInput\n canUpdate={canUpdate}\n customLogo={logos.auth.custom}\n defaultLogo={logos.auth.default}\n hint={formatMessage({\n id: 'Settings.application.customization.auth-logo.carousel-hint',\n defaultMessage: 'Replace the logo in the authentication pages',\n })}\n label={formatMessage({\n id: 'Settings.application.customization.carousel.auth-logo.title',\n defaultMessage: 'Auth logo',\n })}\n onChangeLogo={handleChangeLogo('auth')}\n />\n </Grid.Item>\n </Grid.Root>\n </Box>\n )}\n <SupportCard />\n </Flex>\n </Layouts.Content>\n </form>\n </Page.Main>\n </>\n );\n};\n\nexport { ApplicationInfoPage };\n"],"names":["ApplicationInfoPage","trackUsage","useTracking","formatMessage","useIntl","logos","serverLogos","updateProjectSettings","useConfiguration","setLogos","React","useState","menu","auth","settings","useSelector","selectAdminPermissions","nodeVersion","useAppInfo","state","shouldUpdateStrapi","strapiVersion","allowedActions","canRead","canUpdate","useRBAC","handleSubmit","e","preventDefault","authLogo","custom","menuLogo","handleChangeLogo","logo","newLogo","prev","useEffect","isSaveDisabled","_jsxs","_Fragment","_jsx","Page","Title","id","defaultMessage","name","Main","form","onSubmit","Layouts","Header","title","subtitle","primaryAction","Button","disabled","type","startIcon","Check","fullWidth","Content","Flex","direction","alignItems","gap","hasRadius","background","shadow","paddingTop","paddingBottom","paddingRight","paddingLeft","Typography","variant","tag","Grid","Root","Item","col","xs","textColor","Link","href","endIcon","ExternalLink","target","rel","PlanCard","Box","dimension","DIMENSION","size","SIZE","LogoInput","customLogo","defaultLogo","default","hint","label","onChangeLogo","SupportCard"],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var designSystem = require('@strapi/design-system');
|
|
6
|
+
var icons = require('@strapi/icons');
|
|
7
|
+
var reactIntl = require('react-intl');
|
|
8
|
+
var Notifications = require('../../../../../features/Notifications.js');
|
|
9
|
+
var useClipboard = require('../../../../../hooks/useClipboard.js');
|
|
10
|
+
var admin = require('../../../../../services/admin.js');
|
|
11
|
+
|
|
12
|
+
function _interopNamespace(e) {
|
|
13
|
+
if (e && e.__esModule) return e;
|
|
14
|
+
var n = Object.create(null);
|
|
15
|
+
if (e) {
|
|
16
|
+
Object.keys(e).forEach(function (k) {
|
|
17
|
+
if (k !== 'default') {
|
|
18
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
19
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return e[k]; }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
n.default = e;
|
|
27
|
+
return Object.freeze(n);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Generates the redacted diagnostic snapshot behind the Support card's "Generate snapshot" action.
|
|
34
|
+
* The fetch is triggered as soon as the modal opens, so the user only ever sees a spinner followed
|
|
35
|
+
* by the payload (or, on failure, a notification while the modal closes itself).
|
|
36
|
+
*/ const DiagnosticSnapshotModal = ({ isOpen, onClose })=>{
|
|
37
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
38
|
+
const { toggleNotification } = Notifications.useNotification();
|
|
39
|
+
const { copy } = useClipboard.useClipboard();
|
|
40
|
+
const [triggerGetDump, { data, isFetching }] = admin.useLazyGetDebugDumpQuery();
|
|
41
|
+
// Failure is read from this open's own request. The lazy query keeps `isError` from an earlier
|
|
42
|
+
// failed request while a new one is in flight, which closed the next open straight away.
|
|
43
|
+
React__namespace.useEffect(()=>{
|
|
44
|
+
if (!isOpen) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
let active = true;
|
|
48
|
+
triggerGetDump().unwrap().catch(()=>{
|
|
49
|
+
if (!active) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
toggleNotification({
|
|
53
|
+
type: 'danger',
|
|
54
|
+
message: formatMessage({
|
|
55
|
+
id: 'Settings.debug-dump.error',
|
|
56
|
+
defaultMessage: 'Failed to generate the debug dump. Check the server logs and try again.'
|
|
57
|
+
})
|
|
58
|
+
});
|
|
59
|
+
onClose();
|
|
60
|
+
});
|
|
61
|
+
return ()=>{
|
|
62
|
+
active = false;
|
|
63
|
+
};
|
|
64
|
+
}, [
|
|
65
|
+
isOpen,
|
|
66
|
+
triggerGetDump,
|
|
67
|
+
toggleNotification,
|
|
68
|
+
formatMessage,
|
|
69
|
+
onClose
|
|
70
|
+
]);
|
|
71
|
+
const serialized = React__namespace.useMemo(()=>data === undefined ? '' : JSON.stringify(data, null, 2), [
|
|
72
|
+
data
|
|
73
|
+
]);
|
|
74
|
+
const isReady = !isFetching && data !== undefined;
|
|
75
|
+
const handleCopy = async ()=>{
|
|
76
|
+
const didCopy = await copy(serialized);
|
|
77
|
+
toggleNotification({
|
|
78
|
+
type: didCopy ? 'success' : 'danger',
|
|
79
|
+
message: didCopy ? formatMessage({
|
|
80
|
+
id: 'Settings.debug-dump.copied',
|
|
81
|
+
defaultMessage: 'Copied to clipboard'
|
|
82
|
+
}) : formatMessage({
|
|
83
|
+
id: 'Settings.debug-dump.copy-failed',
|
|
84
|
+
defaultMessage: 'Could not copy to clipboard'
|
|
85
|
+
})
|
|
86
|
+
});
|
|
87
|
+
};
|
|
88
|
+
const handleDownload = ()=>{
|
|
89
|
+
const blob = new Blob([
|
|
90
|
+
serialized
|
|
91
|
+
], {
|
|
92
|
+
type: 'application/json'
|
|
93
|
+
});
|
|
94
|
+
const url = URL.createObjectURL(blob);
|
|
95
|
+
const anchor = document.createElement('a');
|
|
96
|
+
anchor.href = url;
|
|
97
|
+
anchor.download = `strapi-debug-dump-${new Date().toISOString().replaceAll(':', '-')}.json`;
|
|
98
|
+
// In the document for the click and revoked on a later turn, as the audit-log export does:
|
|
99
|
+
// some browsers cancel a click on a detached anchor or a download whose URL is gone.
|
|
100
|
+
document.body.appendChild(anchor);
|
|
101
|
+
anchor.click();
|
|
102
|
+
anchor.remove();
|
|
103
|
+
setTimeout(()=>URL.revokeObjectURL(url), 60000);
|
|
104
|
+
};
|
|
105
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Root, {
|
|
106
|
+
open: isOpen,
|
|
107
|
+
onOpenChange: onClose,
|
|
108
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Content, {
|
|
109
|
+
children: [
|
|
110
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Header, {
|
|
111
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Title, {
|
|
112
|
+
children: formatMessage({
|
|
113
|
+
id: 'Settings.debug-dump.snapshot-modal.title',
|
|
114
|
+
defaultMessage: 'Diagnostic snapshot'
|
|
115
|
+
})
|
|
116
|
+
})
|
|
117
|
+
}),
|
|
118
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Body, {
|
|
119
|
+
children: isReady ? /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
120
|
+
direction: "column",
|
|
121
|
+
alignItems: "stretch",
|
|
122
|
+
gap: 4,
|
|
123
|
+
children: [
|
|
124
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
125
|
+
children: formatMessage({
|
|
126
|
+
id: 'Settings.debug-dump.snapshot-modal.description',
|
|
127
|
+
defaultMessage: "This snapshot describes how your project is built so a third party can reproduce the bug locally. It does not contain any of your app's content and no credentials."
|
|
128
|
+
})
|
|
129
|
+
}),
|
|
130
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
131
|
+
variant: "sigma",
|
|
132
|
+
children: formatMessage({
|
|
133
|
+
id: 'Settings.debug-dump.payload-label',
|
|
134
|
+
defaultMessage: 'payload'
|
|
135
|
+
})
|
|
136
|
+
}),
|
|
137
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {
|
|
138
|
+
hasRadius: true,
|
|
139
|
+
padding: 4,
|
|
140
|
+
maxHeight: "26rem",
|
|
141
|
+
overflow: "auto",
|
|
142
|
+
// A code surface that stays dark in BOTH themes. The design-system neutrals invert
|
|
143
|
+
// between themes (`neutral800` is #32324d in light but #ffffff in dark, and
|
|
144
|
+
// `neutral0` inverts with it), so tokens here flip the block to white on dark.
|
|
145
|
+
// These are the same fixed values the WYSIWYG preview uses for its code surface.
|
|
146
|
+
style: {
|
|
147
|
+
backgroundColor: '#32324d'
|
|
148
|
+
},
|
|
149
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
150
|
+
tag: "pre",
|
|
151
|
+
variant: "pi",
|
|
152
|
+
style: {
|
|
153
|
+
color: '#ffffff',
|
|
154
|
+
whiteSpace: 'pre-wrap',
|
|
155
|
+
wordBreak: 'break-word',
|
|
156
|
+
margin: 0
|
|
157
|
+
},
|
|
158
|
+
children: serialized
|
|
159
|
+
})
|
|
160
|
+
})
|
|
161
|
+
]
|
|
162
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
163
|
+
justifyContent: "center",
|
|
164
|
+
alignItems: "center",
|
|
165
|
+
padding: 7,
|
|
166
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Loader, {
|
|
167
|
+
children: formatMessage({
|
|
168
|
+
id: 'Settings.debug-dump.generating',
|
|
169
|
+
defaultMessage: 'Generating diagnostic snapshot'
|
|
170
|
+
})
|
|
171
|
+
})
|
|
172
|
+
})
|
|
173
|
+
}),
|
|
174
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Modal.Footer, {
|
|
175
|
+
children: [
|
|
176
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Modal.Close, {
|
|
177
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
178
|
+
variant: "tertiary",
|
|
179
|
+
children: formatMessage({
|
|
180
|
+
id: 'app.components.Button.cancel',
|
|
181
|
+
defaultMessage: 'Cancel'
|
|
182
|
+
})
|
|
183
|
+
})
|
|
184
|
+
}),
|
|
185
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
186
|
+
gap: 2,
|
|
187
|
+
children: [
|
|
188
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
189
|
+
variant: "secondary",
|
|
190
|
+
onClick: handleCopy,
|
|
191
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Duplicate, {}),
|
|
192
|
+
disabled: !isReady,
|
|
193
|
+
children: formatMessage({
|
|
194
|
+
id: 'Settings.debug-dump.copy',
|
|
195
|
+
defaultMessage: 'Copy'
|
|
196
|
+
})
|
|
197
|
+
}),
|
|
198
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Button, {
|
|
199
|
+
onClick: handleDownload,
|
|
200
|
+
startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Download, {}),
|
|
201
|
+
disabled: !isReady,
|
|
202
|
+
children: formatMessage({
|
|
203
|
+
id: 'Settings.debug-dump.download',
|
|
204
|
+
defaultMessage: 'Download'
|
|
205
|
+
})
|
|
206
|
+
})
|
|
207
|
+
]
|
|
208
|
+
})
|
|
209
|
+
]
|
|
210
|
+
})
|
|
211
|
+
]
|
|
212
|
+
})
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
|
|
216
|
+
exports.DiagnosticSnapshotModal = DiagnosticSnapshotModal;
|
|
217
|
+
//# sourceMappingURL=DiagnosticSnapshotModal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticSnapshotModal.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Download, Duplicate } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useClipboard } from '../../../../../hooks/useClipboard';\nimport { useLazyGetDebugDumpQuery } from '../../../../../services/admin';\n\n/* -------------------------------------------------------------------------------------------------\n * DiagnosticSnapshotModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DiagnosticSnapshotModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\n/**\n * Generates the redacted diagnostic snapshot behind the Support card's \"Generate snapshot\" action.\n * The fetch is triggered as soon as the modal opens, so the user only ever sees a spinner followed\n * by the payload (or, on failure, a notification while the modal closes itself).\n */\nconst DiagnosticSnapshotModal = ({ isOpen, onClose }: DiagnosticSnapshotModalProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n const [triggerGetDump, { data, isFetching }] = useLazyGetDebugDumpQuery();\n\n // Failure is read from this open's own request. The lazy query keeps `isError` from an earlier\n // failed request while a new one is in flight, which closed the next open straight away.\n React.useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n let active = true;\n\n triggerGetDump()\n .unwrap()\n .catch(() => {\n if (!active) {\n return;\n }\n\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'Settings.debug-dump.error',\n defaultMessage:\n 'Failed to generate the debug dump. Check the server logs and try again.',\n }),\n });\n onClose();\n });\n\n return () => {\n active = false;\n };\n }, [isOpen, triggerGetDump, toggleNotification, formatMessage, onClose]);\n\n const serialized = React.useMemo(\n () => (data === undefined ? '' : JSON.stringify(data, null, 2)),\n [data]\n );\n\n const isReady = !isFetching && data !== undefined;\n\n const handleCopy = async () => {\n const didCopy = await copy(serialized);\n toggleNotification({\n type: didCopy ? 'success' : 'danger',\n message: didCopy\n ? formatMessage({ id: 'Settings.debug-dump.copied', defaultMessage: 'Copied to clipboard' })\n : formatMessage({\n id: 'Settings.debug-dump.copy-failed',\n defaultMessage: 'Could not copy to clipboard',\n }),\n });\n };\n\n const handleDownload = () => {\n const blob = new Blob([serialized], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `strapi-debug-dump-${new Date().toISOString().replaceAll(':', '-')}.json`;\n // In the document for the click and revoked on a later turn, as the audit-log export does:\n // some browsers cancel a click on a detached anchor or a download whose URL is gone.\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n setTimeout(() => URL.revokeObjectURL(url), 60000);\n };\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'Settings.debug-dump.snapshot-modal.title',\n defaultMessage: 'Diagnostic snapshot',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {isReady ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography>\n {formatMessage({\n id: 'Settings.debug-dump.snapshot-modal.description',\n defaultMessage:\n \"This snapshot describes how your project is built so a third party can reproduce the bug locally. It does not contain any of your app's content and no credentials.\",\n })}\n </Typography>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: 'Settings.debug-dump.payload-label',\n defaultMessage: 'payload',\n })}\n </Typography>\n <Box\n hasRadius\n padding={4}\n maxHeight=\"26rem\"\n overflow=\"auto\"\n // A code surface that stays dark in BOTH themes. The design-system neutrals invert\n // between themes (`neutral800` is #32324d in light but #ffffff in dark, and\n // `neutral0` inverts with it), so tokens here flip the block to white on dark.\n // These are the same fixed values the WYSIWYG preview uses for its code surface.\n style={{ backgroundColor: '#32324d' }}\n >\n <Typography\n tag=\"pre\"\n variant=\"pi\"\n style={{\n color: '#ffffff',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n margin: 0,\n }}\n >\n {serialized}\n </Typography>\n </Box>\n </Flex>\n ) : (\n <Flex justifyContent=\"center\" alignItems=\"center\" padding={7}>\n <Loader>\n {formatMessage({\n id: 'Settings.debug-dump.generating',\n defaultMessage: 'Generating diagnostic snapshot',\n })}\n </Loader>\n </Flex>\n )}\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n {/* Grouped so Copy and Download stay together on the right rather than being pushed to\n opposite edges by the footer's `space-between`. */}\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={handleCopy}\n startIcon={<Duplicate />}\n disabled={!isReady}\n >\n {formatMessage({ id: 'Settings.debug-dump.copy', defaultMessage: 'Copy' })}\n </Button>\n <Button onClick={handleDownload} startIcon={<Download />} disabled={!isReady}>\n {formatMessage({ id: 'Settings.debug-dump.download', defaultMessage: 'Download' })}\n </Button>\n </Flex>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport { DiagnosticSnapshotModal };\nexport type { DiagnosticSnapshotModalProps };\n"],"names":["DiagnosticSnapshotModal","isOpen","onClose","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","triggerGetDump","data","isFetching","useLazyGetDebugDumpQuery","React","useEffect","undefined","active","unwrap","catch","type","message","id","defaultMessage","serialized","useMemo","JSON","stringify","isReady","handleCopy","didCopy","handleDownload","blob","Blob","url","URL","createObjectURL","anchor","document","createElement","href","download","Date","toISOString","replaceAll","body","appendChild","click","remove","setTimeout","revokeObjectURL","_jsx","Modal","Root","open","onOpenChange","_jsxs","Content","Header","Title","Body","Flex","direction","alignItems","gap","Typography","variant","Box","hasRadius","padding","maxHeight","overflow","style","backgroundColor","tag","color","whiteSpace","wordBreak","margin","justifyContent","Loader","Footer","Close","Button","onClick","startIcon","Duplicate","disabled","Download"],"mappings":"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"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { Modal, Flex, Typography, Box, Loader, Button } from '@strapi/design-system';
|
|
4
|
+
import { Duplicate, Download } from '@strapi/icons';
|
|
5
|
+
import { useIntl } from 'react-intl';
|
|
6
|
+
import { useNotification } from '../../../../../features/Notifications.mjs';
|
|
7
|
+
import { useClipboard } from '../../../../../hooks/useClipboard.mjs';
|
|
8
|
+
import { useLazyGetDebugDumpQuery } from '../../../../../services/admin.mjs';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Generates the redacted diagnostic snapshot behind the Support card's "Generate snapshot" action.
|
|
12
|
+
* The fetch is triggered as soon as the modal opens, so the user only ever sees a spinner followed
|
|
13
|
+
* by the payload (or, on failure, a notification while the modal closes itself).
|
|
14
|
+
*/ const DiagnosticSnapshotModal = ({ isOpen, onClose })=>{
|
|
15
|
+
const { formatMessage } = useIntl();
|
|
16
|
+
const { toggleNotification } = useNotification();
|
|
17
|
+
const { copy } = useClipboard();
|
|
18
|
+
const [triggerGetDump, { data, isFetching }] = useLazyGetDebugDumpQuery();
|
|
19
|
+
// Failure is read from this open's own request. The lazy query keeps `isError` from an earlier
|
|
20
|
+
// failed request while a new one is in flight, which closed the next open straight away.
|
|
21
|
+
React.useEffect(()=>{
|
|
22
|
+
if (!isOpen) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
let active = true;
|
|
26
|
+
triggerGetDump().unwrap().catch(()=>{
|
|
27
|
+
if (!active) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
toggleNotification({
|
|
31
|
+
type: 'danger',
|
|
32
|
+
message: formatMessage({
|
|
33
|
+
id: 'Settings.debug-dump.error',
|
|
34
|
+
defaultMessage: 'Failed to generate the debug dump. Check the server logs and try again.'
|
|
35
|
+
})
|
|
36
|
+
});
|
|
37
|
+
onClose();
|
|
38
|
+
});
|
|
39
|
+
return ()=>{
|
|
40
|
+
active = false;
|
|
41
|
+
};
|
|
42
|
+
}, [
|
|
43
|
+
isOpen,
|
|
44
|
+
triggerGetDump,
|
|
45
|
+
toggleNotification,
|
|
46
|
+
formatMessage,
|
|
47
|
+
onClose
|
|
48
|
+
]);
|
|
49
|
+
const serialized = React.useMemo(()=>data === undefined ? '' : JSON.stringify(data, null, 2), [
|
|
50
|
+
data
|
|
51
|
+
]);
|
|
52
|
+
const isReady = !isFetching && data !== undefined;
|
|
53
|
+
const handleCopy = async ()=>{
|
|
54
|
+
const didCopy = await copy(serialized);
|
|
55
|
+
toggleNotification({
|
|
56
|
+
type: didCopy ? 'success' : 'danger',
|
|
57
|
+
message: didCopy ? formatMessage({
|
|
58
|
+
id: 'Settings.debug-dump.copied',
|
|
59
|
+
defaultMessage: 'Copied to clipboard'
|
|
60
|
+
}) : formatMessage({
|
|
61
|
+
id: 'Settings.debug-dump.copy-failed',
|
|
62
|
+
defaultMessage: 'Could not copy to clipboard'
|
|
63
|
+
})
|
|
64
|
+
});
|
|
65
|
+
};
|
|
66
|
+
const handleDownload = ()=>{
|
|
67
|
+
const blob = new Blob([
|
|
68
|
+
serialized
|
|
69
|
+
], {
|
|
70
|
+
type: 'application/json'
|
|
71
|
+
});
|
|
72
|
+
const url = URL.createObjectURL(blob);
|
|
73
|
+
const anchor = document.createElement('a');
|
|
74
|
+
anchor.href = url;
|
|
75
|
+
anchor.download = `strapi-debug-dump-${new Date().toISOString().replaceAll(':', '-')}.json`;
|
|
76
|
+
// In the document for the click and revoked on a later turn, as the audit-log export does:
|
|
77
|
+
// some browsers cancel a click on a detached anchor or a download whose URL is gone.
|
|
78
|
+
document.body.appendChild(anchor);
|
|
79
|
+
anchor.click();
|
|
80
|
+
anchor.remove();
|
|
81
|
+
setTimeout(()=>URL.revokeObjectURL(url), 60000);
|
|
82
|
+
};
|
|
83
|
+
return /*#__PURE__*/ jsx(Modal.Root, {
|
|
84
|
+
open: isOpen,
|
|
85
|
+
onOpenChange: onClose,
|
|
86
|
+
children: /*#__PURE__*/ jsxs(Modal.Content, {
|
|
87
|
+
children: [
|
|
88
|
+
/*#__PURE__*/ jsx(Modal.Header, {
|
|
89
|
+
children: /*#__PURE__*/ jsx(Modal.Title, {
|
|
90
|
+
children: formatMessage({
|
|
91
|
+
id: 'Settings.debug-dump.snapshot-modal.title',
|
|
92
|
+
defaultMessage: 'Diagnostic snapshot'
|
|
93
|
+
})
|
|
94
|
+
})
|
|
95
|
+
}),
|
|
96
|
+
/*#__PURE__*/ jsx(Modal.Body, {
|
|
97
|
+
children: isReady ? /*#__PURE__*/ jsxs(Flex, {
|
|
98
|
+
direction: "column",
|
|
99
|
+
alignItems: "stretch",
|
|
100
|
+
gap: 4,
|
|
101
|
+
children: [
|
|
102
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
103
|
+
children: formatMessage({
|
|
104
|
+
id: 'Settings.debug-dump.snapshot-modal.description',
|
|
105
|
+
defaultMessage: "This snapshot describes how your project is built so a third party can reproduce the bug locally. It does not contain any of your app's content and no credentials."
|
|
106
|
+
})
|
|
107
|
+
}),
|
|
108
|
+
/*#__PURE__*/ jsx(Typography, {
|
|
109
|
+
variant: "sigma",
|
|
110
|
+
children: formatMessage({
|
|
111
|
+
id: 'Settings.debug-dump.payload-label',
|
|
112
|
+
defaultMessage: 'payload'
|
|
113
|
+
})
|
|
114
|
+
}),
|
|
115
|
+
/*#__PURE__*/ jsx(Box, {
|
|
116
|
+
hasRadius: true,
|
|
117
|
+
padding: 4,
|
|
118
|
+
maxHeight: "26rem",
|
|
119
|
+
overflow: "auto",
|
|
120
|
+
// A code surface that stays dark in BOTH themes. The design-system neutrals invert
|
|
121
|
+
// between themes (`neutral800` is #32324d in light but #ffffff in dark, and
|
|
122
|
+
// `neutral0` inverts with it), so tokens here flip the block to white on dark.
|
|
123
|
+
// These are the same fixed values the WYSIWYG preview uses for its code surface.
|
|
124
|
+
style: {
|
|
125
|
+
backgroundColor: '#32324d'
|
|
126
|
+
},
|
|
127
|
+
children: /*#__PURE__*/ jsx(Typography, {
|
|
128
|
+
tag: "pre",
|
|
129
|
+
variant: "pi",
|
|
130
|
+
style: {
|
|
131
|
+
color: '#ffffff',
|
|
132
|
+
whiteSpace: 'pre-wrap',
|
|
133
|
+
wordBreak: 'break-word',
|
|
134
|
+
margin: 0
|
|
135
|
+
},
|
|
136
|
+
children: serialized
|
|
137
|
+
})
|
|
138
|
+
})
|
|
139
|
+
]
|
|
140
|
+
}) : /*#__PURE__*/ jsx(Flex, {
|
|
141
|
+
justifyContent: "center",
|
|
142
|
+
alignItems: "center",
|
|
143
|
+
padding: 7,
|
|
144
|
+
children: /*#__PURE__*/ jsx(Loader, {
|
|
145
|
+
children: formatMessage({
|
|
146
|
+
id: 'Settings.debug-dump.generating',
|
|
147
|
+
defaultMessage: 'Generating diagnostic snapshot'
|
|
148
|
+
})
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
}),
|
|
152
|
+
/*#__PURE__*/ jsxs(Modal.Footer, {
|
|
153
|
+
children: [
|
|
154
|
+
/*#__PURE__*/ jsx(Modal.Close, {
|
|
155
|
+
children: /*#__PURE__*/ jsx(Button, {
|
|
156
|
+
variant: "tertiary",
|
|
157
|
+
children: formatMessage({
|
|
158
|
+
id: 'app.components.Button.cancel',
|
|
159
|
+
defaultMessage: 'Cancel'
|
|
160
|
+
})
|
|
161
|
+
})
|
|
162
|
+
}),
|
|
163
|
+
/*#__PURE__*/ jsxs(Flex, {
|
|
164
|
+
gap: 2,
|
|
165
|
+
children: [
|
|
166
|
+
/*#__PURE__*/ jsx(Button, {
|
|
167
|
+
variant: "secondary",
|
|
168
|
+
onClick: handleCopy,
|
|
169
|
+
startIcon: /*#__PURE__*/ jsx(Duplicate, {}),
|
|
170
|
+
disabled: !isReady,
|
|
171
|
+
children: formatMessage({
|
|
172
|
+
id: 'Settings.debug-dump.copy',
|
|
173
|
+
defaultMessage: 'Copy'
|
|
174
|
+
})
|
|
175
|
+
}),
|
|
176
|
+
/*#__PURE__*/ jsx(Button, {
|
|
177
|
+
onClick: handleDownload,
|
|
178
|
+
startIcon: /*#__PURE__*/ jsx(Download, {}),
|
|
179
|
+
disabled: !isReady,
|
|
180
|
+
children: formatMessage({
|
|
181
|
+
id: 'Settings.debug-dump.download',
|
|
182
|
+
defaultMessage: 'Download'
|
|
183
|
+
})
|
|
184
|
+
})
|
|
185
|
+
]
|
|
186
|
+
})
|
|
187
|
+
]
|
|
188
|
+
})
|
|
189
|
+
]
|
|
190
|
+
})
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export { DiagnosticSnapshotModal };
|
|
195
|
+
//# sourceMappingURL=DiagnosticSnapshotModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticSnapshotModal.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/DiagnosticSnapshotModal.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Loader, Modal, Typography } from '@strapi/design-system';\nimport { Download, Duplicate } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useClipboard } from '../../../../../hooks/useClipboard';\nimport { useLazyGetDebugDumpQuery } from '../../../../../services/admin';\n\n/* -------------------------------------------------------------------------------------------------\n * DiagnosticSnapshotModal\n * -----------------------------------------------------------------------------------------------*/\n\ninterface DiagnosticSnapshotModalProps {\n isOpen: boolean;\n onClose: () => void;\n}\n\n/**\n * Generates the redacted diagnostic snapshot behind the Support card's \"Generate snapshot\" action.\n * The fetch is triggered as soon as the modal opens, so the user only ever sees a spinner followed\n * by the payload (or, on failure, a notification while the modal closes itself).\n */\nconst DiagnosticSnapshotModal = ({ isOpen, onClose }: DiagnosticSnapshotModalProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { copy } = useClipboard();\n const [triggerGetDump, { data, isFetching }] = useLazyGetDebugDumpQuery();\n\n // Failure is read from this open's own request. The lazy query keeps `isError` from an earlier\n // failed request while a new one is in flight, which closed the next open straight away.\n React.useEffect(() => {\n if (!isOpen) {\n return undefined;\n }\n\n let active = true;\n\n triggerGetDump()\n .unwrap()\n .catch(() => {\n if (!active) {\n return;\n }\n\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'Settings.debug-dump.error',\n defaultMessage:\n 'Failed to generate the debug dump. Check the server logs and try again.',\n }),\n });\n onClose();\n });\n\n return () => {\n active = false;\n };\n }, [isOpen, triggerGetDump, toggleNotification, formatMessage, onClose]);\n\n const serialized = React.useMemo(\n () => (data === undefined ? '' : JSON.stringify(data, null, 2)),\n [data]\n );\n\n const isReady = !isFetching && data !== undefined;\n\n const handleCopy = async () => {\n const didCopy = await copy(serialized);\n toggleNotification({\n type: didCopy ? 'success' : 'danger',\n message: didCopy\n ? formatMessage({ id: 'Settings.debug-dump.copied', defaultMessage: 'Copied to clipboard' })\n : formatMessage({\n id: 'Settings.debug-dump.copy-failed',\n defaultMessage: 'Could not copy to clipboard',\n }),\n });\n };\n\n const handleDownload = () => {\n const blob = new Blob([serialized], { type: 'application/json' });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `strapi-debug-dump-${new Date().toISOString().replaceAll(':', '-')}.json`;\n // In the document for the click and revoked on a later turn, as the audit-log export does:\n // some browsers cancel a click on a detached anchor or a download whose URL is gone.\n document.body.appendChild(anchor);\n anchor.click();\n anchor.remove();\n setTimeout(() => URL.revokeObjectURL(url), 60000);\n };\n\n return (\n <Modal.Root open={isOpen} onOpenChange={onClose}>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>\n {formatMessage({\n id: 'Settings.debug-dump.snapshot-modal.title',\n defaultMessage: 'Diagnostic snapshot',\n })}\n </Modal.Title>\n </Modal.Header>\n <Modal.Body>\n {isReady ? (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography>\n {formatMessage({\n id: 'Settings.debug-dump.snapshot-modal.description',\n defaultMessage:\n \"This snapshot describes how your project is built so a third party can reproduce the bug locally. It does not contain any of your app's content and no credentials.\",\n })}\n </Typography>\n <Typography variant=\"sigma\">\n {formatMessage({\n id: 'Settings.debug-dump.payload-label',\n defaultMessage: 'payload',\n })}\n </Typography>\n <Box\n hasRadius\n padding={4}\n maxHeight=\"26rem\"\n overflow=\"auto\"\n // A code surface that stays dark in BOTH themes. The design-system neutrals invert\n // between themes (`neutral800` is #32324d in light but #ffffff in dark, and\n // `neutral0` inverts with it), so tokens here flip the block to white on dark.\n // These are the same fixed values the WYSIWYG preview uses for its code surface.\n style={{ backgroundColor: '#32324d' }}\n >\n <Typography\n tag=\"pre\"\n variant=\"pi\"\n style={{\n color: '#ffffff',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n margin: 0,\n }}\n >\n {serialized}\n </Typography>\n </Box>\n </Flex>\n ) : (\n <Flex justifyContent=\"center\" alignItems=\"center\" padding={7}>\n <Loader>\n {formatMessage({\n id: 'Settings.debug-dump.generating',\n defaultMessage: 'Generating diagnostic snapshot',\n })}\n </Loader>\n </Flex>\n )}\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({ id: 'app.components.Button.cancel', defaultMessage: 'Cancel' })}\n </Button>\n </Modal.Close>\n {/* Grouped so Copy and Download stay together on the right rather than being pushed to\n opposite edges by the footer's `space-between`. */}\n <Flex gap={2}>\n <Button\n variant=\"secondary\"\n onClick={handleCopy}\n startIcon={<Duplicate />}\n disabled={!isReady}\n >\n {formatMessage({ id: 'Settings.debug-dump.copy', defaultMessage: 'Copy' })}\n </Button>\n <Button onClick={handleDownload} startIcon={<Download />} disabled={!isReady}>\n {formatMessage({ id: 'Settings.debug-dump.download', defaultMessage: 'Download' })}\n </Button>\n </Flex>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n};\n\nexport { DiagnosticSnapshotModal };\nexport type { DiagnosticSnapshotModalProps };\n"],"names":["DiagnosticSnapshotModal","isOpen","onClose","formatMessage","useIntl","toggleNotification","useNotification","copy","useClipboard","triggerGetDump","data","isFetching","useLazyGetDebugDumpQuery","React","useEffect","undefined","active","unwrap","catch","type","message","id","defaultMessage","serialized","useMemo","JSON","stringify","isReady","handleCopy","didCopy","handleDownload","blob","Blob","url","URL","createObjectURL","anchor","document","createElement","href","download","Date","toISOString","replaceAll","body","appendChild","click","remove","setTimeout","revokeObjectURL","_jsx","Modal","Root","open","onOpenChange","_jsxs","Content","Header","Title","Body","Flex","direction","alignItems","gap","Typography","variant","Box","hasRadius","padding","maxHeight","overflow","style","backgroundColor","tag","color","whiteSpace","wordBreak","margin","justifyContent","Loader","Footer","Close","Button","onClick","startIcon","Duplicate","disabled","Download"],"mappings":"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"}
|