@strapi/admin 5.51.1 → 5.51.2

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 (135) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +3 -3
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +3 -3
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/NpsSurvey.js +1 -1
  6. package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
  7. package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -1
  8. package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
  9. package/dist/admin/admin/src/features/Tracking.js +1 -1
  10. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  11. package/dist/admin/admin/src/features/Tracking.mjs +1 -1
  12. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  13. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +1 -1
  14. package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
  15. package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs +1 -1
  16. package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
  17. package/dist/admin/admin/src/pages/Auth/components/Register.js +35 -26
  18. package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
  19. package/dist/admin/admin/src/pages/Auth/components/Register.mjs +35 -27
  20. package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
  21. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
  22. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  23. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
  24. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  25. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +1 -1
  26. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
  27. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +1 -1
  28. package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
  29. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +1 -1
  30. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
  31. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +1 -1
  32. package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
  33. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +1 -3
  34. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
  35. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +1 -3
  36. package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
  37. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -1
  38. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
  39. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +1 -1
  40. package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
  41. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +1 -1
  42. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  43. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +1 -1
  44. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  45. package/dist/admin/admin/src/pages/UseCasePage.js +1 -1
  46. package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
  47. package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -1
  48. package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
  49. package/dist/admin/admin/src/utils/baseQuery.js +3 -2
  50. package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
  51. package/dist/admin/admin/src/utils/baseQuery.mjs +3 -2
  52. package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
  53. package/dist/admin/admin/src/utils/users.js +1 -1
  54. package/dist/admin/admin/src/utils/users.js.map +1 -1
  55. package/dist/admin/admin/src/utils/users.mjs +1 -1
  56. package/dist/admin/admin/src/utils/users.mjs.map +1 -1
  57. package/dist/admin/admin/tests/server.js +640 -684
  58. package/dist/admin/admin/tests/server.js.map +1 -1
  59. package/dist/admin/admin/tests/server.mjs +640 -684
  60. package/dist/admin/admin/tests/server.mjs.map +1 -1
  61. package/dist/admin/ee/admin/src/constants.js +22 -26
  62. package/dist/admin/ee/admin/src/constants.js.map +1 -1
  63. package/dist/admin/ee/admin/src/constants.mjs +22 -26
  64. package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
  65. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -1
  66. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
  67. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -1
  68. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
  69. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js +16 -20
  70. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js.map +1 -1
  71. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs +16 -20
  72. package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs.map +1 -1
  73. package/dist/admin/src/pages/Auth/components/Register.d.ts +10 -0
  74. package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +3 -1
  75. package/dist/ee/server/src/destroy.d.ts +1 -4
  76. package/dist/ee/server/src/destroy.d.ts.map +1 -1
  77. package/dist/ee/server/src/index.d.ts.map +1 -1
  78. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +3 -3
  79. package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
  80. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +3 -3
  81. package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
  82. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
  83. package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
  84. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
  85. package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
  86. package/dist/server/ee/server/src/controllers/admin.js +1 -1
  87. package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
  88. package/dist/server/ee/server/src/controllers/admin.mjs +1 -1
  89. package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
  90. package/dist/server/ee/server/src/destroy.js +1 -1
  91. package/dist/server/ee/server/src/destroy.js.map +1 -1
  92. package/dist/server/ee/server/src/destroy.mjs +1 -1
  93. package/dist/server/ee/server/src/destroy.mjs.map +1 -1
  94. package/dist/server/ee/server/src/index.js +1 -3
  95. package/dist/server/ee/server/src/index.js.map +1 -1
  96. package/dist/server/ee/server/src/index.mjs +1 -3
  97. package/dist/server/ee/server/src/index.mjs.map +1 -1
  98. package/dist/server/ee/server/src/services/index.js.map +1 -1
  99. package/dist/server/ee/server/src/services/index.mjs +2 -2
  100. package/dist/server/ee/server/src/services/index.mjs.map +1 -1
  101. package/dist/server/ee/server/src/services/persist-tables.js +2 -2
  102. package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
  103. package/dist/server/ee/server/src/services/persist-tables.mjs +4 -4
  104. package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
  105. package/dist/server/server/src/ai/controllers/ai.js +2 -2
  106. package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
  107. package/dist/server/server/src/ai/controllers/ai.mjs +2 -2
  108. package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
  109. package/dist/server/server/src/middlewares/rateLimit.js +1 -2
  110. package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
  111. package/dist/server/server/src/middlewares/rateLimit.mjs +2 -2
  112. package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
  113. package/dist/server/server/src/services/encryption.js +1 -1
  114. package/dist/server/server/src/services/encryption.js.map +1 -1
  115. package/dist/server/server/src/services/encryption.mjs +1 -1
  116. package/dist/server/server/src/services/encryption.mjs.map +1 -1
  117. package/dist/server/server/src/services/permission/engine.js +4 -8
  118. package/dist/server/server/src/services/permission/engine.js.map +1 -1
  119. package/dist/server/server/src/services/permission/engine.mjs +5 -5
  120. package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
  121. package/dist/server/server/src/services/transfer/permission.js +1 -5
  122. package/dist/server/server/src/services/transfer/permission.js.map +1 -1
  123. package/dist/server/server/src/services/transfer/permission.mjs +2 -2
  124. package/dist/server/server/src/services/transfer/permission.mjs.map +1 -1
  125. package/dist/server/server/src/services/user.js +1 -1
  126. package/dist/server/server/src/services/user.js.map +1 -1
  127. package/dist/server/server/src/services/user.mjs +1 -1
  128. package/dist/server/server/src/services/user.mjs.map +1 -1
  129. package/dist/server/src/index.d.ts.map +1 -1
  130. package/dist/server/src/middlewares/index.d.ts.map +1 -1
  131. package/dist/server/src/services/permission/engine.d.ts +1 -1
  132. package/dist/server/src/services/permission/engine.d.ts.map +1 -1
  133. package/dist/server/src/services/transfer/permission.d.ts +2 -2
  134. package/dist/server/src/services/transfer/permission.d.ts.map +1 -1
  135. package/package.json +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"SingleSignOnPage.mjs","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField<string[]>(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","err","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"SingleSignOnPage.mjs","sources":["../../../../../../../../ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.tsx"],"sourcesContent":["import {\n Button,\n Flex,\n Grid,\n MultiSelect,\n MultiSelectOption,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport * as yup from 'yup';\n\nimport {\n Form,\n FormHelpers,\n InputProps,\n useField,\n} from '../../../../../../admin/src/components/Form';\nimport { InputRenderer } from '../../../../../../admin/src/components/FormInputs/Renderer';\nimport { GradientBadge } from '../../../../../../admin/src/components/GradientBadge';\nimport { Layouts } from '../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../admin/src/components/PageHelpers';\nimport { useTypedSelector } from '../../../../../../admin/src/core/store/hooks';\nimport { useNotification } from '../../../../../../admin/src/features/Notifications';\nimport { useAdminRoles } from '../../../../../../admin/src/hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../../../admin/src/hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../../admin/src/hooks/useRBAC';\nimport {\n useGetProviderOptionsQuery,\n useUpdateProviderOptionsMutation,\n} from '../../../../../../admin/src/services/auth';\nimport { isBaseQueryError } from '../../../../../../admin/src/utils/baseQuery';\nimport { translatedErrors } from '../../../../../../admin/src/utils/translatedErrors';\nimport { ProvidersOptions } from '../../../../../../shared/contracts/admin';\n\nconst SCHEMA = yup.object().shape({\n autoRegister: yup.bool().required(translatedErrors.required),\n defaultRole: yup.mixed().when('autoRegister', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n }),\n ssoLockedRoles: yup\n .array()\n .nullable()\n .of(\n yup.mixed().when('ssoLockedRoles', (value, initSchema) => {\n return value ? initSchema.required(translatedErrors.required) : initSchema.nullable();\n })\n ),\n});\n\nexport const SingleSignOnPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const { toggleNotification } = useNotification();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingProviderOptions, data } = useGetProviderOptionsQuery();\n\n const [updateProviderOptions, { isLoading: isSubmittingForm }] =\n useUpdateProviderOptionsMutation();\n\n const {\n isLoading: isLoadingPermissions,\n allowedActions: { canUpdate, canRead: canReadRoles },\n } = useRBAC({\n ...permissions.settings?.sso,\n readRoles: permissions.settings?.roles.read ?? [],\n });\n\n const { roles, isLoading: isLoadingRoles } = useAdminRoles(undefined, {\n skip: !canReadRoles,\n });\n\n const handleSubmit = async (\n body: ProvidersOptions.Request['body'],\n helpers: FormHelpers<ProvidersOptions.Request['body']>\n ) => {\n try {\n const res = await updateProviderOptions(body);\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n helpers.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'An error occurred, please try again.',\n }),\n });\n }\n };\n\n const isLoadingData = isLoadingRoles || isLoadingPermissions || isLoadingProviderOptions;\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'SSO',\n }\n )}\n </Page.Title>\n <Page.Main aria-busy={isSubmittingForm || isLoadingData} tabIndex={-1}>\n <Form\n method=\"PUT\"\n onSubmit={handleSubmit}\n validationSchema={SCHEMA}\n disabled={!canUpdate}\n initialValues={\n data || {\n autoRegister: false,\n defaultRole: null,\n ssoLockedRoles: null,\n }\n }\n >\n {({ modified, isSubmitting }) => (\n <>\n <Layouts.Header\n primaryAction={\n <Button\n disabled={!modified}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.sso.title',\n defaultMessage: 'Single Sign-On',\n })}\n subtitle={formatMessage({\n id: 'Settings.sso.description',\n defaultMessage: 'Configure the settings for the Single Sign-On feature.',\n })}\n secondaryAction={\n <GradientBadge\n label={formatMessage({\n id: 'components.premiumFeature.title',\n defaultMessage: 'Premium feature',\n })}\n />\n }\n />\n <Layouts.Content>\n {isSubmitting || isLoadingData ? (\n <Page.Loading />\n ) : (\n <Flex\n direction=\"column\"\n alignItems=\"stretch\"\n gap={4}\n background=\"neutral0\"\n padding={6}\n shadow=\"filterShadow\"\n hasRadius\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.settings',\n defaultMessage: 'Settings',\n })}\n </Typography>\n <Grid.Root gap={4}>\n {[\n {\n hint: formatMessage({\n id: 'Settings.sso.form.registration.description',\n defaultMessage: 'Create new user on SSO login if no account exists',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.registration.label',\n defaultMessage: 'Auto-registration',\n }),\n name: 'autoRegister',\n size: 6,\n type: 'boolean' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.defaultRole.description',\n defaultMessage:\n 'It will attach the new authenticated user to the selected role',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.defaultRole.label',\n defaultMessage: 'Default role',\n }),\n name: 'defaultRole',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'enumeration' as const,\n },\n {\n hint: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.description',\n defaultMessage:\n 'Select the roles for which you want to disable the local authentication',\n }),\n label: formatMessage({\n id: 'Settings.sso.form.localAuthenticationLock.label',\n defaultMessage: 'Local authentication lock-out',\n }),\n name: 'ssoLockedRoles',\n options: roles.map(({ id, name }) => ({\n label: name,\n value: id.toString(),\n })),\n placeholder: formatMessage({\n id: 'components.InputSelect.option.placeholder',\n defaultMessage: 'Choose here',\n }),\n size: 6,\n type: 'multi' as const,\n },\n ].map(({ size, ...field }) => (\n <Grid.Item\n key={field.name}\n col={size}\n xs={12}\n direction=\"column\"\n alignItems=\"stretch\"\n >\n <FormInputRenderer {...field} />\n </Grid.Item>\n ))}\n </Grid.Root>\n </Flex>\n )}\n </Layouts.Content>\n </>\n )}\n </Form>\n </Page.Main>\n </>\n );\n};\n\ntype FormInputProps = InputProps | MultiSelectInputProps;\n\nconst FormInputRenderer = (props: FormInputProps) => {\n switch (props.type) {\n case 'multi':\n return <MultiSelectInput {...props} />;\n default:\n return <InputRenderer {...props} />;\n }\n};\n\ntype MultiSelectInputProps = Omit<Extract<InputProps, { type: 'enumeration' }>, 'type'> & {\n type: 'multi';\n};\n\nconst MultiSelectInput = ({ hint, label, name, options, ...props }: MultiSelectInputProps) => {\n const field = useField<string[]>(name);\n\n return (\n <Field.Root name={name} hint={hint} error={field.error}>\n <Field.Label>{label}</Field.Label>\n <MultiSelect\n onChange={(value) => field.onChange('ssoLockedRoles', value)}\n onClear={() => field.onChange('ssoLockedRoles', [])}\n value={field.value ?? []}\n withTags\n {...props}\n >\n {options.map(({ label, value }) => (\n <MultiSelectOption key={value} value={value}>\n {label}\n </MultiSelectOption>\n ))}\n </MultiSelect>\n <Field.Hint />\n <Field.Error />\n </Field.Root>\n );\n};\n\nexport const ProtectedSSO = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.sso?.main);\n\n return (\n <Page.Protect permissions={permissions}>\n <SingleSignOnPage />\n </Page.Protect>\n );\n};\n"],"names":["SCHEMA","yup","object","shape","autoRegister","bool","required","translatedErrors","defaultRole","mixed","when","value","initSchema","nullable","ssoLockedRoles","array","of","SingleSignOnPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingProviderOptions","data","useGetProviderOptionsQuery","updateProviderOptions","isSubmittingForm","useUpdateProviderOptionsMutation","isLoadingPermissions","allowedActions","canUpdate","canRead","canReadRoles","useRBAC","settings","sso","readRoles","roles","read","isLoadingRoles","useAdminRoles","undefined","skip","handleSubmit","body","helpers","res","isBaseQueryError","error","name","setErrors","type","message","id","defaultMessage","isLoadingData","_jsxs","_Fragment","_jsx","Page","Title","Main","aria-busy","tabIndex","Form","method","onSubmit","validationSchema","disabled","initialValues","modified","isSubmitting","Layouts","Header","primaryAction","Button","loading","startIcon","Check","fullWidth","title","subtitle","secondaryAction","GradientBadge","label","Content","Loading","Flex","direction","alignItems","gap","background","padding","shadow","hasRadius","Typography","variant","tag","Grid","Root","hint","size","options","map","toString","placeholder","field","Item","col","xs","FormInputRenderer","props","MultiSelectInput","InputRenderer","useField","Field","Label","MultiSelect","onChange","onClear","withTags","MultiSelectOption","Hint","Error","ProtectedSSO","main","Protect"],"mappings":"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"}
