@strapi/admin 5.55.0 → 5.56.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/UpsellBanner.js +9 -16
- package/dist/admin/admin/src/components/UpsellBanner.js.map +1 -1
- package/dist/admin/admin/src/components/UpsellBanner.mjs +11 -18
- package/dist/admin/admin/src/components/UpsellBanner.mjs.map +1 -1
- package/dist/admin/admin/src/render.js +4 -69
- package/dist/admin/admin/src/render.js.map +1 -1
- package/dist/admin/admin/src/render.mjs +4 -69
- package/dist/admin/admin/src/render.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +10 -0
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +10 -0
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/utils/browserStrapi.js +93 -0
- package/dist/admin/admin/src/utils/browserStrapi.js.map +1 -0
- package/dist/admin/admin/src/utils/browserStrapi.mjs +91 -0
- package/dist/admin/admin/src/utils/browserStrapi.mjs.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js +2 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs +2 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.js +11 -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 +11 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.js +64 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.js.map +1 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.mjs +60 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.mjs.map +1 -0
- package/dist/admin/ee/admin/src/services/auditLogs.js +2 -1
- package/dist/admin/ee/admin/src/services/auditLogs.js.map +1 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs +2 -1
- package/dist/admin/ee/admin/src/services/auditLogs.mjs.map +1 -1
- package/dist/admin/src/components/SubNav.d.ts +2 -2
- package/dist/admin/src/utils/browserStrapi.d.ts +11 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.d.ts +14 -0
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts +10 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/admin.d.ts +2 -28
- package/dist/ee/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/ee/server/src/controllers/index.d.ts +1 -28
- package/dist/ee/server/src/controllers/index.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts +2 -29
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/ee/server/src/services/auth.d.ts +1 -1
- package/dist/ee/server/src/services/auth.d.ts.map +1 -1
- package/dist/ee/server/src/services/index.d.ts +1 -1
- package/dist/ee/server/src/services/user.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +37 -21
- 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 +37 -21
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +5 -3
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +5 -3
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +4 -0
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +4 -0
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/auth.js +1 -6
- package/dist/server/ee/server/src/services/auth.js.map +1 -1
- package/dist/server/ee/server/src/services/auth.mjs +2 -7
- package/dist/server/ee/server/src/services/auth.mjs.map +1 -1
- package/dist/server/ee/server/src/services/user.js +36 -4
- package/dist/server/ee/server/src/services/user.js.map +1 -1
- package/dist/server/ee/server/src/services/user.mjs +36 -4
- package/dist/server/ee/server/src/services/user.mjs.map +1 -1
- package/dist/server/server/src/audit-logs/admin-users.js +169 -0
- package/dist/server/server/src/audit-logs/admin-users.js.map +1 -0
- package/dist/server/server/src/audit-logs/admin-users.mjs +157 -0
- package/dist/server/server/src/audit-logs/admin-users.mjs.map +1 -0
- package/dist/server/server/src/audit-logs/webhooks.js +106 -0
- package/dist/server/server/src/audit-logs/webhooks.js.map +1 -0
- package/dist/server/server/src/audit-logs/webhooks.mjs +100 -0
- package/dist/server/server/src/audit-logs/webhooks.mjs.map +1 -0
- package/dist/server/server/src/controllers/admin.js +1 -0
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +1 -0
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/controllers/authentication.js +8 -1
- package/dist/server/server/src/controllers/authentication.js.map +1 -1
- package/dist/server/server/src/controllers/authentication.mjs +8 -1
- package/dist/server/server/src/controllers/authentication.mjs.map +1 -1
- package/dist/server/server/src/controllers/webhooks.js +26 -0
- package/dist/server/server/src/controllers/webhooks.js.map +1 -1
- package/dist/server/server/src/controllers/webhooks.mjs +27 -1
- package/dist/server/server/src/controllers/webhooks.mjs.map +1 -1
- package/dist/server/server/src/services/auth.js +27 -6
- package/dist/server/server/src/services/auth.js.map +1 -1
- package/dist/server/server/src/services/auth.mjs +28 -8
- package/dist/server/server/src/services/auth.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +48 -9
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +49 -10
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/src/audit-logs/admin-users.d.ts +119 -0
- package/dist/server/src/audit-logs/admin-users.d.ts.map +1 -0
- package/dist/server/src/audit-logs/webhooks.d.ts +59 -0
- package/dist/server/src/audit-logs/webhooks.d.ts.map +1 -0
- package/dist/server/src/controllers/admin.d.ts +2 -11
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/authentication.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -10
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/controllers/webhooks.d.ts.map +1 -1
- package/dist/server/src/domain/user.d.ts +2 -2
- package/dist/server/src/index.d.ts +1 -10
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/auth.d.ts +6 -1
- package/dist/server/src/services/auth.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/user.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +36 -2
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/package.json +11 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserStrapi.js","sources":["../../../../../admin/src/utils/browserStrapi.ts"],"sourcesContent":["import { getProjectType } from './getProjectType';\nimport { createAbsoluteUrl } from './urls';\n\nimport type { GetProjectType } from '../../../shared/contracts/admin';\nimport type { Modules } from '@strapi/types';\n\n/**\n * Builds the `window.strapi` object: Community defaults, then the license response.\n * Returned rather than assigned so the caller publishes it to `window` exactly once.\n *\n * Nothing here may read `window.strapi` — it does not exist yet, and the `#strapi`\n * mount node shadows it as a named window property, so reads silently yield the\n * element instead of throwing.\n */\nconst createBrowserStrapi = async (\n features?: Modules.Features.FeaturesService['config']\n): Promise<Window['strapi']> => {\n const browserStrapi: Window['strapi'] = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),\n isEE: false,\n isTrial: false,\n isTrialLicense: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',\n future: {\n isEnabled: (name: keyof NonNullable<Modules.Features.FeaturesConfig['future']>) => {\n return features?.future?.[name] === true;\n },\n },\n featureFlags: {\n isEnabled: (name: keyof Omit<Modules.Features.FeaturesConfig, 'future'>) => {\n return features?.[name] === true;\n },\n },\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n docLinks: true,\n },\n ai: {\n enabled: false,\n },\n };\n\n try {\n /**\n * Plain `fetch` rather than `getFetchClient`: the fetch client resolves its\n * backend from `window.strapi`, which does not exist yet. The route is public,\n * so it needs neither the auth header nor the token refresh the client adds.\n */\n const response = await fetch(`${browserStrapi.backendURL}/admin/project-type`, {\n headers: { Accept: 'application/json' },\n });\n\n if (!response.ok) {\n throw new Error(`[@strapi/admin]: /admin/project-type responded with ${response.status}`);\n }\n\n const {\n data: { isEE, isTrial, features: licensedFeatures, flags, ai, planPriceId },\n }: GetProjectType.Response = await response.json();\n\n // Runtime defense: the payload is only typed by convention, not validated.\n const trial = isTrial ?? false;\n\n browserStrapi.isEE = isEE;\n browserStrapi.isTrial = trial;\n browserStrapi.isTrialLicense = trial;\n browserStrapi.flags = flags;\n browserStrapi.features = {\n ...browserStrapi.features,\n isEnabled: (featureName: string | undefined) =>\n licensedFeatures.some((feature) => feature.name === featureName),\n };\n browserStrapi.projectType = getProjectType({ isEE, planPriceId });\n browserStrapi.ai = ai;\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n return browserStrapi;\n};\n\nexport { createBrowserStrapi };\n"],"names":["createBrowserStrapi","features","browserStrapi","backendURL","createAbsoluteUrl","process","env","STRAPI_ADMIN_BACKEND_URL","isEE","isTrial","isTrialLicense","telemetryDisabled","STRAPI_TELEMETRY_DISABLED","future","isEnabled","name","featureFlags","SSO","AUDIT_LOGS","REVIEW_WORKFLOWS","projectType","flags","nps","promoteEE","docLinks","ai","enabled","response","fetch","headers","Accept","ok","Error","status","data","licensedFeatures","planPriceId","json","trial","featureName","some","feature","getProjectType","err","console","error"],"mappings":";;;;;AAMA;;;;;;;IAQA,MAAMA,sBAAsB,OAC1BC,QAAAA,GAAAA;AAEA,IAAA,MAAMC,aAAAA,GAAkC;AACtC;;;;;AAKC,QACDC,UAAAA,EAAYC,sBAAAA,CAAkBC,OAAAA,CAAQC,GAAG,CAACC,wBAAwB,CAAA;QAClEC,IAAAA,EAAM,KAAA;QACNC,OAAAA,EAAS,KAAA;QACTC,cAAAA,EAAgB,KAAA;AAChBC,QAAAA,iBAAAA,EAAmBN,OAAAA,CAAQC,GAAG,CAACM,yBAAyB,KAAK,MAAA;QAC7DC,MAAAA,EAAQ;AACNC,YAAAA,SAAAA,EAAW,CAACC,IAAAA,GAAAA;AACV,gBAAA,OAAOd,QAAAA,EAAUY,MAAAA,GAASE,IAAAA,CAAK,KAAK,IAAA;AACtC,YAAA;AACF,SAAA;QACAC,YAAAA,EAAc;AACZF,YAAAA,SAAAA,EAAW,CAACC,IAAAA,GAAAA;gBACV,OAAOd,QAAAA,GAAWc,IAAAA,CAAK,KAAK,IAAA;AAC9B,YAAA;AACF,SAAA;QACAd,QAAAA,EAAU;YACRgB,GAAAA,EAAK,KAAA;YACLC,UAAAA,EAAY,YAAA;YACZC,gBAAAA,EAAkB,kBAAA;AAClB;;;AAGC,UACDL,WAAW,IAAM;AACnB,SAAA;QACAM,WAAAA,EAAa,WAAA;QACbC,KAAAA,EAAO;YACLC,GAAAA,EAAK,KAAA;YACLC,SAAAA,EAAW,IAAA;YACXC,QAAAA,EAAU;AACZ,SAAA;QACAC,EAAAA,EAAI;YACFC,OAAAA,EAAS;AACX;AACF,KAAA;IAEA,IAAI;AACF;;;;QAKA,MAAMC,QAAAA,GAAW,MAAMC,KAAAA,CAAM,CAAA,EAAG1B,cAAcC,UAAU,CAAC,mBAAmB,CAAC,EAAE;YAC7E0B,OAAAA,EAAS;gBAAEC,MAAAA,EAAQ;AAAmB;AACxC,SAAA,CAAA;QAEA,IAAI,CAACH,QAAAA,CAASI,EAAE,EAAE;AAChB,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,oDAAoD,EAAEL,QAAAA,CAASM,MAAM,CAAA,CAAE,CAAA;AAC1F,QAAA;QAEA,MAAM,EACJC,MAAM,EAAE1B,IAAI,EAAEC,OAAO,EAAER,UAAUkC,gBAAgB,EAAEd,KAAK,EAAEI,EAAE,EAAEW,WAAW,EAAE,EAC5E,GAA4B,MAAMT,SAASU,IAAI,EAAA;;AAGhD,QAAA,MAAMC,QAAQ7B,OAAAA,IAAW,KAAA;AAEzBP,QAAAA,aAAAA,CAAcM,IAAI,GAAGA,IAAAA;AACrBN,QAAAA,aAAAA,CAAcO,OAAO,GAAG6B,KAAAA;AACxBpC,QAAAA,aAAAA,CAAcQ,cAAc,GAAG4B,KAAAA;AAC/BpC,QAAAA,aAAAA,CAAcmB,KAAK,GAAGA,KAAAA;AACtBnB,QAAAA,aAAAA,CAAcD,QAAQ,GAAG;AACvB,YAAA,GAAGC,cAAcD,QAAQ;YACzBa,SAAAA,EAAW,CAACyB,cACVJ,gBAAAA,CAAiBK,IAAI,CAAC,CAACC,OAAAA,GAAYA,OAAAA,CAAQ1B,IAAI,KAAKwB,WAAAA;AACxD,SAAA;QACArC,aAAAA,CAAckB,WAAW,GAAGsB,6BAAAA,CAAe;AAAElC,YAAAA,IAAAA;AAAM4B,YAAAA;AAAY,SAAA,CAAA;AAC/DlC,QAAAA,aAAAA,CAAcuB,EAAE,GAAGA,EAAAA;AACrB,IAAA,CAAA,CAAE,OAAOkB,GAAAA,EAAK;AACZ;;;QAIAC,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;AAChB,IAAA;IAEA,OAAOzC,aAAAA;AACT;;;;"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { getProjectType } from './getProjectType.mjs';
|
|
2
|
+
import { createAbsoluteUrl } from './urls.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Builds the `window.strapi` object: Community defaults, then the license response.
|
|
6
|
+
* Returned rather than assigned so the caller publishes it to `window` exactly once.
|
|
7
|
+
*
|
|
8
|
+
* Nothing here may read `window.strapi` — it does not exist yet, and the `#strapi`
|
|
9
|
+
* mount node shadows it as a named window property, so reads silently yield the
|
|
10
|
+
* element instead of throwing.
|
|
11
|
+
*/ const createBrowserStrapi = async (features)=>{
|
|
12
|
+
const browserStrapi = {
|
|
13
|
+
/**
|
|
14
|
+
* This ENV variable is passed from the strapi instance, by default no url is set
|
|
15
|
+
* in the config and therefore the instance returns you an empty string so URLs are relative.
|
|
16
|
+
*
|
|
17
|
+
* To ensure that the backendURL is always set, we use the window.location.origin as a fallback.
|
|
18
|
+
*/ backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),
|
|
19
|
+
isEE: false,
|
|
20
|
+
isTrial: false,
|
|
21
|
+
isTrialLicense: false,
|
|
22
|
+
telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',
|
|
23
|
+
future: {
|
|
24
|
+
isEnabled: (name)=>{
|
|
25
|
+
return features?.future?.[name] === true;
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
featureFlags: {
|
|
29
|
+
isEnabled: (name)=>{
|
|
30
|
+
return features?.[name] === true;
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
features: {
|
|
34
|
+
SSO: 'sso',
|
|
35
|
+
AUDIT_LOGS: 'audit-logs',
|
|
36
|
+
REVIEW_WORKFLOWS: 'review-workflows',
|
|
37
|
+
/**
|
|
38
|
+
* If we don't get the license then we know it's not EE
|
|
39
|
+
* so no feature is enabled.
|
|
40
|
+
*/ isEnabled: ()=>false
|
|
41
|
+
},
|
|
42
|
+
projectType: 'Community',
|
|
43
|
+
flags: {
|
|
44
|
+
nps: false,
|
|
45
|
+
promoteEE: true,
|
|
46
|
+
docLinks: true
|
|
47
|
+
},
|
|
48
|
+
ai: {
|
|
49
|
+
enabled: false
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
try {
|
|
53
|
+
/**
|
|
54
|
+
* Plain `fetch` rather than `getFetchClient`: the fetch client resolves its
|
|
55
|
+
* backend from `window.strapi`, which does not exist yet. The route is public,
|
|
56
|
+
* so it needs neither the auth header nor the token refresh the client adds.
|
|
57
|
+
*/ const response = await fetch(`${browserStrapi.backendURL}/admin/project-type`, {
|
|
58
|
+
headers: {
|
|
59
|
+
Accept: 'application/json'
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
if (!response.ok) {
|
|
63
|
+
throw new Error(`[@strapi/admin]: /admin/project-type responded with ${response.status}`);
|
|
64
|
+
}
|
|
65
|
+
const { data: { isEE, isTrial, features: licensedFeatures, flags, ai, planPriceId } } = await response.json();
|
|
66
|
+
// Runtime defense: the payload is only typed by convention, not validated.
|
|
67
|
+
const trial = isTrial ?? false;
|
|
68
|
+
browserStrapi.isEE = isEE;
|
|
69
|
+
browserStrapi.isTrial = trial;
|
|
70
|
+
browserStrapi.isTrialLicense = trial;
|
|
71
|
+
browserStrapi.flags = flags;
|
|
72
|
+
browserStrapi.features = {
|
|
73
|
+
...browserStrapi.features,
|
|
74
|
+
isEnabled: (featureName)=>licensedFeatures.some((feature)=>feature.name === featureName)
|
|
75
|
+
};
|
|
76
|
+
browserStrapi.projectType = getProjectType({
|
|
77
|
+
isEE,
|
|
78
|
+
planPriceId
|
|
79
|
+
});
|
|
80
|
+
browserStrapi.ai = ai;
|
|
81
|
+
} catch (err) {
|
|
82
|
+
/**
|
|
83
|
+
* If this fails, we simply don't activate any EE features.
|
|
84
|
+
* Should we warn clearer in the UI?
|
|
85
|
+
*/ console.error(err);
|
|
86
|
+
}
|
|
87
|
+
return browserStrapi;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export { createBrowserStrapi };
|
|
91
|
+
//# sourceMappingURL=browserStrapi.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserStrapi.mjs","sources":["../../../../../admin/src/utils/browserStrapi.ts"],"sourcesContent":["import { getProjectType } from './getProjectType';\nimport { createAbsoluteUrl } from './urls';\n\nimport type { GetProjectType } from '../../../shared/contracts/admin';\nimport type { Modules } from '@strapi/types';\n\n/**\n * Builds the `window.strapi` object: Community defaults, then the license response.\n * Returned rather than assigned so the caller publishes it to `window` exactly once.\n *\n * Nothing here may read `window.strapi` — it does not exist yet, and the `#strapi`\n * mount node shadows it as a named window property, so reads silently yield the\n * element instead of throwing.\n */\nconst createBrowserStrapi = async (\n features?: Modules.Features.FeaturesService['config']\n): Promise<Window['strapi']> => {\n const browserStrapi: Window['strapi'] = {\n /**\n * This ENV variable is passed from the strapi instance, by default no url is set\n * in the config and therefore the instance returns you an empty string so URLs are relative.\n *\n * To ensure that the backendURL is always set, we use the window.location.origin as a fallback.\n */\n backendURL: createAbsoluteUrl(process.env.STRAPI_ADMIN_BACKEND_URL),\n isEE: false,\n isTrial: false,\n isTrialLicense: false,\n telemetryDisabled: process.env.STRAPI_TELEMETRY_DISABLED === 'true',\n future: {\n isEnabled: (name: keyof NonNullable<Modules.Features.FeaturesConfig['future']>) => {\n return features?.future?.[name] === true;\n },\n },\n featureFlags: {\n isEnabled: (name: keyof Omit<Modules.Features.FeaturesConfig, 'future'>) => {\n return features?.[name] === true;\n },\n },\n features: {\n SSO: 'sso',\n AUDIT_LOGS: 'audit-logs',\n REVIEW_WORKFLOWS: 'review-workflows',\n /**\n * If we don't get the license then we know it's not EE\n * so no feature is enabled.\n */\n isEnabled: () => false,\n },\n projectType: 'Community',\n flags: {\n nps: false,\n promoteEE: true,\n docLinks: true,\n },\n ai: {\n enabled: false,\n },\n };\n\n try {\n /**\n * Plain `fetch` rather than `getFetchClient`: the fetch client resolves its\n * backend from `window.strapi`, which does not exist yet. The route is public,\n * so it needs neither the auth header nor the token refresh the client adds.\n */\n const response = await fetch(`${browserStrapi.backendURL}/admin/project-type`, {\n headers: { Accept: 'application/json' },\n });\n\n if (!response.ok) {\n throw new Error(`[@strapi/admin]: /admin/project-type responded with ${response.status}`);\n }\n\n const {\n data: { isEE, isTrial, features: licensedFeatures, flags, ai, planPriceId },\n }: GetProjectType.Response = await response.json();\n\n // Runtime defense: the payload is only typed by convention, not validated.\n const trial = isTrial ?? false;\n\n browserStrapi.isEE = isEE;\n browserStrapi.isTrial = trial;\n browserStrapi.isTrialLicense = trial;\n browserStrapi.flags = flags;\n browserStrapi.features = {\n ...browserStrapi.features,\n isEnabled: (featureName: string | undefined) =>\n licensedFeatures.some((feature) => feature.name === featureName),\n };\n browserStrapi.projectType = getProjectType({ isEE, planPriceId });\n browserStrapi.ai = ai;\n } catch (err) {\n /**\n * If this fails, we simply don't activate any EE features.\n * Should we warn clearer in the UI?\n */\n console.error(err);\n }\n\n return browserStrapi;\n};\n\nexport { createBrowserStrapi };\n"],"names":["createBrowserStrapi","features","browserStrapi","backendURL","createAbsoluteUrl","process","env","STRAPI_ADMIN_BACKEND_URL","isEE","isTrial","isTrialLicense","telemetryDisabled","STRAPI_TELEMETRY_DISABLED","future","isEnabled","name","featureFlags","SSO","AUDIT_LOGS","REVIEW_WORKFLOWS","projectType","flags","nps","promoteEE","docLinks","ai","enabled","response","fetch","headers","Accept","ok","Error","status","data","licensedFeatures","planPriceId","json","trial","featureName","some","feature","getProjectType","err","console","error"],"mappings":";;;AAMA;;;;;;;IAQA,MAAMA,sBAAsB,OAC1BC,QAAAA,GAAAA;AAEA,IAAA,MAAMC,aAAAA,GAAkC;AACtC;;;;;AAKC,QACDC,UAAAA,EAAYC,iBAAAA,CAAkBC,OAAAA,CAAQC,GAAG,CAACC,wBAAwB,CAAA;QAClEC,IAAAA,EAAM,KAAA;QACNC,OAAAA,EAAS,KAAA;QACTC,cAAAA,EAAgB,KAAA;AAChBC,QAAAA,iBAAAA,EAAmBN,OAAAA,CAAQC,GAAG,CAACM,yBAAyB,KAAK,MAAA;QAC7DC,MAAAA,EAAQ;AACNC,YAAAA,SAAAA,EAAW,CAACC,IAAAA,GAAAA;AACV,gBAAA,OAAOd,QAAAA,EAAUY,MAAAA,GAASE,IAAAA,CAAK,KAAK,IAAA;AACtC,YAAA;AACF,SAAA;QACAC,YAAAA,EAAc;AACZF,YAAAA,SAAAA,EAAW,CAACC,IAAAA,GAAAA;gBACV,OAAOd,QAAAA,GAAWc,IAAAA,CAAK,KAAK,IAAA;AAC9B,YAAA;AACF,SAAA;QACAd,QAAAA,EAAU;YACRgB,GAAAA,EAAK,KAAA;YACLC,UAAAA,EAAY,YAAA;YACZC,gBAAAA,EAAkB,kBAAA;AAClB;;;AAGC,UACDL,WAAW,IAAM;AACnB,SAAA;QACAM,WAAAA,EAAa,WAAA;QACbC,KAAAA,EAAO;YACLC,GAAAA,EAAK,KAAA;YACLC,SAAAA,EAAW,IAAA;YACXC,QAAAA,EAAU;AACZ,SAAA;QACAC,EAAAA,EAAI;YACFC,OAAAA,EAAS;AACX;AACF,KAAA;IAEA,IAAI;AACF;;;;QAKA,MAAMC,QAAAA,GAAW,MAAMC,KAAAA,CAAM,CAAA,EAAG1B,cAAcC,UAAU,CAAC,mBAAmB,CAAC,EAAE;YAC7E0B,OAAAA,EAAS;gBAAEC,MAAAA,EAAQ;AAAmB;AACxC,SAAA,CAAA;QAEA,IAAI,CAACH,QAAAA,CAASI,EAAE,EAAE;AAChB,YAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,oDAAoD,EAAEL,QAAAA,CAASM,MAAM,CAAA,CAAE,CAAA;AAC1F,QAAA;QAEA,MAAM,EACJC,MAAM,EAAE1B,IAAI,EAAEC,OAAO,EAAER,UAAUkC,gBAAgB,EAAEd,KAAK,EAAEI,EAAE,EAAEW,WAAW,EAAE,EAC5E,GAA4B,MAAMT,SAASU,IAAI,EAAA;;AAGhD,QAAA,MAAMC,QAAQ7B,OAAAA,IAAW,KAAA;AAEzBP,QAAAA,aAAAA,CAAcM,IAAI,GAAGA,IAAAA;AACrBN,QAAAA,aAAAA,CAAcO,OAAO,GAAG6B,KAAAA;AACxBpC,QAAAA,aAAAA,CAAcQ,cAAc,GAAG4B,KAAAA;AAC/BpC,QAAAA,aAAAA,CAAcmB,KAAK,GAAGA,KAAAA;AACtBnB,QAAAA,aAAAA,CAAcD,QAAQ,GAAG;AACvB,YAAA,GAAGC,cAAcD,QAAQ;YACzBa,SAAAA,EAAW,CAACyB,cACVJ,gBAAAA,CAAiBK,IAAI,CAAC,CAACC,OAAAA,GAAYA,OAAAA,CAAQ1B,IAAI,KAAKwB,WAAAA;AACxD,SAAA;QACArC,aAAAA,CAAckB,WAAW,GAAGsB,cAAAA,CAAe;AAAElC,YAAAA,IAAAA;AAAM4B,YAAAA;AAAY,SAAA,CAAA;AAC/DlC,QAAAA,aAAAA,CAAcuB,EAAE,GAAGA,EAAAA;AACrB,IAAA,CAAA,CAAE,OAAOkB,GAAAA,EAAK;AACZ;;;QAIAC,OAAAA,CAAQC,KAAK,CAACF,GAAAA,CAAAA;AAChB,IAAA;IAEA,OAAOzC,aAAAA;AACT;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js
CHANGED
|
@@ -5,6 +5,7 @@ var reactIntl = require('react-intl');
|
|
|
5
5
|
var Notifications = require('../../../../../../../../admin/src/features/Notifications.js');
|
|
6
6
|
var getFetchClient = require('../../../../../../../../admin/src/utils/getFetchClient.js');
|
|
7
7
|
var auditLogExport = require('../../../../../../../../shared/utils/audit-log-export.js');
|
|
8
|
+
var legacyActions = require('../utils/legacyActions.js');
|
|
8
9
|
|
|
9
10
|
function _interopNamespace(e) {
|
|
10
11
|
if (e && e.__esModule) return e;
|
|
@@ -78,7 +79,7 @@ const useExportAuditLogs = ()=>{
|
|
|
78
79
|
const { data, headers } = await get('/admin/audit-logs/export', {
|
|
79
80
|
params: {
|
|
80
81
|
...filters ? {
|
|
81
|
-
filters
|
|
82
|
+
filters: legacyActions.expandLegacyActionFilters(filters)
|
|
82
83
|
} : {},
|
|
83
84
|
...cursor ? {
|
|
84
85
|
cursor
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.js.map
CHANGED
|
@@ -1 +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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"}
|
|
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';\nimport { expandLegacyActionFilters } from '../utils/legacyActions';\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: expandLegacyActionFilters(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","expandLegacyActionFilters","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
CHANGED
|
@@ -3,6 +3,7 @@ import { useIntl } from 'react-intl';
|
|
|
3
3
|
import { useNotification } from '../../../../../../../../admin/src/features/Notifications.mjs';
|
|
4
4
|
import { getFetchClient, isFetchError } from '../../../../../../../../admin/src/utils/getFetchClient.mjs';
|
|
5
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
|
+
import { expandLegacyActionFilters } from '../utils/legacyActions.mjs';
|
|
6
7
|
|
|
7
8
|
const DEFAULT_FILE_NAME = 'audit-logs.csv';
|
|
8
9
|
const getFileName = (contentDisposition)=>{
|
|
@@ -56,7 +57,7 @@ const useExportAuditLogs = ()=>{
|
|
|
56
57
|
const { data, headers } = await get('/admin/audit-logs/export', {
|
|
57
58
|
params: {
|
|
58
59
|
...filters ? {
|
|
59
|
-
filters
|
|
60
|
+
filters: expandLegacyActionFilters(filters)
|
|
60
61
|
} : {},
|
|
61
62
|
...cursor ? {
|
|
62
63
|
cursor
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/hooks/useExportAuditLogs.mjs.map
CHANGED
|
@@ -1 +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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"}
|
|
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';\nimport { expandLegacyActionFilters } from '../utils/legacyActions';\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: expandLegacyActionFilters(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","expandLegacyActionFilters","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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"}
|
|
@@ -45,7 +45,17 @@ const actionTypes = {
|
|
|
45
45
|
'token.create': 'Create token',
|
|
46
46
|
'token.update': 'Update token',
|
|
47
47
|
'token.delete': 'Delete token',
|
|
48
|
-
'token.regenerate': 'Regenerate token'
|
|
48
|
+
'token.regenerate': 'Regenerate token',
|
|
49
|
+
'admin-user.create': 'Create user',
|
|
50
|
+
'admin-user.update': 'Update user',
|
|
51
|
+
'admin-user.delete': 'Delete user',
|
|
52
|
+
'admin-user.invite.accept': 'Accept invitation',
|
|
53
|
+
'admin-user.password-reset.create': 'Request password reset',
|
|
54
|
+
'admin-user.password-reset.confirm': 'Reset password',
|
|
55
|
+
'admin-user.password.update': 'Update password',
|
|
56
|
+
'webhook.create': 'Create webhook',
|
|
57
|
+
'webhook.update': 'Update webhook',
|
|
58
|
+
'webhook.delete': 'Delete webhook'
|
|
49
59
|
};
|
|
50
60
|
const getDefaultMessage = (value)=>{
|
|
51
61
|
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 '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 'token.create': 'Create token',\n 'token.update': 'Update token',\n 'token.delete': 'Delete token',\n 'token.regenerate': 'Regenerate token',\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,uBAAA;IACzB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,kBAAA,EAAoB;
|
|
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 'token.create': 'Create token',\n 'token.update': 'Update token',\n 'token.delete': 'Delete token',\n 'token.regenerate': 'Regenerate token',\n 'admin-user.create': 'Create user',\n 'admin-user.update': 'Update user',\n 'admin-user.delete': 'Delete user',\n 'admin-user.invite.accept': 'Accept invitation',\n 'admin-user.password-reset.create': 'Request password reset',\n 'admin-user.password-reset.confirm': 'Reset password',\n 'admin-user.password.update': 'Update password',\n 'webhook.create': 'Create webhook',\n 'webhook.update': 'Update webhook',\n 'webhook.delete': 'Delete webhook',\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,uBAAA;IACzB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,kBAAA,EAAoB,kBAAA;IACpB,mBAAA,EAAqB,aAAA;IACrB,mBAAA,EAAqB,aAAA;IACrB,mBAAA,EAAqB,aAAA;IACrB,0BAAA,EAA4B,mBAAA;IAC5B,kCAAA,EAAoC,wBAAA;IACpC,mCAAA,EAAqC,gBAAA;IACrC,4BAAA,EAA8B,iBAAA;IAC9B,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB;AACpB;AAEO,MAAMC,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOF,WAAW,CAACE,KAAAA,CAAM,IAAIA,KAAAA;AAC/B;;;;;"}
|
|
@@ -43,7 +43,17 @@ const actionTypes = {
|
|
|
43
43
|
'token.create': 'Create token',
|
|
44
44
|
'token.update': 'Update token',
|
|
45
45
|
'token.delete': 'Delete token',
|
|
46
|
-
'token.regenerate': 'Regenerate token'
|
|
46
|
+
'token.regenerate': 'Regenerate token',
|
|
47
|
+
'admin-user.create': 'Create user',
|
|
48
|
+
'admin-user.update': 'Update user',
|
|
49
|
+
'admin-user.delete': 'Delete user',
|
|
50
|
+
'admin-user.invite.accept': 'Accept invitation',
|
|
51
|
+
'admin-user.password-reset.create': 'Request password reset',
|
|
52
|
+
'admin-user.password-reset.confirm': 'Reset password',
|
|
53
|
+
'admin-user.password.update': 'Update password',
|
|
54
|
+
'webhook.create': 'Create webhook',
|
|
55
|
+
'webhook.update': 'Update webhook',
|
|
56
|
+
'webhook.delete': 'Delete webhook'
|
|
47
57
|
};
|
|
48
58
|
const getDefaultMessage = (value)=>{
|
|
49
59
|
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 '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 'token.create': 'Create token',\n 'token.update': 'Update token',\n 'token.delete': 'Delete token',\n 'token.regenerate': 'Regenerate token',\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,uBAAA;IACzB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,kBAAA,EAAoB;
|
|
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 'token.create': 'Create token',\n 'token.update': 'Update token',\n 'token.delete': 'Delete token',\n 'token.regenerate': 'Regenerate token',\n 'admin-user.create': 'Create user',\n 'admin-user.update': 'Update user',\n 'admin-user.delete': 'Delete user',\n 'admin-user.invite.accept': 'Accept invitation',\n 'admin-user.password-reset.create': 'Request password reset',\n 'admin-user.password-reset.confirm': 'Reset password',\n 'admin-user.password.update': 'Update password',\n 'webhook.create': 'Create webhook',\n 'webhook.update': 'Update webhook',\n 'webhook.delete': 'Delete webhook',\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,uBAAA;IACzB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,cAAA,EAAgB,cAAA;IAChB,kBAAA,EAAoB,kBAAA;IACpB,mBAAA,EAAqB,aAAA;IACrB,mBAAA,EAAqB,aAAA;IACrB,mBAAA,EAAqB,aAAA;IACrB,0BAAA,EAA4B,mBAAA;IAC5B,kCAAA,EAAoC,wBAAA;IACpC,mCAAA,EAAqC,gBAAA;IACrC,4BAAA,EAA8B,iBAAA;IAC9B,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB,gBAAA;IAClB,gBAAA,EAAkB;AACpB;AAEO,MAAMC,oBAAoB,CAACC,KAAAA,GAAAA;IAChC,OAAOF,WAAW,CAACE,KAAAA,CAAM,IAAIA,KAAAA;AAC/B;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var ComboboxFilter = require('../components/ComboboxFilter.js');
|
|
4
4
|
var getActionTypesDefaultMessages = require('./getActionTypesDefaultMessages.js');
|
|
5
|
+
var legacyActions = require('./legacyActions.js');
|
|
5
6
|
|
|
6
7
|
const getDisplayedFilters = ({ formatMessage, users, usersFilter })=>{
|
|
7
8
|
const operators = [
|
|
@@ -29,7 +30,8 @@ const getDisplayedFilters = ({ formatMessage, users, usersFilter })=>{
|
|
|
29
30
|
}),
|
|
30
31
|
name: 'action',
|
|
31
32
|
operators,
|
|
32
|
-
|
|
33
|
+
// Legacy keys stay in actionTypes to label stored rows; the new key filters both
|
|
34
|
+
options: Object.keys(getActionTypesDefaultMessages.actionTypes).filter((action)=>!legacyActions.isLegacyAction(action)).map((action)=>({
|
|
33
35
|
label: formatMessage({
|
|
34
36
|
id: `Settings.permissions.auditLogs.${action}`,
|
|
35
37
|
defaultMessage: getActionTypesDefaultMessages.getDefaultMessage(action)
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDisplayedFilters.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts"],"sourcesContent":["import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { GetUsers } from '../../../../../../../../shared/contracts/audit-logs';\nimport { ComboboxFilter, ComboboxFilterProps } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\n\ntype UsersFilterProps = Pick<ComboboxFilterProps, 'loading' | 'hasMoreItems' | 'onLoadMore'>;\n\ntype AuditLogUser = NonNullable<GetUsers.Response['results']>[number];\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n usersFilter,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: AuditLogUser[];\n usersFilter?: UsersFilterProps;\n}): Filters.Filter[] => {\n const operators = [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[]).map((action) => ({\n
|
|
1
|
+
{"version":3,"file":"getDisplayedFilters.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts"],"sourcesContent":["import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { GetUsers } from '../../../../../../../../shared/contracts/audit-logs';\nimport { ComboboxFilter, ComboboxFilterProps } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\nimport { isLegacyAction } from './legacyActions';\n\ntype UsersFilterProps = Pick<ComboboxFilterProps, 'loading' | 'hasMoreItems' | 'onLoadMore'>;\n\ntype AuditLogUser = NonNullable<GetUsers.Response['results']>[number];\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n usersFilter,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: AuditLogUser[];\n usersFilter?: UsersFilterProps;\n}): Filters.Filter[] => {\n const operators = [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n // Legacy keys stay in actionTypes to label stored rows; the new key filters both\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[])\n .filter((action) => !isLegacyAction(action))\n .map((action) => ({\n label: formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action),\n },\n { model: undefined }\n ),\n value: action,\n })),\n type: 'enumeration',\n },\n {\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n name: 'date',\n type: 'datetime',\n },\n ] satisfies Filters.Filter[];\n\n return [\n ...filters,\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n mainField: { name: 'id', type: 'integer' },\n name: 'user',\n operators,\n options: users.map((user) => ({\n label: user.displayName,\n value: user.id.toString(),\n })),\n type: 'relation',\n ...usersFilter,\n } satisfies Filters.Filter & UsersFilterProps,\n ];\n};\n"],"names":["getDisplayedFilters","formatMessage","users","usersFilter","operators","label","id","defaultMessage","value","filters","input","ComboboxFilter","name","options","Object","keys","actionTypes","filter","action","isLegacyAction","map","getDefaultMessage","model","undefined","type","mainField","user","displayName","toString"],"mappings":";;;;;;AAaO,MAAMA,sBAAsB,CAAC,EAClCC,aAAa,EACbC,KAAK,EACLC,WAAW,EAKZ,GAAA;AACC,IAAA,MAAMC,SAAAA,GAAY;AAChB,QAAA;AACEC,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT,SAAA;AACA,QAAA;AACEH,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT;AACD,KAAA;AAED,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;YACEC,KAAAA,EAAOC,6BAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,uCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,QAAA;AACNR,YAAAA,SAAAA;;AAEAS,YAAAA,OAAAA,EAAS,MAACC,CAAOC,IAAI,CAACC,yCAAAA,CAAAA,CACnBC,MAAM,CAAC,CAACC,MAAAA,GAAW,CAACC,6BAAeD,MAAAA,CAAAA,CAAAA,CACnCE,GAAG,CAAC,CAACF,UAAY;AAChBb,oBAAAA,KAAAA,EAAOJ,aAAAA,CACL;wBACEK,EAAAA,EAAI,CAAC,+BAA+B,EAAEY,MAAAA,CAAAA,CAAQ;AAC9CX,wBAAAA,cAAAA,EAAgBc,+CAAAA,CAAkBH,MAAAA;qBACpC,EACA;wBAAEI,KAAAA,EAAOC;AAAU,qBAAA,CAAA;oBAErBf,KAAAA,EAAOU;iBACT,CAAA,CAAA;YACFM,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEnB,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,MAAA;YACNY,IAAAA,EAAM;AACR;AACD,KAAA;IAED,OAAO;AACFf,QAAAA,GAAAA,OAAAA;AACH,QAAA;YACEC,KAAAA,EAAOC,6BAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAkB,SAAAA,EAAW;gBAAEb,IAAAA,EAAM,IAAA;gBAAMY,IAAAA,EAAM;AAAU,aAAA;YACzCZ,IAAAA,EAAM,MAAA;AACNR,YAAAA,SAAAA;AACAS,YAAAA,OAAAA,EAASX,KAAAA,CAAMkB,GAAG,CAAC,CAACM,QAAU;AAC5BrB,oBAAAA,KAAAA,EAAOqB,KAAKC,WAAW;oBACvBnB,KAAAA,EAAOkB,IAAAA,CAAKpB,EAAE,CAACsB,QAAQ;iBACzB,CAAA,CAAA;YACAJ,IAAAA,EAAM,UAAA;AACN,YAAA,GAAGrB;AACL;AACD,KAAA;AACH;;;;"}
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ComboboxFilter } from '../components/ComboboxFilter.mjs';
|
|
2
2
|
import { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages.mjs';
|
|
3
|
+
import { isLegacyAction } from './legacyActions.mjs';
|
|
3
4
|
|
|
4
5
|
const getDisplayedFilters = ({ formatMessage, users, usersFilter })=>{
|
|
5
6
|
const operators = [
|
|
@@ -27,7 +28,8 @@ const getDisplayedFilters = ({ formatMessage, users, usersFilter })=>{
|
|
|
27
28
|
}),
|
|
28
29
|
name: 'action',
|
|
29
30
|
operators,
|
|
30
|
-
|
|
31
|
+
// Legacy keys stay in actionTypes to label stored rows; the new key filters both
|
|
32
|
+
options: Object.keys(actionTypes).filter((action)=>!isLegacyAction(action)).map((action)=>({
|
|
31
33
|
label: formatMessage({
|
|
32
34
|
id: `Settings.permissions.auditLogs.${action}`,
|
|
33
35
|
defaultMessage: getDefaultMessage(action)
|
package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDisplayedFilters.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts"],"sourcesContent":["import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { GetUsers } from '../../../../../../../../shared/contracts/audit-logs';\nimport { ComboboxFilter, ComboboxFilterProps } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\n\ntype UsersFilterProps = Pick<ComboboxFilterProps, 'loading' | 'hasMoreItems' | 'onLoadMore'>;\n\ntype AuditLogUser = NonNullable<GetUsers.Response['results']>[number];\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n usersFilter,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: AuditLogUser[];\n usersFilter?: UsersFilterProps;\n}): Filters.Filter[] => {\n const operators = [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[]).map((action) => ({\n
|
|
1
|
+
{"version":3,"file":"getDisplayedFilters.mjs","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/getDisplayedFilters.ts"],"sourcesContent":["import { IntlShape } from 'react-intl';\n\nimport { Filters } from '../../../../../../../../admin/src/components/Filters';\nimport { GetUsers } from '../../../../../../../../shared/contracts/audit-logs';\nimport { ComboboxFilter, ComboboxFilterProps } from '../components/ComboboxFilter';\n\nimport { actionTypes, getDefaultMessage } from './getActionTypesDefaultMessages';\nimport { isLegacyAction } from './legacyActions';\n\ntype UsersFilterProps = Pick<ComboboxFilterProps, 'loading' | 'hasMoreItems' | 'onLoadMore'>;\n\ntype AuditLogUser = NonNullable<GetUsers.Response['results']>[number];\n\nexport const getDisplayedFilters = ({\n formatMessage,\n users,\n usersFilter,\n}: {\n formatMessage: IntlShape['formatMessage'];\n users: AuditLogUser[];\n usersFilter?: UsersFilterProps;\n}): Filters.Filter[] => {\n const operators = [\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$eq',\n defaultMessage: 'is',\n }),\n value: '$eq',\n },\n {\n label: formatMessage({\n id: 'components.FilterOptions.FILTER_TYPES.$ne',\n defaultMessage: 'is not',\n }),\n value: '$ne',\n },\n ] as NonNullable<Filters.Filter['operators']>;\n\n const filters = [\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.action',\n defaultMessage: 'Action',\n }),\n name: 'action',\n operators,\n // Legacy keys stay in actionTypes to label stored rows; the new key filters both\n options: (Object.keys(actionTypes) as (keyof typeof actionTypes)[])\n .filter((action) => !isLegacyAction(action))\n .map((action) => ({\n label: formatMessage(\n {\n id: `Settings.permissions.auditLogs.${action}`,\n defaultMessage: getDefaultMessage(action),\n },\n { model: undefined }\n ),\n value: action,\n })),\n type: 'enumeration',\n },\n {\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.date',\n defaultMessage: 'Date',\n }),\n name: 'date',\n type: 'datetime',\n },\n ] satisfies Filters.Filter[];\n\n return [\n ...filters,\n {\n input: ComboboxFilter,\n label: formatMessage({\n id: 'Settings.permissions.auditLogs.user',\n defaultMessage: 'User',\n }),\n mainField: { name: 'id', type: 'integer' },\n name: 'user',\n operators,\n options: users.map((user) => ({\n label: user.displayName,\n value: user.id.toString(),\n })),\n type: 'relation',\n ...usersFilter,\n } satisfies Filters.Filter & UsersFilterProps,\n ];\n};\n"],"names":["getDisplayedFilters","formatMessage","users","usersFilter","operators","label","id","defaultMessage","value","filters","input","ComboboxFilter","name","options","Object","keys","actionTypes","filter","action","isLegacyAction","map","getDefaultMessage","model","undefined","type","mainField","user","displayName","toString"],"mappings":";;;;AAaO,MAAMA,sBAAsB,CAAC,EAClCC,aAAa,EACbC,KAAK,EACLC,WAAW,EAKZ,GAAA;AACC,IAAA,MAAMC,SAAAA,GAAY;AAChB,QAAA;AACEC,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT,SAAA;AACA,QAAA;AACEH,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,2CAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAC,KAAAA,EAAO;AACT;AACD,KAAA;AAED,IAAA,MAAMC,OAAAA,GAAU;AACd,QAAA;YACEC,KAAAA,EAAOC,cAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,uCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,QAAA;AACNR,YAAAA,SAAAA;;AAEAS,YAAAA,OAAAA,EAAS,MAACC,CAAOC,IAAI,CAACC,WAAAA,CAAAA,CACnBC,MAAM,CAAC,CAACC,MAAAA,GAAW,CAACC,eAAeD,MAAAA,CAAAA,CAAAA,CACnCE,GAAG,CAAC,CAACF,UAAY;AAChBb,oBAAAA,KAAAA,EAAOJ,aAAAA,CACL;wBACEK,EAAAA,EAAI,CAAC,+BAA+B,EAAEY,MAAAA,CAAAA,CAAQ;AAC9CX,wBAAAA,cAAAA,EAAgBc,iBAAAA,CAAkBH,MAAAA;qBACpC,EACA;wBAAEI,KAAAA,EAAOC;AAAU,qBAAA,CAAA;oBAErBf,KAAAA,EAAOU;iBACT,CAAA,CAAA;YACFM,IAAAA,EAAM;AACR,SAAA;AACA,QAAA;AACEnB,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAK,IAAAA,EAAM,MAAA;YACNY,IAAAA,EAAM;AACR;AACD,KAAA;IAED,OAAO;AACFf,QAAAA,GAAAA,OAAAA;AACH,QAAA;YACEC,KAAAA,EAAOC,cAAAA;AACPN,YAAAA,KAAAA,EAAOJ,aAAAA,CAAc;gBACnBK,EAAAA,EAAI,qCAAA;gBACJC,cAAAA,EAAgB;AAClB,aAAA,CAAA;YACAkB,SAAAA,EAAW;gBAAEb,IAAAA,EAAM,IAAA;gBAAMY,IAAAA,EAAM;AAAU,aAAA;YACzCZ,IAAAA,EAAM,MAAA;AACNR,YAAAA,SAAAA;AACAS,YAAAA,OAAAA,EAASX,KAAAA,CAAMkB,GAAG,CAAC,CAACM,QAAU;AAC5BrB,oBAAAA,KAAAA,EAAOqB,KAAKC,WAAW;oBACvBnB,KAAAA,EAAOkB,IAAAA,CAAKpB,EAAE,CAACsB,QAAQ;iBACzB,CAAA,CAAA;YACAJ,IAAAA,EAAM,UAAA;AACN,YAAA,GAAGrB;AACL;AACD,KAAA;AACH;;;;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Admin-account rows stored before the `admin-user.*` events kept their old action keys
|
|
5
|
+
* and stay until retention removes them. The Action filter offers the new key only and
|
|
6
|
+
* queries both, so one option covers the whole history.
|
|
7
|
+
*
|
|
8
|
+
* Remove together with the deprecated `user.*` event hub events.
|
|
9
|
+
*/ const LEGACY_ACTIONS = {
|
|
10
|
+
'admin-user.create': 'user.create',
|
|
11
|
+
'admin-user.update': 'user.update',
|
|
12
|
+
'admin-user.delete': 'user.delete'
|
|
13
|
+
};
|
|
14
|
+
const LEGACY_KEYS = new Set(Object.values(LEGACY_ACTIONS));
|
|
15
|
+
const isLegacyAction = (action)=>LEGACY_KEYS.has(action);
|
|
16
|
+
const expandActionCondition = (condition)=>{
|
|
17
|
+
const { $eq, $ne, ...rest } = condition;
|
|
18
|
+
if (typeof $eq === 'string' && LEGACY_ACTIONS[$eq]) {
|
|
19
|
+
return {
|
|
20
|
+
...rest,
|
|
21
|
+
$in: [
|
|
22
|
+
$eq,
|
|
23
|
+
LEGACY_ACTIONS[$eq]
|
|
24
|
+
]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (typeof $ne === 'string' && LEGACY_ACTIONS[$ne]) {
|
|
28
|
+
return {
|
|
29
|
+
...rest,
|
|
30
|
+
$notIn: [
|
|
31
|
+
$ne,
|
|
32
|
+
LEGACY_ACTIONS[$ne]
|
|
33
|
+
]
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
return condition;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Rewrites `action` equality conditions on a new key into `$in` / `$notIn` over the new
|
|
40
|
+
* and the legacy key. Walks `$and`, `$or` and `$not`. Anything else is returned as is.
|
|
41
|
+
*/ const expandLegacyActionFilters = (filters)=>{
|
|
42
|
+
if (Array.isArray(filters)) {
|
|
43
|
+
return filters.map(expandLegacyActionFilters);
|
|
44
|
+
}
|
|
45
|
+
if (!filters || typeof filters !== 'object') {
|
|
46
|
+
return filters;
|
|
47
|
+
}
|
|
48
|
+
const expanded = {};
|
|
49
|
+
for (const [key, value] of Object.entries(filters)){
|
|
50
|
+
if (key === 'action' && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
51
|
+
expanded[key] = expandActionCondition(value);
|
|
52
|
+
} else if (key === '$and' || key === '$or' || key === '$not') {
|
|
53
|
+
expanded[key] = expandLegacyActionFilters(value);
|
|
54
|
+
} else {
|
|
55
|
+
expanded[key] = value;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return expanded;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
exports.LEGACY_ACTIONS = LEGACY_ACTIONS;
|
|
62
|
+
exports.expandLegacyActionFilters = expandLegacyActionFilters;
|
|
63
|
+
exports.isLegacyAction = isLegacyAction;
|
|
64
|
+
//# sourceMappingURL=legacyActions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacyActions.js","sources":["../../../../../../../../../../ee/admin/src/pages/SettingsPage/pages/AuditLogs/utils/legacyActions.ts"],"sourcesContent":["/**\n * Admin-account rows stored before the `admin-user.*` events kept their old action keys\n * and stay until retention removes them. The Action filter offers the new key only and\n * queries both, so one option covers the whole history.\n *\n * Remove together with the deprecated `user.*` event hub events.\n */\nexport const LEGACY_ACTIONS: Record<string, string> = {\n 'admin-user.create': 'user.create',\n 'admin-user.update': 'user.update',\n 'admin-user.delete': 'user.delete',\n};\n\nconst LEGACY_KEYS = new Set(Object.values(LEGACY_ACTIONS));\n\nexport const isLegacyAction = (action: string) => LEGACY_KEYS.has(action);\n\ntype Condition = Record<string, unknown>;\n\nconst expandActionCondition = (condition: Condition): Condition => {\n const { $eq, $ne, ...rest } = condition;\n\n if (typeof $eq === 'string' && LEGACY_ACTIONS[$eq]) {\n return { ...rest, $in: [$eq, LEGACY_ACTIONS[$eq]] };\n }\n\n if (typeof $ne === 'string' && LEGACY_ACTIONS[$ne]) {\n return { ...rest, $notIn: [$ne, LEGACY_ACTIONS[$ne]] };\n }\n\n return condition;\n};\n\n/**\n * Rewrites `action` equality conditions on a new key into `$in` / `$notIn` over the new\n * and the legacy key. Walks `$and`, `$or` and `$not`. Anything else is returned as is.\n */\nexport const expandLegacyActionFilters = <T>(filters: T): T => {\n if (Array.isArray(filters)) {\n return filters.map(expandLegacyActionFilters) as T;\n }\n\n if (!filters || typeof filters !== 'object') {\n return filters;\n }\n\n const expanded: Condition = {};\n\n for (const [key, value] of Object.entries(filters as Condition)) {\n if (key === 'action' && value && typeof value === 'object' && !Array.isArray(value)) {\n expanded[key] = expandActionCondition(value as Condition);\n } else if (key === '$and' || key === '$or' || key === '$not') {\n expanded[key] = expandLegacyActionFilters(value);\n } else {\n expanded[key] = value;\n }\n }\n\n return expanded as T;\n};\n"],"names":["LEGACY_ACTIONS","LEGACY_KEYS","Set","Object","values","isLegacyAction","action","has","expandActionCondition","condition","$eq","$ne","rest","$in","$notIn","expandLegacyActionFilters","filters","Array","isArray","map","expanded","key","value","entries"],"mappings":";;AAAA;;;;;;UAOaA,cAAAA,GAAyC;IACpD,mBAAA,EAAqB,aAAA;IACrB,mBAAA,EAAqB,aAAA;IACrB,mBAAA,EAAqB;AACvB;AAEA,MAAMC,WAAAA,GAAc,IAAIC,GAAAA,CAAIC,MAAAA,CAAOC,MAAM,CAACJ,cAAAA,CAAAA,CAAAA;MAE7BK,cAAAA,GAAiB,CAACC,SAAmBL,WAAAA,CAAYM,GAAG,CAACD,MAAAA;AAIlE,MAAME,wBAAwB,CAACC,SAAAA,GAAAA;AAC7B,IAAA,MAAM,EAAEC,GAAG,EAAEC,GAAG,EAAE,GAAGC,MAAM,GAAGH,SAAAA;AAE9B,IAAA,IAAI,OAAOC,GAAAA,KAAQ,QAAA,IAAYV,cAAc,CAACU,IAAI,EAAE;QAClD,OAAO;AAAE,YAAA,GAAGE,IAAI;YAAEC,GAAAA,EAAK;AAACH,gBAAAA,GAAAA;AAAKV,gBAAAA,cAAc,CAACU,GAAAA;AAAK;AAAC,SAAA;AACpD,IAAA;AAEA,IAAA,IAAI,OAAOC,GAAAA,KAAQ,QAAA,IAAYX,cAAc,CAACW,IAAI,EAAE;QAClD,OAAO;AAAE,YAAA,GAAGC,IAAI;YAAEE,MAAAA,EAAQ;AAACH,gBAAAA,GAAAA;AAAKX,gBAAAA,cAAc,CAACW,GAAAA;AAAK;AAAC,SAAA;AACvD,IAAA;IAEA,OAAOF,SAAAA;AACT,CAAA;AAEA;;;IAIO,MAAMM,yBAAAA,GAA4B,CAAIC,OAAAA,GAAAA;IAC3C,IAAIC,KAAAA,CAAMC,OAAO,CAACF,OAAAA,CAAAA,EAAU;QAC1B,OAAOA,OAAAA,CAAQG,GAAG,CAACJ,yBAAAA,CAAAA;AACrB,IAAA;AAEA,IAAA,IAAI,CAACC,OAAAA,IAAW,OAAOA,OAAAA,KAAY,QAAA,EAAU;QAC3C,OAAOA,OAAAA;AACT,IAAA;AAEA,IAAA,MAAMI,WAAsB,EAAC;IAE7B,KAAK,MAAM,CAACC,GAAAA,EAAKC,KAAAA,CAAM,IAAInB,MAAAA,CAAOoB,OAAO,CAACP,OAAAA,CAAAA,CAAuB;QAC/D,IAAIK,GAAAA,KAAQ,QAAA,IAAYC,KAAAA,IAAS,OAAOA,KAAAA,KAAU,YAAY,CAACL,KAAAA,CAAMC,OAAO,CAACI,KAAAA,CAAAA,EAAQ;YACnFF,QAAQ,CAACC,GAAAA,CAAI,GAAGb,qBAAAA,CAAsBc,KAAAA,CAAAA;AACxC,QAAA,CAAA,MAAO,IAAID,GAAAA,KAAQ,MAAA,IAAUA,GAAAA,KAAQ,KAAA,IAASA,QAAQ,MAAA,EAAQ;YAC5DD,QAAQ,CAACC,GAAAA,CAAI,GAAGN,yBAAAA,CAA0BO,KAAAA,CAAAA;QAC5C,CAAA,MAAO;YACLF,QAAQ,CAACC,IAAI,GAAGC,KAAAA;AAClB,QAAA;AACF,IAAA;IAEA,OAAOF,QAAAA;AACT;;;;;;"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin-account rows stored before the `admin-user.*` events kept their old action keys
|
|
3
|
+
* and stay until retention removes them. The Action filter offers the new key only and
|
|
4
|
+
* queries both, so one option covers the whole history.
|
|
5
|
+
*
|
|
6
|
+
* Remove together with the deprecated `user.*` event hub events.
|
|
7
|
+
*/ const LEGACY_ACTIONS = {
|
|
8
|
+
'admin-user.create': 'user.create',
|
|
9
|
+
'admin-user.update': 'user.update',
|
|
10
|
+
'admin-user.delete': 'user.delete'
|
|
11
|
+
};
|
|
12
|
+
const LEGACY_KEYS = new Set(Object.values(LEGACY_ACTIONS));
|
|
13
|
+
const isLegacyAction = (action)=>LEGACY_KEYS.has(action);
|
|
14
|
+
const expandActionCondition = (condition)=>{
|
|
15
|
+
const { $eq, $ne, ...rest } = condition;
|
|
16
|
+
if (typeof $eq === 'string' && LEGACY_ACTIONS[$eq]) {
|
|
17
|
+
return {
|
|
18
|
+
...rest,
|
|
19
|
+
$in: [
|
|
20
|
+
$eq,
|
|
21
|
+
LEGACY_ACTIONS[$eq]
|
|
22
|
+
]
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (typeof $ne === 'string' && LEGACY_ACTIONS[$ne]) {
|
|
26
|
+
return {
|
|
27
|
+
...rest,
|
|
28
|
+
$notIn: [
|
|
29
|
+
$ne,
|
|
30
|
+
LEGACY_ACTIONS[$ne]
|
|
31
|
+
]
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return condition;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* Rewrites `action` equality conditions on a new key into `$in` / `$notIn` over the new
|
|
38
|
+
* and the legacy key. Walks `$and`, `$or` and `$not`. Anything else is returned as is.
|
|
39
|
+
*/ const expandLegacyActionFilters = (filters)=>{
|
|
40
|
+
if (Array.isArray(filters)) {
|
|
41
|
+
return filters.map(expandLegacyActionFilters);
|
|
42
|
+
}
|
|
43
|
+
if (!filters || typeof filters !== 'object') {
|
|
44
|
+
return filters;
|
|
45
|
+
}
|
|
46
|
+
const expanded = {};
|
|
47
|
+
for (const [key, value] of Object.entries(filters)){
|
|
48
|
+
if (key === 'action' && value && typeof value === 'object' && !Array.isArray(value)) {
|
|
49
|
+
expanded[key] = expandActionCondition(value);
|
|
50
|
+
} else if (key === '$and' || key === '$or' || key === '$not') {
|
|
51
|
+
expanded[key] = expandLegacyActionFilters(value);
|
|
52
|
+
} else {
|
|
53
|
+
expanded[key] = value;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return expanded;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export { LEGACY_ACTIONS, expandLegacyActionFilters, isLegacyAction };
|
|
60
|
+
//# sourceMappingURL=legacyActions.mjs.map
|