@strapi/admin 5.30.1 → 5.31.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/admin/admin/src/components/Form.js +9 -0
  2. package/dist/admin/admin/src/components/Form.js.map +1 -1
  3. package/dist/admin/admin/src/components/Form.mjs +9 -0
  4. package/dist/admin/admin/src/components/Form.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/FormInputs/Time.js +1 -1
  6. package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
  7. package/dist/admin/admin/src/components/FormInputs/Time.mjs +1 -1
  8. package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/LeftMenu.js +16 -8
  10. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  11. package/dist/admin/admin/src/components/LeftMenu.mjs +17 -9
  12. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js +3 -2
  14. package/dist/admin/admin/src/components/MainNav/MainNavLinks.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs +3 -2
  16. package/dist/admin/admin/src/components/MainNav/MainNavLinks.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js +64 -37
  18. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.js.map +1 -1
  19. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs +65 -38
  20. package/dist/admin/admin/src/components/MainNav/NavBurgerMenu.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/SubNav.js +1 -0
  22. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  23. package/dist/admin/admin/src/components/SubNav.mjs +1 -0
  24. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  25. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.js +21 -0
  26. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.js.map +1 -0
  27. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.mjs +19 -0
  28. package/dist/admin/admin/src/hooks/useWarnIfUnsavedChanges.mjs.map +1 -0
  29. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js +1 -1
  30. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs +1 -1
  32. package/dist/admin/admin/src/pages/Marketplace/components/NpmPackageCard.mjs.map +1 -1
  33. package/dist/admin/admin/src/translations/en.json.js +2 -1
  34. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  35. package/dist/admin/admin/src/translations/en.json.mjs +2 -1
  36. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  37. package/dist/admin/admin/src/translations/es.json.js +1 -0
  38. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  39. package/dist/admin/admin/src/translations/es.json.mjs +1 -0
  40. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  41. package/dist/admin/admin/src/translations/fr.json.js +1 -0
  42. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  43. package/dist/admin/admin/src/translations/fr.json.mjs +1 -0
  44. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  45. package/dist/admin/admin/src/translations/tr.json.js +1 -1
  46. package/dist/admin/admin/src/translations/tr.json.mjs +1 -1
  47. package/dist/admin/src/components/MainNav/NavBurgerMenu.d.ts +3 -2
  48. package/dist/admin/src/hooks/useWarnIfUnsavedChanges.d.ts +1 -0
  49. package/dist/ee/server/src/controllers/admin.d.ts +6 -2
  50. package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
  51. package/dist/ee/server/src/controllers/index.d.ts +6 -2
  52. package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
  53. package/dist/ee/server/src/index.d.ts +6 -2
  54. package/dist/ee/server/src/index.d.ts.map +1 -1
  55. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
  56. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  57. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
  58. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  59. package/dist/server/ee/server/src/controllers/admin.js +11 -3
  60. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  61. package/dist/server/ee/server/src/controllers/admin.mjs +11 -3
  62. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  63. package/dist/server/server/src/controllers/admin.js +3 -2
  64. package/dist/server/server/src/controllers/admin.js.map +1 -1
  65. package/dist/server/server/src/controllers/admin.mjs +3 -2
  66. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  67. package/dist/server/src/controllers/admin.d.ts +3 -1
  68. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  69. package/dist/server/src/controllers/index.d.ts +3 -1
  70. package/dist/server/src/controllers/index.d.ts.map +1 -1
  71. package/dist/server/src/index.d.ts +3 -1
  72. package/dist/server/src/index.d.ts.map +1 -1
  73. package/package.json +9 -8
