@strapi/admin 5.19.0 → 5.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/Filters.js +10 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +10 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.js +18 -43
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.mjs +17 -42
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.js +10 -6
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.mjs +11 -7
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.js +6 -6
- package/dist/admin/admin/src/components/GuidedTour/Step.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.mjs +7 -7
- package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.js +10 -16
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.mjs +11 -17
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -0
- package/dist/admin/admin/src/components/LeftMenu.js +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/Providers.js +9 -10
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs +9 -10
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +1 -1
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +2 -3
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +2 -3
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +6 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +6 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +1 -7
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +2 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +1 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +1 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +7 -3
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +7 -3
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +25 -28
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +25 -28
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/index.js +2 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -2
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/Filters.d.ts +3 -1
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.d.ts +3 -3
- package/dist/admin/src/components/GuidedTour/Overview.d.ts +1 -0
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.d.ts +1 -1
- package/dist/admin/src/core/apis/Widgets.d.ts +8 -5
- package/dist/admin/src/features/Tracking.d.ts +1 -1
- package/dist/admin/src/index.d.ts +2 -3
- package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +9 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +9 -8
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/server/src/domain/user.js +3 -1
- package/dist/server/server/src/domain/user.js.map +1 -1
- package/dist/server/server/src/domain/user.mjs +3 -1
- package/dist/server/server/src/domain/user.mjs.map +1 -1
- package/dist/server/src/domain/user.d.ts.map +1 -1
- package/package.json +8 -9
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js +0 -132
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs +0 -130
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.js +0 -278
- package/dist/admin/admin/src/components/GuidedTour/Modal.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs +0 -276
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js +0 -54
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs +0 -51
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.js +0 -206
- package/dist/admin/admin/src/components/GuidedTour/Provider.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs +0 -184
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.js +0 -167
- package/dist/admin/admin/src/components/GuidedTour/constants.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs +0 -164
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js +0 -19
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs +0 -17
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs.map +0 -1
- package/dist/admin/src/components/GuidedTour/Homepage.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Modal.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Ornaments.d.ts +0 -13
- package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -39
- package/dist/admin/src/components/GuidedTour/constants.d.ts +0 -165
- package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +0 -1
- package/dist/admin/src/pages/Home/components/GuidedTour.d.ts +0 -1
- /package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => setQuery({ id: log.id })}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => setQuery({ id: log.id })}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && (\n <Modal handleClose={() => setQuery({ id: '' }, 'remove')} logId={query.id.toString()} />\n )}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","canReadUsers","isLoading","isLoadingRBAC","useRBAC","auditLogs","readUsers","users","read","query","setQuery","useQueryParams","isLoadingData","hasError","useAuditLogsData","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","headers","name","label","id","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage.js","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => setQuery({ id: log.id })}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => setQuery({ id: log.id })}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && (\n <Modal handleClose={() => setQuery({ id: '' }, 'remove')} logId={query.id.toString()} />\n )}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","canReadUsers","isLoading","isLoadingRBAC","useRBAC","auditLogs","readUsers","users","read","query","setQuery","useQueryParams","isLoadingData","hasError","useAuditLogsData","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","headers","name","label","id","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
@@ -96,7 +96,9 @@ const ListPage = ()=>{
|
|
|
96
96
|
options: displayedFilters,
|
|
97
97
|
children: [
|
|
98
98
|
/*#__PURE__*/ jsx(Filters.Trigger, {}),
|
|
99
|
-
/*#__PURE__*/ jsx(Filters.Popover, {
|
|
99
|
+
/*#__PURE__*/ jsx(Filters.Popover, {
|
|
100
|
+
zIndex: 499
|
|
101
|
+
}),
|
|
100
102
|
/*#__PURE__*/ jsx(Filters.List, {})
|
|
101
103
|
]
|
|
102
104
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => setQuery({ id: log.id })}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => setQuery({ id: log.id })}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && (\n <Modal handleClose={() => setQuery({ id: '' }, 'remove')} logId={query.id.toString()} />\n )}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","canReadUsers","isLoading","isLoadingRBAC","useRBAC","auditLogs","readUsers","users","read","query","setQuery","useQueryParams","isLoadingData","hasError","useAuditLogsData","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","headers","name","label","id","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.tsx"],"sourcesContent":["import { Flex, IconButton, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\n\nimport { Filters } from '../../../../../../../admin/src/components/Filters';\nimport { Layouts } from '../../../../../../../admin/src/components/Layouts/Layout';\nimport { Page } from '../../../../../../../admin/src/components/PageHelpers';\nimport { Pagination } from '../../../../../../../admin/src/components/Pagination';\nimport { Table } from '../../../../../../../admin/src/components/Table';\nimport { useTypedSelector } from '../../../../../../../admin/src/core/store/hooks';\nimport { useQueryParams } from '../../../../../../../admin/src/hooks/useQueryParams';\nimport { useRBAC } from '../../../../../../../admin/src/hooks/useRBAC';\nimport { AuditLog } from '../../../../../../../shared/contracts/audit-logs';\n\nimport { Modal } from './components/Modal';\nimport { useAuditLogsData } from './hooks/useAuditLogsData';\nimport { useFormatTimeStamp } from './hooks/useFormatTimeStamp';\nimport { getDefaultMessage } from './utils/getActionTypesDefaultMessages';\nimport { getDisplayedFilters } from './utils/getDisplayedFilters';\n\nconst ListPage = () => {\n const { formatMessage } = useIntl();\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings);\n\n const {\n allowedActions: { canRead: canReadAuditLogs, canReadUsers },\n isLoading: isLoadingRBAC,\n } = useRBAC({\n ...permissions?.auditLogs,\n readUsers: permissions?.users.read || [],\n });\n\n const [{ query }, setQuery] = useQueryParams<{ id?: AuditLog['id'] }>();\n const {\n auditLogs,\n users,\n isLoading: isLoadingData,\n hasError,\n } = useAuditLogsData({\n canReadAuditLogs,\n canReadUsers,\n });\n\n const formatTimeStamp = useFormatTimeStamp();\n\n const displayedFilters = getDisplayedFilters({ formatMessage, users, canReadUsers });\n\n const headers: Table.Header<AuditLog, object>[] = [\n {\n name: 'action',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n sortable: true,\n },\n {\n name: 'date',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n sortable: true,\n },\n {\n name: 'user',\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n sortable: false,\n // In this case, the passed parameter cannot and shouldn't be something else than User\n cellFormatter: ({ user }) => (user ? user.displayName : ''),\n },\n ];\n\n if (hasError) {\n return <Page.Error />;\n }\n\n const isLoading = isLoadingData || isLoadingRBAC;\n\n const { results = [] } = auditLogs ?? {};\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({\n id: 'global.auditLogs',\n defaultMessage: 'Audit Logs',\n })}\n subtitle={formatMessage({\n id: 'Settings.permissions.auditLogs.listview.header.subtitle',\n defaultMessage: 'Logs of all the activities that happened in your environment',\n })}\n />\n <Layouts.Action\n startActions={\n <Filters.Root options={displayedFilters}>\n <Filters.Trigger />\n <Filters.Popover zIndex={499} />\n <Filters.List />\n </Filters.Root>\n }\n />\n <Layouts.Content>\n <Table.Root rows={results} headers={headers} isLoading={isLoading}>\n <Table.Content>\n <Table.Head>\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {results.map((log) => (\n <Table.Row key={log.id} onClick={() => setQuery({ id: log.id })}>\n {headers.map((header) => {\n const { name, cellFormatter } = header;\n\n switch (name) {\n case 'action':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatMessage(\n {\n id: `Settings.permissions.auditLogs.${log.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(log.action),\n },\n { model: (log.payload?.model as string) ?? '' }\n )}\n </Typography>\n </Table.Cell>\n );\n case 'date':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {formatTimeStamp(log.date)}\n </Typography>\n </Table.Cell>\n );\n case 'user':\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {cellFormatter ? cellFormatter(log, header) : '-'}\n </Typography>\n </Table.Cell>\n );\n default:\n return (\n <Table.Cell key={name}>\n <Typography textColor=\"neutral800\">\n {(log[name as keyof AuditLog] as string) || '-'}\n </Typography>\n </Table.Cell>\n );\n }\n })}\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n <IconButton\n onClick={() => setQuery({ id: log.id })}\n withTooltip={false}\n label={formatMessage(\n { id: 'app.component.table.view', defaultMessage: '{target} details' },\n { target: `${log.action} action` }\n )}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Flex>\n </Table.Cell>\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n\n <Pagination.Root {...auditLogs?.pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {query?.id && (\n <Modal handleClose={() => setQuery({ id: '' }, 'remove')} logId={query.id.toString()} />\n )}\n </Page.Main>\n );\n};\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.auditLogs?.main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ListPage, ProtectedListPage };\n"],"names":["ListPage","formatMessage","useIntl","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canReadAuditLogs","canReadUsers","isLoading","isLoadingRBAC","useRBAC","auditLogs","readUsers","users","read","query","setQuery","useQueryParams","isLoadingData","hasError","useAuditLogsData","formatTimeStamp","useFormatTimeStamp","displayedFilters","getDisplayedFilters","headers","name","label","id","defaultMessage","sortable","cellFormatter","user","displayName","_jsx","Page","Error","results","_jsxs","Main","aria-busy","Title","Layouts","Header","title","subtitle","Action","startActions","Filters","Root","options","Trigger","Popover","zIndex","List","Content","Table","rows","Head","map","header","HeaderCell","Empty","Loading","Body","log","Row","onClick","Cell","Typography","textColor","action","getDefaultMessage","model","payload","date","e","stopPropagation","Flex","justifyContent","IconButton","withTooltip","target","variant","Eye","Pagination","pagination","PageSize","Links","Modal","handleClose","logId","toString","ProtectedListPage","main","Protect"],"mappings":"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"}
|
package/dist/admin/index.js
CHANGED
|
@@ -16,8 +16,7 @@ var Table = require('./admin/src/components/Table.js');
|
|
|
16
16
|
var ContentBox = require('./admin/src/components/ContentBox.js');
|
|
17
17
|
var SubNav = require('./admin/src/components/SubNav.js');
|
|
18
18
|
var GradientBadge = require('./admin/src/components/GradientBadge.js');
|
|
19
|
-
var
|
|
20
|
-
var Tours = require('./admin/src/components/UnstableGuidedTour/Tours.js');
|
|
19
|
+
var Tours = require('./admin/src/components/GuidedTour/Tours.js');
|
|
21
20
|
var Tracking = require('./admin/src/features/Tracking.js');
|
|
22
21
|
var StrapiApp = require('./admin/src/features/StrapiApp.js');
|
|
23
22
|
var Notifications = require('./admin/src/features/Notifications.js');
|
|
@@ -63,8 +62,7 @@ exports.useTable = Table.useTable;
|
|
|
63
62
|
exports.ContentBox = ContentBox.ContentBox;
|
|
64
63
|
exports.SubNav = SubNav.SubNav;
|
|
65
64
|
exports.GradientBadge = GradientBadge.GradientBadge;
|
|
66
|
-
exports.
|
|
67
|
-
exports.unstable_tours = Tours.tours;
|
|
65
|
+
exports.tours = Tours.tours;
|
|
68
66
|
exports.useTracking = Tracking.useTracking;
|
|
69
67
|
exports.useStrapiApp = StrapiApp.useStrapiApp;
|
|
70
68
|
exports.NotificationsProvider = Notifications.NotificationsProvider;
|
package/dist/admin/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/admin/index.mjs
CHANGED
|
@@ -14,8 +14,7 @@ export { Table, useTable } from './admin/src/components/Table.mjs';
|
|
|
14
14
|
export { ContentBox } from './admin/src/components/ContentBox.mjs';
|
|
15
15
|
export { SubNav } from './admin/src/components/SubNav.mjs';
|
|
16
16
|
export { GradientBadge } from './admin/src/components/GradientBadge.mjs';
|
|
17
|
-
export {
|
|
18
|
-
export { tours as unstable_tours } from './admin/src/components/UnstableGuidedTour/Tours.mjs';
|
|
17
|
+
export { tours } from './admin/src/components/GuidedTour/Tours.mjs';
|
|
19
18
|
export { useTracking } from './admin/src/features/Tracking.mjs';
|
|
20
19
|
export { useStrapiApp } from './admin/src/features/StrapiApp.mjs';
|
|
21
20
|
export { NotificationsProvider, useNotification } from './admin/src/features/Notifications.mjs';
|
package/dist/admin/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -18,7 +18,9 @@ interface RootProps extends Partial<FitlersContextValue>, Popover.Props {
|
|
|
18
18
|
}
|
|
19
19
|
declare const Filters: {
|
|
20
20
|
List: () => import("react/jsx-runtime").JSX.Element | null;
|
|
21
|
-
Popover: (
|
|
21
|
+
Popover: ({ zIndex }: {
|
|
22
|
+
zIndex?: number;
|
|
23
|
+
}) => import("react/jsx-runtime").JSX.Element | null;
|
|
22
24
|
Root: ({ children, disabled, onChange, options, onOpenChange, open: openProp, defaultOpen, ...restProps }: RootProps) => import("react/jsx-runtime").JSX.Element;
|
|
23
25
|
Trigger: React.ForwardRefExoticComponent<Filters.TriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
24
26
|
};
|
|
@@ -27,14 +27,14 @@ type State = {
|
|
|
27
27
|
enabled: boolean;
|
|
28
28
|
completedActions: ExtendedCompletedActions;
|
|
29
29
|
};
|
|
30
|
-
declare const
|
|
30
|
+
declare const useGuidedTour: <Selected, ShouldThrow extends boolean = true>(consumerName: string, selector: (value: {
|
|
31
31
|
state: State;
|
|
32
32
|
dispatch: React.Dispatch<Action>;
|
|
33
33
|
}) => Selected, shouldThrowOnMissingContext?: ShouldThrow | undefined) => ShouldThrow extends true ? Selected : Selected | undefined;
|
|
34
34
|
declare function reducer(state: State, action: Action): State;
|
|
35
|
-
declare const
|
|
35
|
+
declare const GuidedTourContext: ({ children, enabled, }: {
|
|
36
36
|
children: React.ReactNode;
|
|
37
37
|
enabled?: boolean;
|
|
38
38
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
39
39
|
export type { Action, State, ValidTourName };
|
|
40
|
-
export {
|
|
40
|
+
export { GuidedTourContext, useGuidedTour, reducer };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const GuidedTourHomepageOverview: () => import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { Popover, FlexProps } from '@strapi/design-system';
|
|
3
3
|
import { type MessageDescriptor } from 'react-intl';
|
|
4
|
-
import { ValidTourName } from './Context';
|
|
4
|
+
import { type ValidTourName } from './Context';
|
|
5
5
|
type WithChildren = {
|
|
6
6
|
children: React.ReactNode;
|
|
7
7
|
id?: never;
|
|
@@ -16,14 +16,17 @@ type WidgetArgs = {
|
|
|
16
16
|
id: string;
|
|
17
17
|
permissions?: Array<Pick<Permission, 'action'> & Partial<Omit<Permission, 'action'>>>;
|
|
18
18
|
};
|
|
19
|
-
type
|
|
19
|
+
type WidgetWithUID = Omit<WidgetArgs, 'id' | 'pluginId'> & {
|
|
20
20
|
uid: WidgetUID;
|
|
21
21
|
};
|
|
22
|
+
type DescriptionReducer = (prev: WidgetArgs[]) => WidgetArgs[];
|
|
22
23
|
declare class Widgets {
|
|
23
|
-
widgets:
|
|
24
|
+
widgets: WidgetArgs[];
|
|
24
25
|
constructor();
|
|
25
|
-
|
|
26
|
-
|
|
26
|
+
private generateUid;
|
|
27
|
+
private checkWidgets;
|
|
28
|
+
register(widgets: WidgetArgs | WidgetArgs[] | DescriptionReducer): void;
|
|
29
|
+
getAll: () => WidgetWithUID[];
|
|
27
30
|
}
|
|
28
31
|
export { Widgets };
|
|
29
|
-
export type { WidgetArgs,
|
|
32
|
+
export type { WidgetArgs, WidgetWithUID };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { AxiosResponse } from 'axios';
|
|
3
|
-
import { Tours } from '../components/
|
|
3
|
+
import { Tours } from '../components/GuidedTour/Tours';
|
|
4
4
|
export interface TelemetryProperties {
|
|
5
5
|
useTypescriptOnServer?: boolean;
|
|
6
6
|
useTypescriptOnAdmin?: boolean;
|
|
@@ -22,8 +22,7 @@ export * from './components/Table';
|
|
|
22
22
|
export * from './components/ContentBox';
|
|
23
23
|
export * from './components/SubNav';
|
|
24
24
|
export * from './components/GradientBadge';
|
|
25
|
-
export {
|
|
26
|
-
export { tours as unstable_tours } from './components/UnstableGuidedTour/Tours';
|
|
25
|
+
export { tours } from './components/GuidedTour/Tours';
|
|
27
26
|
/**
|
|
28
27
|
* Features
|
|
29
28
|
*/
|
|
@@ -54,7 +53,7 @@ export type { Plugin, PluginConfig } from './core/apis/Plugin';
|
|
|
54
53
|
export type { MenuItem, StrapiAppSetting, StrapiAppSettingLink } from './core/apis/router';
|
|
55
54
|
export type { SanitizedAdminUser, AdminUser, SanitizedAdminRole, AdminRole, Entity, } from '../../shared/contracts/shared';
|
|
56
55
|
export type { RBACContext, RBACMiddleware } from './core/apis/rbac';
|
|
57
|
-
export type {
|
|
56
|
+
export type { WidgetWithUID as WidgetType, WidgetArgs } from './core/apis/Widgets';
|
|
58
57
|
/**
|
|
59
58
|
* Utils
|
|
60
59
|
*/
|
|
@@ -2,6 +2,6 @@ interface TokenBoxProps {
|
|
|
2
2
|
token?: string;
|
|
3
3
|
tokenType: 'transfer-token' | 'api-token';
|
|
4
4
|
}
|
|
5
|
-
export declare const
|
|
5
|
+
export declare const ApiTokenBox: ({ token, tokenType }: TokenBoxProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
6
|
export declare const TokenBox: ({ token, tokenType }: TokenBoxProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
7
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycles.d.ts","sourceRoot":"","sources":["../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycles.d.ts","sourceRoot":"","sources":["../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiE1C;;;GAGG;AACH,QAAA,MAAM,+BAA+B,WAAY,KAAK,MAAM;;;;CAwH3D,CAAC;AAEF,OAAO,EAAE,+BAA+B,EAAE,CAAC"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var nodeSchedule = require('node-schedule');
|
|
4
|
-
|
|
5
3
|
const DEFAULT_RETENTION_DAYS = 90;
|
|
6
4
|
const defaultEvents = [
|
|
7
5
|
'entry.create',
|
|
@@ -135,9 +133,14 @@ const getRetentionDays = (strapi)=>{
|
|
|
135
133
|
state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);
|
|
136
134
|
// Manage audit logs auto deletion
|
|
137
135
|
const retentionDays = getRetentionDays(strapi);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
136
|
+
strapi.cron.add({
|
|
137
|
+
deleteExpiredAuditLogs: {
|
|
138
|
+
task: async ()=>{
|
|
139
|
+
const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
|
|
140
|
+
auditLogsService.deleteExpiredEvents(expirationDate);
|
|
141
|
+
},
|
|
142
|
+
options: '0 0 * * *'
|
|
143
|
+
}
|
|
141
144
|
});
|
|
142
145
|
return this;
|
|
143
146
|
},
|
|
@@ -148,9 +151,7 @@ const getRetentionDays = (strapi)=>{
|
|
|
148
151
|
if (state.eventHubUnsubscribe) {
|
|
149
152
|
state.eventHubUnsubscribe();
|
|
150
153
|
}
|
|
151
|
-
|
|
152
|
-
state.deleteExpiredJob.cancel();
|
|
153
|
-
}
|
|
154
|
+
strapi.cron.remove('deleteExpiredAuditLogs');
|
|
154
155
|
return this;
|
|
155
156
|
},
|
|
156
157
|
destroy () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycles.js","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { scheduleJob } from 'node-schedule';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n state.deleteExpiredJob = scheduleJob('0 0 * * *', () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\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 if (state.deleteExpiredJob) {\n state.deleteExpiredJob.cancel();\n }\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","deleteExpiredJob","scheduleJob","expirationDate","now","deleteExpiredEvents","unsubscribe","cancel"],"mappings":";;;;AAGA,MAAMA,sBAAyB,GAAA,EAAA;AAE/B,MAAMC,aAAgB,GAAA;AACpB,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,eAAA;AACA,IAAA,iBAAA;AACA,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,cAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,oBAAA;AACA,IAAA,cAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,qBAAA;AACA,IAAA,kBAAA;AACA,IAAA,kBAAA;AACA,IAAA,kBAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,aAAA;AACA,IAAA,mBAAA;AACA,IAAA,mBAAA;AACA,IAAA;AACD,CAAA;AAED,MAAMC,cAAc,CAACD,aAAAA,GAAAA;AACnB,IAAA,MAAME,oBAAoB,CAAC,GAAGC,IAAcA,GAAAA,IAAI,CAAC,CAAE,CAAA;;AAGnD,IAAA,OAAOH,aAAcI,CAAAA,MAAM,CAAC,CAACC,GAAUC,EAAAA,KAAAA,GAAAA;QACrCD,GAAG,CAACC,MAAM,GAAGJ,iBAAAA;QACb,OAAOG,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAME,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,IAAA,MAAMC,gBAAgBD,MAAOE,CAAAA,EAAE,CAACC,QAAQ,CAACC,GAAG,CAAC,YAAA,CAAA;AAC7C,IAAA,MAAMC,oBACJ,GAAA,OAAOJ,aAAkB,KAAA,QAAA,IAAYA,eAAeK,OAAQC,CAAAA,aAAAA;AAC9D,IAAA,MAAMC,iBAAoBR,GAAAA,MAAAA,CAAOS,MAAM,CAACL,GAAG,CAAC,+BAAA,CAAA;;AAG5C,IAAA,IAAIC,wBAAwB,IAAM,EAAA;AAChC,QAAA,OAAOG,iBAAqBjB,IAAAA,sBAAAA;AAC9B;;IAGA,IAAIiB,iBAAAA,IAAqBA,oBAAoBH,oBAAsB,EAAA;QACjE,OAAOG,iBAAAA;AACT;;IAGA,OAAOH,oBAAAA;AACT,CAAA;AAEA;;;IAIA,MAAMK,kCAAkC,CAACV,MAAAA,GAAAA;;AAEvC,IAAA,MAAMW,QAAQ,EAAC;IACf,MAAMC,gBAAAA,GAAmBZ,MAAOI,CAAAA,GAAG,CAAC,YAAA,CAAA;;AAGpC,IAAA,MAAMS,WAAWpB,WAAYD,CAAAA,aAAAA,CAAAA;IAE7B,MAAMsB,YAAAA,GAAe,CAACC,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;AACrC,QAAA,MAAMqB,YAAehB,GAAAA,MAAAA,CAAOiB,cAAc,CAACb,GAAG,EAAIO,EAAAA,KAAAA;;AAGlD,QAAA,MAAMO,gBAAmBF,GAAAA,YAAAA,EAAcG,KAAMC,CAAAA,IAAAA,CAAKC,IAAS,KAAA,OAAA;AAC3D,QAAA,MAAMC,OAAON,YAAcM,EAAAA,IAAAA;QAC3B,IAAI,CAACJ,gBAAoB,IAAA,CAACI,IAAM,EAAA;YAC9B,OAAO,IAAA;AACT;QAEA,MAAMC,UAAAA,GAAaV,QAAQ,CAACE,IAAK,CAAA;;AAGjC,QAAA,IAAI,CAACQ,UAAY,EAAA;YACf,OAAO,IAAA;AACT;;;AAIA,QAAA,MAAMC,WAAc,GAAA;AAAC,YAAA,qBAAA;AAAuB,YAAA;AAAwB,SAAA;AACpE,QAAA,IAAIA,YAAYC,QAAQ,CAAC9B,IAAI,CAAC,CAAA,CAAE,EAAE+B,GAAM,CAAA,EAAA;YACtC,OAAO,IAAA;AACT;QAEA,OAAO;YACLC,MAAQZ,EAAAA,IAAAA;YACRa,IAAM,EAAA,IAAIC,OAAOC,WAAW,EAAA;YAC5BC,OAASR,EAAAA,UAAAA,CAAAA,GAAc5B,SAAS,EAAC;AACjCqC,YAAAA,MAAAA,EAAQV,KAAKW;AACf,SAAA;AACF,KAAA;IAEA,MAAMC,WAAAA,GAAc,OAAOnB,IAAAA,EAAc,GAAGpB,IAAAA,GAAAA;QAC1C,MAAMwC,cAAAA,GAAiBrB,aAAaC,IAASpB,EAAAA,GAAAA,IAAAA,CAAAA;AAE7C,QAAA,IAAIwC,cAAgB,EAAA;YAClB,MAAMvB,gBAAAA,CAAiBwB,SAAS,CAACD,cAAAA,CAAAA;AACnC;AACF,KAAA;IAEA,OAAO;QACL,MAAME,QAAAA,CAAAA,GAAAA;;YAEJ,IAAI,CAAC1B,KAAM2B,CAAAA,mBAAmB,EAAE;;AAE9B3B,gBAAAA,KAAAA,CAAM2B,mBAAmB,GAAGtC,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,WAAa,EAAA,IAAA;;AAE1D,oBAAA,IAAI,CAACC,OAAO,EAAA;AACZ,oBAAA,IAAI,CAACJ,QAAQ,EAAA;AACf,iBAAA,CAAA;AACF;;YAGA,IAAI,CAAC1B,KAAM+B,CAAAA,mBAAmB,EAAE;;AAE9B/B,gBAAAA,KAAAA,CAAM+B,mBAAmB,GAAG1C,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,WAAa,EAAA,IAAA;;AAE1D,oBAAA,IAAI,CAACC,OAAO,EAAA;AACZ,oBAAA,IAAI,CAACJ,QAAQ,EAAA;AACf,iBAAA,CAAA;AACF;;;AAIA1B,YAAAA,KAAAA,CAAMgC,oBAAoB,GAAG3C,MAAAA,CAAOuC,QAAQ,CAACC,EAAE,CAAC,YAAc,EAAA,IAAA;;;AAG5D,gBAAA,IAAI,CAACC,OAAO,EAAA;AACd,aAAA,CAAA;;YAGA,IAAI,CAACzC,OAAOE,EAAE,CAACC,QAAQ,CAACyC,SAAS,CAAC,YAAe,CAAA,EAAA;AAC/C,gBAAA,OAAO,IAAI;AACb;;AAGAjC,YAAAA,KAAAA,CAAMkC,mBAAmB,GAAG7C,MAAAA,CAAOuC,QAAQ,CAACO,SAAS,CAACZ,WAAAA,CAAAA;;AAGtD,YAAA,MAAM3B,gBAAgBR,gBAAiBC,CAAAA,MAAAA,CAAAA;YACvCW,KAAMoC,CAAAA,gBAAgB,GAAGC,wBAAAA,CAAY,WAAa,EAAA,IAAA;gBAChD,MAAMC,cAAAA,GAAiB,IAAIpB,IAAKA,CAAAA,IAAAA,CAAKqB,GAAG,EAAK3C,GAAAA,aAAAA,GAAgB,EAAK,GAAA,EAAA,GAAK,EAAK,GAAA,IAAA,CAAA;AAC5EK,gBAAAA,gBAAAA,CAAiBuC,mBAAmB,CAACF,cAAAA,CAAAA;AACvC,aAAA,CAAA;AAEA,YAAA,OAAO,IAAI;AACb,SAAA;AAEAG,QAAAA,WAAAA,CAAAA,GAAAA;YACE,IAAIzC,KAAAA,CAAMgC,oBAAoB,EAAE;AAC9BhC,gBAAAA,KAAAA,CAAMgC,oBAAoB,EAAA;AAC5B;YAEA,IAAIhC,KAAAA,CAAMkC,mBAAmB,EAAE;AAC7BlC,gBAAAA,KAAAA,CAAMkC,mBAAmB,EAAA;AAC3B;YAEA,IAAIlC,KAAAA,CAAMoC,gBAAgB,EAAE;gBAC1BpC,KAAMoC,CAAAA,gBAAgB,CAACM,MAAM,EAAA;AAC/B;AAEA,YAAA,OAAO,IAAI;AACb,SAAA;AAEAZ,QAAAA,OAAAA,CAAAA,GAAAA;YACE,OAAO,IAAI,CAACW,WAAW,EAAA;AACzB;AACF,KAAA;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"lifecycles.js","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { scheduleJob } from 'node-schedule';
|
|
2
|
-
|
|
3
1
|
const DEFAULT_RETENTION_DAYS = 90;
|
|
4
2
|
const defaultEvents = [
|
|
5
3
|
'entry.create',
|
|
@@ -133,9 +131,14 @@ const getRetentionDays = (strapi)=>{
|
|
|
133
131
|
state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);
|
|
134
132
|
// Manage audit logs auto deletion
|
|
135
133
|
const retentionDays = getRetentionDays(strapi);
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
134
|
+
strapi.cron.add({
|
|
135
|
+
deleteExpiredAuditLogs: {
|
|
136
|
+
task: async ()=>{
|
|
137
|
+
const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
|
|
138
|
+
auditLogsService.deleteExpiredEvents(expirationDate);
|
|
139
|
+
},
|
|
140
|
+
options: '0 0 * * *'
|
|
141
|
+
}
|
|
139
142
|
});
|
|
140
143
|
return this;
|
|
141
144
|
},
|
|
@@ -146,9 +149,7 @@ const getRetentionDays = (strapi)=>{
|
|
|
146
149
|
if (state.eventHubUnsubscribe) {
|
|
147
150
|
state.eventHubUnsubscribe();
|
|
148
151
|
}
|
|
149
|
-
|
|
150
|
-
state.deleteExpiredJob.cancel();
|
|
151
|
-
}
|
|
152
|
+
strapi.cron.remove('deleteExpiredAuditLogs');
|
|
152
153
|
return this;
|
|
153
154
|
},
|
|
154
155
|
destroy () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycles.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { scheduleJob } from 'node-schedule';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n state.deleteExpiredJob = scheduleJob('0 0 * * *', () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\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 if (state.deleteExpiredJob) {\n state.deleteExpiredJob.cancel();\n }\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","deleteExpiredJob","scheduleJob","expirationDate","now","deleteExpiredEvents","unsubscribe","cancel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lifecycles.mjs","sources":["../../../../../../../ee/server/src/audit-logs/services/lifecycles.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nconst DEFAULT_RETENTION_DAYS = 90;\n\nconst defaultEvents = [\n 'entry.create',\n 'entry.update',\n 'entry.delete',\n 'entry.publish',\n 'entry.unpublish',\n 'media.create',\n 'media.update',\n 'media.delete',\n 'media-folder.create',\n 'media-folder.update',\n 'media-folder.delete',\n 'user.create',\n 'user.update',\n 'user.delete',\n 'admin.auth.success',\n 'admin.logout',\n 'content-type.create',\n 'content-type.update',\n 'content-type.delete',\n 'component.create',\n 'component.update',\n 'component.delete',\n 'role.create',\n 'role.update',\n 'role.delete',\n 'permission.create',\n 'permission.update',\n 'permission.delete',\n];\n\nconst getEventMap = (defaultEvents: any) => {\n const getDefaultPayload = (...args: any) => args[0];\n\n // Use the default payload for all default events\n return defaultEvents.reduce((acc: any, event: any) => {\n acc[event] = getDefaultPayload;\n return acc;\n }, {} as any);\n};\n\nconst getRetentionDays = (strapi: Core.Strapi) => {\n const featureConfig = strapi.ee.features.get('audit-logs');\n const licenseRetentionDays =\n typeof featureConfig === 'object' && featureConfig?.options.retentionDays;\n const userRetentionDays = strapi.config.get('admin.auditLogs.retentionDays');\n\n // For enterprise plans, use 90 days by default, but allow users to override it\n if (licenseRetentionDays == null) {\n return userRetentionDays ?? DEFAULT_RETENTION_DAYS;\n }\n\n // Allow users to override the license retention days, but not to increase it\n if (userRetentionDays && userRetentionDays < licenseRetentionDays) {\n return userRetentionDays;\n }\n\n // User didn't provide a retention days value, use the license one\n return licenseRetentionDays;\n};\n\n/**\n * @description\n * Manages the the lifecycle of audit logs. Accessible via strapi.get('audit-logs-lifecycles')\n */\nconst createAuditLogsLifecycleService = (strapi: Core.Strapi) => {\n // Manage internal service state privately\n const state = {} as any;\n const auditLogsService = strapi.get('audit-logs');\n\n // NOTE: providers should be able to replace getEventMap to add or remove events\n const eventMap = getEventMap(defaultEvents);\n\n const processEvent = (name: string, ...args: any) => {\n const requestState = strapi.requestContext.get()?.state;\n\n // Ignore events with auth strategies different from admin\n const isUsingAdminAuth = requestState?.route.info.type === 'admin';\n const user = requestState?.user;\n if (!isUsingAdminAuth || !user) {\n return null;\n }\n\n const getPayload = eventMap[name];\n\n // Ignore the event if it's not in the map\n if (!getPayload) {\n return null;\n }\n\n // Ignore some events based on payload\n // TODO: What does this ignore in upload? Why would we want to ignore anything?\n const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];\n if (ignoredUids.includes(args[0]?.uid)) {\n return null;\n }\n\n return {\n action: name,\n date: new Date().toISOString(),\n payload: getPayload(...args) || {},\n userId: user.id,\n };\n };\n\n const handleEvent = async (name: string, ...args: any) => {\n const processedEvent = processEvent(name, ...args);\n\n if (processedEvent) {\n await auditLogsService.saveEvent(processedEvent);\n }\n };\n\n return {\n async register() {\n // Handle license being enabled\n if (!state.eeEnableUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeEnableUnsubscribe = strapi.eventHub.on('ee.enable', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being updated\n if (!state.eeUpdateUnsubscribe) {\n // @ts-expect-error- update event hub to receive callback argument\n state.eeUpdateUnsubscribe = strapi.eventHub.on('ee.update', () => {\n // Recreate the service to use the new license info\n this.destroy();\n this.register();\n });\n }\n\n // Handle license being disabled\n // @ts-expect-error- update event hub to receive callback argument\n state.eeDisableUnsubscribe = strapi.eventHub.on('ee.disable', () => {\n // Turn off service when the license gets disabled\n // Only ee.enable and ee.update listeners remain active to recreate the service\n this.destroy();\n });\n\n // Check current state of license\n if (!strapi.ee.features.isEnabled('audit-logs')) {\n return this;\n }\n\n // Start saving events\n state.eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent);\n\n // Manage audit logs auto deletion\n const retentionDays = getRetentionDays(strapi);\n\n strapi.cron.add({\n deleteExpiredAuditLogs: {\n task: async () => {\n const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);\n auditLogsService.deleteExpiredEvents(expirationDate);\n },\n options: '0 0 * * *',\n },\n });\n\n return this;\n },\n\n unsubscribe() {\n if (state.eeDisableUnsubscribe) {\n state.eeDisableUnsubscribe();\n }\n\n if (state.eventHubUnsubscribe) {\n state.eventHubUnsubscribe();\n }\n\n strapi.cron.remove('deleteExpiredAuditLogs');\n\n return this;\n },\n\n destroy() {\n return this.unsubscribe();\n },\n };\n};\n\nexport { createAuditLogsLifecycleService };\n"],"names":["DEFAULT_RETENTION_DAYS","defaultEvents","getEventMap","getDefaultPayload","args","reduce","acc","event","getRetentionDays","strapi","featureConfig","ee","features","get","licenseRetentionDays","options","retentionDays","userRetentionDays","config","createAuditLogsLifecycleService","state","auditLogsService","eventMap","processEvent","name","requestState","requestContext","isUsingAdminAuth","route","info","type","user","getPayload","ignoredUids","includes","uid","action","date","Date","toISOString","payload","userId","id","handleEvent","processedEvent","saveEvent","register","eeEnableUnsubscribe","eventHub","on","destroy","eeUpdateUnsubscribe","eeDisableUnsubscribe","isEnabled","eventHubUnsubscribe","subscribe","cron","add","deleteExpiredAuditLogs","task","expirationDate","now","deleteExpiredEvents","unsubscribe","remove"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.js","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = ['id'
|
|
1
|
+
{"version":3,"file":"user.js","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = [\n 'id',\n 'firstname',\n 'lastname',\n 'username',\n 'email',\n 'isActive',\n];\n\nexport default {\n createUser,\n hasSuperAdminRole,\n ADMIN_USER_ALLOWED_FIELDS,\n};\n"],"names":["SUPER_ADMIN_CODE","constants","createUser","attributes","roles","isActive","username","hasSuperAdminRole","user","filter","role","code","length","ADMIN_USER_ALLOWED_FIELDS"],"mappings":";;;;AAQA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,SAAAA;AAE7B;;;IAIO,SAASC,UAAAA,CAAWC,UAA6C,EAAA;IACtE,OAAO;AACLC,QAAAA,KAAAA,EAAO,EAAE;QACTC,QAAU,EAAA,KAAA;QACVC,QAAU,EAAA,IAAA;AACV,QAAA,GAAGH;AACL,KAAA;AACF;AAEO,MAAMI,oBAAoB,CAACC,IAAAA,GAAAA;AAChC,IAAA,OAAOA,IAAKJ,CAAAA,KAAK,CAACK,MAAM,CAAC,CAACC,IAAoBA,GAAAA,IAAAA,CAAKC,IAAI,KAAKX,gBAAkBY,CAAAA,CAAAA,MAAM,GAAG,CAAA;AACzF;MAEaC,yBAA4B,GAAA;AACvC,IAAA,IAAA;AACA,IAAA,WAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.mjs","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = ['id'
|
|
1
|
+
{"version":3,"file":"user.mjs","sources":["../../../../../server/src/domain/user.ts"],"sourcesContent":["import constants from '../services/constants';\n\nimport type {\n AdminUser,\n AdminRole,\n AdminUserCreationPayload,\n} from '../../../shared/contracts/shared';\n\nconst { SUPER_ADMIN_CODE } = constants;\n\n/**\n * Create a new user model by merging default and specified attributes\n * @param attributes A partial user object\n */\nexport function createUser(attributes: Partial<AdminUserCreationPayload>) {\n return {\n roles: [],\n isActive: false,\n username: null,\n ...attributes,\n };\n}\n\nexport const hasSuperAdminRole = (user: AdminUser) => {\n return user.roles.filter((role: AdminRole) => role.code === SUPER_ADMIN_CODE).length > 0;\n};\n\nexport const ADMIN_USER_ALLOWED_FIELDS = [\n 'id',\n 'firstname',\n 'lastname',\n 'username',\n 'email',\n 'isActive',\n];\n\nexport default {\n createUser,\n hasSuperAdminRole,\n ADMIN_USER_ALLOWED_FIELDS,\n};\n"],"names":["SUPER_ADMIN_CODE","constants","createUser","attributes","roles","isActive","username","hasSuperAdminRole","user","filter","role","code","length","ADMIN_USER_ALLOWED_FIELDS"],"mappings":";;AAQA,MAAM,EAAEA,gBAAgB,EAAE,GAAGC,SAAAA;AAE7B;;;IAIO,SAASC,UAAAA,CAAWC,UAA6C,EAAA;IACtE,OAAO;AACLC,QAAAA,KAAAA,EAAO,EAAE;QACTC,QAAU,EAAA,KAAA;QACVC,QAAU,EAAA,IAAA;AACV,QAAA,GAAGH;AACL,KAAA;AACF;AAEO,MAAMI,oBAAoB,CAACC,IAAAA,GAAAA;AAChC,IAAA,OAAOA,IAAKJ,CAAAA,KAAK,CAACK,MAAM,CAAC,CAACC,IAAoBA,GAAAA,IAAAA,CAAKC,IAAI,KAAKX,gBAAkBY,CAAAA,CAAAA,MAAM,GAAG,CAAA;AACzF;MAEaC,yBAA4B,GAAA;AACvC,IAAA,IAAA;AACA,IAAA,WAAA;AACA,IAAA,UAAA;AACA,IAAA,UAAA;AACA,IAAA,OAAA;AACA,IAAA;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/domain/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACzB,MAAM,kCAAkC,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,wBAAwB,CAAC;;;;;;;;;;;EAOvE;AAED,eAAO,MAAM,iBAAiB,SAAU,SAAS,YAEhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../server/src/domain/user.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,SAAS,EAET,wBAAwB,EACzB,MAAM,kCAAkC,CAAC;AAI1C;;;GAGG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,OAAO,CAAC,wBAAwB,CAAC;;;;;;;;;;;EAOvE;AAED,eAAO,MAAM,iBAAiB,SAAU,SAAS,YAEhD,CAAC;AAEF,eAAO,MAAM,yBAAyB,UAOrC,CAAC;;;;;;AAEF,wBAIE"}
|