@strapi/admin 5.52.3 → 5.54.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/App.js +1 -1
- package/dist/admin/admin/src/App.js.map +1 -1
- package/dist/admin/admin/src/App.mjs +1 -1
- package/dist/admin/admin/src/App.mjs.map +1 -1
- package/dist/admin/admin/src/components/DismissibleBanner.js +60 -0
- package/dist/admin/admin/src/components/DismissibleBanner.js.map +1 -0
- package/dist/admin/admin/src/components/DismissibleBanner.mjs +58 -0
- package/dist/admin/admin/src/components/DismissibleBanner.mjs.map +1 -0
- package/dist/admin/admin/src/components/Form.js +11 -2
- package/dist/admin/admin/src/components/Form.js.map +1 -1
- package/dist/admin/admin/src/components/Form.mjs +11 -2
- package/dist/admin/admin/src/components/Form.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/DateTime.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/DateTime.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/DateTime.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/DateTime.mjs.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.js +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.js.map +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.mjs +1 -1
- package/dist/admin/admin/src/components/FormInputs/Time.mjs.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.js +1 -2
- package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs +1 -2
- package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
- package/dist/admin/admin/src/components/MediaLibraryBanner.js +85 -0
- package/dist/admin/admin/src/components/MediaLibraryBanner.js.map +1 -0
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs +83 -0
- package/dist/admin/admin/src/components/MediaLibraryBanner.mjs.map +1 -0
- package/dist/admin/admin/src/components/Providers.js +6 -6
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs +6 -6
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.js +56 -86
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs +58 -88
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/configure.js +14 -2
- package/dist/admin/admin/src/core/store/configure.js.map +1 -1
- package/dist/admin/admin/src/core/store/configure.mjs +14 -2
- package/dist/admin/admin/src/core/store/configure.mjs.map +1 -1
- package/dist/admin/admin/src/core/store/hooks.mjs +1 -1
- package/dist/admin/admin/src/features/Auth.js +162 -46
- package/dist/admin/admin/src/features/Auth.js.map +1 -1
- package/dist/admin/admin/src/features/Auth.mjs +164 -48
- package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.js +19 -0
- package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.js.map +1 -0
- package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.mjs +17 -0
- package/dist/admin/admin/src/hooks/useRegisterUnsavedChanges.mjs.map +1 -0
- package/dist/admin/admin/src/hooks/{useIdleSessionLogout.js → useSessionKeepalive.js} +34 -27
- package/dist/admin/admin/src/hooks/useSessionKeepalive.js.map +1 -0
- package/dist/admin/admin/src/hooks/{useIdleSessionLogout.mjs → useSessionKeepalive.mjs} +34 -27
- package/dist/admin/admin/src/hooks/useSessionKeepalive.mjs.map +1 -0
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +2 -0
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +2 -0
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/SessionsPage.js +2 -5
- package/dist/admin/admin/src/pages/SessionsPage.js.map +1 -1
- package/dist/admin/admin/src/pages/SessionsPage.mjs +2 -5
- package/dist/admin/admin/src/pages/SessionsPage.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +5 -0
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +5 -0
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +30 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +30 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +3 -13
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +3 -13
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.js +152 -48
- package/dist/admin/admin/src/utils/getFetchClient.js.map +1 -1
- package/dist/admin/admin/src/utils/getFetchClient.mjs +151 -50
- package/dist/admin/admin/src/utils/getFetchClient.mjs.map +1 -1
- package/dist/admin/admin/src/utils/unsavedChangesRegistry.js +25 -0
- package/dist/admin/admin/src/utils/unsavedChangesRegistry.js.map +1 -0
- package/dist/admin/admin/src/utils/unsavedChangesRegistry.mjs +22 -0
- package/dist/admin/admin/src/utils/unsavedChangesRegistry.mjs.map +1 -0
- package/dist/admin/admin/tests/utils.js +14 -14
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +14 -14
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +6 -0
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +6 -0
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +31 -3
- 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 +33 -5
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.js +177 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.mjs +175 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js +173 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs +151 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +14 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs +14 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/index.js +3 -0
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/admin/shared/utils/audit-log-export.js +16 -0
- package/dist/admin/shared/utils/audit-log-export.js.map +1 -0
- package/dist/admin/shared/utils/audit-log-export.mjs +9 -0
- package/dist/admin/shared/utils/audit-log-export.mjs.map +1 -0
- package/dist/admin/src/components/DismissibleBanner.d.ts +8 -0
- package/dist/admin/src/components/MediaLibraryBanner.d.ts +2 -0
- package/dist/admin/src/hooks/useRegisterUnsavedChanges.d.ts +6 -0
- package/dist/admin/src/hooks/useSessionKeepalive.d.ts +88 -0
- package/dist/admin/src/utils/getFetchClient.d.ts +22 -7
- package/dist/admin/src/utils/unsavedChangesRegistry.d.ts +11 -0
- package/dist/admin/tests/store.d.ts +4 -0
- package/dist/admin/tests/utils.d.ts +4 -0
- package/dist/ee/admin/src/constants.d.ts +4 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/components/ExportCard.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.d.ts +18 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +13 -0
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts +1 -0
- package/dist/ee/server/src/audit-logs/controllers/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/routes/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts +24 -3
- package/dist/ee/server/src/audit-logs/services/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +8 -2
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/audit-logs/utils/csv.d.ts +5 -0
- package/dist/ee/server/src/audit-logs/utils/csv.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/utils/export-token.d.ts +5 -0
- package/dist/ee/server/src/audit-logs/utils/export-token.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/utils.d.ts +10 -0
- package/dist/ee/server/src/audit-logs/utils.d.ts.map +1 -0
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts +2 -0
- package/dist/ee/server/src/audit-logs/validation/audit-logs.d.ts.map +1 -1
- package/dist/ee/server/src/config/admin-actions.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +1 -0
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js +50 -0
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs +51 -1
- package/dist/server/ee/server/src/audit-logs/controllers/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js +13 -4
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs +13 -4
- package/dist/server/ee/server/src/audit-logs/routes/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +201 -7
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +201 -8
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +119 -34
- 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 +119 -34
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/utils/csv.js +33 -0
- package/dist/server/ee/server/src/audit-logs/utils/csv.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs +29 -0
- package/dist/server/ee/server/src/audit-logs/utils/csv.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.js +33 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.mjs +29 -0
- package/dist/server/ee/server/src/audit-logs/utils/export-token.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils.js +14 -0
- package/dist/server/ee/server/src/audit-logs/utils.js.map +1 -0
- package/dist/server/ee/server/src/audit-logs/utils.mjs +12 -0
- package/dist/server/ee/server/src/audit-logs/utils.mjs.map +1 -0
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js +11 -0
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs +11 -1
- package/dist/server/ee/server/src/audit-logs/validation/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/config/admin-actions.js +8 -0
- package/dist/server/ee/server/src/config/admin-actions.js.map +1 -1
- package/dist/server/ee/server/src/config/admin-actions.mjs +8 -0
- package/dist/server/ee/server/src/config/admin-actions.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +10 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +10 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/shared/utils/audit-log-export.js +22 -0
- package/dist/server/shared/utils/audit-log-export.js.map +1 -0
- package/dist/server/shared/utils/audit-log-export.mjs +12 -0
- package/dist/server/shared/utils/audit-log-export.mjs.map +1 -0
- package/dist/shared/contracts/audit-logs.d.ts +15 -1
- package/dist/shared/contracts/audit-logs.d.ts.map +1 -1
- package/dist/shared/contracts/shared.d.ts +1 -0
- package/dist/shared/contracts/shared.d.ts.map +1 -1
- package/dist/shared/utils/audit-log-export.d.ts +9 -0
- package/dist/shared/utils/audit-log-export.d.ts.map +1 -0
- package/package.json +7 -7
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.js.map +0 -1
- package/dist/admin/admin/src/hooks/useIdleSessionLogout.mjs.map +0 -1
- package/dist/admin/src/hooks/useIdleSessionLogout.d.ts +0 -87
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
var reactIntl = require('react-intl');
|
|
5
|
+
var Notifications = require('../../../../../../../../admin/src/features/Notifications.js');
|
|
6
|
+
var getFetchClient = require('../../../../../../../../admin/src/utils/getFetchClient.js');
|
|
7
|
+
var auditLogExport = require('../../../../../../../../shared/utils/audit-log-export.js');
|
|
8
|
+
|
|
9
|
+
function _interopNamespace(e) {
|
|
10
|
+
if (e && e.__esModule) return e;
|
|
11
|
+
var n = Object.create(null);
|
|
12
|
+
if (e) {
|
|
13
|
+
Object.keys(e).forEach(function (k) {
|
|
14
|
+
if (k !== 'default') {
|
|
15
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
16
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () { return e[k]; }
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
n.default = e;
|
|
24
|
+
return Object.freeze(n);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
28
|
+
|
|
29
|
+
const DEFAULT_FILE_NAME = 'audit-logs.csv';
|
|
30
|
+
const getFileName = (contentDisposition)=>{
|
|
31
|
+
const match = contentDisposition?.match(/filename="([^"]+)"/);
|
|
32
|
+
return match?.[1] ?? DEFAULT_FILE_NAME;
|
|
33
|
+
};
|
|
34
|
+
const downloadFile = (blob, fileName)=>{
|
|
35
|
+
const url = URL.createObjectURL(blob);
|
|
36
|
+
const link = document.createElement('a');
|
|
37
|
+
link.href = url;
|
|
38
|
+
link.download = fileName;
|
|
39
|
+
document.body.appendChild(link);
|
|
40
|
+
link.click();
|
|
41
|
+
link.remove();
|
|
42
|
+
// Revoking during a later tick to avoid aborting the download
|
|
43
|
+
setTimeout(()=>URL.revokeObjectURL(url), 60000);
|
|
44
|
+
};
|
|
45
|
+
const useExportAuditLogs = ()=>{
|
|
46
|
+
const [isExporting, setIsExporting] = React__namespace.useState(false);
|
|
47
|
+
const [progress, setProgress] = React__namespace.useState(null);
|
|
48
|
+
const [exportResult, setExportResult] = React__namespace.useState(null);
|
|
49
|
+
const { toggleNotification } = Notifications.useNotification();
|
|
50
|
+
const { formatMessage } = reactIntl.useIntl();
|
|
51
|
+
const isExportingRef = React__namespace.useRef(false);
|
|
52
|
+
const isMountedRef = React__namespace.useRef(true);
|
|
53
|
+
React__namespace.useEffect(()=>{
|
|
54
|
+
isMountedRef.current = true;
|
|
55
|
+
return ()=>{
|
|
56
|
+
isMountedRef.current = false;
|
|
57
|
+
};
|
|
58
|
+
}, []);
|
|
59
|
+
const exportAuditLogs = async (filters, totalEntries)=>{
|
|
60
|
+
if (isExportingRef.current) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
isExportingRef.current = true;
|
|
64
|
+
setIsExporting(true);
|
|
65
|
+
setExportResult(null);
|
|
66
|
+
setProgress({
|
|
67
|
+
fetched: 0,
|
|
68
|
+
total: totalEntries
|
|
69
|
+
});
|
|
70
|
+
const { get } = getFetchClient.getFetchClient();
|
|
71
|
+
let cursor = null;
|
|
72
|
+
let until = null;
|
|
73
|
+
let token = null;
|
|
74
|
+
let fileName = DEFAULT_FILE_NAME;
|
|
75
|
+
const parts = [];
|
|
76
|
+
try {
|
|
77
|
+
do {
|
|
78
|
+
const { data, headers } = await get('/admin/audit-logs/export', {
|
|
79
|
+
params: {
|
|
80
|
+
...filters ? {
|
|
81
|
+
filters
|
|
82
|
+
} : {},
|
|
83
|
+
...cursor ? {
|
|
84
|
+
cursor
|
|
85
|
+
} : {},
|
|
86
|
+
...until ? {
|
|
87
|
+
until
|
|
88
|
+
} : {},
|
|
89
|
+
...token ? {
|
|
90
|
+
token
|
|
91
|
+
} : {}
|
|
92
|
+
},
|
|
93
|
+
responseType: 'blob'
|
|
94
|
+
});
|
|
95
|
+
if (!isMountedRef.current) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const nextCursorHeader = headers?.get(auditLogExport.AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER) ?? null;
|
|
99
|
+
const untilHeader = headers?.get(auditLogExport.AUDIT_LOGS_EXPORT_UNTIL_HEADER) ?? null;
|
|
100
|
+
const tokenHeader = headers?.get(auditLogExport.AUDIT_LOGS_EXPORT_TOKEN_HEADER) ?? null;
|
|
101
|
+
if (!nextCursorHeader || !untilHeader || !tokenHeader) {
|
|
102
|
+
throw new Error('The audit logs export part headers are missing');
|
|
103
|
+
}
|
|
104
|
+
cursor = nextCursorHeader === auditLogExport.AUDIT_LOGS_EXPORT_CURSOR_DONE ? null : nextCursorHeader;
|
|
105
|
+
until = untilHeader;
|
|
106
|
+
token = tokenHeader;
|
|
107
|
+
if (parts.length === 0) {
|
|
108
|
+
fileName = getFileName(headers?.get('Content-Disposition') ?? null);
|
|
109
|
+
}
|
|
110
|
+
parts.push(data);
|
|
111
|
+
const partRows = Number(headers?.get(auditLogExport.AUDIT_LOGS_EXPORT_PART_SIZE_HEADER)) || auditLogExport.AUDIT_LOGS_EXPORT_PART_ROWS;
|
|
112
|
+
setProgress({
|
|
113
|
+
fetched: Math.min(parts.length * partRows, totalEntries),
|
|
114
|
+
total: totalEntries
|
|
115
|
+
});
|
|
116
|
+
}while (cursor)
|
|
117
|
+
setExportResult({
|
|
118
|
+
blob: new Blob(parts, {
|
|
119
|
+
type: 'text/csv;charset=utf-8'
|
|
120
|
+
}),
|
|
121
|
+
fileName
|
|
122
|
+
});
|
|
123
|
+
} catch (error) {
|
|
124
|
+
const message = ()=>{
|
|
125
|
+
if (getFetchClient.isFetchError(error) && error.status === 413) {
|
|
126
|
+
return formatMessage({
|
|
127
|
+
id: 'Settings.permissions.auditLogs.listview.export.error.tooLarge',
|
|
128
|
+
defaultMessage: 'Table too large to export. Please add filters and try again.'
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
if (getFetchClient.isFetchError(error) && error.status === 403) {
|
|
132
|
+
return formatMessage({
|
|
133
|
+
id: 'Settings.permissions.auditLogs.listview.export.error.forbidden',
|
|
134
|
+
defaultMessage: "You don't have the permissions to export audit logs."
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return formatMessage({
|
|
138
|
+
id: 'Settings.permissions.auditLogs.listview.export.error',
|
|
139
|
+
defaultMessage: 'The export failed. Please try again.'
|
|
140
|
+
});
|
|
141
|
+
};
|
|
142
|
+
toggleNotification({
|
|
143
|
+
type: 'danger',
|
|
144
|
+
message: message()
|
|
145
|
+
});
|
|
146
|
+
} finally{
|
|
147
|
+
isExportingRef.current = false;
|
|
148
|
+
setIsExporting(false);
|
|
149
|
+
setProgress(null);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
const downloadExport = ()=>{
|
|
153
|
+
if (!exportResult) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
downloadFile(exportResult.blob, exportResult.fileName);
|
|
157
|
+
setExportResult(null);
|
|
158
|
+
};
|
|
159
|
+
const dismissExport = ()=>{
|
|
160
|
+
setExportResult(null);
|
|
161
|
+
};
|
|
162
|
+
return {
|
|
163
|
+
exportAuditLogs,
|
|
164
|
+
downloadExport,
|
|
165
|
+
dismissExport,
|
|
166
|
+
isExporting,
|
|
167
|
+
progress,
|
|
168
|
+
exportResult
|
|
169
|
+
};
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
exports.useExportAuditLogs = useExportAuditLogs;
|
|
173
|
+
//# sourceMappingURL=useExportAuditLogs.js.map
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useExportAuditLogs.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useIntl } from 'react-intl';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport {\n getFetchClient,\n isFetchError,\n type FetchResponse,\n} from '../../../../../../../../admin/src/utils/getFetchClient';\nimport {\n AUDIT_LOGS_EXPORT_CURSOR_DONE,\n AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER,\n AUDIT_LOGS_EXPORT_PART_ROWS,\n AUDIT_LOGS_EXPORT_PART_SIZE_HEADER,\n AUDIT_LOGS_EXPORT_TOKEN_HEADER,\n AUDIT_LOGS_EXPORT_UNTIL_HEADER,\n} from '../../../../../../../../shared/utils/audit-log-export';\n\nconst DEFAULT_FILE_NAME = 'audit-logs.csv';\n\ninterface ExportProgress {\n fetched: number;\n total: number;\n}\n\ninterface ExportResult {\n blob: Blob;\n fileName: string;\n}\n\nconst getFileName = (contentDisposition: string | null) => {\n const match = contentDisposition?.match(/filename=\"([^\"]+)\"/);\n\n return match?.[1] ?? DEFAULT_FILE_NAME;\n};\n\nconst downloadFile = (blob: Blob, fileName: string) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n link.remove();\n\n // Revoking during a later tick to avoid aborting the download\n setTimeout(() => URL.revokeObjectURL(url), 60000);\n};\n\nconst useExportAuditLogs = () => {\n const [isExporting, setIsExporting] = React.useState(false);\n const [progress, setProgress] = React.useState<ExportProgress | null>(null);\n const [exportResult, setExportResult] = React.useState<ExportResult | null>(null);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n const isExportingRef = React.useRef(false);\n\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const exportAuditLogs = async (filters: unknown, totalEntries: number) => {\n if (isExportingRef.current) {\n return;\n }\n\n isExportingRef.current = true;\n setIsExporting(true);\n setExportResult(null);\n setProgress({ fetched: 0, total: totalEntries });\n\n const { get } = getFetchClient();\n\n let cursor: string | null = null;\n let until: string | null = null;\n let token: string | null = null;\n let fileName = DEFAULT_FILE_NAME;\n const parts: Blob[] = [];\n\n try {\n do {\n const { data, headers }: FetchResponse<Blob> = await get<Blob>('/admin/audit-logs/export', {\n params: {\n ...(filters ? { filters } : {}),\n ...(cursor ? { cursor } : {}),\n ...(until ? { until } : {}),\n ...(token ? { token } : {}),\n },\n responseType: 'blob',\n });\n\n if (!isMountedRef.current) {\n return;\n }\n\n const nextCursorHeader: string | null =\n headers?.get(AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER) ?? null;\n const untilHeader: string | null = headers?.get(AUDIT_LOGS_EXPORT_UNTIL_HEADER) ?? null;\n const tokenHeader: string | null = headers?.get(AUDIT_LOGS_EXPORT_TOKEN_HEADER) ?? null;\n\n if (!nextCursorHeader || !untilHeader || !tokenHeader) {\n throw new Error('The audit logs export part headers are missing');\n }\n\n cursor = nextCursorHeader === AUDIT_LOGS_EXPORT_CURSOR_DONE ? null : nextCursorHeader;\n until = untilHeader;\n token = tokenHeader;\n\n if (parts.length === 0) {\n fileName = getFileName(headers?.get('Content-Disposition') ?? null);\n }\n\n parts.push(data);\n\n const partRows =\n Number(headers?.get(AUDIT_LOGS_EXPORT_PART_SIZE_HEADER)) || AUDIT_LOGS_EXPORT_PART_ROWS;\n setProgress({\n fetched: Math.min(parts.length * partRows, totalEntries),\n total: totalEntries,\n });\n } while (cursor);\n\n setExportResult({ blob: new Blob(parts, { type: 'text/csv;charset=utf-8' }), fileName });\n } catch (error) {\n const message = () => {\n if (isFetchError(error) && error.status === 413) {\n return formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.error.tooLarge',\n defaultMessage: 'Table too large to export. Please add filters and try again.',\n });\n }\n\n if (isFetchError(error) && error.status === 403) {\n return formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.error.forbidden',\n defaultMessage: \"You don't have the permissions to export audit logs.\",\n });\n }\n\n return formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.error',\n defaultMessage: 'The export failed. Please try again.',\n });\n };\n\n toggleNotification({ type: 'danger', message: message() });\n } finally {\n isExportingRef.current = false;\n setIsExporting(false);\n setProgress(null);\n }\n };\n\n const downloadExport = () => {\n if (!exportResult) {\n return;\n }\n\n downloadFile(exportResult.blob, exportResult.fileName);\n setExportResult(null);\n };\n\n const dismissExport = () => {\n setExportResult(null);\n };\n\n return { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult };\n};\n\nexport { useExportAuditLogs };\nexport type { ExportProgress, ExportResult };\n"],"names":["DEFAULT_FILE_NAME","getFileName","contentDisposition","match","downloadFile","blob","fileName","url","URL","createObjectURL","link","document","createElement","href","download","body","appendChild","click","remove","setTimeout","revokeObjectURL","useExportAuditLogs","isExporting","setIsExporting","React","useState","progress","setProgress","exportResult","setExportResult","toggleNotification","useNotification","formatMessage","useIntl","isExportingRef","useRef","isMountedRef","useEffect","current","exportAuditLogs","filters","totalEntries","fetched","total","get","getFetchClient","cursor","until","token","parts","data","headers","params","responseType","nextCursorHeader","AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER","untilHeader","AUDIT_LOGS_EXPORT_UNTIL_HEADER","tokenHeader","AUDIT_LOGS_EXPORT_TOKEN_HEADER","Error","AUDIT_LOGS_EXPORT_CURSOR_DONE","length","push","partRows","Number","AUDIT_LOGS_EXPORT_PART_SIZE_HEADER","AUDIT_LOGS_EXPORT_PART_ROWS","Math","min","Blob","type","error","message","isFetchError","status","id","defaultMessage","downloadExport","dismissExport"],"mappings":"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"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { useIntl } from 'react-intl';
|
|
3
|
+
import { useNotification } from '../../../../../../../../admin/src/features/Notifications.mjs';
|
|
4
|
+
import { getFetchClient, isFetchError } from '../../../../../../../../admin/src/utils/getFetchClient.mjs';
|
|
5
|
+
import { AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER, AUDIT_LOGS_EXPORT_UNTIL_HEADER, AUDIT_LOGS_EXPORT_TOKEN_HEADER, AUDIT_LOGS_EXPORT_CURSOR_DONE, AUDIT_LOGS_EXPORT_PART_SIZE_HEADER, AUDIT_LOGS_EXPORT_PART_ROWS } from '../../../../../../../../shared/utils/audit-log-export.mjs';
|
|
6
|
+
|
|
7
|
+
const DEFAULT_FILE_NAME = 'audit-logs.csv';
|
|
8
|
+
const getFileName = (contentDisposition)=>{
|
|
9
|
+
const match = contentDisposition?.match(/filename="([^"]+)"/);
|
|
10
|
+
return match?.[1] ?? DEFAULT_FILE_NAME;
|
|
11
|
+
};
|
|
12
|
+
const downloadFile = (blob, fileName)=>{
|
|
13
|
+
const url = URL.createObjectURL(blob);
|
|
14
|
+
const link = document.createElement('a');
|
|
15
|
+
link.href = url;
|
|
16
|
+
link.download = fileName;
|
|
17
|
+
document.body.appendChild(link);
|
|
18
|
+
link.click();
|
|
19
|
+
link.remove();
|
|
20
|
+
// Revoking during a later tick to avoid aborting the download
|
|
21
|
+
setTimeout(()=>URL.revokeObjectURL(url), 60000);
|
|
22
|
+
};
|
|
23
|
+
const useExportAuditLogs = ()=>{
|
|
24
|
+
const [isExporting, setIsExporting] = React.useState(false);
|
|
25
|
+
const [progress, setProgress] = React.useState(null);
|
|
26
|
+
const [exportResult, setExportResult] = React.useState(null);
|
|
27
|
+
const { toggleNotification } = useNotification();
|
|
28
|
+
const { formatMessage } = useIntl();
|
|
29
|
+
const isExportingRef = React.useRef(false);
|
|
30
|
+
const isMountedRef = React.useRef(true);
|
|
31
|
+
React.useEffect(()=>{
|
|
32
|
+
isMountedRef.current = true;
|
|
33
|
+
return ()=>{
|
|
34
|
+
isMountedRef.current = false;
|
|
35
|
+
};
|
|
36
|
+
}, []);
|
|
37
|
+
const exportAuditLogs = async (filters, totalEntries)=>{
|
|
38
|
+
if (isExportingRef.current) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
isExportingRef.current = true;
|
|
42
|
+
setIsExporting(true);
|
|
43
|
+
setExportResult(null);
|
|
44
|
+
setProgress({
|
|
45
|
+
fetched: 0,
|
|
46
|
+
total: totalEntries
|
|
47
|
+
});
|
|
48
|
+
const { get } = getFetchClient();
|
|
49
|
+
let cursor = null;
|
|
50
|
+
let until = null;
|
|
51
|
+
let token = null;
|
|
52
|
+
let fileName = DEFAULT_FILE_NAME;
|
|
53
|
+
const parts = [];
|
|
54
|
+
try {
|
|
55
|
+
do {
|
|
56
|
+
const { data, headers } = await get('/admin/audit-logs/export', {
|
|
57
|
+
params: {
|
|
58
|
+
...filters ? {
|
|
59
|
+
filters
|
|
60
|
+
} : {},
|
|
61
|
+
...cursor ? {
|
|
62
|
+
cursor
|
|
63
|
+
} : {},
|
|
64
|
+
...until ? {
|
|
65
|
+
until
|
|
66
|
+
} : {},
|
|
67
|
+
...token ? {
|
|
68
|
+
token
|
|
69
|
+
} : {}
|
|
70
|
+
},
|
|
71
|
+
responseType: 'blob'
|
|
72
|
+
});
|
|
73
|
+
if (!isMountedRef.current) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const nextCursorHeader = headers?.get(AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER) ?? null;
|
|
77
|
+
const untilHeader = headers?.get(AUDIT_LOGS_EXPORT_UNTIL_HEADER) ?? null;
|
|
78
|
+
const tokenHeader = headers?.get(AUDIT_LOGS_EXPORT_TOKEN_HEADER) ?? null;
|
|
79
|
+
if (!nextCursorHeader || !untilHeader || !tokenHeader) {
|
|
80
|
+
throw new Error('The audit logs export part headers are missing');
|
|
81
|
+
}
|
|
82
|
+
cursor = nextCursorHeader === AUDIT_LOGS_EXPORT_CURSOR_DONE ? null : nextCursorHeader;
|
|
83
|
+
until = untilHeader;
|
|
84
|
+
token = tokenHeader;
|
|
85
|
+
if (parts.length === 0) {
|
|
86
|
+
fileName = getFileName(headers?.get('Content-Disposition') ?? null);
|
|
87
|
+
}
|
|
88
|
+
parts.push(data);
|
|
89
|
+
const partRows = Number(headers?.get(AUDIT_LOGS_EXPORT_PART_SIZE_HEADER)) || AUDIT_LOGS_EXPORT_PART_ROWS;
|
|
90
|
+
setProgress({
|
|
91
|
+
fetched: Math.min(parts.length * partRows, totalEntries),
|
|
92
|
+
total: totalEntries
|
|
93
|
+
});
|
|
94
|
+
}while (cursor)
|
|
95
|
+
setExportResult({
|
|
96
|
+
blob: new Blob(parts, {
|
|
97
|
+
type: 'text/csv;charset=utf-8'
|
|
98
|
+
}),
|
|
99
|
+
fileName
|
|
100
|
+
});
|
|
101
|
+
} catch (error) {
|
|
102
|
+
const message = ()=>{
|
|
103
|
+
if (isFetchError(error) && error.status === 413) {
|
|
104
|
+
return formatMessage({
|
|
105
|
+
id: 'Settings.permissions.auditLogs.listview.export.error.tooLarge',
|
|
106
|
+
defaultMessage: 'Table too large to export. Please add filters and try again.'
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
if (isFetchError(error) && error.status === 403) {
|
|
110
|
+
return formatMessage({
|
|
111
|
+
id: 'Settings.permissions.auditLogs.listview.export.error.forbidden',
|
|
112
|
+
defaultMessage: "You don't have the permissions to export audit logs."
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
return formatMessage({
|
|
116
|
+
id: 'Settings.permissions.auditLogs.listview.export.error',
|
|
117
|
+
defaultMessage: 'The export failed. Please try again.'
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
toggleNotification({
|
|
121
|
+
type: 'danger',
|
|
122
|
+
message: message()
|
|
123
|
+
});
|
|
124
|
+
} finally{
|
|
125
|
+
isExportingRef.current = false;
|
|
126
|
+
setIsExporting(false);
|
|
127
|
+
setProgress(null);
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const downloadExport = ()=>{
|
|
131
|
+
if (!exportResult) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
downloadFile(exportResult.blob, exportResult.fileName);
|
|
135
|
+
setExportResult(null);
|
|
136
|
+
};
|
|
137
|
+
const dismissExport = ()=>{
|
|
138
|
+
setExportResult(null);
|
|
139
|
+
};
|
|
140
|
+
return {
|
|
141
|
+
exportAuditLogs,
|
|
142
|
+
downloadExport,
|
|
143
|
+
dismissExport,
|
|
144
|
+
isExporting,
|
|
145
|
+
progress,
|
|
146
|
+
exportResult
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export { useExportAuditLogs };
|
|
151
|
+
//# sourceMappingURL=useExportAuditLogs.mjs.map
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useExportAuditLogs.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.ts"],"sourcesContent":["import * as React from 'react';\n\nimport { useIntl } from 'react-intl';\n\nimport { useNotification } from '../../../../../../../../admin/src/features/Notifications';\nimport {\n getFetchClient,\n isFetchError,\n type FetchResponse,\n} from '../../../../../../../../admin/src/utils/getFetchClient';\nimport {\n AUDIT_LOGS_EXPORT_CURSOR_DONE,\n AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER,\n AUDIT_LOGS_EXPORT_PART_ROWS,\n AUDIT_LOGS_EXPORT_PART_SIZE_HEADER,\n AUDIT_LOGS_EXPORT_TOKEN_HEADER,\n AUDIT_LOGS_EXPORT_UNTIL_HEADER,\n} from '../../../../../../../../shared/utils/audit-log-export';\n\nconst DEFAULT_FILE_NAME = 'audit-logs.csv';\n\ninterface ExportProgress {\n fetched: number;\n total: number;\n}\n\ninterface ExportResult {\n blob: Blob;\n fileName: string;\n}\n\nconst getFileName = (contentDisposition: string | null) => {\n const match = contentDisposition?.match(/filename=\"([^\"]+)\"/);\n\n return match?.[1] ?? DEFAULT_FILE_NAME;\n};\n\nconst downloadFile = (blob: Blob, fileName: string) => {\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n link.remove();\n\n // Revoking during a later tick to avoid aborting the download\n setTimeout(() => URL.revokeObjectURL(url), 60000);\n};\n\nconst useExportAuditLogs = () => {\n const [isExporting, setIsExporting] = React.useState(false);\n const [progress, setProgress] = React.useState<ExportProgress | null>(null);\n const [exportResult, setExportResult] = React.useState<ExportResult | null>(null);\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n\n const isExportingRef = React.useRef(false);\n\n const isMountedRef = React.useRef(true);\n React.useEffect(() => {\n isMountedRef.current = true;\n\n return () => {\n isMountedRef.current = false;\n };\n }, []);\n\n const exportAuditLogs = async (filters: unknown, totalEntries: number) => {\n if (isExportingRef.current) {\n return;\n }\n\n isExportingRef.current = true;\n setIsExporting(true);\n setExportResult(null);\n setProgress({ fetched: 0, total: totalEntries });\n\n const { get } = getFetchClient();\n\n let cursor: string | null = null;\n let until: string | null = null;\n let token: string | null = null;\n let fileName = DEFAULT_FILE_NAME;\n const parts: Blob[] = [];\n\n try {\n do {\n const { data, headers }: FetchResponse<Blob> = await get<Blob>('/admin/audit-logs/export', {\n params: {\n ...(filters ? { filters } : {}),\n ...(cursor ? { cursor } : {}),\n ...(until ? { until } : {}),\n ...(token ? { token } : {}),\n },\n responseType: 'blob',\n });\n\n if (!isMountedRef.current) {\n return;\n }\n\n const nextCursorHeader: string | null =\n headers?.get(AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER) ?? null;\n const untilHeader: string | null = headers?.get(AUDIT_LOGS_EXPORT_UNTIL_HEADER) ?? null;\n const tokenHeader: string | null = headers?.get(AUDIT_LOGS_EXPORT_TOKEN_HEADER) ?? null;\n\n if (!nextCursorHeader || !untilHeader || !tokenHeader) {\n throw new Error('The audit logs export part headers are missing');\n }\n\n cursor = nextCursorHeader === AUDIT_LOGS_EXPORT_CURSOR_DONE ? null : nextCursorHeader;\n until = untilHeader;\n token = tokenHeader;\n\n if (parts.length === 0) {\n fileName = getFileName(headers?.get('Content-Disposition') ?? null);\n }\n\n parts.push(data);\n\n const partRows =\n Number(headers?.get(AUDIT_LOGS_EXPORT_PART_SIZE_HEADER)) || AUDIT_LOGS_EXPORT_PART_ROWS;\n setProgress({\n fetched: Math.min(parts.length * partRows, totalEntries),\n total: totalEntries,\n });\n } while (cursor);\n\n setExportResult({ blob: new Blob(parts, { type: 'text/csv;charset=utf-8' }), fileName });\n } catch (error) {\n const message = () => {\n if (isFetchError(error) && error.status === 413) {\n return formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.error.tooLarge',\n defaultMessage: 'Table too large to export. Please add filters and try again.',\n });\n }\n\n if (isFetchError(error) && error.status === 403) {\n return formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.error.forbidden',\n defaultMessage: \"You don't have the permissions to export audit logs.\",\n });\n }\n\n return formatMessage({\n id: 'Settings.permissions.auditLogs.listview.export.error',\n defaultMessage: 'The export failed. Please try again.',\n });\n };\n\n toggleNotification({ type: 'danger', message: message() });\n } finally {\n isExportingRef.current = false;\n setIsExporting(false);\n setProgress(null);\n }\n };\n\n const downloadExport = () => {\n if (!exportResult) {\n return;\n }\n\n downloadFile(exportResult.blob, exportResult.fileName);\n setExportResult(null);\n };\n\n const dismissExport = () => {\n setExportResult(null);\n };\n\n return { exportAuditLogs, downloadExport, dismissExport, isExporting, progress, exportResult };\n};\n\nexport { useExportAuditLogs };\nexport type { ExportProgress, ExportResult };\n"],"names":["DEFAULT_FILE_NAME","getFileName","contentDisposition","match","downloadFile","blob","fileName","url","URL","createObjectURL","link","document","createElement","href","download","body","appendChild","click","remove","setTimeout","revokeObjectURL","useExportAuditLogs","isExporting","setIsExporting","React","useState","progress","setProgress","exportResult","setExportResult","toggleNotification","useNotification","formatMessage","useIntl","isExportingRef","useRef","isMountedRef","useEffect","current","exportAuditLogs","filters","totalEntries","fetched","total","get","getFetchClient","cursor","until","token","parts","data","headers","params","responseType","nextCursorHeader","AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER","untilHeader","AUDIT_LOGS_EXPORT_UNTIL_HEADER","tokenHeader","AUDIT_LOGS_EXPORT_TOKEN_HEADER","Error","AUDIT_LOGS_EXPORT_CURSOR_DONE","length","push","partRows","Number","AUDIT_LOGS_EXPORT_PART_SIZE_HEADER","AUDIT_LOGS_EXPORT_PART_ROWS","Math","min","Blob","type","error","message","isFetchError","status","id","defaultMessage","downloadExport","dismissExport"],"mappings":"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"}
|
|
@@ -28,7 +28,20 @@ const actionTypes = {
|
|
|
28
28
|
'role.delete': 'Delete role',
|
|
29
29
|
'permission.create': 'Create permission',
|
|
30
30
|
'permission.update': 'Update permission',
|
|
31
|
-
'permission.delete': 'Delete permission'
|
|
31
|
+
'permission.delete': 'Delete permission',
|
|
32
|
+
'release.create': 'Create release',
|
|
33
|
+
'release.update': 'Update release',
|
|
34
|
+
'release.delete': 'Delete release',
|
|
35
|
+
'release.trigger': 'Trigger release',
|
|
36
|
+
'release.entry.add': 'Add entry to release',
|
|
37
|
+
'release.entry.update': 'Change entry on release',
|
|
38
|
+
'release.entry.remove': 'Remove entry from release',
|
|
39
|
+
'release.settings.update': 'Update release settings',
|
|
40
|
+
'audit-log.export': 'Export audit logs',
|
|
41
|
+
'locale.create': 'Create locale',
|
|
42
|
+
'locale.update': 'Update locale',
|
|
43
|
+
'locale.delete': 'Delete locale',
|
|
44
|
+
'locale.default.update': 'Change default locale'
|
|
32
45
|
};
|
|
33
46
|
const getDefaultMessage = (value)=>{
|
|
34
47
|
return actionTypes[value] || value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActionTypesDefaultMessages.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":";;MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB;
|
|
1
|
+
{"version":3,"file":"getActionTypesDefaultMessages.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n 'release.create': 'Create release',\n 'release.update': 'Update release',\n 'release.delete': 'Delete release',\n 'release.trigger': 'Trigger release',\n 'release.entry.add': 'Add entry to release',\n 'release.entry.update': 'Change entry on release',\n 'release.entry.remove': 'Remove entry from release',\n 'release.settings.update': 'Update release settings',\n 'audit-log.export': 'Export audit logs',\n 'locale.create': 'Create locale',\n 'locale.update': 'Update locale',\n 'locale.delete': 'Delete locale',\n 'locale.default.update': 'Change default locale',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":";;MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,iBAAA,EAAmB,iBAAA;IACnB,mBAAA,EAAqB,sBAAA;IACrB,sBAAA,EAAwB,yBAAA;IACxB,sBAAA,EAAwB,2BAAA;IACxB,yBAAA,EAA2B,yBAAA;IAC3B,kBAAA,EAAoB,mBAAA;IACpB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,uBAAA,EAAyB;AAC3B;AAEO,MAAMC,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOF,WAAW,CAACE,KAAAA,CAAM,IAAIA,KAAAA;AAC/B;;;;;"}
|
|
@@ -26,7 +26,20 @@ const actionTypes = {
|
|
|
26
26
|
'role.delete': 'Delete role',
|
|
27
27
|
'permission.create': 'Create permission',
|
|
28
28
|
'permission.update': 'Update permission',
|
|
29
|
-
'permission.delete': 'Delete permission'
|
|
29
|
+
'permission.delete': 'Delete permission',
|
|
30
|
+
'release.create': 'Create release',
|
|
31
|
+
'release.update': 'Update release',
|
|
32
|
+
'release.delete': 'Delete release',
|
|
33
|
+
'release.trigger': 'Trigger release',
|
|
34
|
+
'release.entry.add': 'Add entry to release',
|
|
35
|
+
'release.entry.update': 'Change entry on release',
|
|
36
|
+
'release.entry.remove': 'Remove entry from release',
|
|
37
|
+
'release.settings.update': 'Update release settings',
|
|
38
|
+
'audit-log.export': 'Export audit logs',
|
|
39
|
+
'locale.create': 'Create locale',
|
|
40
|
+
'locale.update': 'Update locale',
|
|
41
|
+
'locale.delete': 'Delete locale',
|
|
42
|
+
'locale.default.update': 'Change default locale'
|
|
30
43
|
};
|
|
31
44
|
const getDefaultMessage = (value)=>{
|
|
32
45
|
return actionTypes[value] || value;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getActionTypesDefaultMessages.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":"MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB;
|
|
1
|
+
{"version":3,"file":"getActionTypesDefaultMessages.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.ts"],"sourcesContent":["export const actionTypes = {\n 'entry.create': 'Create entry{model, select, undefined {} other { ({model})}}',\n 'entry.update': 'Update entry{model, select, undefined {} other { ({model})}}',\n 'entry.delete': 'Delete entry{model, select, undefined {} other { ({model})}}',\n 'entry.publish': 'Publish entry{model, select, undefined {} other { ({model})}}',\n 'entry.unpublish': 'Unpublish entry{model, select, undefined {} other { ({model})}}',\n 'media.create': 'Create media',\n 'media.update': 'Update media',\n 'media.delete': 'Delete media',\n 'media-folder.create': 'Create media folder',\n 'media-folder.update': 'Update media folder',\n 'media-folder.delete': 'Delete media folder',\n 'user.create': 'Create user',\n 'user.update': 'Update user',\n 'user.delete': 'Delete user',\n 'admin.auth.success': 'Admin login',\n 'admin.logout': 'Admin logout',\n 'content-type.create': 'Create content type',\n 'content-type.update': 'Update content type',\n 'content-type.delete': 'Delete content type',\n 'component.create': 'Create component',\n 'component.update': 'Update component',\n 'component.delete': 'Delete component',\n 'role.create': 'Create role',\n 'role.update': 'Update role',\n 'role.delete': 'Delete role',\n 'permission.create': 'Create permission',\n 'permission.update': 'Update permission',\n 'permission.delete': 'Delete permission',\n 'release.create': 'Create release',\n 'release.update': 'Update release',\n 'release.delete': 'Delete release',\n 'release.trigger': 'Trigger release',\n 'release.entry.add': 'Add entry to release',\n 'release.entry.update': 'Change entry on release',\n 'release.entry.remove': 'Remove entry from release',\n 'release.settings.update': 'Update release settings',\n 'audit-log.export': 'Export audit logs',\n 'locale.create': 'Create locale',\n 'locale.update': 'Update locale',\n 'locale.delete': 'Delete locale',\n 'locale.default.update': 'Change default locale',\n};\n\nexport const getDefaultMessage = (value: keyof typeof actionTypes) => {\n return actionTypes[value] || value;\n};\n"],"names":["actionTypes","getDefaultMessage","value"],"mappings":"MAAaA,WAAAA,GAAc;IACzB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,cAAA,EAAgB,8DAAA;IAChB,eAAA,EAAiB,+DAAA;IACjB,iBAAA,EAAmB,iEAAA;IACnB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,oBAAA,EAAsB,aAAA;IACtB,cAAA,EAAgB,cAAA;IAChB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,qBAAA,EAAuB,qBAAA;IACvB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,kBAAA,EAAoB,kBAAA;IACpB,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,aAAA,EAAe,aAAA;IACf,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,mBAAA,EAAqB,mBAAA;IACrB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,iBAAA,EAAmB,iBAAA;IACnB,mBAAA,EAAqB,sBAAA;IACrB,sBAAA,EAAwB,yBAAA;IACxB,sBAAA,EAAwB,2BAAA;IACxB,yBAAA,EAA2B,yBAAA;IAC3B,kBAAA,EAAoB,mBAAA;IACpB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,eAAA,EAAiB,eAAA;IACjB,uBAAA,EAAyB;AAC3B;AAEO,MAAMC,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOF,WAAW,CAACE,KAAAA,CAAM,IAAIA,KAAAA;AAC/B;;;;"}
|
package/dist/admin/index.js
CHANGED
|
@@ -108,10 +108,13 @@ exports.useScopedPersistentState = usePersistentState.useScopedPersistentState;
|
|
|
108
108
|
exports.useAdminUsers = users$1.useAdminUsers;
|
|
109
109
|
exports.useGetCountDocumentsQuery = homepage.useGetCountDocumentsQuery;
|
|
110
110
|
exports.translatedErrors = translatedErrors.translatedErrors;
|
|
111
|
+
exports.ADMIN_REFRESH_LOCK = getFetchClient.ADMIN_REFRESH_LOCK;
|
|
111
112
|
exports.FetchError = getFetchClient.FetchError;
|
|
112
113
|
exports.attemptTokenRefresh = getFetchClient.attemptTokenRefresh;
|
|
113
114
|
exports.getFetchClient = getFetchClient.getFetchClient;
|
|
114
115
|
exports.isFetchError = getFetchClient.isFetchError;
|
|
116
|
+
exports.refreshAccessToken = getFetchClient.refreshAccessToken;
|
|
117
|
+
exports.resetSessionExpiredNotification = getFetchClient.resetSessionExpiredNotification;
|
|
115
118
|
exports.setOnSessionExpired = getFetchClient.setOnSessionExpired;
|
|
116
119
|
exports.setOnTokenUpdate = getFetchClient.setOnTokenUpdate;
|
|
117
120
|
exports.storeToken = getFetchClient.storeToken;
|
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
|
@@ -39,7 +39,7 @@ export { usePersistentState, usePersistentStateScope, useScopedPersistentState }
|
|
|
39
39
|
export { useAdminUsers } from './admin/src/services/users.mjs';
|
|
40
40
|
export { useGetCountDocumentsQuery } from './admin/src/services/homepage.mjs';
|
|
41
41
|
export { translatedErrors } from './admin/src/utils/translatedErrors.mjs';
|
|
42
|
-
export { FetchError, attemptTokenRefresh, getFetchClient, isFetchError, setOnSessionExpired, setOnTokenUpdate, storeToken, triggerSessionExpired } from './admin/src/utils/getFetchClient.mjs';
|
|
42
|
+
export { ADMIN_REFRESH_LOCK, FetchError, attemptTokenRefresh, getFetchClient, isFetchError, refreshAccessToken, resetSessionExpiredNotification, setOnSessionExpired, setOnTokenUpdate, storeToken, triggerSessionExpired } from './admin/src/utils/getFetchClient.mjs';
|
|
43
43
|
export { fetchBaseQuery, isBaseQueryError } from './admin/src/utils/baseQuery.mjs';
|
|
44
44
|
export { createRulesEngine } from './admin/src/utils/rulesEngine.mjs';
|
|
45
45
|
export { getDisplayName, getInitials, hashAdminUserEmail } from './admin/src/utils/users.mjs';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const AUDIT_LOGS_EXPORT_UNTIL_HEADER = 'X-Audit-Logs-Export-Until';
|
|
4
|
+
const AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER = 'X-Audit-Logs-Export-Next-Cursor';
|
|
5
|
+
const AUDIT_LOGS_EXPORT_PART_SIZE_HEADER = 'X-Audit-Logs-Export-Part-Size';
|
|
6
|
+
const AUDIT_LOGS_EXPORT_TOKEN_HEADER = 'X-Audit-Logs-Export-Token';
|
|
7
|
+
const AUDIT_LOGS_EXPORT_CURSOR_DONE = 'none';
|
|
8
|
+
const AUDIT_LOGS_EXPORT_PART_ROWS = 50000;
|
|
9
|
+
|
|
10
|
+
exports.AUDIT_LOGS_EXPORT_CURSOR_DONE = AUDIT_LOGS_EXPORT_CURSOR_DONE;
|
|
11
|
+
exports.AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER = AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER;
|
|
12
|
+
exports.AUDIT_LOGS_EXPORT_PART_ROWS = AUDIT_LOGS_EXPORT_PART_ROWS;
|
|
13
|
+
exports.AUDIT_LOGS_EXPORT_PART_SIZE_HEADER = AUDIT_LOGS_EXPORT_PART_SIZE_HEADER;
|
|
14
|
+
exports.AUDIT_LOGS_EXPORT_TOKEN_HEADER = AUDIT_LOGS_EXPORT_TOKEN_HEADER;
|
|
15
|
+
exports.AUDIT_LOGS_EXPORT_UNTIL_HEADER = AUDIT_LOGS_EXPORT_UNTIL_HEADER;
|
|
16
|
+
//# sourceMappingURL=audit-log-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-export.js","sources":["../../../../shared/utils/audit-log-export.ts"],"sourcesContent":["export const AUDIT_LOG_EXPORT_EVENT = 'audit-log.export';\n\nexport const AUDIT_LOGS_EXPORT_UNTIL_HEADER = 'X-Audit-Logs-Export-Until';\nexport const AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER = 'X-Audit-Logs-Export-Next-Cursor';\nexport const AUDIT_LOGS_EXPORT_PART_SIZE_HEADER = 'X-Audit-Logs-Export-Part-Size';\nexport const AUDIT_LOGS_EXPORT_TOKEN_HEADER = 'X-Audit-Logs-Export-Token';\nexport const AUDIT_LOGS_EXPORT_CURSOR_DONE = 'none';\nexport const AUDIT_LOGS_EXPORT_PART_ROWS = 50000;\nexport const AUDIT_LOGS_EXPORT_PART_MAX_ROWS = 100000;\nexport const AUDIT_LOGS_EXPORT_DEFAULT_MAX_ROWS = 1_000_000;\n"],"names":["AUDIT_LOGS_EXPORT_UNTIL_HEADER","AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER","AUDIT_LOGS_EXPORT_PART_SIZE_HEADER","AUDIT_LOGS_EXPORT_TOKEN_HEADER","AUDIT_LOGS_EXPORT_CURSOR_DONE","AUDIT_LOGS_EXPORT_PART_ROWS"],"mappings":";;AAEO,MAAMA,iCAAiC;AACvC,MAAMC,uCAAuC;AAC7C,MAAMC,qCAAqC;AAC3C,MAAMC,iCAAiC;AACvC,MAAMC,gCAAgC;AACtC,MAAMC,8BAA8B;;;;;;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const AUDIT_LOGS_EXPORT_UNTIL_HEADER = 'X-Audit-Logs-Export-Until';
|
|
2
|
+
const AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER = 'X-Audit-Logs-Export-Next-Cursor';
|
|
3
|
+
const AUDIT_LOGS_EXPORT_PART_SIZE_HEADER = 'X-Audit-Logs-Export-Part-Size';
|
|
4
|
+
const AUDIT_LOGS_EXPORT_TOKEN_HEADER = 'X-Audit-Logs-Export-Token';
|
|
5
|
+
const AUDIT_LOGS_EXPORT_CURSOR_DONE = 'none';
|
|
6
|
+
const AUDIT_LOGS_EXPORT_PART_ROWS = 50000;
|
|
7
|
+
|
|
8
|
+
export { AUDIT_LOGS_EXPORT_CURSOR_DONE, AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER, AUDIT_LOGS_EXPORT_PART_ROWS, AUDIT_LOGS_EXPORT_PART_SIZE_HEADER, AUDIT_LOGS_EXPORT_TOKEN_HEADER, AUDIT_LOGS_EXPORT_UNTIL_HEADER };
|
|
9
|
+
//# sourceMappingURL=audit-log-export.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-log-export.mjs","sources":["../../../../shared/utils/audit-log-export.ts"],"sourcesContent":["export const AUDIT_LOG_EXPORT_EVENT = 'audit-log.export';\n\nexport const AUDIT_LOGS_EXPORT_UNTIL_HEADER = 'X-Audit-Logs-Export-Until';\nexport const AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER = 'X-Audit-Logs-Export-Next-Cursor';\nexport const AUDIT_LOGS_EXPORT_PART_SIZE_HEADER = 'X-Audit-Logs-Export-Part-Size';\nexport const AUDIT_LOGS_EXPORT_TOKEN_HEADER = 'X-Audit-Logs-Export-Token';\nexport const AUDIT_LOGS_EXPORT_CURSOR_DONE = 'none';\nexport const AUDIT_LOGS_EXPORT_PART_ROWS = 50000;\nexport const AUDIT_LOGS_EXPORT_PART_MAX_ROWS = 100000;\nexport const AUDIT_LOGS_EXPORT_DEFAULT_MAX_ROWS = 1_000_000;\n"],"names":["AUDIT_LOGS_EXPORT_UNTIL_HEADER","AUDIT_LOGS_EXPORT_NEXT_CURSOR_HEADER","AUDIT_LOGS_EXPORT_PART_SIZE_HEADER","AUDIT_LOGS_EXPORT_TOKEN_HEADER","AUDIT_LOGS_EXPORT_CURSOR_DONE","AUDIT_LOGS_EXPORT_PART_ROWS"],"mappings":"AAEO,MAAMA,iCAAiC;AACvC,MAAMC,uCAAuC;AAC7C,MAAMC,qCAAqC;AAC3C,MAAMC,iCAAiC;AACvC,MAAMC,gCAAgC;AACtC,MAAMC,8BAA8B;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface DismissibleBannerProps {
|
|
2
|
+
message: React.ReactNode;
|
|
3
|
+
action?: React.ReactNode;
|
|
4
|
+
closeLabel: string;
|
|
5
|
+
onDismiss: () => void;
|
|
6
|
+
}
|
|
7
|
+
declare const DismissibleBanner: ({ message, action, closeLabel, onDismiss }: DismissibleBannerProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export { DismissibleBanner };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registers whether the current surface has unsaved edits so session-expiry
|
|
3
|
+
* logout can warn before clearing auth state (which unmounts forms).
|
|
4
|
+
*/
|
|
5
|
+
declare const useRegisterUnsavedChanges: (id: string, enabled: boolean) => void;
|
|
6
|
+
export { useRegisterUnsavedChanges };
|