@@ -1,25 +1,21 @@
1
1
  'use strict';
2
2
 
3
- const FORM_INITIAL_VALUES = {
4
- ...window.strapi.features.isEnabled(window.strapi.features.SSO) ? {
5
- useSSORegistration: true
6
- } : {}
7
- };
8
- const ROLE_LAYOUT = [
9
- ...window.strapi.features.isEnabled(window.strapi.features.SSO) ? [
10
- [
11
- {
12
- label: {
13
- id: 'Settings.permissions.users.form.sso',
14
- defaultMessage: 'Connect with SSO'
15
- },
16
- name: 'useSSORegistration',
17
- type: 'boolean',
18
- size: 6
19
- }
20
- ]
21
- ] : []
22
- ];
3
+ const FORM_INITIAL_VALUES = window.strapi.features.isEnabled(window.strapi.features.SSO) ? {
4
+ useSSORegistration: true
5
+ } : {};
6
+ const ROLE_LAYOUT = window.strapi.features.isEnabled(window.strapi.features.SSO) ? [
7
+ [
8
+ {
9
+ label: {
10
+ id: 'Settings.permissions.users.form.sso',
11
+ defaultMessage: 'Connect with SSO'
12
+ },
13
+ name: 'useSSORegistration',
14
+ type: 'boolean',
15
+ size: 6
16
+ }
17
+ ]
18
+ ] : [];
23
19
 
