@strapi/admin 5.56.0 → 5.58.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/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/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 -2
- package/dist/admin/admin/src/components/FormInputs/Enumeration.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs +2 -2
- package/dist/admin/admin/src/components/FormInputs/Enumeration.mjs.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.js +38 -2
- package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +18 -2
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.js +9 -0
- package/dist/admin/admin/src/components/RelativeTime.js.map +1 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs +10 -1
- package/dist/admin/admin/src/components/RelativeTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/TopBanners.js +52 -0
- package/dist/admin/admin/src/components/TopBanners.js.map +1 -0
- package/dist/admin/admin/src/components/TopBanners.mjs +30 -0
- package/dist/admin/admin/src/components/TopBanners.mjs.map +1 -0
- 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/features/Tracking.js +28 -8
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +29 -10
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +4 -20
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +4 -20
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js +59 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.js.map +1 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs +37 -0
- package/dist/admin/admin/src/layouts/useAuthenticatedAccessTracking.mjs.map +1 -0
- 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/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/pages/ApplicationInfo/ApplicationInfoPage.js +6 -56
- 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 +6 -56
- 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/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/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/translations/en.json.js +76 -4
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +76 -4
- package/dist/admin/admin/src/translations/en.json.mjs.map +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/getFetchClient.js +27 -3
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +26 -3
- package/dist/admin/admin/src/utils/getFetchClient.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 +8 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +8 -1
- 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/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/MediaLibraryBanner.d.ts +10 -1
- package/dist/admin/src/components/TopBanners.d.ts +8 -0
- package/dist/admin/src/constants.d.ts +10 -0
- package/dist/admin/src/features/Tracking.d.ts +12 -1
- package/dist/admin/src/layouts/useAuthenticatedAccessTracking.d.ts +6 -0
- 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/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 +7 -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/authentication-utils/utils.d.ts +8 -2
- package/dist/ee/server/src/controllers/authentication-utils/utils.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/authentication.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/controllers/user.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +40 -11
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/index.d.ts +4 -1
- package/dist/ee/server/src/services/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/metrics.d.ts.map +1 -1
- package/dist/ee/server/src/services/persist-tables.d.ts.map +1 -1
- package/dist/ee/server/src/services/seat-enforcement.d.ts +3 -1
- package/dist/ee/server/src/services/seat-enforcement.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/controllers/admin.js +79 -7
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +79 -7
- 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/controllers/authentication-utils/utils.js +2 -2
- 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 +2 -2
- package/dist/server/ee/server/src/controllers/authentication-utils/utils.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.js +11 -11
- package/dist/server/ee/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/ee/server/src/controllers/authentication.mjs +11 -11
- package/dist/server/ee/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/user.js +7 -8
- package/dist/server/ee/server/src/controllers/user.js.map +1 -1
- package/dist/server/ee/server/src/controllers/user.mjs +8 -9
- package/dist/server/ee/server/src/controllers/user.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/metrics.js +9 -7
- package/dist/server/ee/server/src/services/metrics.js.map +1 -1
- package/dist/server/ee/server/src/services/metrics.mjs +9 -7
- package/dist/server/ee/server/src/services/metrics.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +3 -4
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +3 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/ee/server/src/services/role.js +2 -2
- package/dist/server/ee/server/src/services/role.js.map +1 -1
- package/dist/server/ee/server/src/services/role.mjs +1 -1
- package/dist/server/ee/server/src/services/role.mjs.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.js +20 -20
- package/dist/server/ee/server/src/services/seat-enforcement.js.map +1 -1
- package/dist/server/ee/server/src/services/seat-enforcement.mjs +20 -20
- package/dist/server/ee/server/src/services/seat-enforcement.mjs.map +1 -1
- package/dist/server/ee/server/src/services/user.js +1 -2
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/ee/server/src/services/user.mjs +2 -3
- package/dist/server/ee/server/src/services/user.mjs.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.js +2 -2
- package/dist/server/ee/server/src/utils/sso-lock.js.map +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs +1 -1
- package/dist/server/ee/server/src/utils/sso-lock.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.js +3 -3
- package/dist/server/server/src/audit-logs/admin-users.js.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.mjs +2 -2
- package/dist/server/server/src/audit-logs/admin-users.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/audit-logs/tokens.js +3 -3
- package/dist/server/server/src/audit-logs/tokens.js.map +1 -1
- package/dist/server/server/src/audit-logs/tokens.mjs +2 -2
- package/dist/server/server/src/audit-logs/tokens.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/webhooks.js +2 -2
- package/dist/server/server/src/audit-logs/webhooks.js.map +1 -1
- package/dist/server/server/src/audit-logs/webhooks.mjs +1 -1
- package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -1
- package/dist/server/server/src/bootstrap.js +6 -4
- package/dist/server/server/src/bootstrap.js.map +1 -1
- package/dist/server/server/src/bootstrap.mjs +6 -4
- package/dist/server/server/src/bootstrap.mjs.map +1 -1
- 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-token.js +8 -8
- package/dist/server/server/src/controllers/admin-token.js.map +1 -1
- package/dist/server/server/src/controllers/admin-token.mjs +4 -4
- package/dist/server/server/src/controllers/admin-token.mjs.map +1 -1
- package/dist/server/server/src/controllers/admin.js +9 -5
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +8 -4
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/api-token.js +8 -8
- package/dist/server/server/src/controllers/api-token.js.map +1 -1
- package/dist/server/server/src/controllers/api-token.mjs +4 -4
- package/dist/server/server/src/controllers/api-token.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/controllers/formatters/conditions.js +2 -2
- package/dist/server/server/src/controllers/formatters/conditions.js.map +1 -1
- package/dist/server/server/src/controllers/formatters/conditions.mjs +2 -2
- package/dist/server/server/src/controllers/formatters/conditions.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.js +2 -2
- package/dist/server/server/src/controllers/transfer/index.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/index.mjs +2 -2
- package/dist/server/server/src/controllers/transfer/index.mjs.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.js +8 -8
- package/dist/server/server/src/controllers/transfer/token.js.map +1 -1
- package/dist/server/server/src/controllers/transfer/token.mjs +4 -4
- package/dist/server/server/src/controllers/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/domain/action/index.js +18 -16
- package/dist/server/server/src/domain/action/index.js.map +1 -1
- package/dist/server/server/src/domain/action/index.mjs +16 -14
- package/dist/server/server/src/domain/action/index.mjs.map +1 -1
- package/dist/server/server/src/domain/action/provider.mjs +4 -4
- package/dist/server/server/src/domain/action/provider.mjs.map +1 -1
- package/dist/server/server/src/domain/condition/index.js +7 -4
- package/dist/server/server/src/domain/condition/index.js.map +1 -1
- package/dist/server/server/src/domain/condition/index.mjs +7 -4
- package/dist/server/server/src/domain/condition/index.mjs.map +1 -1
- package/dist/server/server/src/domain/permission/index.js +24 -15
- package/dist/server/server/src/domain/permission/index.js.map +1 -1
- package/dist/server/server/src/domain/permission/index.mjs +21 -12
- package/dist/server/server/src/domain/permission/index.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +5 -5
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +4 -4
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/register.js +10 -0
- package/dist/server/server/src/register.js.map +1 -1
- package/dist/server/server/src/register.mjs +10 -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/action.js +1 -2
- package/dist/server/server/src/services/action.js.map +1 -1
- package/dist/server/server/src/services/action.mjs +1 -2
- package/dist/server/server/src/services/action.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +61 -49
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +53 -41
- 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/condition.js +2 -2
- package/dist/server/server/src/services/condition.js.map +1 -1
- package/dist/server/server/src/services/condition.mjs +1 -1
- package/dist/server/server/src/services/condition.mjs.map +1 -1
- package/dist/server/server/src/services/content-type.js +5 -4
- package/dist/server/server/src/services/content-type.js.map +1 -1
- package/dist/server/server/src/services/content-type.mjs +8 -7
- package/dist/server/server/src/services/content-type.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/homepage.js +2 -1
- package/dist/server/server/src/services/homepage.js.map +1 -1
- package/dist/server/server/src/services/homepage.mjs +2 -1
- package/dist/server/server/src/services/homepage.mjs.map +1 -1
- 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/passport/local-strategy.js +2 -2
- package/dist/server/server/src/services/passport/local-strategy.js.map +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs +1 -1
- package/dist/server/server/src/services/passport/local-strategy.mjs.map +1 -1
- package/dist/server/server/src/services/passport.js +1 -2
- package/dist/server/server/src/services/passport.js.map +1 -1
- package/dist/server/server/src/services/passport.mjs +1 -2
- package/dist/server/server/src/services/passport.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -4
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +2 -2
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.js +2 -3
- package/dist/server/server/src/services/permission/permissions-manager/index.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs +1 -2
- package/dist/server/server/src/services/permission/permissions-manager/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js +6 -6
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.js.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs +4 -4
- package/dist/server/server/src/services/permission/permissions-manager/permission-fields.mjs.map +1 -1
- package/dist/server/server/src/services/permission/permissions-manager/sanitize.js +47 -41
- 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 +44 -38
- 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 +30 -26
- 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 +28 -24
- package/dist/server/server/src/services/permission/permissions-manager/validate.mjs.map +1 -1
- package/dist/server/server/src/services/permission/queries.js +9 -9
- package/dist/server/server/src/services/permission/queries.js.map +1 -1
- package/dist/server/server/src/services/permission/queries.mjs +9 -9
- package/dist/server/server/src/services/permission/queries.mjs.map +1 -1
- package/dist/server/server/src/services/permission/rename-fields.js +118 -0
- package/dist/server/server/src/services/permission/rename-fields.js.map +1 -0
- package/dist/server/server/src/services/permission/rename-fields.mjs +116 -0
- package/dist/server/server/src/services/permission/rename-fields.mjs.map +1 -0
- package/dist/server/server/src/services/permission/sections-builder/index.js +2 -2
- package/dist/server/server/src/services/permission/sections-builder/index.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/index.mjs +2 -2
- package/dist/server/server/src/services/permission/sections-builder/index.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.js +1 -2
- package/dist/server/server/src/services/permission/sections-builder/section.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/section.mjs +1 -2
- package/dist/server/server/src/services/permission/sections-builder/section.mjs.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.js +6 -6
- package/dist/server/server/src/services/permission/sections-builder/utils.js.map +1 -1
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs +4 -4
- package/dist/server/server/src/services/permission/sections-builder/utils.mjs.map +1 -1
- package/dist/server/server/src/services/role.js +20 -19
- package/dist/server/server/src/services/role.js.map +1 -1
- package/dist/server/server/src/services/role.mjs +20 -19
- package/dist/server/server/src/services/role.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/token.js +20 -16
- package/dist/server/server/src/services/transfer/token.js.map +1 -1
- package/dist/server/server/src/services/transfer/token.mjs +14 -10
- package/dist/server/server/src/services/transfer/token.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +2 -3
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +3 -4
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/strategies/api-token-utils.js +2 -3
- package/dist/server/server/src/strategies/api-token-utils.js.map +1 -1
- package/dist/server/server/src/strategies/api-token-utils.mjs +2 -3
- package/dist/server/server/src/strategies/api-token-utils.mjs.map +1 -1
- package/dist/server/server/src/strategies/content-api-token.js +3 -3
- package/dist/server/server/src/strategies/content-api-token.js.map +1 -1
- package/dist/server/server/src/strategies/content-api-token.mjs +1 -1
- package/dist/server/server/src/strategies/content-api-token.mjs.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.js +4 -4
- package/dist/server/server/src/strategies/data-transfer.js.map +1 -1
- package/dist/server/server/src/strategies/data-transfer.mjs +3 -3
- package/dist/server/server/src/strategies/data-transfer.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/common-validators.js +9 -10
- package/dist/server/server/src/validation/common-validators.js.map +1 -1
- package/dist/server/server/src/validation/common-validators.mjs +13 -14
- package/dist/server/server/src/validation/common-validators.mjs.map +1 -1
- package/dist/server/server/src/validation/user.js +1 -2
- package/dist/server/server/src/validation/user.js.map +1 -1
- package/dist/server/server/src/validation/user.mjs +1 -2
- package/dist/server/server/src/validation/user.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/src/audit-logs/auth.d.ts +72 -0
- package/dist/server/src/audit-logs/auth.d.ts.map +1 -0
- package/dist/server/src/audit-logs/tokens.d.ts.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-token.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/api-token.d.ts.map +1 -1
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts +1 -1
- package/dist/server/src/controllers/formatters/conditions.d.ts.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +1 -1
- package/dist/server/src/controllers/index.d.ts +4 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/transfer/index.d.ts.map +1 -1
- package/dist/server/src/controllers/transfer/token.d.ts.map +1 -1
- package/dist/server/src/domain/action/index.d.ts +1 -0
- package/dist/server/src/domain/action/index.d.ts.map +1 -1
- package/dist/server/src/domain/condition/index.d.ts +2 -2
- package/dist/server/src/domain/condition/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 +11 -3
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/rateLimit.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/action.d.ts.map +1 -1
- package/dist/server/src/services/api-token.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/condition.d.ts.map +1 -1
- package/dist/server/src/services/content-type.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/homepage.d.ts +1 -1
- package/dist/server/src/services/homepage.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +7 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/passport/local-strategy.d.ts.map +1 -1
- package/dist/server/src/services/passport.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/permission-fields.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/sanitize.d.ts.map +1 -1
- package/dist/server/src/services/permission/permissions-manager/validate.d.ts.map +1 -1
- package/dist/server/src/services/permission/queries.d.ts.map +1 -1
- package/dist/server/src/services/permission/rename-fields.d.ts +21 -0
- package/dist/server/src/services/permission/rename-fields.d.ts.map +1 -0
- package/dist/server/src/services/permission/sections-builder/section.d.ts.map +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts +1 -1
- package/dist/server/src/services/permission/sections-builder/utils.d.ts.map +1 -1
- package/dist/server/src/services/role.d.ts +1 -1
- package/dist/server/src/services/role.d.ts.map +1 -1
- package/dist/server/src/services/transfer/token.d.ts.map +1 -1
- package/dist/server/src/strategies/content-api-token.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/user.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/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/get-project-type.d.ts +37 -0
- package/dist/shared/utils/get-project-type.d.ts.map +1 -0
- package/package.json +10 -10
- 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
|
@@ -0,0 +1,473 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var designSystem = require('@strapi/design-system');
|
|
5
|
+
var icons = require('@strapi/icons');
|
|
6
|
+
var reactIntl = require('react-intl');
|
|
7
|
+
var PlanCard = require('../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard.js');
|
|
8
|
+
var admin = require('../../../../../../../../admin/src/services/admin.js');
|
|
9
|
+
var getProjectType = require('../../../../../../../../shared/utils/get-project-type.js');
|
|
10
|
+
var useLicenseLimits = require('../../../../../hooks/useLicenseLimits.js');
|
|
11
|
+
var AdminSeatInfo = require('./AdminSeatInfo.js');
|
|
12
|
+
var AIUsage = require('./AIUsage.js');
|
|
13
|
+
|
|
14
|
+
// Feature key -> display label. Labels themselves resolve through i18n; only the
|
|
15
|
+
// mapping of known license feature keys lives here.
|
|
16
|
+
const FEATURE_LABELS = {
|
|
17
|
+
sso: {
|
|
18
|
+
id: 'Settings.license.feature.sso',
|
|
19
|
+
defaultMessage: 'Single Sign-On'
|
|
20
|
+
},
|
|
21
|
+
'cms-advanced-preview': {
|
|
22
|
+
id: 'Settings.license.feature.cms-advanced-preview',
|
|
23
|
+
defaultMessage: 'Live Preview'
|
|
24
|
+
},
|
|
25
|
+
'cms-content-releases': {
|
|
26
|
+
id: 'Settings.license.feature.cms-content-releases',
|
|
27
|
+
defaultMessage: 'Releases'
|
|
28
|
+
},
|
|
29
|
+
'review-workflows': {
|
|
30
|
+
id: 'Settings.license.feature.review-workflows',
|
|
31
|
+
defaultMessage: 'Review Workflows'
|
|
32
|
+
},
|
|
33
|
+
'cms-content-history': {
|
|
34
|
+
id: 'Settings.license.feature.cms-content-history',
|
|
35
|
+
defaultMessage: 'Content History'
|
|
36
|
+
},
|
|
37
|
+
'audit-logs': {
|
|
38
|
+
id: 'Settings.license.feature.audit-logs',
|
|
39
|
+
defaultMessage: 'Audit Logs'
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
// Entitlement limit key -> display label. Only used when a feature has more than one limit and
|
|
43
|
+
// each value needs to be told apart; a single limit is rendered on its own, unlabelled.
|
|
44
|
+
const LIMIT_LABELS = {
|
|
45
|
+
numberOfWorkflows: {
|
|
46
|
+
id: 'Settings.license.limit.numberOfWorkflows',
|
|
47
|
+
defaultMessage: 'Workflows'
|
|
48
|
+
},
|
|
49
|
+
stagesPerWorkflow: {
|
|
50
|
+
id: 'Settings.license.limit.stagesPerWorkflow',
|
|
51
|
+
defaultMessage: 'Stages per workflow'
|
|
52
|
+
},
|
|
53
|
+
maximumReleases: {
|
|
54
|
+
id: 'Settings.license.limit.maximumReleases',
|
|
55
|
+
defaultMessage: 'Releases'
|
|
56
|
+
},
|
|
57
|
+
retentionDays: {
|
|
58
|
+
id: 'Settings.license.limit.retentionDays',
|
|
59
|
+
defaultMessage: 'Retention'
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Shown instead of `Active` while a trial is running. Deliberately keyed on an active
|
|
64
|
+
* licence: once a trial lapses the licence stops validating and `isTrial` goes false, so
|
|
65
|
+
* "In Trial" would be claiming a subscription the instance no longer has.
|
|
66
|
+
*/ const TRIAL_BADGE = {
|
|
67
|
+
variant: 'alternative',
|
|
68
|
+
label: {
|
|
69
|
+
id: 'Settings.license.status.in-trial',
|
|
70
|
+
defaultMessage: 'In Trial'
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
const STATUS_BADGE = {
|
|
74
|
+
active: {
|
|
75
|
+
variant: 'success',
|
|
76
|
+
label: {
|
|
77
|
+
id: 'Settings.license.status.active',
|
|
78
|
+
defaultMessage: 'Active'
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
expired: {
|
|
82
|
+
variant: 'danger',
|
|
83
|
+
label: {
|
|
84
|
+
id: 'Settings.license.status.expired',
|
|
85
|
+
defaultMessage: 'Expired'
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
unknown: {
|
|
89
|
+
variant: 'warning',
|
|
90
|
+
label: {
|
|
91
|
+
id: 'Settings.license.status.unknown',
|
|
92
|
+
defaultMessage: 'Unknown'
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
// A license-gated component only mounts for EE instances, so `none` should never occur here
|
|
96
|
+
// in practice. Fall back to the same treatment as `unknown` rather than rendering nothing.
|
|
97
|
+
none: {
|
|
98
|
+
variant: 'warning',
|
|
99
|
+
label: {
|
|
100
|
+
id: 'Settings.license.status.unknown',
|
|
101
|
+
defaultMessage: 'Unknown'
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Absolute dates are rendered as `yyyy/mm/dd` rather than through `formatDate`, so the
|
|
107
|
+
* value is unambiguous in every locale (a locale-ordered `03/04` could be either March 4th
|
|
108
|
+
* or April 3rd). Relative values, like the last license check, stay relative per the design.
|
|
109
|
+
*/ const formatAbsoluteDate = (value)=>{
|
|
110
|
+
const date = new Date(value);
|
|
111
|
+
if (Number.isNaN(date.getTime())) {
|
|
112
|
+
return '';
|
|
113
|
+
}
|
|
114
|
+
// UTC, not the local calendar: license dates are UTC-midnight instants, which local getters
|
|
115
|
+
// turn into the previous day anywhere west of UTC.
|
|
116
|
+
const month = `${date.getUTCMonth() + 1}`.padStart(2, '0');
|
|
117
|
+
const day = `${date.getUTCDate()}`.padStart(2, '0');
|
|
118
|
+
return `${date.getUTCFullYear()}/${month}/${day}`;
|
|
119
|
+
};
|
|
120
|
+
const LicenseInfoEE = ()=>{
|
|
121
|
+
const { formatMessage, formatRelativeTime } = reactIntl.useIntl();
|
|
122
|
+
const { license, isLoading, isError } = useLicenseLimits.useLicenseLimits();
|
|
123
|
+
const { data: trialTimeLeft } = admin.useGetLicenseTrialTimeLeftQuery(undefined, {
|
|
124
|
+
skip: !license?.isTrial
|
|
125
|
+
});
|
|
126
|
+
if (isLoading) {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
if (isError || !license) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
const { licenseMode, licenseStatus, renewalDate, subscriptionId, lastRegistrySyncAt, expireAt, isTrial, planEntitlements, usingCachedLicense, registrySyncError, registrySyncErrorKind } = license;
|
|
133
|
+
const licensedPlan = getProjectType.getLicensedPlan({
|
|
134
|
+
licenseStatus,
|
|
135
|
+
type: license.type,
|
|
136
|
+
planPriceId: license.planPriceId
|
|
137
|
+
});
|
|
138
|
+
const isGrowth = licensedPlan === 'Growth';
|
|
139
|
+
// Retention is shown in days (the design lists "30 days retention" / "90 days
|
|
140
|
+
// retention"); only sentinel-sized values collapse to years, so a licence with
|
|
141
|
+
// e.g. 1500 days does not read as a meaningless number.
|
|
142
|
+
const formatDays = (value)=>{
|
|
143
|
+
if (value >= 365) {
|
|
144
|
+
return formatMessage({
|
|
145
|
+
id: 'Settings.license.limit.years',
|
|
146
|
+
defaultMessage: '~{years, plural, one {# year} other {# years}}'
|
|
147
|
+
}, {
|
|
148
|
+
years: Math.round(value / 365)
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return formatMessage({
|
|
152
|
+
id: 'Settings.license.limit.days',
|
|
153
|
+
defaultMessage: '{days, plural, one {# day retention} other {# days retention}}'
|
|
154
|
+
}, {
|
|
155
|
+
days: value
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
const formatLimitValue = (limit)=>{
|
|
159
|
+
if (limit.value === null) {
|
|
160
|
+
return formatMessage({
|
|
161
|
+
id: 'Settings.license.unlimited',
|
|
162
|
+
defaultMessage: 'Unlimited'
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
if (limit.unit === 'days') {
|
|
166
|
+
return formatDays(limit.value);
|
|
167
|
+
}
|
|
168
|
+
return formatMessage({
|
|
169
|
+
id: 'Settings.license.limit.count',
|
|
170
|
+
defaultMessage: '{value, number}'
|
|
171
|
+
}, {
|
|
172
|
+
value: limit.value
|
|
173
|
+
});
|
|
174
|
+
};
|
|
175
|
+
// Shown relative ("2 hours ago") rather than as an absolute timestamp, matching how the rest of
|
|
176
|
+
// the admin surfaces recency.
|
|
177
|
+
const formatLastCheck = (timestamp)=>{
|
|
178
|
+
if (typeof timestamp !== 'number') {
|
|
179
|
+
return formatMessage({
|
|
180
|
+
id: 'Settings.license.checkin.never',
|
|
181
|
+
defaultMessage: 'Not yet'
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
const diffMs = timestamp - Date.now();
|
|
185
|
+
// Minutes decide the unit: rounding hours first turned 31 minutes into "1 hour ago".
|
|
186
|
+
const diffMinutes = Math.round(diffMs / (60 * 1000));
|
|
187
|
+
if (Math.abs(diffMinutes) < 60) {
|
|
188
|
+
return formatRelativeTime(diffMinutes, 'minute', {
|
|
189
|
+
numeric: 'auto'
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
return formatRelativeTime(Math.round(diffMs / (60 * 60 * 1000)), 'hour', {
|
|
193
|
+
numeric: 'auto'
|
|
194
|
+
});
|
|
195
|
+
};
|
|
196
|
+
const currentPlanValue = licenseMode === 'offline' ? `${licensedPlan} - offline` : licensedPlan;
|
|
197
|
+
const dateLabel = isTrial ? {
|
|
198
|
+
id: 'Settings.license.trial-end-date',
|
|
199
|
+
defaultMessage: 'trial end date'
|
|
200
|
+
} : {
|
|
201
|
+
id: 'Settings.license.renewal-date',
|
|
202
|
+
defaultMessage: 'renewal date'
|
|
203
|
+
};
|
|
204
|
+
const rawDateValue = isTrial ? trialTimeLeft?.trialEndsAt ?? null : renewalDate;
|
|
205
|
+
const formattedDate = rawDateValue ? formatAbsoluteDate(rawDateValue) : null;
|
|
206
|
+
const statusBadge = licenseStatus === 'active' && isTrial ? TRIAL_BADGE : STATUS_BADGE[licenseStatus];
|
|
207
|
+
/**
|
|
208
|
+
* `unknown` covers two very different situations that used to render identically: we could
|
|
209
|
+
* not reach the registry (the licence is probably fine, we are running on the cached copy),
|
|
210
|
+
* or the registry answered and refused the licence. Only the second one needs the customer
|
|
211
|
+
* to do something, so say which it is.
|
|
212
|
+
*/ const registryNotice = usingCachedLicense ? {
|
|
213
|
+
id: 'Settings.license.registry.cached',
|
|
214
|
+
defaultMessage: "Couldn't reach the license registry. Showing the last license we retrieved."
|
|
215
|
+
} : // `usingCachedLicense` is false even though the cause was an outage rather than a
|
|
216
|
+
// refusal. Read the recorded kind instead of inferring the cause from the cache.
|
|
217
|
+
registrySyncErrorKind === 'unreachable' && licenseStatus !== 'active' ? {
|
|
218
|
+
id: 'Settings.license.registry.unreachable',
|
|
219
|
+
defaultMessage: "Couldn't reach the license registry."
|
|
220
|
+
} : registrySyncError && licenseStatus !== 'active' ? {
|
|
221
|
+
id: 'Settings.license.registry.rejected',
|
|
222
|
+
defaultMessage: 'The license registry could not validate this license.'
|
|
223
|
+
} : null;
|
|
224
|
+
const checkinLine = licenseMode === 'offline' ? expireAt ? formatMessage({
|
|
225
|
+
id: 'Settings.license.valid-until',
|
|
226
|
+
defaultMessage: 'License valid until {date}'
|
|
227
|
+
}, {
|
|
228
|
+
date: formatAbsoluteDate(expireAt)
|
|
229
|
+
}) : null : formatMessage({
|
|
230
|
+
id: 'Settings.license.last-check',
|
|
231
|
+
defaultMessage: 'Last license validity check {relative}'
|
|
232
|
+
}, {
|
|
233
|
+
relative: formatLastCheck(lastRegistrySyncAt)
|
|
234
|
+
});
|
|
235
|
+
const renderLimitCell = (entitlement)=>{
|
|
236
|
+
const { available, limits } = entitlement;
|
|
237
|
+
if (limits.length === 0) {
|
|
238
|
+
return available ? /*#__PURE__*/ jsxRuntime.jsx(icons.Check, {
|
|
239
|
+
"aria-label": formatMessage({
|
|
240
|
+
id: 'Settings.license.yes',
|
|
241
|
+
defaultMessage: 'Yes'
|
|
242
|
+
}),
|
|
243
|
+
fill: "success600"
|
|
244
|
+
}) : /*#__PURE__*/ jsxRuntime.jsx(icons.Cross, {
|
|
245
|
+
"aria-label": formatMessage({
|
|
246
|
+
id: 'Settings.license.no',
|
|
247
|
+
defaultMessage: 'No'
|
|
248
|
+
}),
|
|
249
|
+
fill: "danger600"
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
if (limits.length === 1) {
|
|
253
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
254
|
+
children: formatLimitValue(limits[0])
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
258
|
+
direction: "column",
|
|
259
|
+
alignItems: "end",
|
|
260
|
+
gap: 1,
|
|
261
|
+
children: limits.map((limit)=>/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
262
|
+
variant: "pi",
|
|
263
|
+
children: LIMIT_LABELS[limit.key] ? `${formatMessage(LIMIT_LABELS[limit.key])}: ${formatLimitValue(limit)}` : formatLimitValue(limit)
|
|
264
|
+
}, limit.key))
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
268
|
+
direction: "column",
|
|
269
|
+
alignItems: "stretch",
|
|
270
|
+
gap: 6,
|
|
271
|
+
children: [
|
|
272
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
273
|
+
alignItems: "flex-start",
|
|
274
|
+
gap: 5,
|
|
275
|
+
tag: "dl",
|
|
276
|
+
children: [
|
|
277
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
278
|
+
direction: "column",
|
|
279
|
+
alignItems: "stretch",
|
|
280
|
+
gap: 5,
|
|
281
|
+
flex: "1",
|
|
282
|
+
children: [
|
|
283
|
+
/*#__PURE__*/ jsxRuntime.jsx(PlanCard.PlanDetail, {
|
|
284
|
+
label: {
|
|
285
|
+
id: 'Settings.application.plan.current',
|
|
286
|
+
defaultMessage: 'current plan'
|
|
287
|
+
},
|
|
288
|
+
value: currentPlanValue
|
|
289
|
+
}),
|
|
290
|
+
!isGrowth && formattedDate && /*#__PURE__*/ jsxRuntime.jsx(PlanCard.PlanDetail, {
|
|
291
|
+
label: dateLabel,
|
|
292
|
+
value: formattedDate
|
|
293
|
+
}),
|
|
294
|
+
/*#__PURE__*/ jsxRuntime.jsx(AdminSeatInfo.AdminSeatInfoEE, {}),
|
|
295
|
+
window.strapi.ai?.enabled !== false && /*#__PURE__*/ jsxRuntime.jsx(AIUsage.AIUsage, {
|
|
296
|
+
isTrial: isTrial
|
|
297
|
+
})
|
|
298
|
+
]
|
|
299
|
+
}),
|
|
300
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
301
|
+
direction: "column",
|
|
302
|
+
alignItems: "stretch",
|
|
303
|
+
gap: 5,
|
|
304
|
+
flex: "1",
|
|
305
|
+
children: [
|
|
306
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
307
|
+
direction: "column",
|
|
308
|
+
alignItems: "start",
|
|
309
|
+
gap: 2,
|
|
310
|
+
children: [
|
|
311
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
312
|
+
gap: 2,
|
|
313
|
+
alignItems: "center",
|
|
314
|
+
tag: "dt",
|
|
315
|
+
children: [
|
|
316
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
317
|
+
variant: "sigma",
|
|
318
|
+
textColor: "neutral600",
|
|
319
|
+
children: formatMessage({
|
|
320
|
+
id: 'Settings.license.status',
|
|
321
|
+
defaultMessage: 'license status'
|
|
322
|
+
})
|
|
323
|
+
}),
|
|
324
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Tooltip, {
|
|
325
|
+
label: formatMessage({
|
|
326
|
+
id: 'Settings.license.status-tooltip',
|
|
327
|
+
defaultMessage: 'Strapi checks the license status every 12 hours and on every build.'
|
|
328
|
+
}),
|
|
329
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(icons.Information, {
|
|
330
|
+
width: "1.4rem",
|
|
331
|
+
height: "1.4rem",
|
|
332
|
+
fill: "neutral500"
|
|
333
|
+
})
|
|
334
|
+
})
|
|
335
|
+
]
|
|
336
|
+
}),
|
|
337
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
338
|
+
direction: "column",
|
|
339
|
+
alignItems: "start",
|
|
340
|
+
gap: 2,
|
|
341
|
+
tag: "dd",
|
|
342
|
+
children: [
|
|
343
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Status, {
|
|
344
|
+
size: "S",
|
|
345
|
+
variant: statusBadge.variant,
|
|
346
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
347
|
+
variant: "omega",
|
|
348
|
+
fontWeight: "bold",
|
|
349
|
+
children: formatMessage(statusBadge.label)
|
|
350
|
+
})
|
|
351
|
+
}),
|
|
352
|
+
checkinLine && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
353
|
+
gap: 1,
|
|
354
|
+
alignItems: "center",
|
|
355
|
+
children: [
|
|
356
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.ClockCounterClockwise, {
|
|
357
|
+
width: "1.2rem",
|
|
358
|
+
height: "1.2rem",
|
|
359
|
+
fill: "neutral500"
|
|
360
|
+
}),
|
|
361
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
362
|
+
variant: "pi",
|
|
363
|
+
textColor: "neutral500",
|
|
364
|
+
children: checkinLine
|
|
365
|
+
})
|
|
366
|
+
]
|
|
367
|
+
}),
|
|
368
|
+
registryNotice && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
369
|
+
gap: 1,
|
|
370
|
+
alignItems: "center",
|
|
371
|
+
children: [
|
|
372
|
+
/*#__PURE__*/ jsxRuntime.jsx(icons.WarningCircle, {
|
|
373
|
+
width: "1.2rem",
|
|
374
|
+
height: "1.2rem",
|
|
375
|
+
fill: "warning600"
|
|
376
|
+
}),
|
|
377
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
378
|
+
variant: "pi",
|
|
379
|
+
textColor: "warning600",
|
|
380
|
+
children: formatMessage(registryNotice)
|
|
381
|
+
})
|
|
382
|
+
]
|
|
383
|
+
})
|
|
384
|
+
]
|
|
385
|
+
})
|
|
386
|
+
]
|
|
387
|
+
}),
|
|
388
|
+
isGrowth && formattedDate && /*#__PURE__*/ jsxRuntime.jsx(PlanCard.PlanDetail, {
|
|
389
|
+
label: dateLabel,
|
|
390
|
+
value: formattedDate
|
|
391
|
+
}),
|
|
392
|
+
subscriptionId && /*#__PURE__*/ jsxRuntime.jsx(PlanCard.PlanDetail, {
|
|
393
|
+
label: {
|
|
394
|
+
id: 'Settings.license.subscription',
|
|
395
|
+
defaultMessage: 'Subscription ID'
|
|
396
|
+
},
|
|
397
|
+
value: subscriptionId
|
|
398
|
+
})
|
|
399
|
+
]
|
|
400
|
+
})
|
|
401
|
+
]
|
|
402
|
+
}),
|
|
403
|
+
planEntitlements.length > 0 && /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Flex, {
|
|
404
|
+
direction: "column",
|
|
405
|
+
alignItems: "stretch",
|
|
406
|
+
gap: 4,
|
|
407
|
+
children: [
|
|
408
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Divider, {}),
|
|
409
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
410
|
+
variant: "sigma",
|
|
411
|
+
textColor: "neutral600",
|
|
412
|
+
children: formatMessage({
|
|
413
|
+
id: 'Settings.license.entitlements',
|
|
414
|
+
defaultMessage: 'plan entitlements'
|
|
415
|
+
})
|
|
416
|
+
}),
|
|
417
|
+
/*#__PURE__*/ jsxRuntime.jsxs(designSystem.Table, {
|
|
418
|
+
colCount: 2,
|
|
419
|
+
rowCount: planEntitlements.length,
|
|
420
|
+
children: [
|
|
421
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Thead, {
|
|
422
|
+
children: /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
|
|
423
|
+
children: [
|
|
424
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
|
|
425
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
426
|
+
variant: "sigma",
|
|
427
|
+
children: formatMessage({
|
|
428
|
+
id: 'Settings.license.feature',
|
|
429
|
+
defaultMessage: 'Feature'
|
|
430
|
+
})
|
|
431
|
+
})
|
|
432
|
+
}),
|
|
433
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Th, {
|
|
434
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.VisuallyHidden, {
|
|
435
|
+
children: formatMessage({
|
|
436
|
+
id: 'Settings.license.limit',
|
|
437
|
+
defaultMessage: 'Limit'
|
|
438
|
+
})
|
|
439
|
+
})
|
|
440
|
+
})
|
|
441
|
+
]
|
|
442
|
+
})
|
|
443
|
+
}),
|
|
444
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Tbody, {
|
|
445
|
+
children: planEntitlements.map((entitlement)=>{
|
|
446
|
+
const label = FEATURE_LABELS[entitlement.feature];
|
|
447
|
+
return /*#__PURE__*/ jsxRuntime.jsxs(designSystem.Tr, {
|
|
448
|
+
children: [
|
|
449
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
|
|
450
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
|
|
451
|
+
children: label ? formatMessage(label) : entitlement.feature
|
|
452
|
+
})
|
|
453
|
+
}),
|
|
454
|
+
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Td, {
|
|
455
|
+
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
|
|
456
|
+
justifyContent: "flex-end",
|
|
457
|
+
children: renderLimitCell(entitlement)
|
|
458
|
+
})
|
|
459
|
+
})
|
|
460
|
+
]
|
|
461
|
+
}, entitlement.feature);
|
|
462
|
+
})
|
|
463
|
+
})
|
|
464
|
+
]
|
|
465
|
+
})
|
|
466
|
+
]
|
|
467
|
+
})
|
|
468
|
+
]
|
|
469
|
+
});
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
exports.LicenseInfoEE = LicenseInfoEE;
|
|
473
|
+
//# sourceMappingURL=LicenseInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LicenseInfo.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/LicenseInfo.tsx"],"sourcesContent":["import {\n Divider,\n Flex,\n Status,\n Table,\n Tbody,\n Td,\n Th,\n Thead,\n Tooltip,\n Tr,\n Typography,\n VisuallyHidden,\n} from '@strapi/design-system';\nimport { Check, ClockCounterClockwise, Cross, Information, WarningCircle } from '@strapi/icons';\nimport { useIntl, type MessageDescriptor } from 'react-intl';\n\nimport { PlanDetail } from '../../../../../../../../admin/src/pages/Settings/pages/ApplicationInfo/components/PlanCard';\nimport { useGetLicenseTrialTimeLeftQuery } from '../../../../../../../../admin/src/services/admin';\nimport { getLicensedPlan } from '../../../../../../../../shared/utils/get-project-type';\nimport { useLicenseLimits } from '../../../../../hooks/useLicenseLimits';\n\nimport { AdminSeatInfoEE } from './AdminSeatInfo';\nimport { AIUsage } from './AIUsage';\n\nimport type { GetLicenseLimitInformation } from '../../../../../../../../shared/contracts/admin';\n\n// Feature key -> display label. Labels themselves resolve through i18n; only the\n// mapping of known license feature keys lives here.\nconst FEATURE_LABELS: Record<string, MessageDescriptor> = {\n sso: { id: 'Settings.license.feature.sso', defaultMessage: 'Single Sign-On' },\n 'cms-advanced-preview': {\n id: 'Settings.license.feature.cms-advanced-preview',\n defaultMessage: 'Live Preview',\n },\n 'cms-content-releases': {\n id: 'Settings.license.feature.cms-content-releases',\n defaultMessage: 'Releases',\n },\n 'review-workflows': {\n id: 'Settings.license.feature.review-workflows',\n defaultMessage: 'Review Workflows',\n },\n 'cms-content-history': {\n id: 'Settings.license.feature.cms-content-history',\n defaultMessage: 'Content History',\n },\n 'audit-logs': { id: 'Settings.license.feature.audit-logs', defaultMessage: 'Audit Logs' },\n};\n\n// Entitlement limit key -> display label. Only used when a feature has more than one limit and\n// each value needs to be told apart; a single limit is rendered on its own, unlabelled.\nconst LIMIT_LABELS: Record<string, MessageDescriptor> = {\n numberOfWorkflows: {\n id: 'Settings.license.limit.numberOfWorkflows',\n defaultMessage: 'Workflows',\n },\n stagesPerWorkflow: {\n id: 'Settings.license.limit.stagesPerWorkflow',\n defaultMessage: 'Stages per workflow',\n },\n maximumReleases: { id: 'Settings.license.limit.maximumReleases', defaultMessage: 'Releases' },\n retentionDays: { id: 'Settings.license.limit.retentionDays', defaultMessage: 'Retention' },\n};\n\ntype License = NonNullable<GetLicenseLimitInformation.Response['data']>;\ntype PlanEntitlement = License['planEntitlements'][number];\ntype Limit = PlanEntitlement['limits'][number];\n\ntype StatusBadge = {\n variant: 'success' | 'danger' | 'warning' | 'alternative';\n label: MessageDescriptor;\n};\n\n/**\n * Shown instead of `Active` while a trial is running. Deliberately keyed on an active\n * licence: once a trial lapses the licence stops validating and `isTrial` goes false, so\n * \"In Trial\" would be claiming a subscription the instance no longer has.\n */\nconst TRIAL_BADGE: StatusBadge = {\n variant: 'alternative',\n label: { id: 'Settings.license.status.in-trial', defaultMessage: 'In Trial' },\n};\n\nconst STATUS_BADGE: Record<License['licenseStatus'], StatusBadge> = {\n active: {\n variant: 'success',\n label: { id: 'Settings.license.status.active', defaultMessage: 'Active' },\n },\n expired: {\n variant: 'danger',\n label: { id: 'Settings.license.status.expired', defaultMessage: 'Expired' },\n },\n unknown: {\n variant: 'warning',\n label: { id: 'Settings.license.status.unknown', defaultMessage: 'Unknown' },\n },\n // A license-gated component only mounts for EE instances, so `none` should never occur here\n // in practice. Fall back to the same treatment as `unknown` rather than rendering nothing.\n none: {\n variant: 'warning',\n label: { id: 'Settings.license.status.unknown', defaultMessage: 'Unknown' },\n },\n};\n\n/**\n * Absolute dates are rendered as `yyyy/mm/dd` rather than through `formatDate`, so the\n * value is unambiguous in every locale (a locale-ordered `03/04` could be either March 4th\n * or April 3rd). Relative values, like the last license check, stay relative per the design.\n */\nconst formatAbsoluteDate = (value: string | number): string => {\n const date = new Date(value);\n\n if (Number.isNaN(date.getTime())) {\n return '';\n }\n\n // UTC, not the local calendar: license dates are UTC-midnight instants, which local getters\n // turn into the previous day anywhere west of UTC.\n const month = `${date.getUTCMonth() + 1}`.padStart(2, '0');\n const day = `${date.getUTCDate()}`.padStart(2, '0');\n\n return `${date.getUTCFullYear()}/${month}/${day}`;\n};\n\nconst LicenseInfoEE = () => {\n const { formatMessage, formatRelativeTime } = useIntl();\n const { license, isLoading, isError } = useLicenseLimits();\n const { data: trialTimeLeft } = useGetLicenseTrialTimeLeftQuery(undefined, {\n skip: !license?.isTrial,\n });\n\n if (isLoading) {\n return null;\n }\n\n if (isError || !license) {\n return null;\n }\n\n const {\n licenseMode,\n licenseStatus,\n renewalDate,\n subscriptionId,\n lastRegistrySyncAt,\n expireAt,\n isTrial,\n planEntitlements,\n usingCachedLicense,\n registrySyncError,\n registrySyncErrorKind,\n } = license;\n\n const licensedPlan = getLicensedPlan({\n licenseStatus,\n type: license.type,\n planPriceId: license.planPriceId,\n });\n const isGrowth = licensedPlan === 'Growth';\n\n // Retention is shown in days (the design lists \"30 days retention\" / \"90 days\n // retention\"); only sentinel-sized values collapse to years, so a licence with\n // e.g. 1500 days does not read as a meaningless number.\n const formatDays = (value: number): string => {\n if (value >= 365) {\n return formatMessage(\n {\n id: 'Settings.license.limit.years',\n defaultMessage: '~{years, plural, one {# year} other {# years}}',\n },\n { years: Math.round(value / 365) }\n );\n }\n return formatMessage(\n {\n id: 'Settings.license.limit.days',\n defaultMessage: '{days, plural, one {# day retention} other {# days retention}}',\n },\n { days: value }\n );\n };\n\n const formatLimitValue = (limit: Limit): string => {\n if (limit.value === null) {\n return formatMessage({ id: 'Settings.license.unlimited', defaultMessage: 'Unlimited' });\n }\n if (limit.unit === 'days') {\n return formatDays(limit.value);\n }\n return formatMessage(\n { id: 'Settings.license.limit.count', defaultMessage: '{value, number}' },\n { value: limit.value }\n );\n };\n\n // Shown relative (\"2 hours ago\") rather than as an absolute timestamp, matching how the rest of\n // the admin surfaces recency.\n const formatLastCheck = (timestamp: number | null): string => {\n if (typeof timestamp !== 'number') {\n return formatMessage({ id: 'Settings.license.checkin.never', defaultMessage: 'Not yet' });\n }\n const diffMs = timestamp - Date.now();\n // Minutes decide the unit: rounding hours first turned 31 minutes into \"1 hour ago\".\n const diffMinutes = Math.round(diffMs / (60 * 1000));\n if (Math.abs(diffMinutes) < 60) {\n return formatRelativeTime(diffMinutes, 'minute', { numeric: 'auto' });\n }\n return formatRelativeTime(Math.round(diffMs / (60 * 60 * 1000)), 'hour', { numeric: 'auto' });\n };\n\n const currentPlanValue = licenseMode === 'offline' ? `${licensedPlan} - offline` : licensedPlan;\n\n const dateLabel: MessageDescriptor = isTrial\n ? { id: 'Settings.license.trial-end-date', defaultMessage: 'trial end date' }\n : { id: 'Settings.license.renewal-date', defaultMessage: 'renewal date' };\n\n const rawDateValue = isTrial ? (trialTimeLeft?.trialEndsAt ?? null) : renewalDate;\n\n const formattedDate = rawDateValue ? formatAbsoluteDate(rawDateValue) : null;\n\n const statusBadge =\n licenseStatus === 'active' && isTrial ? TRIAL_BADGE : STATUS_BADGE[licenseStatus];\n\n /**\n * `unknown` covers two very different situations that used to render identically: we could\n * not reach the registry (the licence is probably fine, we are running on the cached copy),\n * or the registry answered and refused the licence. Only the second one needs the customer\n * to do something, so say which it is.\n */\n const registryNotice: MessageDescriptor | null = usingCachedLicense\n ? {\n id: 'Settings.license.registry.cached',\n defaultMessage:\n \"Couldn't reach the license registry. Showing the last license we retrieved.\",\n }\n : // An instance that has never reached the registry has nothing cached, so\n // `usingCachedLicense` is false even though the cause was an outage rather than a\n // refusal. Read the recorded kind instead of inferring the cause from the cache.\n registrySyncErrorKind === 'unreachable' && licenseStatus !== 'active'\n ? {\n id: 'Settings.license.registry.unreachable',\n defaultMessage: \"Couldn't reach the license registry.\",\n }\n : registrySyncError && licenseStatus !== 'active'\n ? {\n id: 'Settings.license.registry.rejected',\n defaultMessage: 'The license registry could not validate this license.',\n }\n : null;\n\n const checkinLine =\n licenseMode === 'offline'\n ? expireAt\n ? formatMessage(\n { id: 'Settings.license.valid-until', defaultMessage: 'License valid until {date}' },\n { date: formatAbsoluteDate(expireAt) }\n )\n : null\n : formatMessage(\n {\n id: 'Settings.license.last-check',\n defaultMessage: 'Last license validity check {relative}',\n },\n { relative: formatLastCheck(lastRegistrySyncAt) }\n );\n\n const renderLimitCell = (entitlement: PlanEntitlement) => {\n const { available, limits } = entitlement;\n\n if (limits.length === 0) {\n return available ? (\n <Check\n aria-label={formatMessage({ id: 'Settings.license.yes', defaultMessage: 'Yes' })}\n fill=\"success600\"\n />\n ) : (\n <Cross\n aria-label={formatMessage({ id: 'Settings.license.no', defaultMessage: 'No' })}\n fill=\"danger600\"\n />\n );\n }\n\n if (limits.length === 1) {\n return <Typography>{formatLimitValue(limits[0])}</Typography>;\n }\n\n return (\n <Flex direction=\"column\" alignItems=\"end\" gap={1}>\n {limits.map((limit) => (\n <Typography key={limit.key} variant=\"pi\">\n {LIMIT_LABELS[limit.key]\n ? `${formatMessage(LIMIT_LABELS[limit.key])}: ${formatLimitValue(limit)}`\n : formatLimitValue(limit)}\n </Typography>\n ))}\n </Flex>\n );\n };\n\n return (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Flex alignItems=\"flex-start\" gap={5} tag=\"dl\">\n <Flex direction=\"column\" alignItems=\"stretch\" gap={5} flex=\"1\">\n <PlanDetail\n label={{ id: 'Settings.application.plan.current', defaultMessage: 'current plan' }}\n value={currentPlanValue}\n />\n {!isGrowth && formattedDate && <PlanDetail label={dateLabel} value={formattedDate} />}\n {/* Not gated on Growth: Enterprise licences can carry a seat limit too. A licence\n without one (including an older licence the registry has not re-issued yet) has a\n null `permittedSeats`, and the component already renders nothing in that case. */}\n <AdminSeatInfoEE />\n {/* Any plan with AI, as before this moved onto the Plan card (AIUsage renders nothing\n without it). The `ai.enabled` gate is kept: without it an instance with AI\n disabled requests usage it cannot have. */}\n {window.strapi.ai?.enabled !== false && <AIUsage isTrial={isTrial} />}\n </Flex>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={5} flex=\"1\">\n <Flex direction=\"column\" alignItems=\"start\" gap={2}>\n <Flex gap={2} alignItems=\"center\" tag=\"dt\">\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.license.status',\n defaultMessage: 'license status',\n })}\n </Typography>\n <Tooltip\n label={formatMessage({\n id: 'Settings.license.status-tooltip',\n defaultMessage:\n 'Strapi checks the license status every 12 hours and on every build.',\n })}\n >\n <Information width=\"1.4rem\" height=\"1.4rem\" fill=\"neutral500\" />\n </Tooltip>\n </Flex>\n <Flex direction=\"column\" alignItems=\"start\" gap={2} tag=\"dd\">\n <Status size=\"S\" variant={statusBadge.variant}>\n <Typography variant=\"omega\" fontWeight=\"bold\">\n {formatMessage(statusBadge.label)}\n </Typography>\n </Status>\n {checkinLine && (\n <Flex gap={1} alignItems=\"center\">\n <ClockCounterClockwise width=\"1.2rem\" height=\"1.2rem\" fill=\"neutral500\" />\n <Typography variant=\"pi\" textColor=\"neutral500\">\n {checkinLine}\n </Typography>\n </Flex>\n )}\n {registryNotice && (\n <Flex gap={1} alignItems=\"center\">\n <WarningCircle width=\"1.2rem\" height=\"1.2rem\" fill=\"warning600\" />\n <Typography variant=\"pi\" textColor=\"warning600\">\n {formatMessage(registryNotice)}\n </Typography>\n </Flex>\n )}\n </Flex>\n </Flex>\n {isGrowth && formattedDate && <PlanDetail label={dateLabel} value={formattedDate} />}\n {subscriptionId && (\n <PlanDetail\n label={{ id: 'Settings.license.subscription', defaultMessage: 'Subscription ID' }}\n value={subscriptionId}\n />\n )}\n </Flex>\n </Flex>\n\n {planEntitlements.length > 0 && (\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Divider />\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.license.entitlements',\n defaultMessage: 'plan entitlements',\n })}\n </Typography>\n <Table colCount={2} rowCount={planEntitlements.length}>\n <Thead>\n <Tr>\n <Th>\n <Typography variant=\"sigma\">\n {formatMessage({ id: 'Settings.license.feature', defaultMessage: 'Feature' })}\n </Typography>\n </Th>\n <Th>\n <VisuallyHidden>\n {formatMessage({ id: 'Settings.license.limit', defaultMessage: 'Limit' })}\n </VisuallyHidden>\n </Th>\n </Tr>\n </Thead>\n <Tbody>\n {planEntitlements.map((entitlement) => {\n const label = FEATURE_LABELS[entitlement.feature];\n\n return (\n <Tr key={entitlement.feature}>\n <Td>\n <Typography>{label ? formatMessage(label) : entitlement.feature}</Typography>\n </Td>\n <Td>\n <Flex justifyContent=\"flex-end\">{renderLimitCell(entitlement)}</Flex>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n </Flex>\n )}\n </Flex>\n );\n};\n\nexport { LicenseInfoEE };\n"],"names":["FEATURE_LABELS","sso","id","defaultMessage","LIMIT_LABELS","numberOfWorkflows","stagesPerWorkflow","maximumReleases","retentionDays","TRIAL_BADGE","variant","label","STATUS_BADGE","active","expired","unknown","none","formatAbsoluteDate","value","date","Date","Number","isNaN","getTime","month","getUTCMonth","padStart","day","getUTCDate","getUTCFullYear","LicenseInfoEE","formatMessage","formatRelativeTime","useIntl","license","isLoading","isError","useLicenseLimits","data","trialTimeLeft","useGetLicenseTrialTimeLeftQuery","undefined","skip","isTrial","licenseMode","licenseStatus","renewalDate","subscriptionId","lastRegistrySyncAt","expireAt","planEntitlements","usingCachedLicense","registrySyncError","registrySyncErrorKind","licensedPlan","getLicensedPlan","type","planPriceId","isGrowth","formatDays","years","Math","round","days","formatLimitValue","limit","unit","formatLastCheck","timestamp","diffMs","now","diffMinutes","abs","numeric","currentPlanValue","dateLabel","rawDateValue","trialEndsAt","formattedDate","statusBadge","registryNotice","checkinLine","relative","renderLimitCell","entitlement","available","limits","length","_jsx","Check","aria-label","fill","Cross","Typography","Flex","direction","alignItems","gap","map","key","_jsxs","tag","flex","PlanDetail","AdminSeatInfoEE","window","strapi","ai","enabled","AIUsage","textColor","Tooltip","Information","width","height","Status","size","fontWeight","ClockCounterClockwise","WarningCircle","Divider","Table","colCount","rowCount","Thead","Tr","Th","VisuallyHidden","Tbody","feature","Td","justifyContent"],"mappings":"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"}
|