@@ -1 +1 @@
1
- {"version":3,"file":"NpmPackageCard.mjs","sources":["../../../../../../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx"],"sourcesContent":["import {\n Box,\n Flex,\n Tooltip,\n Typography,\n Divider,\n Button,\n LinkButton,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { CheckCircle, ExternalLink, Download, Star, Check, Duplicate } from '@strapi/icons';\nimport { GitHub } from '@strapi/icons/symbols';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport { styled } from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled<TypographyComponent<'p'>>(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n const versionRange = semver.validRange(attributes.strapiVersion);\n\n const isCompatible = versionRange\n ? semver.satisfies(strapiAppVersion ?? '', versionRange)\n : false;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n tag=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography tag=\"h3\" variant=\"delta\">\n <Flex\n alignItems=\"center\"\n gap={attributes.validated && !attributes.madeByStrapi ? 2 : 1}\n >\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <CheckCircle fill=\"success600\" />\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip description={madeByStrapiMessage}>\n <Box\n tag=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n width={6}\n height=\"auto\"\n />\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText tag=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n isCompatible={isCompatible}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n isCompatible?: boolean;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n isCompatible,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Flex gap={2} paddingLeft={4}>\n <Check width=\"1.2rem\" height=\"1.2rem\" color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Flex>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode && isCompatible !== false) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )}\n >\n <span>\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </span>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <GitHub height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <Star height=\"1.2rem\" width=\"1.2rem\" fill=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider />\n </>\n )}\n <Download height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: 1.2rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n"],"names":["EllipsisText","styled","Typography","NpmPackageCard","npmPackage","isInstalled","useYarn","isInDevelopmentMode","npmPackageType","strapiAppVersion","attributes","formatMessage","useIntl","trackUsage","useTracking","commandToCopy","npmPackageName","madeByStrapiMessage","id","defaultMessage","npmPackageHref","pluralize","plural","slug","versionRange","semver","validRange","strapiVersion","isCompatible","satisfies","_jsxs","Flex","direction","justifyContent","paddingTop","paddingRight","paddingBottom","paddingLeft","hasRadius","background","shadow","height","alignItems","data-testid","Box","_jsx","tag","src","logo","url","alt","name","width","PackageStats","githubStars","npmDownloads","variant","gap","validated","madeByStrapi","Tooltip","description","CheckCircle","fill","StrapiLogo","textColor","style","alignSelf","LinkButton","size","href","isExternal","endIcon","ExternalLink","aria-label","pluginName","onClick","InstallPluginButton","strapiPeerDepVersion","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","message","Check","color","fontWeight","CardButton","installMessage","label","span","Button","startIcon","Duplicate","disabled","_Fragment","GitHub","aria-hidden","Star","p","starsCount","package","VerticalDivider","Download","downloadsCount","Divider"],"mappings":"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"}
1
+ {"version":3,"file":"NpmPackageCard.mjs","sources":["../../../../../../../admin/src/pages/Marketplace/components/NpmPackageCard.tsx"],"sourcesContent":["import {\n Box,\n Flex,\n Tooltip,\n Typography,\n Divider,\n Button,\n LinkButton,\n TypographyComponent,\n} from '@strapi/design-system';\nimport { CheckCircle, ExternalLink, Download, Star, Check, Duplicate } from '@strapi/icons';\nimport { GitHub } from '@strapi/icons/symbols';\nimport pluralize from 'pluralize';\nimport { useIntl } from 'react-intl';\nimport * as semver from 'semver';\nimport { styled } from 'styled-components';\n\nimport StrapiLogo from '../../../assets/images/logo-strapi-2022.svg';\nimport { AppInfoContextValue } from '../../../features/AppInfo';\nimport { useNotification } from '../../../features/Notifications';\nimport { useTracking } from '../../../features/Tracking';\nimport { useClipboard } from '../../../hooks/useClipboard';\n\nimport type { Plugin, Provider } from '../hooks/useMarketplaceData';\nimport type { NpmPackageType } from '../MarketplacePage';\n\n// Custom component to have an ellipsis after the 2nd line\nconst EllipsisText = styled<TypographyComponent<'p'>>(Typography)`\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 2;\n overflow: hidden;\n`;\n\ninterface NpmPackageCardProps extends Pick<AppInfoContextValue, 'useYarn'> {\n npmPackage: Plugin | Provider;\n isInstalled: boolean;\n isInDevelopmentMode: AppInfoContextValue['autoReload'];\n npmPackageType: NpmPackageType;\n strapiAppVersion: AppInfoContextValue['strapiVersion'];\n}\n\nconst NpmPackageCard = ({\n npmPackage,\n isInstalled,\n useYarn,\n isInDevelopmentMode,\n npmPackageType,\n strapiAppVersion,\n}: NpmPackageCardProps) => {\n const { attributes } = npmPackage;\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n\n const commandToCopy = useYarn\n ? `yarn add ${attributes.npmPackageName}`\n : `npm install ${attributes.npmPackageName}`;\n\n const madeByStrapiMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.madeByStrapi',\n defaultMessage: 'Made by Strapi',\n });\n\n const npmPackageHref = `https://market.strapi.io/${pluralize.plural(npmPackageType)}/${\n attributes.slug\n }`;\n\n const versionRange = semver.validRange(attributes.strapiVersion);\n\n const isCompatible = versionRange\n ? semver.satisfies(strapiAppVersion ?? '', versionRange)\n : false;\n\n return (\n <Flex\n direction=\"column\"\n justifyContent=\"space-between\"\n paddingTop={4}\n paddingRight={4}\n paddingBottom={4}\n paddingLeft={4}\n hasRadius\n background=\"neutral0\"\n shadow=\"tableShadow\"\n height=\"100%\"\n alignItems=\"normal\"\n data-testid=\"npm-package-card\"\n >\n <Box>\n <Flex direction=\"row\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Box\n tag=\"img\"\n src={attributes.logo.url}\n alt={`${attributes.name} logo`}\n hasRadius\n width={11}\n height={11}\n />\n <PackageStats\n githubStars={attributes.githubStars}\n npmDownloads={attributes.npmDownloads}\n npmPackageType={npmPackageType}\n />\n </Flex>\n <Box paddingTop={4}>\n <Typography tag=\"h3\" variant=\"delta\">\n <Flex\n alignItems=\"center\"\n gap={attributes.validated && !attributes.madeByStrapi ? 2 : 1}\n >\n {attributes.name}\n {attributes.validated && !attributes.madeByStrapi && (\n <Tooltip\n description={formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.tooltip.verified',\n defaultMessage: 'Plugin verified by Strapi',\n })}\n >\n <CheckCircle fill=\"success600\" />\n </Tooltip>\n )}\n {attributes.madeByStrapi && (\n <Tooltip label={madeByStrapiMessage}>\n <Box\n tag=\"img\"\n src={StrapiLogo}\n alt={madeByStrapiMessage}\n width={6}\n height=\"auto\"\n />\n </Tooltip>\n )}\n </Flex>\n </Typography>\n </Box>\n <Box paddingTop={2}>\n <EllipsisText tag=\"p\" variant=\"omega\" textColor=\"neutral600\">\n {attributes.description}\n </EllipsisText>\n </Box>\n </Box>\n\n <Flex gap={2} style={{ alignSelf: 'flex-end' }} paddingTop={6}>\n <LinkButton\n size=\"S\"\n href={npmPackageHref}\n isExternal\n endIcon={<ExternalLink />}\n aria-label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.info.label',\n defaultMessage: 'Learn more about {pluginName}',\n },\n { pluginName: attributes.name }\n )}\n variant=\"tertiary\"\n onClick={() => trackUsage('didPluginLearnMore')}\n >\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.info.text',\n defaultMessage: 'More',\n })}\n </LinkButton>\n <InstallPluginButton\n isInstalled={isInstalled}\n isInDevelopmentMode={isInDevelopmentMode}\n isCompatible={isCompatible}\n commandToCopy={commandToCopy}\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={attributes.strapiVersion}\n pluginName={attributes.name}\n />\n </Flex>\n </Flex>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * InstallPluginButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface InstallPluginButtonProps\n extends Pick<NpmPackageCardProps, 'isInstalled' | 'isInDevelopmentMode' | 'strapiAppVersion'> {\n commandToCopy: string;\n pluginName: string;\n strapiPeerDepVersion?: string;\n isCompatible?: boolean;\n}\n\nconst InstallPluginButton = ({\n isInstalled,\n isInDevelopmentMode,\n isCompatible,\n commandToCopy,\n strapiAppVersion,\n strapiPeerDepVersion,\n pluginName,\n}: InstallPluginButtonProps) => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const { copy } = useClipboard();\n\n const handleCopy = async () => {\n const didCopy = await copy(commandToCopy);\n\n if (didCopy) {\n trackUsage('willInstallPlugin');\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'admin.pages.MarketPlacePage.plugin.copy.success' }),\n });\n }\n };\n\n // Already installed\n if (isInstalled) {\n return (\n <Flex gap={2} paddingLeft={4}>\n <Check width=\"1.2rem\" height=\"1.2rem\" color=\"success600\" />\n <Typography variant=\"omega\" textColor=\"success600\" fontWeight=\"bold\">\n {formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.installed',\n defaultMessage: 'Installed',\n })}\n </Typography>\n </Flex>\n );\n }\n\n // In development, show install button\n if (isInDevelopmentMode && isCompatible !== false) {\n return (\n <CardButton\n strapiAppVersion={strapiAppVersion}\n strapiPeerDepVersion={strapiPeerDepVersion}\n handleCopy={handleCopy}\n pluginName={pluginName}\n />\n );\n }\n\n // Not in development and plugin not installed already. Show nothing\n return null;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * CardButton\n * -----------------------------------------------------------------------------------------------*/\n\ninterface CardButtonProps\n extends Pick<NpmPackageCardProps, 'strapiAppVersion'>,\n Pick<InstallPluginButtonProps, 'strapiPeerDepVersion' | 'pluginName'> {\n handleCopy: () => void;\n}\n\nconst CardButton = ({\n strapiPeerDepVersion,\n strapiAppVersion,\n handleCopy,\n pluginName,\n}: CardButtonProps) => {\n const { formatMessage } = useIntl();\n const versionRange = semver.validRange(strapiPeerDepVersion);\n const isCompatible = semver.satisfies(strapiAppVersion ?? '', versionRange ?? '');\n\n const installMessage = formatMessage({\n id: 'admin.pages.MarketPlacePage.plugin.copy',\n defaultMessage: 'Copy install command',\n });\n\n // Only plugins receive a strapiAppVersion\n if (strapiAppVersion) {\n if (!versionRange || !isCompatible) {\n return (\n <Tooltip\n data-testid={`tooltip-${pluginName}`}\n label={formatMessage(\n {\n id: 'admin.pages.MarketPlacePage.plugin.version',\n defaultMessage:\n 'Update your Strapi version: \"{strapiAppVersion}\" to: \"{versionRange}\"',\n },\n {\n strapiAppVersion,\n versionRange,\n }\n )}\n >\n <span>\n <Button\n size=\"S\"\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleCopy}\n disabled={!isCompatible}\n >\n {installMessage}\n </Button>\n </span>\n </Tooltip>\n );\n }\n }\n\n return (\n <Button size=\"S\" startIcon={<Duplicate />} variant=\"secondary\" onClick={handleCopy}>\n {installMessage}\n </Button>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * PackageStats\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PackageStatsProps {\n githubStars?: number;\n npmDownloads?: number;\n npmPackageType: NpmPackageType;\n}\n\nconst PackageStats = ({ githubStars = 0, npmDownloads = 0, npmPackageType }: PackageStatsProps) => {\n const { formatMessage } = useIntl();\n\n return (\n <Flex gap={1}>\n {!!githubStars && (\n <>\n <GitHub height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <Star height=\"1.2rem\" width=\"1.2rem\" fill=\"warning500\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.githubStars`,\n defaultMessage: `This {package} was starred {starsCount} on GitHub`,\n },\n {\n starsCount: githubStars,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {githubStars}\n </Typography>\n </p>\n <VerticalDivider />\n </>\n )}\n <Download height=\"1.2rem\" width=\"1.2rem\" aria-hidden />\n <p\n aria-label={formatMessage(\n {\n id: `admin.pages.MarketPlacePage.${npmPackageType}.downloads`,\n defaultMessage: `This {package} has {downloadsCount} weekly downloads`,\n },\n {\n downloadsCount: npmDownloads,\n package: npmPackageType,\n }\n )}\n >\n <Typography variant=\"pi\" textColor=\"neutral800\">\n {npmDownloads}\n </Typography>\n </p>\n </Flex>\n );\n};\n\nconst VerticalDivider = styled(Divider)`\n width: 1.2rem;\n transform: rotate(90deg);\n`;\n\nexport { NpmPackageCard };\nexport type { NpmPackageCardProps };\n"],"names":["EllipsisText","styled","Typography","NpmPackageCard","npmPackage","isInstalled","useYarn","isInDevelopmentMode","npmPackageType","strapiAppVersion","attributes","formatMessage","useIntl","trackUsage","useTracking","commandToCopy","npmPackageName","madeByStrapiMessage","id","defaultMessage","npmPackageHref","pluralize","plural","slug","versionRange","semver","validRange","strapiVersion","isCompatible","satisfies","_jsxs","Flex","direction","justifyContent","paddingTop","paddingRight","paddingBottom","paddingLeft","hasRadius","background","shadow","height","alignItems","data-testid","Box","_jsx","tag","src","logo","url","alt","name","width","PackageStats","githubStars","npmDownloads","variant","gap","validated","madeByStrapi","Tooltip","description","CheckCircle","fill","label","StrapiLogo","textColor","style","alignSelf","LinkButton","size","href","isExternal","endIcon","ExternalLink","aria-label","pluginName","onClick","InstallPluginButton","strapiPeerDepVersion","toggleNotification","useNotification","copy","useClipboard","handleCopy","didCopy","type","message","Check","color","fontWeight","CardButton","installMessage","span","Button","startIcon","Duplicate","disabled","_Fragment","GitHub","aria-hidden","Star","p","starsCount","package","VerticalDivider","Download","downloadsCount","Divider"],"mappings":"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"}
@@ -764,6 +764,7 @@ var en = {
764
764
  "global.last-change.redo": "Redo last change",
765
765
  "global.last-change.undo": "Undo last change",
766
766
  "global.last-changes.discard": "Discard last changes",
767
+ "global.localeToggle.label": "Select interface language",
767
768
  "global.marketplace": "Marketplace",
768
769
  "global.more": "More",
769
770
  "global.name": "Name",
@@ -791,7 +792,7 @@ var en = {
791
792
  "global.plugins.users-permissions.description": "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
792
793
  "global.profile": "Profile",
793
794
  "global.profile.settings": "Profile settings",
794
- "global.prompt.unsaved": "Are you sure you want to leave this page? All your modifications will be lost",
795
+ "global.prompt.unsaved": "Are you sure you want to leave this page? All your modifications will be lost.",
795
796
  "global.reset-password": "Reset password",
796
797
  "global.roles": "Roles",
797
798
  "global.save": "Save",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -760,6 +760,7 @@ var en = {
760
760
  "global.last-change.redo": "Redo last change",
761
761
  "global.last-change.undo": "Undo last change",
762
762
  "global.last-changes.discard": "Discard last changes",
763
+ "global.localeToggle.label": "Select interface language",
763
764
  "global.marketplace": "Marketplace",
764
765
  "global.more": "More",
765
766
  "global.name": "Name",
@@ -787,7 +788,7 @@ var en = {
787
788
  "global.plugins.users-permissions.description": "Protect your API with a full authentication process based on JWT. This plugin comes also with an ACL strategy that allows you to manage the permissions between the groups of users.",
788
789
  "global.profile": "Profile",
789
790
  "global.profile.settings": "Profile settings",
790
- "global.prompt.unsaved": "Are you sure you want to leave this page? All your modifications will be lost",
791
+ "global.prompt.unsaved": "Are you sure you want to leave this page? All your modifications will be lost.",
791
792
  "global.reset-password": "Reset password",
792
793
  "global.roles": "Roles",
793
794
  "global.save": "Save",
@@ -1 +1 @@
1
- {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -551,6 +551,7 @@ var es = {
551
551
  "global.documentation": "Documentación",
552
552
  "global.enabled": "Habilitado",
553
553
  "global.finish": "Terminar",
554
+ "global.localeToggle.label": "Seleccionar idioma de la interfaz",
554
555
  "global.marketplace": "Marketplace",
555
556
  "global.name": "Nombre",
556
557
  "global.none": "Ninguno",
@@ -1 +1 @@
1
- {"version":3,"file":"es.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"es.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -547,6 +547,7 @@ var es = {
547
547
  "global.documentation": "Documentación",
548
548
  "global.enabled": "Habilitado",
549
549
  "global.finish": "Terminar",
550
+ "global.localeToggle.label": "Seleccionar idioma de la interfaz",
550
551
  "global.marketplace": "Marketplace",
551
552
  "global.name": "Nombre",
552
553
  "global.none": "Ninguno",
@@ -1 +1 @@
1
- {"version":3,"file":"es.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"es.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -501,6 +501,7 @@ var fr = {
501
501
  "components.popUpWarning.title": "Merci de confirmer",
502
502
  dark: dark,
503
503
  "form.button.continue": "Continuer",
504
+ "global.move": "Déplacer",
504
505
  "global.search": "Rechercher",
505
506
  "global.actions": "Actions",
506
507
  "global.auditLogs": "Journaux d'audit",
@@ -1 +1 @@
1
- {"version":3,"file":"fr.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fr.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -497,6 +497,7 @@ var fr = {
497
497
  "components.popUpWarning.title": "Merci de confirmer",
498
498
  dark: dark,
499
499
  "form.button.continue": "Continuer",
500
+ "global.move": "Déplacer",
500
501
  "global.search": "Rechercher",
501
502
  "global.actions": "Actions",
502
503
  "global.auditLogs": "Journaux d'audit",
@@ -1 +1 @@
1
- {"version":3,"file":"fr.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"fr.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -145,7 +145,7 @@ var tr = {
145
145
  "Settings.application.customization.modal.upload.from-url.input-label": "URL",
146
146
  "Settings.application.customization.modal.upload.next": "İleri",
147
147
  "Settings.application.description": "Yönetim panelinin tüm bilgileri",
148
- "Settings.application.edition-title": "mevcut sürüm",
148
+ "Settings.application.edition-title": "Mevcut sürüm",
149
149
  "Settings.application.get-help": "Yardım al",
150
150
  "Settings.application.link-pricing": "Tüm ücret planlarını gör",
151
151
  "Settings.application.link-upgrade": "Admin panelini yükselt",
@@ -141,7 +141,7 @@ var tr = {
141
141
  "Settings.application.customization.modal.upload.from-url.input-label": "URL",
142
142
  "Settings.application.customization.modal.upload.next": "İleri",
143
143
  "Settings.application.description": "Yönetim panelinin tüm bilgileri",
144
- "Settings.application.edition-title": "mevcut sürüm",
144
+ "Settings.application.edition-title": "Mevcut sürüm",
145
145
  "Settings.application.get-help": "Yardım al",
146
146
  "Settings.application.link-pricing": "Tüm ücret planlarını gör",
147
147
  "Settings.application.link-upgrade": "Admin panelini yükselt",
@@ -4,6 +4,7 @@ interface NavBurgerMenuProps {
4
4
  listLinks: MenuItem[];
5
5
  handleClickOnLink: (value: string) => void;
6
6
  mobile?: boolean;
7
+ onClose: () => void;
7
8
  }
8
- declare const NavBurgerMenu: ({ isShown, handleClickOnLink, listLinks }: NavBurgerMenuProps) => import("react/jsx-runtime").JSX.Element;
9
- export { NavBurgerMenu };
9
+ export declare const NavBurgerMenu: ({ isShown, handleClickOnLink, onClose, listLinks, }: NavBurgerMenuProps) => import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1 @@
1
+ export declare function useWarnIfUnsavedChanges(enabled: boolean): void;
@@ -9,16 +9,20 @@ declare const _default: {
9
9
  }[];
10
10
  flags: {};
11
11
  type: string | null | undefined;
12
- ai: {};
12
+ ai: {
13
+ enabled: boolean;
14
+ };
13
15
  };
14
16
  } | {
15
17
  data: {
16
18
  isEE: boolean;
17
19
  features: never[];
18
20
  flags: {};
21
+ ai: {
22
+ enabled: boolean;
23
+ };
19
24
  isTrial?: undefined;
20
25
  type?: undefined;
21
- ai?: undefined;
22
26
  };
23
27
  }>;
24
28
  licenseLimitInformation(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/admin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAgEE"}
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/admin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,wBAoEE"}
@@ -27,16 +27,20 @@ declare const _default: {
27
27
  }[];
28
28
  flags: {};
29
29
  type: string | null | undefined;
30
- ai: {};
30
+ ai: {
31
+ enabled: boolean;
32
+ };
31
33
  };
32
34
  } | {
33
35
  data: {
34
36
  isEE: boolean;
35
37
  features: never[];
36
38
  flags: {};
39
+ ai: {
40
+ enabled: boolean;
41
+ };
37
42
  isTrial?: undefined;
38
43
  type?: undefined;
39
- ai?: undefined;
40
44
  };
41
45
  }>;
42
46
  licenseLimitInformation(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBAKE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../ee/server/src/controllers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,wBAKE"}
@@ -38,16 +38,20 @@ declare const getAdminEE: () => {
38
38
  }[];
39
39
  flags: {};
40
40
  type: string | null | undefined;
41
- ai: {};
41
+ ai: {
42
+ enabled: boolean;
43
+ };
42
44
  };
43
45
  } | {
44
46
  data: {
45
47
  isEE: boolean;
46
48
  features: never[];
47
49
  flags: {};
50
+ ai: {
51
+ enabled: boolean;
52
+ };
48
53
  isTrial?: undefined;
49
54
  type?: undefined;
50
- ai?: undefined;
51
55
  };
52
56
  }>;
53
57
  licenseLimitInformation(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/index.ts"],"names":[],"mappings":";AAcA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAiCe;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;wBAmBxB;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpD,CAAC;AAEF,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/index.ts"],"names":[],"mappings":";AAcA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAG1C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBAiCe;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;wBAmBxB;QAAE,MAAM,EAAE,KAAK,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -41,7 +41,7 @@ const getEventMap = (defaultEvents)=>{
41
41
  };
42
42
  const getRetentionDays = (strapi)=>{
43
43
  const featureConfig = strapi.ee.features.get('audit-logs');
44
- const licenseRetentionDays = typeof featureConfig === 'object' && featureConfig?.options.retentionDays;
44
+ const licenseRetentionDays = typeof featureConfig === 'object' && featureConfig?.options?.retentionDays;
45
45
  const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');
46
46
  // For enterprise plans, use 90 days by default, but allow users to override it
47
47
  if (licenseRetentionDays == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycles.js","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays <= licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":";;AAEA,MAAMA,sBAAyB,GAAA,EAAA;AAE/B,MAAMC,aAAgB,GAAA;AACpB,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,eAAA;AACA,IAAA,iBAAA;AACA,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,oBAAA;AACA,IAAA,cAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,kBAAA;AACA,IAAA,kBAAA;AACA,IAAA,kBAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;AACA,IAAA,mBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,cAAc,CAACD,aAAAA,GAAAA;AACnB,IAAA,MAAME,oBAAoB,CAAC,GAAGC,IAAcA,GAAAA,IAAI,CAAC,CAAE,CAAA;;AAGnD,IAAA,OAAOH,aAAcI,CAAAA,MAAM,CAAC,CAACC,GAAUC,EAAAA,KAAAA,GAAAA;QACrCD,GAAG,CAACC,MAAM,GAAGJ,iBAAAA;QACb,OAAOG,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAME,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,IAAA,MAAMC,gBAAgBD,MAAOE,CAAAA,EAAE,CAACC,QAAQ,CAACC,GAAG,CAAC,YAAA,CAAA;AAC7C,IAAA,MAAMC,oBACJ,GAAA,OAAOJ,aAAkB,KAAA,QAAA,IAAYA,eAAeK,OAAQC,CAAAA,aAAAA;AAC9D,IAAA,MAAMC,iBAAoBR,GAAAA,MAAAA,CAAOS,MAAM,CAACL,GAAG,CAAC,+BAAA,CAAA;;AAG5C,IAAA,IAAIC,wBAAwB,IAAM,EAAA;AAChC,QAAA,OAAOG,iBAAqBjB,IAAAA,sBAAAA;AAC9B;;IAGA,IAAIiB,iBAAAA,IAAqBA,qBAAqBH,oBAAsB,EAAA;QAClE,OAAOG,iBAAAA;AACT;;IAGA,OAAOH,oBAAAA;AACT,CAAA;AAEA;;;IAIA,MAAMK,kCAAkC,CAACV,MAAAA,GAAAA;;AAEvC,IAAA,MAAMW,QAAQ,EAAC;IACf,MAAMC,gBAAAA,GAAmBZ,MAAOI,CAAAA,GAAG,CAAC,YAAA,CAAA;;AAGpC,IAAA,MAAMS,WAAWpB,WAAYD,CAAAA,aAAAA,CAAAA;IAE7B,MAAMsB,YAAAA,GAAe,CAACC,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;AACrC,QAAA,MAAMqB,YAAehB,GAAAA,MAAAA,CAAOiB,cAAc,CAACb,GAAG,EAAIO,EAAAA,KAAAA;;AAGlD,QAAA,MAAMO,gBAAmBF,GAAAA,YAAAA,EAAcG,KAAMC,CAAAA,IAAAA,CAAKC,IAAS,KAAA,OAAA;AAC3D,QAAA,MAAMC,OAAON,YAAcM,EAAAA,IAAAA;QAC3B,IAAI,CAACJ,gBAAoB,IAAA,CAACI,IAAM,EAAA;YAC9B,OAAO,IAAA;AACT;QAEA,MAAMC,UAAAA,GAAaV,QAAQ,CAACE,IAAK,CAAA;;AAGjC,QAAA,IAAI,CAACQ,UAAY,EAAA;YACf,OAAO,IAAA;AACT;;;AAIA,QAAA,MAAMC,WAAc,GAAA;AAAC,YAAA,qBAAA;AAAuB,YAAA;AAAwB,SAAA;AACpE,QAAA,IAAIA,YAAYC,QAAQ,CAAC9B,IAAI,CAAC,CAAA,CAAE,EAAE+B,GAAM,CAAA,EAAA;YACtC,OAAO,IAAA;AACT;QAEA,OAAO;YACLC,MAAQZ,EAAAA,IAAAA;YACRa,IAAM,EAAA,IAAIC,OAAOC,WAAW,EAAA;YAC5BC,OAASR,EAAAA,UAAAA,CAAAA,GAAc5B,SAAS,EAAC;AACjCqC,YAAAA,MAAAA,EAAQV,KAAKW;AACf,SAAA;AACF,KAAA;IAEA,MAAMC,WAAAA,GAAc,OAAOnB,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;QAC1C,MAAMwC,cAAAA,GAAiBrB,aAAaC,IAASpB,EAAAA,GAAAA,IAAAA,CAAAA;AAE7C,QAAA,IAAIwC,cAAgB,EAAA;YAClB,MAAMvB,gBAAAA,CAAiBwB,SAAS,CAACD,cAAAA,CAAAA;AACnC;AACF,KAAA;IAEA,OAAO;QACL,MAAME,QAAAA,CAAAA,GAAAA;;YAEJ,IAAI,CAAC1B,KAAM2B,CAAAA,mBAAmB,EAAE;;AAE9B3B,gBAAAA,KAAAA,CAAM2B,mBAAmB,GAAGtC,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,WAAa,EAAA,IAAA;;AAE1D,oBAAA,IAAI,CAACC,OAAO,EAAA;AACZ,oBAAA,IAAI,CAACJ,QAAQ,EAAA;AACf,iBAAA,CAAA;AACF;;YAGA,IAAI,CAAC1B,KAAM+B,CAAAA,mBAAmB,EAAE;;AAE9B/B,gBAAAA,KAAAA,CAAM+B,mBAAmB,GAAG1C,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,WAAa,EAAA,IAAA;;AAE1D,oBAAA,IAAI,CAACC,OAAO,EAAA;AACZ,oBAAA,IAAI,CAACJ,QAAQ,EAAA;AACf,iBAAA,CAAA;AACF;;;AAIA1B,YAAAA,KAAAA,CAAMgC,oBAAoB,GAAG3C,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,YAAc,EAAA,IAAA;;;AAG5D,gBAAA,IAAI,CAACC,OAAO,EAAA;AACd,aAAA,CAAA;;YAGA,IAAI,CAACzC,OAAOE,EAAE,CAACC,QAAQ,CAACyC,SAAS,CAAC,YAAe,CAAA,EAAA;AAC/C,gBAAA,OAAO,IAAI;AACb;;AAGAjC,YAAAA,KAAAA,CAAMkC,mBAAmB,GAAG7C,MAAAA,CAAOuC,QAAQ,CAACO,SAAS,CAACZ,WAAAA,CAAAA;;AAGtD,YAAA,MAAM3B,gBAAgBR,gBAAiBC,CAAAA,MAAAA,CAAAA;YAEvCA,MAAO+C,CAAAA,IAAI,CAACC,GAAG,CAAC;gBACdC,sBAAwB,EAAA;oBACtBC,IAAM,EAAA,UAAA;wBACJ,MAAMC,cAAAA,GAAiB,IAAItB,IAAKA,CAAAA,IAAAA,CAAKuB,GAAG,EAAK7C,GAAAA,aAAAA,GAAgB,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA,CAAA;AAC5EK,wBAAAA,gBAAAA,CAAiByC,mBAAmB,CAACF,cAAAA,CAAAA;AACvC,qBAAA;oBACA7C,OAAS,EAAA;AACX;AACF,aAAA,CAAA;AAEA,YAAA,OAAO,IAAI;AACb,SAAA;AAEAgD,QAAAA,WAAAA,CAAAA,GAAAA;YACE,IAAI3C,KAAAA,CAAMgC,oBAAoB,EAAE;AAC9BhC,gBAAAA,KAAAA,CAAMgC,oBAAoB,EAAA;AAC5B;YAEA,IAAIhC,KAAAA,CAAMkC,mBAAmB,EAAE;AAC7BlC,gBAAAA,KAAAA,CAAMkC,mBAAmB,EAAA;AAC3B;YAEA7C,MAAO+C,CAAAA,IAAI,CAACQ,MAAM,CAAC,wBAAA,CAAA;AAEnB,YAAA,OAAO,IAAI;AACb,SAAA;AAEAd,QAAAA,OAAAA,CAAAA,GAAAA;YACE,OAAO,IAAI,CAACa,WAAW,EAAA;AACzB;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"lifecycles.js","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options?.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays <= licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
@@ -39,7 +39,7 @@ const getEventMap = (defaultEvents)=>{
39
39
  };
40
40
  const getRetentionDays = (strapi)=>{
41
41
  const featureConfig = strapi.ee.features.get('audit-logs');
42
- const licenseRetentionDays = typeof featureConfig === 'object' && featureConfig?.options.retentionDays;
42
+ const licenseRetentionDays = typeof featureConfig === 'object' && featureConfig?.options?.retentionDays;
43
43
  const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');
44
44
  // For enterprise plans, use 90 days by default, but allow users to override it
45
45
  if (licenseRetentionDays == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycles.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays <= licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
1
+ {"version":3,"file":"lifecycles.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options?.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays <= licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
@@ -8,7 +8,10 @@ var admin = {
8
8
  // NOTE: Overrides CE admin controller
9
9
  async getProjectType () {
10
10
  const flags = strapi.config.get('admin.flags', {});
11
- const ai = strapi.config.get('admin.ai', {});
11
+ const isAILicense = strapi.ee.features.isEnabled('cms-ai');
12
+ const isAIConfigured = strapi.config.get('admin.ai', {
13
+ enabled: isAILicense
14
+ });
12
15
  try {
13
16
  return {
14
17
  data: {
@@ -17,7 +20,9 @@ var admin = {
17
20
  features: strapi.ee.features.list(),
18
21
  flags,
19
22
  type: strapi.ee.type,
20
- ai
23
+ ai: {
24
+ enabled: isAILicense && isAIConfigured.enabled
25
+ }
21
26
  }
22
27
  };
23
28
  } catch (err) {
@@ -25,7 +30,10 @@ var admin = {
25
30
  data: {
26
31
  isEE: false,
27
32
  features: [],
28
- flags
33
+ flags,
34
+ ai: {
35
+ enabled: false
36
+ }
29
37
  }
30
38
  };
31
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../../../../../../ee/server/src/controllers/admin.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { isNil } from 'lodash/fp';\nimport { env } from '@strapi/utils';\nimport { getService } from '../utils';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\n\nexport default {\n // NOTE: Overrides CE admin controller\n async getProjectType() {\n const flags = strapi.config.get('admin.flags', {});\n const ai = strapi.config.get('admin.ai', {});\n try {\n return {\n data: {\n isEE: strapi.EE,\n isTrial: strapi.ee.isTrial,\n features: strapi.ee.features.list(),\n flags,\n type: strapi.ee.type,\n ai,\n },\n };\n } catch (err) {\n return { data: { isEE: false, features: [], flags } };\n }\n },\n\n async licenseLimitInformation() {\n const permittedSeats = strapi.ee.seats;\n\n let shouldNotify = false;\n let licenseLimitStatus = null;\n let enforcementUserCount;\n\n const currentActiveUserCount = await getService('user').getCurrentActiveUserCount();\n\n const eeDisabledUsers = await getService('seat-enforcement').getDisabledUserList();\n\n if (eeDisabledUsers) {\n enforcementUserCount = currentActiveUserCount + eeDisabledUsers.length;\n } else {\n enforcementUserCount = currentActiveUserCount;\n }\n\n if (!isNil(permittedSeats) && enforcementUserCount > permittedSeats) {\n shouldNotify = true;\n licenseLimitStatus = 'OVER_LIMIT';\n }\n\n if (!isNil(permittedSeats) && enforcementUserCount === permittedSeats) {\n shouldNotify = true;\n licenseLimitStatus = 'AT_LIMIT';\n }\n\n const data = {\n enforcementUserCount,\n currentActiveUserCount,\n permittedSeats,\n shouldNotify,\n shouldStopCreate: isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,\n licenseLimitStatus,\n isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',\n aiLicenseKey: env('STRAPI_ADMIN_AI_LICENSE'),\n type: strapi.ee.type,\n isTrial: strapi.ee.isTrial,\n features: strapi.ee.features.list() ?? [],\n };\n\n return { data };\n },\n};\n"],"names":["getProjectType","flags","strapi","config","get","ai","data","isEE","EE","isTrial","ee","features","list","type","err","licenseLimitInformation","permittedSeats","seats","shouldNotify","licenseLimitStatus","enforcementUserCount","currentActiveUserCount","getService","getCurrentActiveUserCount","eeDisabledUsers","getDisabledUserList","length","isNil","shouldStopCreate","isHostedOnStrapiCloud","env","aiLicenseKey"],"mappings":";;;;;;AAQA,YAAe;;IAEb,MAAMA,cAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAMC,QAAQC,MAAOC,CAAAA,MAAM,CAACC,GAAG,CAAC,eAAe,EAAC,CAAA;AAChD,QAAA,MAAMC,KAAKH,MAAOC,CAAAA,MAAM,CAACC,GAAG,CAAC,YAAY,EAAC,CAAA;QAC1C,IAAI;YACF,OAAO;gBACLE,IAAM,EAAA;AACJC,oBAAAA,IAAAA,EAAML,OAAOM,EAAE;oBACfC,OAASP,EAAAA,MAAAA,CAAOQ,EAAE,CAACD,OAAO;AAC1BE,oBAAAA,QAAAA,EAAUT,MAAOQ,CAAAA,EAAE,CAACC,QAAQ,CAACC,IAAI,EAAA;AACjCX,oBAAAA,KAAAA;oBACAY,IAAMX,EAAAA,MAAAA,CAAOQ,EAAE,CAACG,IAAI;AACpBR,oBAAAA;AACF;AACF,aAAA;AACF,SAAA,CAAE,OAAOS,GAAK,EAAA;YACZ,OAAO;gBAAER,IAAM,EAAA;oBAAEC,IAAM,EAAA,KAAA;AAAOI,oBAAAA,QAAAA,EAAU,EAAE;AAAEV,oBAAAA;AAAM;AAAE,aAAA;AACtD;AACF,KAAA;IAEA,MAAMc,uBAAAA,CAAAA,GAAAA;AACJ,QAAA,MAAMC,cAAiBd,GAAAA,MAAAA,CAAOQ,EAAE,CAACO,KAAK;AAEtC,QAAA,IAAIC,YAAe,GAAA,KAAA;AACnB,QAAA,IAAIC,kBAAqB,GAAA,IAAA;QACzB,IAAIC,oBAAAA;AAEJ,QAAA,MAAMC,sBAAyB,GAAA,MAAMC,gBAAW,CAAA,MAAA,CAAA,CAAQC,yBAAyB,EAAA;AAEjF,QAAA,MAAMC,eAAkB,GAAA,MAAMF,gBAAW,CAAA,kBAAA,CAAA,CAAoBG,mBAAmB,EAAA;AAEhF,QAAA,IAAID,eAAiB,EAAA;YACnBJ,oBAAuBC,GAAAA,sBAAAA,GAAyBG,gBAAgBE,MAAM;SACjE,MAAA;YACLN,oBAAuBC,GAAAA,sBAAAA;AACzB;AAEA,QAAA,IAAI,CAACM,QAAAA,CAAMX,cAAmBI,CAAAA,IAAAA,oBAAAA,GAAuBJ,cAAgB,EAAA;YACnEE,YAAe,GAAA,IAAA;YACfC,kBAAqB,GAAA,YAAA;AACvB;AAEA,QAAA,IAAI,CAACQ,QAAAA,CAAMX,cAAmBI,CAAAA,IAAAA,oBAAAA,KAAyBJ,cAAgB,EAAA;YACrEE,YAAe,GAAA,IAAA;YACfC,kBAAqB,GAAA,UAAA;AACvB;AAEA,QAAA,MAAMb,IAAO,GAAA;AACXc,YAAAA,oBAAAA;AACAC,YAAAA,sBAAAA;AACAL,YAAAA,cAAAA;AACAE,YAAAA,YAAAA;YACAU,gBAAkBD,EAAAA,QAAAA,CAAMX,cAAkB,CAAA,GAAA,KAAA,GAAQK,sBAA0BL,IAAAA,cAAAA;AAC5EG,YAAAA,kBAAAA;YACAU,qBAAuBC,EAAAA,SAAAA,CAAI,kBAAkB,IAAU,CAAA,KAAA,cAAA;AACvDC,YAAAA,YAAAA,EAAcD,SAAI,CAAA,yBAAA,CAAA;YAClBjB,IAAMX,EAAAA,MAAAA,CAAOQ,EAAE,CAACG,IAAI;YACpBJ,OAASP,EAAAA,MAAAA,CAAOQ,EAAE,CAACD,OAAO;AAC1BE,YAAAA,QAAAA,EAAUT,OAAOQ,EAAE,CAACC,QAAQ,CAACC,IAAI,MAAM;AACzC,SAAA;QAEA,OAAO;AAAEN,YAAAA;AAAK,SAAA;AAChB;AACF,CAAE;;;;"}
1
+ {"version":3,"file":"admin.js","sources":["../../../../../../ee/server/src/controllers/admin.ts"],"sourcesContent":["import type { Context } from 'koa';\nimport { isNil } from 'lodash/fp';\nimport { env } from '@strapi/utils';\nimport { getService } from '../utils';\nimport path from 'path';\nimport fs from 'fs';\nimport crypto from 'crypto';\n\nexport default {\n // NOTE: Overrides CE admin controller\n async getProjectType() {\n const flags = strapi.config.get('admin.flags', {});\n const isAILicense = strapi.ee.features.isEnabled('cms-ai');\n const isAIConfigured = strapi.config.get('admin.ai', { enabled: isAILicense });\n\n try {\n return {\n data: {\n isEE: strapi.EE,\n isTrial: strapi.ee.isTrial,\n features: strapi.ee.features.list(),\n flags,\n type: strapi.ee.type,\n ai: {\n enabled: isAILicense && isAIConfigured.enabled,\n },\n },\n };\n } catch (err) {\n return { data: { isEE: false, features: [], flags, ai: { enabled: false } } };\n }\n },\n\n async licenseLimitInformation() {\n const permittedSeats = strapi.ee.seats;\n\n let shouldNotify = false;\n let licenseLimitStatus = null;\n let enforcementUserCount;\n\n const currentActiveUserCount = await getService('user').getCurrentActiveUserCount();\n\n const eeDisabledUsers = await getService('seat-enforcement').getDisabledUserList();\n\n if (eeDisabledUsers) {\n enforcementUserCount = currentActiveUserCount + eeDisabledUsers.length;\n } else {\n enforcementUserCount = currentActiveUserCount;\n }\n\n if (!isNil(permittedSeats) && enforcementUserCount > permittedSeats) {\n shouldNotify = true;\n licenseLimitStatus = 'OVER_LIMIT';\n }\n\n if (!isNil(permittedSeats) && enforcementUserCount === permittedSeats) {\n shouldNotify = true;\n licenseLimitStatus = 'AT_LIMIT';\n }\n\n const data = {\n enforcementUserCount,\n currentActiveUserCount,\n permittedSeats,\n shouldNotify,\n shouldStopCreate: isNil(permittedSeats) ? false : currentActiveUserCount >= permittedSeats,\n licenseLimitStatus,\n isHostedOnStrapiCloud: env('STRAPI_HOSTING', null) === 'strapi.cloud',\n aiLicenseKey: env('STRAPI_ADMIN_AI_LICENSE'),\n type: strapi.ee.type,\n isTrial: strapi.ee.isTrial,\n features: strapi.ee.features.list() ?? [],\n };\n\n return { data };\n },\n};\n"],"names":["getProjectType","flags","strapi","config","get","isAILicense","ee","features","isEnabled","isAIConfigured","enabled","data","isEE","EE","isTrial","list","type","ai","err","licenseLimitInformation","permittedSeats","seats","shouldNotify","licenseLimitStatus","enforcementUserCount","currentActiveUserCount","getService","getCurrentActiveUserCount","eeDisabledUsers","getDisabledUserList","length","isNil","shouldStopCreate","isHostedOnStrapiCloud","env","aiLicenseKey"],"mappings":"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"}
@@ -6,7 +6,10 @@ var admin = {
6
6
  // NOTE: Overrides CE admin controller
7
7
  async getProjectType () {
8
8
  const flags = strapi.config.get('admin.flags', {});
9
- const ai = strapi.config.get('admin.ai', {});
9
+ const isAILicense = strapi.ee.features.isEnabled('cms-ai');
10
+ const isAIConfigured = strapi.config.get('admin.ai', {
11
+ enabled: isAILicense
12
+ });
10
13
  try {
11
14
  return {
12
15
  data: {
@@ -15,7 +18,9 @@ var admin = {
15
18
  features: strapi.ee.features.list(),
16
19
  flags,
17
20
  type: strapi.ee.type,
18
- ai
21
+ ai: {
22
+ enabled: isAILicense && isAIConfigured.enabled
23
+ }
19
24
  }
20
25
  };
21
26
  } catch (err) {
@@ -23,7 +28,10 @@ var admin = {
23
28
  data: {
24
29
  isEE: false,
25
30
  features: [],
26
- flags
31
+ flags,
32
+ ai: {
33
+ enabled: false
34
+ }
27
35
  }
28
36
  };
29
37
  }