24
20
  exports.FORM_INITIAL_VALUES = FORM_INITIAL_VALUES;
25
21
  exports.ROLE_LAYOUT = ROLE_LAYOUT;
@@ -1 +1 @@
1
- {"version":3,"file":"ModalForm.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.tsx"],"sourcesContent":["import type { FormLayoutInputProps } from '../../../../../../../../admin/src/types/forms';\n\nexport const FORM_INITIAL_VALUES = {\n ...(window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? {\n useSSORegistration: true,\n }\n : {}),\n};\n\nexport const ROLE_LAYOUT = [\n ...(window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n [\n {\n label: {\n id: 'Settings.permissions.users.form.sso',\n defaultMessage: 'Connect with SSO',\n },\n name: 'useSSORegistration',\n type: 'boolean' as const,\n size: 6,\n },\n ],\n ]\n : []),\n] satisfies FormLayoutInputProps[][];\n"],"names":["FORM_INITIAL_VALUES","window","strapi","features","isEnabled","SSO","useSSORegistration","ROLE_LAYOUT","label","id","defaultMessage","name","type","size"],"mappings":";;MAEaA,mBAAAA,GAAsB;AACjC,IAAA,GAAIC,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GAC3D;QACEC,kBAAAA,EAAoB;AACtB,KAAA,GACA;AACN;MAEaC,WAAAA,GAAc;AACrBN,IAAAA,GAAAA,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GAC3D;AACE,QAAA;AACE,YAAA;gBACEG,KAAAA,EAAO;oBACLC,EAAAA,EAAI,qCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,IAAAA,EAAM,oBAAA;gBACNC,IAAAA,EAAM,SAAA;gBACNC,IAAAA,EAAM;AACR;AACD;AACF,KAAA,GACD;;;;;;"}
1
+ {"version":3,"file":"ModalForm.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.tsx"],"sourcesContent":["import type { FormLayoutInputProps } from '../../../../../../../../admin/src/types/forms';\n\nexport const FORM_INITIAL_VALUES = window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? {\n useSSORegistration: true,\n }\n : {};\n\nexport const ROLE_LAYOUT = (\n window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n [\n {\n label: {\n id: 'Settings.permissions.users.form.sso',\n defaultMessage: 'Connect with SSO',\n },\n name: 'useSSORegistration',\n type: 'boolean' as const,\n size: 6,\n },\n ],\n ]\n : []\n) satisfies FormLayoutInputProps[][];\n"],"names":["FORM_INITIAL_VALUES","window","strapi","features","isEnabled","SSO","useSSORegistration","ROLE_LAYOUT","label","id","defaultMessage","name","type","size"],"mappings":";;AAEO,MAAMA,mBAAAA,GAAsBC,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,OAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GAC1F;IACEC,kBAAAA,EAAoB;AACtB,CAAA,GACA;AAEG,MAAMC,WAAAA,GACXN,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,OAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GACvD;AACE,IAAA;AACE,QAAA;YACEG,KAAAA,EAAO;gBACLC,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA;YACAC,IAAAA,EAAM,oBAAA;YACNC,IAAAA,EAAM,SAAA;YACNC,IAAAA,EAAM;AACR;AACD;AACF,CAAA,GACD;;;;;"}
@@ -1,23 +1,19 @@
1
- const FORM_INITIAL_VALUES = {
2
- ...window.strapi.features.isEnabled(window.strapi.features.SSO) ? {
3
- useSSORegistration: true
4
- } : {}
5
- };
6
- const ROLE_LAYOUT = [
7
- ...window.strapi.features.isEnabled(window.strapi.features.SSO) ? [
8
- [
9
- {
10
- label: {
11
- id: 'Settings.permissions.users.form.sso',
12
- defaultMessage: 'Connect with SSO'
13
- },
14
- name: 'useSSORegistration',
15
- type: 'boolean',
16
- size: 6
17
- }
18
- ]
19
- ] : []
20
- ];
1
+ const FORM_INITIAL_VALUES = window.strapi.features.isEnabled(window.strapi.features.SSO) ? {
2
+ useSSORegistration: true
3
+ } : {};
4
+ const ROLE_LAYOUT = window.strapi.features.isEnabled(window.strapi.features.SSO) ? [
5
+ [
6
+ {
7
+ label: {
8
+ id: 'Settings.permissions.users.form.sso',
9
+ defaultMessage: 'Connect with SSO'
10
+ },
11
+ name: 'useSSORegistration',
12
+ type: 'boolean',
13
+ size: 6
14
+ }
15
+ ]
16
+ ] : [];
21
17
 
22
18
  export { FORM_INITIAL_VALUES, ROLE_LAYOUT };
23
19
  //# sourceMappingURL=ModalForm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ModalForm.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.tsx"],"sourcesContent":["import type { FormLayoutInputProps } from '../../../../../../../../admin/src/types/forms';\n\nexport const FORM_INITIAL_VALUES = {\n ...(window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? {\n useSSORegistration: true,\n }\n : {}),\n};\n\nexport const ROLE_LAYOUT = [\n ...(window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n [\n {\n label: {\n id: 'Settings.permissions.users.form.sso',\n defaultMessage: 'Connect with SSO',\n },\n name: 'useSSORegistration',\n type: 'boolean' as const,\n size: 6,\n },\n ],\n ]\n : []),\n] satisfies FormLayoutInputProps[][];\n"],"names":["FORM_INITIAL_VALUES","window","strapi","features","isEnabled","SSO","useSSORegistration","ROLE_LAYOUT","label","id","defaultMessage","name","type","size"],"mappings":"MAEaA,mBAAAA,GAAsB;AACjC,IAAA,GAAIC,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GAC3D;QACEC,kBAAAA,EAAoB;AACtB,KAAA,GACA;AACN;MAEaC,WAAAA,GAAc;AACrBN,IAAAA,GAAAA,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GAC3D;AACE,QAAA;AACE,YAAA;gBACEG,KAAAA,EAAO;oBACLC,EAAAA,EAAI,qCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;gBACAC,IAAAA,EAAM,oBAAA;gBACNC,IAAAA,EAAM,SAAA;gBACNC,IAAAA,EAAM;AACR;AACD;AACF,KAAA,GACD;;;;;"}
1
+ {"version":3,"file":"ModalForm.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.tsx"],"sourcesContent":["import type { FormLayoutInputProps } from '../../../../../../../../admin/src/types/forms';\n\nexport const FORM_INITIAL_VALUES = window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? {\n useSSORegistration: true,\n }\n : {};\n\nexport const ROLE_LAYOUT = (\n window.strapi.features.isEnabled(window.strapi.features.SSO)\n ? [\n [\n {\n label: {\n id: 'Settings.permissions.users.form.sso',\n defaultMessage: 'Connect with SSO',\n },\n name: 'useSSORegistration',\n type: 'boolean' as const,\n size: 6,\n },\n ],\n ]\n : []\n) satisfies FormLayoutInputProps[][];\n"],"names":["FORM_INITIAL_VALUES","window","strapi","features","isEnabled","SSO","useSSORegistration","ROLE_LAYOUT","label","id","defaultMessage","name","type","size"],"mappings":"AAEO,MAAMA,mBAAAA,GAAsBC,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,OAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GAC1F;IACEC,kBAAAA,EAAoB;AACtB,CAAA,GACA;AAEG,MAAMC,WAAAA,GACXN,MAAAA,CAAOC,MAAM,CAACC,QAAQ,CAACC,SAAS,CAACH,OAAOC,MAAM,CAACC,QAAQ,CAACE,GAAG,CAAA,GACvD;AACE,IAAA;AACE,QAAA;YACEG,KAAAA,EAAO;gBACLC,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA;YACAC,IAAAA,EAAM,oBAAA;YACNC,IAAAA,EAAM,SAAA;YACNC,IAAAA,EAAM;AACR;AACD;AACF,CAAA,GACD;;;;"}
@@ -1,6 +1,16 @@
1
+ import { type IntlShape } from 'react-intl';
1
2
  interface RegisterProps {
2
3
  hasAdmin?: boolean;
3
4
  }
5
+ /**
6
+ * @description Turns a yup validation message into a displayable string. The message can be a
7
+ * plain string, a descriptor, or a descriptor wrapped in `{ message }` / `{ errors: [] }`.
8
+ *
9
+ * `values` is forwarded to `formatMessage`, otherwise react-intl cannot interpolate placeholders
10
+ * such as the `{min}` of `components.Input.error.validation.minLength` and renders the raw
11
+ * pattern instead. See strapi/strapi#19030.
12
+ */
13
+ export declare const formatValidationMessage: (msg: unknown, formatMessage: IntlShape["formatMessage"]) => string;
4
14
  declare const Register: ({ hasAdmin }: RegisterProps) => import("react/jsx-runtime").JSX.Element;
5
15
  export { Register };
6
16
  export type { RegisterProps };
@@ -1,5 +1,7 @@
1
1
  export declare const FORM_INITIAL_VALUES: {
2
- useSSORegistration?: boolean | undefined;
2
+ useSSORegistration: boolean;
3
+ } | {
4
+ useSSORegistration?: undefined;
3
5
  };
4
6
  export declare const ROLE_LAYOUT: {
5
7
  label: {
@@ -1,6 +1,3 @@
1
- import type { Core } from '@strapi/types';
2
- declare const _default: ({ strapi }: {
3
- strapi: Core.Strapi;
4
- }) => Promise<void>;
1
+ declare const _default: () => Promise<void>;
5
2
  export default _default;
6
3
  //# sourceMappingURL=destroy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/destroy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;yBAGpB,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE;AAAzD,wBAEE"}
1
+ {"version":3,"file":"destroy.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/destroy.ts"],"names":[],"mappings":";AAEA,wBAEE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../ee/server/src/index.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA4Be;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE;wBAcxB;QAAE,MAAM,EAAE,IAAI,CAAC,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":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAc1C,QAAA,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;yBA4Be;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE;wBAcxB;QAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOpD,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -25,7 +25,7 @@ const getSanitizedUser = (user)=>{
25
25
  user: userId
26
26
  };
27
27
  // Save to database
28
- await strapi.db?.query('admin::audit-log').create({
28
+ await strapi.db.query('admin::audit-log').create({
29
29
  data: auditLog
30
30
  });
31
31
  return this;
@@ -87,7 +87,7 @@ const getSanitizedUser = (user)=>{
87
87
  };
88
88
  },
89
89
  async findOne (id) {
90
- const result = await strapi.db?.query('admin::audit-log').findOne({
90
+ const result = await strapi.db.query('admin::audit-log').findOne({
91
91
  where: {
92
92
  id
93
93
  },
@@ -110,7 +110,7 @@ const getSanitizedUser = (user)=>{
110
110
  };
111
111
  },
112
112
  deleteExpiredEvents (expirationDate) {
113
- return strapi.db?.query('admin::audit-log').deleteMany({
113
+ return strapi.db.query('admin::audit-log').deleteMany({
114
114
  where: {
115
115
  date: {
116
116
  $lt: expirationDate.toISOString()
@@ -1 +1 @@
1
- {"version":3,"file":"audit-logs.js","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db?.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findManyUsers(query: { page?: number | string; pageSize?: number | string }) {\n const { page = 1, pageSize = 10 } = query;\n\n const userAttribute = strapi.db.metadata.get('admin::audit-log').attributes.user;\n\n if (\n userAttribute?.type !== 'relation' ||\n !('joinTable' in userAttribute) ||\n !userAttribute.joinTable ||\n !('inverseJoinColumn' in userAttribute.joinTable)\n ) {\n throw new Error('The audit log user relation is expected to use a join table');\n }\n\n const { joinTable } = userAttribute;\n\n const authorIds = await strapi.db\n .connection(joinTable.name)\n .distinct(joinTable.inverseJoinColumn.name)\n .pluck(joinTable.inverseJoinColumn.name);\n\n const { results, pagination } = await strapi.db.query('admin::user').findPage({\n select: ['id', 'email', 'username', 'firstname', 'lastname'],\n where: { id: { $in: authorIds } },\n orderBy: { id: 'asc' },\n page: Number(page),\n pageSize: Number(pageSize),\n });\n\n return {\n results: results.map(getSanitizedUser),\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db?.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db?.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findManyUsers","page","pageSize","userAttribute","metadata","attributes","type","joinTable","Error","authorIds","connection","name","distinct","inverseJoinColumn","pluck","where","$in","orderBy","Number","findOne","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":";;AAaA,MAAMA,mBAAmB,CAACC,IAAAA,GAAAA;IACxB,IAAIC,WAAAA,GAAcD,KAAKE,KAAK;IAE5B,IAAIF,IAAAA,CAAKG,QAAQ,EAAE;AACjBF,QAAAA,WAAAA,GAAcD,KAAKG,QAAQ;AAC7B,IAAA,CAAA,MAAO,IAAIH,IAAAA,CAAKI,SAAS,IAAIJ,IAAAA,CAAKK,QAAQ,EAAE;QAC1CJ,WAAAA,GAAc,CAAA,EAAGD,KAAKI,SAAS,CAAC,CAAC,EAAEJ,IAAAA,CAAKK,QAAQ,CAAA,CAAE;AACpD,IAAA;IAEA,OAAO;AACLC,QAAAA,EAAAA,EAAIN,KAAKM,EAAE;AACXJ,QAAAA,KAAAA,EAAOF,KAAKE,KAAK;AACjBD,QAAAA;AACF,KAAA;AACF,CAAA;AAEA;;;IAIA,MAAMM,yBAAyB,CAACC,MAAAA,GAAAA;IAC9B,OAAO;AACL,QAAA,MAAMC,WAAUC,KAAY,EAAA;AAC1B,YAAA,MAAM,EAAEC,MAAM,EAAE,GAAGC,MAAM,GAAGF,KAAAA;AAE5B,YAAA,MAAMG,QAAAA,GAAgB;AAAE,gBAAA,GAAGD,IAAI;gBAAEZ,IAAAA,EAAMW;AAAO,aAAA;;AAG9C,YAAA,MAAMH,MAAAA,CAAOM,EAAE,EAAEC,KAAAA,CAAM,oBAAoBC,MAAAA,CAAO;gBAAEC,IAAAA,EAAMJ;AAAS,aAAA,CAAA;AAEnE,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEA,QAAA,MAAMK,UAASH,KAAc,EAAA;AAC3B,YAAA,MAAM,EAAEI,OAAO,EAAEC,UAAU,EAAE,GAAG,MAAMZ,MAAAA,CAAOM,EAAE,CAACC,KAAK,CAAC,kBAAA,CAAA,CAAoBM,QAAQ,CAAC;gBACjFC,QAAAA,EAAU;AAAC,oBAAA;AAAO,iBAAA;gBAClBC,MAAAA,EAAQ;AAAC,oBAAA,QAAA;AAAU,oBAAA,MAAA;AAAQ,oBAAA;AAAU,iBAAA;AACrC,gBAAA,GAAGf,OAAOgB,GAAG,CAAC,gBAAgBC,SAAS,CAAC,oBAAoBV,KAAAA;AAC9D,aAAA,CAAA;AAEA,YAAA,MAAMW,gBAAAA,GAAmBP,OAAAA,CAAQQ,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACpC,gBAAA,MAAM,EAAE5B,IAAI,EAAE,GAAGY,MAAM,GAAGgB,MAAAA;gBAC1B,OAAO;AACL,oBAAA,GAAGhB,IAAI;oBACPZ,IAAAA,EAAMA,IAAAA,GAAOD,iBAAiBC,IAAAA,CAAAA,GAAQ;AACxC,iBAAA;AACF,YAAA,CAAA,CAAA;YAEA,OAAO;gBACLmB,OAAAA,EAASO,gBAAAA;AACTN,gBAAAA;AACF,aAAA;AACF,QAAA,CAAA;AAEA,QAAA,MAAMS,eAAcd,KAA6D,EAAA;AAC/E,YAAA,MAAM,EAAEe,IAAAA,GAAO,CAAC,EAAEC,QAAAA,GAAW,EAAE,EAAE,GAAGhB,KAAAA;YAEpC,MAAMiB,aAAAA,GAAgBxB,MAAAA,CAAOM,EAAE,CAACmB,QAAQ,CAACT,GAAG,CAAC,kBAAA,CAAA,CAAoBU,UAAU,CAAClC,IAAI;AAEhF,YAAA,IACEgC,eAAeG,IAAAA,KAAS,UAAA,IACxB,EAAE,WAAA,IAAeH,aAAY,CAAA,IAC7B,CAACA,aAAAA,CAAcI,SAAS,IACxB,EAAE,uBAAuBJ,aAAAA,CAAcI,SAAS,CAAD,EAC/C;AACA,gBAAA,MAAM,IAAIC,KAAAA,CAAM,6DAAA,CAAA;AAClB,YAAA;YAEA,MAAM,EAAED,SAAS,EAAE,GAAGJ,aAAAA;YAEtB,MAAMM,SAAAA,GAAY,MAAM9B,MAAAA,CAAOM,EAAE,CAC9ByB,UAAU,CAACH,SAAAA,CAAUI,IAAI,CAAA,CACzBC,QAAQ,CAACL,SAAAA,CAAUM,iBAAiB,CAACF,IAAI,CAAA,CACzCG,KAAK,CAACP,SAAAA,CAAUM,iBAAiB,CAACF,IAAI,CAAA;AAEzC,YAAA,MAAM,EAAErB,OAAO,EAAEC,UAAU,EAAE,GAAG,MAAMZ,MAAAA,CAAOM,EAAE,CAACC,KAAK,CAAC,aAAA,CAAA,CAAeM,QAAQ,CAAC;gBAC5EE,MAAAA,EAAQ;AAAC,oBAAA,IAAA;AAAM,oBAAA,OAAA;AAAS,oBAAA,UAAA;AAAY,oBAAA,WAAA;AAAa,oBAAA;AAAW,iBAAA;gBAC5DqB,KAAAA,EAAO;oBAAEtC,EAAAA,EAAI;wBAAEuC,GAAAA,EAAKP;AAAU;AAAE,iBAAA;gBAChCQ,OAAAA,EAAS;oBAAExC,EAAAA,EAAI;AAAM,iBAAA;AACrBwB,gBAAAA,IAAAA,EAAMiB,MAAAA,CAAOjB,IAAAA,CAAAA;AACbC,gBAAAA,QAAAA,EAAUgB,MAAAA,CAAOhB,QAAAA;AACnB,aAAA,CAAA;YAEA,OAAO;gBACLZ,OAAAA,EAASA,OAAAA,CAAQQ,GAAG,CAAC5B,gBAAAA,CAAAA;AACrBqB,gBAAAA;AACF,aAAA;AACF,QAAA,CAAA;AAEA,QAAA,MAAM4B,SAAQ1C,EAAW,EAAA;AACvB,YAAA,MAAMsB,SAAc,MAAMpB,MAAAA,CAAOM,EAAE,EAAEC,KAAAA,CAAM,oBAAoBiC,OAAAA,CAAQ;gBACrEJ,KAAAA,EAAO;AAAEtC,oBAAAA;AAAG,iBAAA;gBACZgB,QAAAA,EAAU;AAAC,oBAAA;AAAO,iBAAA;gBAClBC,MAAAA,EAAQ;AAAC,oBAAA,QAAA;AAAU,oBAAA,MAAA;AAAQ,oBAAA;AAAU;AACvC,aAAA,CAAA;AAEA,YAAA,IAAI,CAACK,MAAAA,EAAQ;gBACX,OAAO,IAAA;AACT,YAAA;AAEA,YAAA,MAAM,EAAE5B,IAAI,EAAE,GAAGY,MAAM,GAAGgB,MAAAA;YAC1B,OAAO;AACL,gBAAA,GAAGhB,IAAI;gBACPZ,IAAAA,EAAMA,IAAAA,GAAOD,iBAAiBC,IAAAA,CAAAA,GAAQ;AACxC,aAAA;AACF,QAAA,CAAA;AAEAiD,QAAAA,mBAAAA,CAAAA,CAAoBC,cAAoB,EAAA;AACtC,YAAA,OAAO1C,MAAAA,CAAOM,EAAE,EAAEC,KAAAA,CAAM,oBAAoBoC,UAAAA,CAAW;gBACrDP,KAAAA,EAAO;oBACLQ,IAAAA,EAAM;AACJC,wBAAAA,GAAAA,EAAKH,eAAeI,WAAW;AACjC;AACF;AACF,aAAA,CAAA;AACF,QAAA;AACF,KAAA;AACF;;;;"}
1
+ {"version":3,"file":"audit-logs.js","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findManyUsers(query: { page?: number | string; pageSize?: number | string }) {\n const { page = 1, pageSize = 10 } = query;\n\n const userAttribute = strapi.db.metadata.get('admin::audit-log').attributes.user;\n\n if (\n userAttribute?.type !== 'relation' ||\n !('joinTable' in userAttribute) ||\n !userAttribute.joinTable ||\n !('inverseJoinColumn' in userAttribute.joinTable)\n ) {\n throw new Error('The audit log user relation is expected to use a join table');\n }\n\n const { joinTable } = userAttribute;\n\n const authorIds = await strapi.db\n .connection(joinTable.name)\n .distinct(joinTable.inverseJoinColumn.name)\n .pluck(joinTable.inverseJoinColumn.name);\n\n const { results, pagination } = await strapi.db.query('admin::user').findPage({\n select: ['id', 'email', 'username', 'firstname', 'lastname'],\n where: { id: { $in: authorIds } },\n orderBy: { id: 'asc' },\n page: Number(page),\n pageSize: Number(pageSize),\n });\n\n return {\n results: results.map(getSanitizedUser),\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findManyUsers","page","pageSize","userAttribute","metadata","attributes","type","joinTable","Error","authorIds","connection","name","distinct","inverseJoinColumn","pluck","where","$in","orderBy","Number","findOne","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":"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"}
@@ -23,7 +23,7 @@ const getSanitizedUser = (user)=>{
23
23
  user: userId
24
24
  };
25
25
  // Save to database
26
- await strapi.db?.query('admin::audit-log').create({
26
+ await strapi.db.query('admin::audit-log').create({
27
27
  data: auditLog
28
28
  });
29
29
  return this;
@@ -85,7 +85,7 @@ const getSanitizedUser = (user)=>{
85
85
  };
86
86
  },
87
87
  async findOne (id) {
88
- const result = await strapi.db?.query('admin::audit-log').findOne({
88
+ const result = await strapi.db.query('admin::audit-log').findOne({
89
89
  where: {
90
90
  id
91
91
  },
@@ -108,7 +108,7 @@ const getSanitizedUser = (user)=>{
108
108
  };
109
109
  },
110
110
  deleteExpiredEvents (expirationDate) {
111
- return strapi.db?.query('admin::audit-log').deleteMany({
111
+ return strapi.db.query('admin::audit-log').deleteMany({
112
112
  where: {
113
113
  date: {
114
114
  $lt: expirationDate.toISOString()
@@ -1 +1 @@
1
- {"version":3,"file":"audit-logs.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db?.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findManyUsers(query: { page?: number | string; pageSize?: number | string }) {\n const { page = 1, pageSize = 10 } = query;\n\n const userAttribute = strapi.db.metadata.get('admin::audit-log').attributes.user;\n\n if (\n userAttribute?.type !== 'relation' ||\n !('joinTable' in userAttribute) ||\n !userAttribute.joinTable ||\n !('inverseJoinColumn' in userAttribute.joinTable)\n ) {\n throw new Error('The audit log user relation is expected to use a join table');\n }\n\n const { joinTable } = userAttribute;\n\n const authorIds = await strapi.db\n .connection(joinTable.name)\n .distinct(joinTable.inverseJoinColumn.name)\n .pluck(joinTable.inverseJoinColumn.name);\n\n const { results, pagination } = await strapi.db.query('admin::user').findPage({\n select: ['id', 'email', 'username', 'firstname', 'lastname'],\n where: { id: { $in: authorIds } },\n orderBy: { id: 'asc' },\n page: Number(page),\n pageSize: Number(pageSize),\n });\n\n return {\n results: results.map(getSanitizedUser),\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db?.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db?.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findManyUsers","page","pageSize","userAttribute","metadata","attributes","type","joinTable","Error","authorIds","connection","name","distinct","inverseJoinColumn","pluck","where","$in","orderBy","Number","findOne","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":"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"}
1
+ {"version":3,"file":"audit-logs.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/audit-logs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\ninterface Event {\n action: string;\n date: Date;\n userId: string | number;\n payload: Record<string, unknown>;\n}\n\ninterface Log extends Omit<Event, 'userId'> {\n user: string | number;\n}\n\nconst getSanitizedUser = (user: any) => {\n let displayName = user.email;\n\n if (user.username) {\n displayName = user.username;\n } else if (user.firstname && user.lastname) {\n displayName = `${user.firstname} ${user.lastname}`;\n }\n\n return {\n id: user.id,\n email: user.email,\n displayName,\n };\n};\n\n/**\n * @description\n * Manages audit logs interaction with the database. Accessible via strapi.get('audit-logs')\n */\nconst createAuditLogsService = (strapi: Core.Strapi) => {\n return {\n async saveEvent(event: Event) {\n const { userId, ...rest } = event;\n\n const auditLog: Log = { ...rest, user: userId };\n\n // Save to database\n await strapi.db.query('admin::audit-log').create({ data: auditLog });\n\n return this;\n },\n\n async findMany(query: unknown) {\n const { results, pagination } = await strapi.db.query('admin::audit-log').findPage({\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n ...strapi.get('query-params').transform('admin::audit-log', query),\n });\n\n const sanitizedResults = results.map((result: any) => {\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n });\n\n return {\n results: sanitizedResults,\n pagination,\n };\n },\n\n async findManyUsers(query: { page?: number | string; pageSize?: number | string }) {\n const { page = 1, pageSize = 10 } = query;\n\n const userAttribute = strapi.db.metadata.get('admin::audit-log').attributes.user;\n\n if (\n userAttribute?.type !== 'relation' ||\n !('joinTable' in userAttribute) ||\n !userAttribute.joinTable ||\n !('inverseJoinColumn' in userAttribute.joinTable)\n ) {\n throw new Error('The audit log user relation is expected to use a join table');\n }\n\n const { joinTable } = userAttribute;\n\n const authorIds = await strapi.db\n .connection(joinTable.name)\n .distinct(joinTable.inverseJoinColumn.name)\n .pluck(joinTable.inverseJoinColumn.name);\n\n const { results, pagination } = await strapi.db.query('admin::user').findPage({\n select: ['id', 'email', 'username', 'firstname', 'lastname'],\n where: { id: { $in: authorIds } },\n orderBy: { id: 'asc' },\n page: Number(page),\n pageSize: Number(pageSize),\n });\n\n return {\n results: results.map(getSanitizedUser),\n pagination,\n };\n },\n\n async findOne(id: unknown) {\n const result: any = await strapi.db.query('admin::audit-log').findOne({\n where: { id },\n populate: ['user'],\n select: ['action', 'date', 'payload'],\n });\n\n if (!result) {\n return null;\n }\n\n const { user, ...rest } = result;\n return {\n ...rest,\n user: user ? getSanitizedUser(user) : null,\n };\n },\n\n deleteExpiredEvents(expirationDate: Date) {\n return strapi.db.query('admin::audit-log').deleteMany({\n where: {\n date: {\n $lt: expirationDate.toISOString(),\n },\n },\n });\n },\n };\n};\n\nexport { createAuditLogsService };\n"],"names":["getSanitizedUser","user","displayName","email","username","firstname","lastname","id","createAuditLogsService","strapi","saveEvent","event","userId","rest","auditLog","db","query","create","data","findMany","results","pagination","findPage","populate","select","get","transform","sanitizedResults","map","result","findManyUsers","page","pageSize","userAttribute","metadata","attributes","type","joinTable","Error","authorIds","connection","name","distinct","inverseJoinColumn","pluck","where","$in","orderBy","Number","findOne","deleteExpiredEvents","expirationDate","deleteMany","date","$lt","toISOString"],"mappings":"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"}
@@ -135,7 +135,7 @@ const getRetentionDays = (strapi)=>{
135
135
  const retentionDays = getRetentionDays(strapi);
136
136
  strapi.cron.add({
137
137
  deleteExpiredAuditLogs: {
138
- task: async ()=>{
138
+ async task () {
139
139
  const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
140
140
  await auditLogsService.deleteExpiredEvents(expirationDate);
141
141
  },
@@ -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 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 await 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,sBAAAA,GAAyB,EAAA;AAE/B,MAAMC,aAAAA,GAAgB;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,IAAAA,GAAcA,IAAI,CAAC,CAAA,CAAE;;AAGnD,IAAA,OAAOH,aAAAA,CAAcI,MAAM,CAAC,CAACC,GAAAA,EAAUC,KAAAA,GAAAA;QACrCD,GAAG,CAACC,MAAM,GAAGJ,iBAAAA;QACb,OAAOG,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAME,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,IAAA,MAAMC,gBAAgBD,MAAAA,CAAOE,EAAE,CAACC,QAAQ,CAACC,GAAG,CAAC,YAAA,CAAA;AAC7C,IAAA,MAAMC,oBAAAA,GACJ,OAAOJ,aAAAA,KAAkB,QAAA,IAAYA,eAAeK,OAAAA,EAASC,aAAAA;AAC/D,IAAA,MAAMC,iBAAAA,GAAoBR,MAAAA,CAAOS,MAAM,CAACL,GAAG,CAAC,+BAAA,CAAA;;AAG5C,IAAA,IAAIC,wBAAwB,IAAA,EAAM;AAChC,QAAA,OAAOG,iBAAAA,IAAqBjB,sBAAAA;AAC9B,IAAA;;IAGA,IAAIiB,iBAAAA,IAAqBA,qBAAqBH,oBAAAA,EAAsB;QAClE,OAAOG,iBAAAA;AACT,IAAA;;IAGA,OAAOH,oBAAAA;AACT,CAAA;AAEA;;;IAIA,MAAMK,kCAAkC,CAACV,MAAAA,GAAAA;;AAEvC,IAAA,MAAMW,QAAQ,EAAC;IACf,MAAMC,gBAAAA,GAAmBZ,MAAAA,CAAOI,GAAG,CAAC,YAAA,CAAA;;AAGpC,IAAA,MAAMS,WAAWpB,WAAAA,CAAYD,aAAAA,CAAAA;IAE7B,MAAMsB,YAAAA,GAAe,CAACC,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;AACrC,QAAA,MAAMqB,YAAAA,GAAehB,MAAAA,CAAOiB,cAAc,CAACb,GAAG,EAAA,EAAIO,KAAAA;;AAGlD,QAAA,MAAMO,gBAAAA,GAAmBF,YAAAA,EAAcG,KAAAA,CAAMC,IAAAA,CAAKC,IAAAA,KAAS,OAAA;AAC3D,QAAA,MAAMC,OAAON,YAAAA,EAAcM,IAAAA;QAC3B,IAAI,CAACJ,gBAAAA,IAAoB,CAACI,IAAAA,EAAM;YAC9B,OAAO,IAAA;AACT,QAAA;QAEA,MAAMC,UAAAA,GAAaV,QAAQ,CAACE,IAAAA,CAAK;;AAGjC,QAAA,IAAI,CAACQ,UAAAA,EAAY;YACf,OAAO,IAAA;AACT,QAAA;;;AAIA,QAAA,MAAMC,WAAAA,GAAc;AAAC,YAAA,qBAAA;AAAuB,YAAA;AAAwB,SAAA;AACpE,QAAA,IAAIA,YAAYC,QAAQ,CAAC9B,IAAI,CAAC,CAAA,CAAE,EAAE+B,GAAAA,CAAAA,EAAM;YACtC,OAAO,IAAA;AACT,QAAA;QAEA,OAAO;YACLC,MAAAA,EAAQZ,IAAAA;YACRa,IAAAA,EAAM,IAAIC,OAAOC,WAAW,EAAA;YAC5BC,OAAAA,EAASR,UAAAA,CAAAA,GAAc5B,SAAS,EAAC;AACjCqC,YAAAA,MAAAA,EAAQV,KAAKW;AACf,SAAA;AACF,IAAA,CAAA;IAEA,MAAMC,WAAAA,GAAc,OAAOnB,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;QAC1C,MAAMwC,cAAAA,GAAiBrB,aAAaC,IAAAA,EAAAA,GAASpB,IAAAA,CAAAA;AAE7C,QAAA,IAAIwC,cAAAA,EAAgB;YAClB,MAAMvB,gBAAAA,CAAiBwB,SAAS,CAACD,cAAAA,CAAAA;AACnC,QAAA;AACF,IAAA,CAAA;IAEA,OAAO;QACL,MAAME,QAAAA,CAAAA,GAAAA;;YAEJ,IAAI,CAAC1B,KAAAA,CAAM2B,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,gBAAA,CAAA,CAAA;AACF,YAAA;;YAGA,IAAI,CAAC1B,KAAAA,CAAM+B,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,gBAAA,CAAA,CAAA;AACF,YAAA;;;AAIA1B,YAAAA,KAAAA,CAAMgC,oBAAoB,GAAG3C,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,YAAA,EAAc,IAAA;;;AAG5D,gBAAA,IAAI,CAACC,OAAO,EAAA;AACd,YAAA,CAAA,CAAA;;YAGA,IAAI,CAACzC,OAAOE,EAAE,CAACC,QAAQ,CAACyC,SAAS,CAAC,YAAA,CAAA,EAAe;AAC/C,gBAAA,OAAO,IAAI;AACb,YAAA;;AAGAjC,YAAAA,KAAAA,CAAMkC,mBAAmB,GAAG7C,MAAAA,CAAOuC,QAAQ,CAACO,SAAS,CAACZ,WAAAA,CAAAA;;AAGtD,YAAA,MAAM3B,gBAAgBR,gBAAAA,CAAiBC,MAAAA,CAAAA;YAEvCA,MAAAA,CAAO+C,IAAI,CAACC,GAAG,CAAC;gBACdC,sBAAAA,EAAwB;oBACtBC,IAAAA,EAAM,UAAA;wBACJ,MAAMC,cAAAA,GAAiB,IAAItB,IAAAA,CAAKA,IAAAA,CAAKuB,GAAG,EAAA,GAAK7C,aAAAA,GAAgB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA,CAAA;wBAC5E,MAAMK,gBAAAA,CAAiByC,mBAAmB,CAACF,cAAAA,CAAAA;AAC7C,oBAAA,CAAA;oBACA7C,OAAAA,EAAS;AACX;AACF,aAAA,CAAA;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAgD,QAAAA,WAAAA,CAAAA,GAAAA;YACE,IAAI3C,KAAAA,CAAMgC,oBAAoB,EAAE;AAC9BhC,gBAAAA,KAAAA,CAAMgC,oBAAoB,EAAA;AAC5B,YAAA;YAEA,IAAIhC,KAAAA,CAAMkC,mBAAmB,EAAE;AAC7BlC,gBAAAA,KAAAA,CAAMkC,mBAAmB,EAAA;AAC3B,YAAA;YAEA7C,MAAAA,CAAO+C,IAAI,CAACQ,MAAM,CAAC,wBAAA,CAAA;AAEnB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAd,QAAAA,OAAAA,CAAAA,GAAAA;YACE,OAAO,IAAI,CAACa,WAAW,EAAA;AACzB,QAAA;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 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 async task() {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n await 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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"}
@@ -133,7 +133,7 @@ const getRetentionDays = (strapi)=>{
133
133
  const retentionDays = getRetentionDays(strapi);
134
134
  strapi.cron.add({
135
135
  deleteExpiredAuditLogs: {
136
- task: async ()=>{
136
+ async task () {
137
137
  const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
138
138
  await auditLogsService.deleteExpiredEvents(expirationDate);
139
139
  },
@@ -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 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 await 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 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 async task() {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n await 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,sBAAAA,GAAyB,EAAA;AAE/B,MAAMC,aAAAA,GAAgB;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,IAAAA,GAAcA,IAAI,CAAC,CAAA,CAAE;;AAGnD,IAAA,OAAOH,aAAAA,CAAcI,MAAM,CAAC,CAACC,GAAAA,EAAUC,KAAAA,GAAAA;QACrCD,GAAG,CAACC,MAAM,GAAGJ,iBAAAA;QACb,OAAOG,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAME,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,IAAA,MAAMC,gBAAgBD,MAAAA,CAAOE,EAAE,CAACC,QAAQ,CAACC,GAAG,CAAC,YAAA,CAAA;AAC7C,IAAA,MAAMC,oBAAAA,GACJ,OAAOJ,aAAAA,KAAkB,QAAA,IAAYA,eAAeK,OAAAA,EAASC,aAAAA;AAC/D,IAAA,MAAMC,iBAAAA,GAAoBR,MAAAA,CAAOS,MAAM,CAACL,GAAG,CAAC,+BAAA,CAAA;;AAG5C,IAAA,IAAIC,wBAAwB,IAAA,EAAM;AAChC,QAAA,OAAOG,iBAAAA,IAAqBjB,sBAAAA;AAC9B,IAAA;;IAGA,IAAIiB,iBAAAA,IAAqBA,qBAAqBH,oBAAAA,EAAsB;QAClE,OAAOG,iBAAAA;AACT,IAAA;;IAGA,OAAOH,oBAAAA;AACT,CAAA;AAEA;;;IAIA,MAAMK,kCAAkC,CAACV,MAAAA,GAAAA;;AAEvC,IAAA,MAAMW,QAAQ,EAAC;IACf,MAAMC,gBAAAA,GAAmBZ,MAAAA,CAAOI,GAAG,CAAC,YAAA,CAAA;;AAGpC,IAAA,MAAMS,WAAWpB,WAAAA,CAAYD,aAAAA,CAAAA;IAE7B,MAAMsB,YAAAA,GAAe,CAACC,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;AACrC,QAAA,MAAMqB,YAAAA,GAAehB,MAAAA,CAAOiB,cAAc,CAACb,GAAG,EAAA,EAAIO,KAAAA;;AAGlD,QAAA,MAAMO,gBAAAA,GAAmBF,YAAAA,EAAcG,KAAAA,CAAMC,IAAAA,CAAKC,IAAAA,KAAS,OAAA;AAC3D,QAAA,MAAMC,OAAON,YAAAA,EAAcM,IAAAA;QAC3B,IAAI,CAACJ,gBAAAA,IAAoB,CAACI,IAAAA,EAAM;YAC9B,OAAO,IAAA;AACT,QAAA;QAEA,MAAMC,UAAAA,GAAaV,QAAQ,CAACE,IAAAA,CAAK;;AAGjC,QAAA,IAAI,CAACQ,UAAAA,EAAY;YACf,OAAO,IAAA;AACT,QAAA;;;AAIA,QAAA,MAAMC,WAAAA,GAAc;AAAC,YAAA,qBAAA;AAAuB,YAAA;AAAwB,SAAA;AACpE,QAAA,IAAIA,YAAYC,QAAQ,CAAC9B,IAAI,CAAC,CAAA,CAAE,EAAE+B,GAAAA,CAAAA,EAAM;YACtC,OAAO,IAAA;AACT,QAAA;QAEA,OAAO;YACLC,MAAAA,EAAQZ,IAAAA;YACRa,IAAAA,EAAM,IAAIC,OAAOC,WAAW,EAAA;YAC5BC,OAAAA,EAASR,UAAAA,CAAAA,GAAc5B,SAAS,EAAC;AACjCqC,YAAAA,MAAAA,EAAQV,KAAKW;AACf,SAAA;AACF,IAAA,CAAA;IAEA,MAAMC,WAAAA,GAAc,OAAOnB,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;QAC1C,MAAMwC,cAAAA,GAAiBrB,aAAaC,IAAAA,EAAAA,GAASpB,IAAAA,CAAAA;AAE7C,QAAA,IAAIwC,cAAAA,EAAgB;YAClB,MAAMvB,gBAAAA,CAAiBwB,SAAS,CAACD,cAAAA,CAAAA;AACnC,QAAA;AACF,IAAA,CAAA;IAEA,OAAO;QACL,MAAME,QAAAA,CAAAA,GAAAA;;YAEJ,IAAI,CAAC1B,KAAAA,CAAM2B,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,gBAAA,CAAA,CAAA;AACF,YAAA;;YAGA,IAAI,CAAC1B,KAAAA,CAAM+B,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,gBAAA,CAAA,CAAA;AACF,YAAA;;;AAIA1B,YAAAA,KAAAA,CAAMgC,oBAAoB,GAAG3C,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,YAAA,EAAc,IAAA;;;AAG5D,gBAAA,IAAI,CAACC,OAAO,EAAA;AACd,YAAA,CAAA,CAAA;;YAGA,IAAI,CAACzC,OAAOE,EAAE,CAACC,QAAQ,CAACyC,SAAS,CAAC,YAAA,CAAA,EAAe;AAC/C,gBAAA,OAAO,IAAI;AACb,YAAA;;AAGAjC,YAAAA,KAAAA,CAAMkC,mBAAmB,GAAG7C,MAAAA,CAAOuC,QAAQ,CAACO,SAAS,CAACZ,WAAAA,CAAAA;;AAGtD,YAAA,MAAM3B,gBAAgBR,gBAAAA,CAAiBC,MAAAA,CAAAA;YAEvCA,MAAAA,CAAO+C,IAAI,CAACC,GAAG,CAAC;gBACdC,sBAAAA,EAAwB;oBACtB,MAAMC,IAAAA,CAAAA,GAAAA;wBACJ,MAAMC,cAAAA,GAAiB,IAAItB,IAAAA,CAAKA,IAAAA,CAAKuB,GAAG,EAAA,GAAK7C,aAAAA,GAAgB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,IAAA,CAAA;wBAC5E,MAAMK,gBAAAA,CAAiByC,mBAAmB,CAACF,cAAAA,CAAAA;AAC7C,oBAAA,CAAA;oBACA7C,OAAAA,EAAS;AACX;AACF,aAAA,CAAA;AAEA,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAgD,QAAAA,WAAAA,CAAAA,GAAAA;YACE,IAAI3C,KAAAA,CAAMgC,oBAAoB,EAAE;AAC9BhC,gBAAAA,KAAAA,CAAMgC,oBAAoB,EAAA;AAC5B,YAAA;YAEA,IAAIhC,KAAAA,CAAMkC,mBAAmB,EAAE;AAC7BlC,gBAAAA,KAAAA,CAAMkC,mBAAmB,EAAA;AAC3B,YAAA;YAEA7C,MAAAA,CAAO+C,IAAI,CAACQ,MAAM,CAAC,wBAAA,CAAA;AAEnB,YAAA,OAAO,IAAI;AACb,QAAA,CAAA;AAEAd,QAAAA,OAAAA,CAAAA,GAAAA;YACE,OAAO,IAAI,CAACa,WAAW,EAAA;AACzB,QAAA;AACF,KAAA;AACF;;;;"}
@@ -26,7 +26,7 @@ var admin = {
26
26
  }
27
27
  }
28
28
  };
29
- } catch (err) {
29
+ } catch {
30
30
  return {
31
31
  data: {
32
32
  isEE: false,
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../../../../../../ee/server/src/controllers/admin.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { env } from '@strapi/utils';\n\nimport { getService } from '../utils';\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 planPriceId: strapi.ee.planPriceId,\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 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","planPriceId","ai","err","licenseLimitInformation","permittedSeats","seats","shouldNotify","licenseLimitStatus","enforcementUserCount","currentActiveUserCount","getService","getCurrentActiveUserCount","eeDisabledUsers","getDisabledUserList","length","isNil","shouldStopCreate","isHostedOnStrapiCloud","env"],"mappings":"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"}
1
+ {"version":3,"file":"admin.js","sources":["../../../../../../ee/server/src/controllers/admin.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport { env } from '@strapi/utils';\n\nimport { getService } from '../utils';\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 planPriceId: strapi.ee.planPriceId,\n ai: {\n enabled: isAILicense && isAIConfigured.enabled,\n },\n },\n };\n } catch {\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 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","planPriceId","ai","licenseLimitInformation","permittedSeats","seats","shouldNotify","licenseLimitStatus","enforcementUserCount","currentActiveUserCount","getService","getCurrentActiveUserCount","eeDisabledUsers","getDisabledUserList","length","isNil","shouldStopCreate","isHostedOnStrapiCloud","env"],"mappings":"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"}