@prenta/core 7.6.0 → 7.6.4
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/CHANGELOG.md +26 -0
- package/dist/actions.d.ts +12 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +33 -0
- package/dist/actions.js.map +1 -1
- package/dist/api/handler-factory.d.ts.map +1 -1
- package/dist/api/handler-factory.js +2 -1
- package/dist/api/handler-factory.js.map +1 -1
- package/dist/api/openapi.d.ts.map +1 -1
- package/dist/api/openapi.js +36 -0
- package/dist/api/openapi.js.map +1 -1
- package/dist/api/routes/documents.d.ts.map +1 -1
- package/dist/api/routes/documents.js +44 -1
- package/dist/api/routes/documents.js.map +1 -1
- package/dist/api/routes/meta.d.ts +5 -0
- package/dist/api/routes/meta.d.ts.map +1 -1
- package/dist/api/routes/meta.js +29 -16
- package/dist/api/routes/meta.js.map +1 -1
- package/dist/api/routes/security-center.d.ts.map +1 -1
- package/dist/api/routes/security-center.js +54 -1
- package/dist/api/routes/security-center.js.map +1 -1
- package/dist/api/security-headers.d.ts +7 -5
- package/dist/api/security-headers.d.ts.map +1 -1
- package/dist/api/security-headers.js +25 -7
- package/dist/api/security-headers.js.map +1 -1
- package/dist/security/audit-export.d.ts +42 -0
- package/dist/security/audit-export.d.ts.map +1 -0
- package/dist/security/audit-export.js +93 -0
- package/dist/security/audit-export.js.map +1 -0
- package/dist/seo/page-meta.d.ts.map +1 -1
- package/dist/seo/page-meta.js +22 -5
- package/dist/seo/page-meta.js.map +1 -1
- package/dist/seo/title-templates.d.ts +4 -3
- package/dist/seo/title-templates.d.ts.map +1 -1
- package/dist/seo/title-templates.js +8 -6
- package/dist/seo/title-templates.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { listDocuments, getDocument, createDocument, updateDocument, deleteDocument, restoreDocument, duplicateDocument, assertCollectionAccess, } from '../../actions.js';
|
|
1
|
+
import { listDocuments, getDocument, createDocument, updateDocument, deleteDocument, restoreDocument, purgeDocument, duplicateDocument, assertCollectionAccess, } from '../../actions.js';
|
|
2
2
|
import { logEvent } from '../../security/audit.js';
|
|
3
3
|
import { PRENTA_TAG_ROOT, prentaTag, cachedRead } from '../../cache/http.js';
|
|
4
4
|
import { notifyPreviewUpdate } from '../../preview/event-bus.js';
|
|
@@ -20,6 +20,24 @@ export function flattenDocumentWriteBody(body) {
|
|
|
20
20
|
const { data: _data, ...rest } = body;
|
|
21
21
|
return { ...nested, ...rest };
|
|
22
22
|
}
|
|
23
|
+
const PICK_KEY = /^[A-Za-z_][A-Za-z0-9_]{0,63}$/;
|
|
24
|
+
const PICK_MAX = 32;
|
|
25
|
+
/** Comma-separated `data` keys. Empty means the full document payload. */
|
|
26
|
+
function parseListPick(raw) {
|
|
27
|
+
if (!raw || raw.trim() === '')
|
|
28
|
+
return {};
|
|
29
|
+
const keys = [
|
|
30
|
+
...new Set(raw
|
|
31
|
+
.split(',')
|
|
32
|
+
.map((part) => part.trim())
|
|
33
|
+
.filter((part) => part.length > 0)),
|
|
34
|
+
];
|
|
35
|
+
if (keys.length > PICK_MAX)
|
|
36
|
+
return { error: `pick accepts at most ${PICK_MAX} fields` };
|
|
37
|
+
if (keys.some((key) => !PICK_KEY.test(key)))
|
|
38
|
+
return { error: 'pick fields must be identifiers' };
|
|
39
|
+
return { pick: keys };
|
|
40
|
+
}
|
|
23
41
|
/**
|
|
24
42
|
* Parse `?filter.<field>=<value>` query params into validated data-field
|
|
25
43
|
* filters (admin facet filters, taxonomy Phase B). Only fields declared in the
|
|
@@ -79,6 +97,9 @@ export function registerDocumentRoutes(router) {
|
|
|
79
97
|
build: async () => {
|
|
80
98
|
const url = new URL(request.url);
|
|
81
99
|
const ctx = buildActionContext(auth.session, db(), url.searchParams.get('locale') ?? undefined);
|
|
100
|
+
const picked = parseListPick(url.searchParams.get('pick'));
|
|
101
|
+
if (picked.error)
|
|
102
|
+
return errorResponse(picked.error, 400);
|
|
82
103
|
const result = await listDocuments({
|
|
83
104
|
collection: params.slug,
|
|
84
105
|
page: clampPage(url.searchParams.get('page')),
|
|
@@ -94,6 +115,7 @@ export function registerDocumentRoutes(router) {
|
|
|
94
115
|
includeDeleted: url.searchParams.get('includeDeleted') === 'true',
|
|
95
116
|
dataFilters: parseDataFilters(url, params.slug),
|
|
96
117
|
cursor: url.searchParams.get('cursor') ?? undefined,
|
|
118
|
+
pick: picked.pick,
|
|
97
119
|
}, ctx);
|
|
98
120
|
// listDocuments already applies field-level read access
|
|
99
121
|
// (actions.ts). Do not call applyFieldAccess again here.
|
|
@@ -251,6 +273,27 @@ export function registerDocumentRoutes(router) {
|
|
|
251
273
|
return actionError(err, 'restore document');
|
|
252
274
|
}
|
|
253
275
|
});
|
|
276
|
+
router.post('/collections/:slug/:id/purge', async (request, params) => {
|
|
277
|
+
try {
|
|
278
|
+
const auth = await requireAuth(request);
|
|
279
|
+
if (auth.error)
|
|
280
|
+
return auth.error;
|
|
281
|
+
const scopeErr = requireCollectionScope(auth.session, params.slug, 'delete');
|
|
282
|
+
if (scopeErr)
|
|
283
|
+
return scopeErr;
|
|
284
|
+
const ctx = buildActionContext(auth.session, db());
|
|
285
|
+
await purgeDocument(params.slug, params.id, ctx);
|
|
286
|
+
await logEvent({
|
|
287
|
+
event: 'document_purged',
|
|
288
|
+
userId: auth.session.userId,
|
|
289
|
+
details: { collection: params.slug, documentId: params.id },
|
|
290
|
+
});
|
|
291
|
+
return json({ data: { success: true } });
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
return actionError(err, 'purge document');
|
|
295
|
+
}
|
|
296
|
+
});
|
|
254
297
|
router.post('/collections/:slug/:id/duplicate', async (request, params) => {
|
|
255
298
|
try {
|
|
256
299
|
const auth = await requireAuth(request);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/api/routes/documents.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/api/routes/documents.ts"],"names":[],"mappings":"AACA,OAAO,EACL,aAAa,EACb,WAAW,EACX,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,sBAAsB,GAEvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAA;AACnG,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EACL,aAAa,EACb,IAAI,EACJ,aAAa,EACb,aAAa,EACb,aAAa,EACb,WAAW,EACX,SAAS,EACT,aAAa,EACb,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAE5B;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA6B;IACpE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAA;IACxB,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAA;IAC/E,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IACrC,OAAO,EAAE,GAAI,MAAkC,EAAE,GAAG,IAAI,EAAE,CAAA;AAC5D,CAAC;AAED,MAAM,QAAQ,GAAG,+BAA+B,CAAA;AAChD,MAAM,QAAQ,GAAG,EAAE,CAAA;AAEnB,0EAA0E;AAC1E,SAAS,aAAa,CAAC,GAAkB;IACvC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG;QACX,GAAG,IAAI,GAAG,CACR,GAAG;aACA,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACrC;KACF,CAAA;IACD,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,wBAAwB,QAAQ,SAAS,EAAE,CAAA;IACvF,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAA;IAChG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;AACvB,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,GAAQ,EAAE,cAAsB;IACxD,MAAM,MAAM,GAAG,eAAe,EAAE,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvE,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAA;IAE7B,MAAM,GAAG,GAAsB,EAAE,CAAA;IACjC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;YAAE,SAAQ;QAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC/C,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QACtC,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QACvD,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QACtD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AACzC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAiB;IACtD,MAAM,EAAE,GAAG,SAAS,CAAA;IACpB,8EAA8E;IAC9E,kBAAkB;IAClB,8EAA8E;IAE9E,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,CAAA;YAC3E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAC7B,MAAM,WAAW,GAAG,eAAe,EAAE,EAAE,WAAW,CAAA;YAClD,MAAM,eAAe,GAAG,WAAW;gBACjC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;oBAC1B,CAAC,CAAC,WAAW,CAAC,MAAM;oBACpB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM;gBACnC,CAAC,CAAC,CAAC,CAAA;YACL,IAAI,eAAe,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAK,CAAC,EAAE,CAAC;gBAC5D,OAAO,aAAa,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAA;YACnD,CAAC;YAED,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE;gBAC/B,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK;gBAC/B,IAAI,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAK,CAAC,CAAC;gBAC9D,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK,IAAI,EAAE;oBAChB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;oBAChC,MAAM,GAAG,GAAG,kBAAkB,CAC5B,IAAI,CAAC,OAAO,EACZ,EAAE,EAAE,EACJ,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS,CAC5C,CAAA;oBAED,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;oBAC1D,IAAI,MAAM,CAAC,KAAK;wBAAE,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;oBAEzD,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;wBACE,UAAU,EAAE,MAAM,CAAC,IAAK;wBACxB,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBAC7C,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACzD,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;wBAC/C,KAAK,EAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAoB,IAAI,SAAS;wBACrE,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;wBACnD,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;wBACnD,QAAQ,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,SAAS;wBACvD,4DAA4D;wBAC5D,kEAAkE;wBAClE,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;wBAC/C,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,MAAM;wBACjE,WAAW,EAAE,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,IAAK,CAAC;wBAChD,MAAM,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,SAAS;wBACnD,IAAI,EAAE,MAAM,CAAC,IAAI;qBAClB,EACD,GAAG,CACJ,CAAA;oBAED,wDAAwD;oBACxD,yDAAyD;oBACzD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;gBACzB,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,wEAAwE;IACxE,wEAAwE;IACxE,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACtE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,CAAA;YAC3E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAC9D,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YAElF,MAAM,gBAAgB,GAAG,eAAe,EAAE,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,IAAK,CAAC,CAAA;YACvE,IAAI,CAAC,gBAAgB;gBAAE,OAAO,aAAa,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAA;YAExE,yEAAyE;YACzE,4EAA4E;YAC5E,2EAA2E;YAC3E,2EAA2E;YAC3E,yEAAyE;YACzE,0EAA0E;YAC1E,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,sBAAsB,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAEvD,MAAM,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAA;YAClD,wEAAwE;YACxE,sEAAsE;YACtE,IAAI,CAAC,KAAK,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,OAAO,aAAa,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;YACvD,CAAC;YAED,sEAAsE;YACtE,sEAAsE;YACtE,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,KAAK,OAAO;gBACpB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjF,CAAC,CAAC,SAAS,CAAA;YAEf,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,EAAE,EAAE,EAAE;gBACrD,UAAU,EAAE,MAAM,CAAC,IAAK;gBACxB,SAAS;gBACT,SAAS,EAAE,KAAK,CAAC,IAAI;gBACrB,MAAM;gBACN,KAAK;aACN,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAA;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,2EAA2E;YAC3E,sEAAsE;YACtE,OAAO,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QACzC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,CAAA;YAC3E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,OAAO,MAAM,UAAU,CAAC,OAAO,EAAE;gBAC/B,KAAK,EAAE,eAAe,EAAE,EAAE,KAAK;gBAC/B,IAAI,EAAE;oBACJ,eAAe;oBACf,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC,IAAK,CAAC;oBACrC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAG,CAAC;iBAC7B;gBACD,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,KAAK,IAAI,EAAE;oBAChB,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;oBAClD,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE,GAAG,CAAC,CAAA;oBAE5D,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,2DAA2D;wBAC3D,4DAA4D;wBAC5D,uDAAuD;wBACvD,eAAe;wBACf,OAAO,aAAa,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;oBACjD,CAAC;oBAED,6DAA6D;oBAC7D,+DAA+D;oBAC/D,4DAA4D;oBAC5D,EAAE;oBACF,8DAA8D;oBAC9D,uDAAuD;oBACvD,6DAA6D;oBAC7D,4DAA4D;oBAC5D,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;wBACtE,EAAE,EAAE,GAAG,CAAC,MAAM;wBACd,IAAI,EAAE,GAAG,CAAC,IAAI;qBACf,CAAC,CAAA;oBACF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;gBAC5B,CAAC;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QACzC,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAA;YAC7E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAA;YACxF,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,IAAK,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YAEzD,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAG,GAAW,EAAE,EAAE,EAAE;aACnE,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACtE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAA;YAC7E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE,GAAG,CAAC,CAAA;YAEnE,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE;oBACP,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAE,MAAM,CAAC,EAAE;oBACrB,QAAQ,EAAE,IAAI;oBACd,YAAY,EAAE,MAAM,CAAC,YAAY;iBAClC;aACF,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC/B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAA;QAC7C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACpE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAA;YAC7E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,aAAa,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE,GAAG,CAAC,CAAA;YAElD,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,iBAAiB;gBACxB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;aAC5D,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,qEAAqE;YACrE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAA;YAC7E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE,GAAG,CAAC,CAAA;YAElE,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE;oBACP,UAAU,EAAE,MAAM,CAAC,IAAI;oBACvB,UAAU,EAAG,GAAuB,EAAE,EAAE;oBACxC,cAAc,EAAE,MAAM,CAAC,EAAE;iBAC1B;aACF,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAA;QAC/C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAA;YAC7E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,IAAI,GAAG,wBAAwB,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC,CAAA;YACxF,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,GAAG,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YAErE,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;aAC5D,CAAC,CAAA;YAEF,oEAAoE;YACpE,yDAAyD;YACzD,mBAAmB,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE;gBAC5C,MAAM,EAAG,GAA0B,CAAC,IAAI;gBACxC,MAAM,EAAG,GAA2B,CAAC,MAAM;gBAC3C,SAAS,EAAG,GAA4B,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE;aACpE,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,IAAK,EAAE,QAAQ,CAAC,CAAA;YAC7E,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,CAAA;YAClD,MAAM,cAAc,CAAC,MAAM,CAAC,IAAK,EAAE,MAAM,CAAC,EAAG,EAAE,GAAG,CAAC,CAAA;YAEnD,MAAM,QAAQ,CAAC;gBACb,KAAK,EAAE,kBAAkB;gBACzB,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE;aAC5D,CAAC,CAAA;YAEF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import type { ApiRouter } from '../router.js';
|
|
2
|
+
/** API reference page. The inline loader and the CDN script share one CSP nonce. */
|
|
3
|
+
export declare function renderApiReferencePage(): {
|
|
4
|
+
html: string;
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
};
|
|
2
7
|
export declare function registerMetaRoutes(router: ApiRouter): void;
|
|
3
8
|
//# sourceMappingURL=meta.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/api/routes/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/api/routes/meta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAQ7C,oFAAoF;AACpF,wBAAgB,sBAAsB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAwB1F;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+E1D"}
|
package/dist/api/routes/meta.js
CHANGED
|
@@ -1,8 +1,35 @@
|
|
|
1
1
|
import { summarizeCollectionFields } from '../collection-introspection.js';
|
|
2
2
|
import { generateToken as generateCsrfToken } from '../../security/csrf.js';
|
|
3
|
+
import { buildCspHeader, generateCspNonce } from '../../security/csp-nonces.js';
|
|
3
4
|
import { generateOpenAPISpec } from '../openapi.js';
|
|
4
5
|
import { getPrentaConfig } from '../../config/runtime.js';
|
|
5
6
|
import { json, errorResponse } from '../route-helpers.js';
|
|
7
|
+
/** API reference page. The inline loader and the CDN script share one CSP nonce. */
|
|
8
|
+
export function renderApiReferencePage() {
|
|
9
|
+
const nonce = generateCspNonce();
|
|
10
|
+
const html = `<!DOCTYPE html>
|
|
11
|
+
<html>
|
|
12
|
+
<head>
|
|
13
|
+
<title>Prenta CMS API Reference</title>
|
|
14
|
+
<meta charset="utf-8" />
|
|
15
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<script nonce="${nonce}" id="api-reference" data-url="/api/cms/openapi.json"></script>
|
|
19
|
+
<script nonce="${nonce}" src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
|
|
20
|
+
</body>
|
|
21
|
+
</html>`;
|
|
22
|
+
return {
|
|
23
|
+
html,
|
|
24
|
+
headers: {
|
|
25
|
+
'Content-Type': 'text/html; charset=utf-8',
|
|
26
|
+
'Content-Security-Policy': buildCspHeader(nonce, {
|
|
27
|
+
'script-src': ["'self'", `'nonce-${nonce}'`, 'https://cdn.jsdelivr.net'],
|
|
28
|
+
'connect-src': ["'self'"],
|
|
29
|
+
}),
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
6
33
|
export function registerMetaRoutes(router) {
|
|
7
34
|
// ---------------------------------------------------------------------------
|
|
8
35
|
// CSRF token endpoint
|
|
@@ -76,22 +103,8 @@ export function registerMetaRoutes(router) {
|
|
|
76
103
|
return json({ data: collections });
|
|
77
104
|
});
|
|
78
105
|
router.get('/docs', async () => {
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
<head>
|
|
82
|
-
<title>Prenta CMS API Reference</title>
|
|
83
|
-
<meta charset="utf-8" />
|
|
84
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
85
|
-
</head>
|
|
86
|
-
<body>
|
|
87
|
-
<script id="api-reference" data-url="/api/cms/openapi.json"></script>
|
|
88
|
-
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
|
|
89
|
-
</body>
|
|
90
|
-
</html>`;
|
|
91
|
-
return new Response(html, {
|
|
92
|
-
status: 200,
|
|
93
|
-
headers: { 'Content-Type': 'text/html; charset=utf-8' },
|
|
94
|
-
});
|
|
106
|
+
const page = renderApiReferencePage();
|
|
107
|
+
return new Response(page.html, { status: 200, headers: page.headers });
|
|
95
108
|
});
|
|
96
109
|
}
|
|
97
110
|
//# sourceMappingURL=meta.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/api/routes/meta.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/api/routes/meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security-center.d.ts","sourceRoot":"","sources":["../../../src/api/routes/security-center.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"security-center.d.ts","sourceRoot":"","sources":["../../../src/api/routes/security-center.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAmB7C,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqFpE"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { getClientIp } from '../../security/client-ip.js';
|
|
2
|
+
import { logEvent } from '../../security/audit.js';
|
|
3
|
+
import { auditLogToCsv, auditLogToJson, loadAuditLogForExport, parseAuditLogRange, } from '../../security/audit-export.js';
|
|
2
4
|
import { guardedDb } from '../guarded-db.js';
|
|
3
|
-
import { json, internalError, requireAuth, requireAdminScope } from '../route-helpers.js';
|
|
5
|
+
import { errorResponse, hasModel, json, internalError, requireAuth, requireAdminScope, } from '../route-helpers.js';
|
|
4
6
|
export function registerSecurityCenterRoutes(router) {
|
|
5
7
|
const db = guardedDb;
|
|
6
8
|
// ---------------------------------------------------------------------------
|
|
7
9
|
// Security Center
|
|
8
10
|
// GET /security — computed posture + summaries
|
|
11
|
+
// GET /security/audit-log/export — admin CSV/JSON download, optional date range
|
|
9
12
|
// PUT /security — persist enforced policy (lockout-safe)
|
|
10
13
|
// POST /security/sessions/revoke-all — revoke the caller's other sessions
|
|
11
14
|
//
|
|
@@ -33,5 +36,55 @@ export function registerSecurityCenterRoutes(router) {
|
|
|
33
36
|
return internalError(err, 'security GET');
|
|
34
37
|
}
|
|
35
38
|
});
|
|
39
|
+
router.get('/security/audit-log/export', async (request) => {
|
|
40
|
+
try {
|
|
41
|
+
const auth = await requireAuth(request);
|
|
42
|
+
if (auth.error)
|
|
43
|
+
return auth.error;
|
|
44
|
+
const adminErr = requireAdminScope(auth.session);
|
|
45
|
+
if (adminErr)
|
|
46
|
+
return adminErr;
|
|
47
|
+
const url = new URL(request.url);
|
|
48
|
+
const format = url.searchParams.get('format') ?? 'csv';
|
|
49
|
+
if (format !== 'csv' && format !== 'json') {
|
|
50
|
+
return errorResponse('"format" must be "csv" or "json"', 400);
|
|
51
|
+
}
|
|
52
|
+
const range = parseAuditLogRange(url.searchParams.get('from'), url.searchParams.get('to'));
|
|
53
|
+
if (!range.ok)
|
|
54
|
+
return errorResponse(range.error, 400);
|
|
55
|
+
const database = db();
|
|
56
|
+
const loaded = hasModel(database, 'auditLog')
|
|
57
|
+
? await loadAuditLogForExport(database, range)
|
|
58
|
+
: { rows: [], truncated: false };
|
|
59
|
+
const body = format === 'json'
|
|
60
|
+
? auditLogToJson(loaded.rows, loaded.truncated)
|
|
61
|
+
: auditLogToCsv(loaded.rows);
|
|
62
|
+
const filename = `audit-log.${format}`;
|
|
63
|
+
void logEvent({
|
|
64
|
+
event: 'audit_log_exported',
|
|
65
|
+
userId: auth.session.userId,
|
|
66
|
+
ipAddress: getClientIp(request),
|
|
67
|
+
details: {
|
|
68
|
+
format,
|
|
69
|
+
count: loaded.rows.length,
|
|
70
|
+
truncated: loaded.truncated,
|
|
71
|
+
from: range.from?.toISOString() ?? null,
|
|
72
|
+
to: range.to?.toISOString() ?? null,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
return new Response(body, {
|
|
76
|
+
status: 200,
|
|
77
|
+
headers: {
|
|
78
|
+
'Content-Type': format === 'json' ? 'application/json; charset=utf-8' : 'text/csv; charset=utf-8',
|
|
79
|
+
'Content-Disposition': `attachment; filename="${filename}"`,
|
|
80
|
+
'X-Audit-Export-Count': String(loaded.rows.length),
|
|
81
|
+
'X-Audit-Export-Truncated': loaded.truncated ? 'true' : 'false',
|
|
82
|
+
},
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
return internalError(err, 'security/audit-log/export');
|
|
87
|
+
}
|
|
88
|
+
});
|
|
36
89
|
}
|
|
37
90
|
//# sourceMappingURL=security-center.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security-center.js","sourceRoot":"","sources":["../../../src/api/routes/security-center.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"security-center.js","sourceRoot":"","sources":["../../../src/api/routes/security-center.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAClD,OAAO,EACL,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC5C,OAAO,EACL,aAAa,EACb,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,WAAW,EACX,iBAAiB,GAClB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,EAAE,GAAG,SAAS,CAAA;IACpB,8EAA8E;IAC9E,kBAAkB;IAClB,wEAAwE;IACxE,yFAAyF;IACzF,mFAAmF;IACnF,+EAA+E;IAC/E,EAAE;IACF,qEAAqE;IACrE,4EAA4E;IAC5E,uEAAuE;IACvE,8EAA8E;IAE9E,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,iCAAiC,CAAC,CAAA;YACjF,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC;gBACvC,EAAE,EAAE,EAAE,EAAE;gBACR,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;aAChC,CAAC,CAAA;YACF,OAAO,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QACvB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,cAAc,CAAC,CAAA;QAC3C,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YACvC,IAAI,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAA;YACjC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAA;YAE7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAChC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAA;YACtD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC1C,OAAO,aAAa,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;YAC/D,CAAC;YACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YAC1F,IAAI,CAAC,KAAK,CAAC,EAAE;gBAAE,OAAO,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YAErD,MAAM,QAAQ,GAAG,EAAE,EAAE,CAAA;YACrB,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;gBAC3C,CAAC,CAAC,MAAM,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC;gBAC9C,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;YAClC,MAAM,IAAI,GACR,MAAM,KAAK,MAAM;gBACf,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC/C,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAChC,MAAM,QAAQ,GAAG,aAAa,MAAM,EAAE,CAAA;YAEtC,KAAK,QAAQ,CAAC;gBACZ,KAAK,EAAE,oBAAoB;gBAC3B,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBAC3B,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;gBAC/B,OAAO,EAAE;oBACP,MAAM;oBACN,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM;oBACzB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,IAAI;oBACvC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI;iBACpC;aACF,CAAC,CAAA;YAEF,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;gBACxB,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE;oBACP,cAAc,EACZ,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,yBAAyB;oBACnF,qBAAqB,EAAE,yBAAyB,QAAQ,GAAG;oBAC3D,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;oBAClD,0BAA0B,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;iBAChE;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,aAAa,CAAC,GAAG,EAAE,2BAA2B,CAAC,CAAA;QACxD,CAAC;IACH,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
/** CSP for JSON and script-free HTML. No nonce — nothing is allowed to run. */
|
|
2
|
+
export declare const API_CONTENT_SECURITY_POLICY = "default-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'";
|
|
3
|
+
export declare const SECURITY_HEADERS: Record<string, string>;
|
|
1
4
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* `route-helpers.ts` without importing the whole route-helper graph.
|
|
5
|
+
* Attach the API security header set to any response that left a route
|
|
6
|
+
* without it. Headers already on the response win, so a route can set a
|
|
7
|
+
* nonce CSP or a download disposition without being overwritten.
|
|
6
8
|
*/
|
|
7
|
-
export declare
|
|
9
|
+
export declare function applyApiSecurityHeaders(response: Response): Response;
|
|
8
10
|
//# sourceMappingURL=security-headers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security-headers.d.ts","sourceRoot":"","sources":["../../src/api/security-headers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"security-headers.d.ts","sourceRoot":"","sources":["../../src/api/security-headers.ts"],"names":[],"mappings":"AAQA,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,oFAC2C,CAAA;AAEnF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGnD,CAAA;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAYpE"}
|
|
@@ -1,13 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Headers every JSON API response carries.
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Headers every JSON API response carries. `getSecurityHeaders` is the single
|
|
3
|
+
* baseline (HSTS, framing, nosniff, referrer, permissions). A locked CSP is
|
|
4
|
+
* added because these payloads are not documents: there is no inline script
|
|
5
|
+
* to nonce. HTML routes that do need a script set their own CSP first.
|
|
6
6
|
*/
|
|
7
|
+
import { getSecurityHeaders } from '../security/headers.js';
|
|
8
|
+
/** CSP for JSON and script-free HTML. No nonce — nothing is allowed to run. */
|
|
9
|
+
export const API_CONTENT_SECURITY_POLICY = "default-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'";
|
|
7
10
|
export const SECURITY_HEADERS = {
|
|
8
11
|
'Content-Type': 'application/json',
|
|
9
|
-
|
|
10
|
-
'X-Frame-Options': 'DENY',
|
|
11
|
-
'Referrer-Policy': 'strict-origin-when-cross-origin',
|
|
12
|
+
...getSecurityHeaders({ contentSecurityPolicy: API_CONTENT_SECURITY_POLICY }),
|
|
12
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* Attach the API security header set to any response that left a route
|
|
16
|
+
* without it. Headers already on the response win, so a route can set a
|
|
17
|
+
* nonce CSP or a download disposition without being overwritten.
|
|
18
|
+
*/
|
|
19
|
+
export function applyApiSecurityHeaders(response) {
|
|
20
|
+
const headers = new Headers(response.headers);
|
|
21
|
+
for (const [key, value] of Object.entries(getSecurityHeaders({ contentSecurityPolicy: API_CONTENT_SECURITY_POLICY }))) {
|
|
22
|
+
if (!headers.has(key))
|
|
23
|
+
headers.set(key, value);
|
|
24
|
+
}
|
|
25
|
+
return new Response(response.body, {
|
|
26
|
+
status: response.status,
|
|
27
|
+
statusText: response.statusText,
|
|
28
|
+
headers,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
13
31
|
//# sourceMappingURL=security-headers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security-headers.js","sourceRoot":"","sources":["../../src/api/security-headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,cAAc,EAAE,kBAAkB;IAClC,
|
|
1
|
+
{"version":3,"file":"security-headers.js","sourceRoot":"","sources":["../../src/api/security-headers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAE3D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GACtC,iFAAiF,CAAA;AAEnF,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACtD,cAAc,EAAE,kBAAkB;IAClC,GAAG,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,CAAC;CAC9E,CAAA;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAAkB;IACxD,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CACvC,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,CAAC,CAC3E,EAAE,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE;QACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,OAAO;KACR,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/** Hard cap so an export cannot load the whole audit table in one response. */
|
|
2
|
+
export declare const AUDIT_LOG_EXPORT_MAX = 10000;
|
|
3
|
+
export interface AuditLogExportRow {
|
|
4
|
+
id: string;
|
|
5
|
+
event: string;
|
|
6
|
+
userId: string | null;
|
|
7
|
+
ipAddress: string | null;
|
|
8
|
+
userAgent: string | null;
|
|
9
|
+
details: unknown;
|
|
10
|
+
timestamp: Date | string;
|
|
11
|
+
}
|
|
12
|
+
export interface AuditLogExportDb {
|
|
13
|
+
auditLog: {
|
|
14
|
+
findMany: (args: {
|
|
15
|
+
where?: Record<string, unknown>;
|
|
16
|
+
orderBy?: {
|
|
17
|
+
timestamp: 'desc';
|
|
18
|
+
};
|
|
19
|
+
take?: number;
|
|
20
|
+
}) => Promise<AuditLogExportRow[]>;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export type AuditLogRange = {
|
|
24
|
+
ok: true;
|
|
25
|
+
from?: Date;
|
|
26
|
+
to?: Date;
|
|
27
|
+
} | {
|
|
28
|
+
ok: false;
|
|
29
|
+
error: string;
|
|
30
|
+
};
|
|
31
|
+
/** `from` / `to` are optional ISO timestamps or `YYYY-MM-DD` (UTC, inclusive). */
|
|
32
|
+
export declare function parseAuditLogRange(fromRaw: string | null, toRaw: string | null): AuditLogRange;
|
|
33
|
+
export declare function loadAuditLogForExport(db: AuditLogExportDb, range: {
|
|
34
|
+
from?: Date;
|
|
35
|
+
to?: Date;
|
|
36
|
+
}, max?: number): Promise<{
|
|
37
|
+
rows: AuditLogExportRow[];
|
|
38
|
+
truncated: boolean;
|
|
39
|
+
}>;
|
|
40
|
+
export declare function auditLogToCsv(rows: AuditLogExportRow[]): string;
|
|
41
|
+
export declare function auditLogToJson(rows: AuditLogExportRow[], truncated: boolean): string;
|
|
42
|
+
//# sourceMappingURL=audit-export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-export.d.ts","sourceRoot":"","sources":["../../src/security/audit-export.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,oBAAoB,QAAS,CAAA;AAE1C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,SAAS,EAAE,IAAI,GAAG,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,QAAQ,EAAE,CAAC,IAAI,EAAE;YACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC/B,OAAO,CAAC,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAA;YAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;SACd,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAA;KACnC,CAAA;CACF;AAED,MAAM,MAAM,aAAa,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,EAAE,CAAC,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAgB/F,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,aAAa,CAiB9F;AASD,wBAAsB,qBAAqB,CACzC,EAAE,EAAE,gBAAgB,EACpB,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,EAAE,CAAC,EAAE,IAAI,CAAA;CAAE,EACjC,GAAG,SAAuB,GACzB,OAAO,CAAC;IAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAAC,CAQ5D;AAcD,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAe/D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,iBAAiB,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAcpF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/** Hard cap so an export cannot load the whole audit table in one response. */
|
|
2
|
+
export const AUDIT_LOG_EXPORT_MAX = 10_000;
|
|
3
|
+
const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
4
|
+
function parseBound(value, endOfDay) {
|
|
5
|
+
const trimmed = value.trim();
|
|
6
|
+
if (!trimmed)
|
|
7
|
+
return null;
|
|
8
|
+
if (DATE_ONLY.test(trimmed)) {
|
|
9
|
+
const iso = endOfDay ? `${trimmed}T23:59:59.999Z` : `${trimmed}T00:00:00.000Z`;
|
|
10
|
+
const date = new Date(iso);
|
|
11
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
12
|
+
}
|
|
13
|
+
const date = new Date(trimmed);
|
|
14
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
15
|
+
}
|
|
16
|
+
/** `from` / `to` are optional ISO timestamps or `YYYY-MM-DD` (UTC, inclusive). */
|
|
17
|
+
export function parseAuditLogRange(fromRaw, toRaw) {
|
|
18
|
+
let from;
|
|
19
|
+
let to;
|
|
20
|
+
if (fromRaw?.trim()) {
|
|
21
|
+
const parsed = parseBound(fromRaw, false);
|
|
22
|
+
if (!parsed)
|
|
23
|
+
return { ok: false, error: '"from" must be an ISO date or YYYY-MM-DD' };
|
|
24
|
+
from = parsed;
|
|
25
|
+
}
|
|
26
|
+
if (toRaw?.trim()) {
|
|
27
|
+
const parsed = parseBound(toRaw, DATE_ONLY.test(toRaw.trim()));
|
|
28
|
+
if (!parsed)
|
|
29
|
+
return { ok: false, error: '"to" must be an ISO date or YYYY-MM-DD' };
|
|
30
|
+
to = parsed;
|
|
31
|
+
}
|
|
32
|
+
if (from && to && from.getTime() > to.getTime()) {
|
|
33
|
+
return { ok: false, error: '"from" must be on or before "to"' };
|
|
34
|
+
}
|
|
35
|
+
return { ok: true, from, to };
|
|
36
|
+
}
|
|
37
|
+
function auditLogWhere(range) {
|
|
38
|
+
const timestamp = {};
|
|
39
|
+
if (range.from)
|
|
40
|
+
timestamp.gte = range.from;
|
|
41
|
+
if (range.to)
|
|
42
|
+
timestamp.lte = range.to;
|
|
43
|
+
return Object.keys(timestamp).length > 0 ? { timestamp } : {};
|
|
44
|
+
}
|
|
45
|
+
export async function loadAuditLogForExport(db, range, max = AUDIT_LOG_EXPORT_MAX) {
|
|
46
|
+
const rows = await db.auditLog.findMany({
|
|
47
|
+
where: auditLogWhere(range),
|
|
48
|
+
orderBy: { timestamp: 'desc' },
|
|
49
|
+
take: max + 1,
|
|
50
|
+
});
|
|
51
|
+
const truncated = rows.length > max;
|
|
52
|
+
return { rows: truncated ? rows.slice(0, max) : rows, truncated };
|
|
53
|
+
}
|
|
54
|
+
function isoTimestamp(value) {
|
|
55
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
56
|
+
return Number.isNaN(date.getTime()) ? String(value) : date.toISOString();
|
|
57
|
+
}
|
|
58
|
+
function csvCell(value) {
|
|
59
|
+
const text = value == null ? '' : typeof value === 'string' ? value : (JSON.stringify(value) ?? '');
|
|
60
|
+
if (/[",\n\r]/.test(text))
|
|
61
|
+
return `"${text.replace(/"/g, '""')}"`;
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
export function auditLogToCsv(rows) {
|
|
65
|
+
const header = 'timestamp,event,userId,ipAddress,userAgent,details';
|
|
66
|
+
const lines = rows.map((row) => [
|
|
67
|
+
isoTimestamp(row.timestamp),
|
|
68
|
+
row.event,
|
|
69
|
+
row.userId,
|
|
70
|
+
row.ipAddress,
|
|
71
|
+
row.userAgent,
|
|
72
|
+
row.details ?? '',
|
|
73
|
+
]
|
|
74
|
+
.map(csvCell)
|
|
75
|
+
.join(','));
|
|
76
|
+
return [header, ...lines].join('\n');
|
|
77
|
+
}
|
|
78
|
+
export function auditLogToJson(rows, truncated) {
|
|
79
|
+
return JSON.stringify({
|
|
80
|
+
count: rows.length,
|
|
81
|
+
truncated,
|
|
82
|
+
entries: rows.map((row) => ({
|
|
83
|
+
id: row.id,
|
|
84
|
+
timestamp: isoTimestamp(row.timestamp),
|
|
85
|
+
event: row.event,
|
|
86
|
+
userId: row.userId,
|
|
87
|
+
ipAddress: row.ipAddress,
|
|
88
|
+
userAgent: row.userAgent,
|
|
89
|
+
details: row.details ?? null,
|
|
90
|
+
})),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=audit-export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-export.js","sourceRoot":"","sources":["../../src/security/audit-export.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-meta.d.ts","sourceRoot":"","sources":["../../src/seo/page-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAiB9F,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAE3E;;;;GAIG;AACH,UAAU,oBAAoB;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACrC,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAClC,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC9C;AAED,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,GAAG,EAAE,oBAAoB,CAAA;IACzB,kFAAkF;IAClF,UAAU,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACxC,4FAA4F;IAC5F,MAAM,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAA;IACrD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtD;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,UAAU,CAAC,EAAE;QACX,mCAAmC;QACnC,IAAI,EAAE,MAAM,CAAA;QACZ,qEAAqE;QACrE,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB;;;WAGG;QACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;KACtC,CAAA;CACF;AAED,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAA;IACX,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,6EAA6E;IAC7E,SAAS,EAAE,MAAM,CAAA;IACjB,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACtC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAA;IAChB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAA;CACjB;AA0DD,iBAAS,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,CAcxD;AAuDD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACrC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,aAAa,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAAA;CAC3C,GAAG,MAAM,CAYT;AAiCD,kFAAkF;AAClF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC7C,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAClC,UAAU,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACxC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;IAChC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,aAAa,CAqEtF;
|
|
1
|
+
{"version":3,"file":"page-meta.d.ts","sourceRoot":"","sources":["../../src/seo/page-meta.ts"],"names":[],"mappings":"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"}
|
package/dist/seo/page-meta.js
CHANGED
|
@@ -203,7 +203,7 @@ export function resolveEffectiveMeta(params) {
|
|
|
203
203
|
}),
|
|
204
204
|
}) || null;
|
|
205
205
|
const metaDescription = pickString(page.metaDescription, data.metaDescription, data.seoDescription, page.keyTakeaway, data.keyTakeaway, data.excerpt, data.description, site?.defaultMetaDescription) ?? null;
|
|
206
|
-
const realImageUrl = pickString(page.ogImage, data.ogImage, asImageUrl(data.featuredImage), asImageUrl(data.heroImage), asImageUrl(data.coverImage), asImageUrl(data.image), site?.defaultOgImage);
|
|
206
|
+
const realImageUrl = pickString(asImageUrl(page.ogImage), asImageUrl(data.ogImage), asImageUrl(data.featuredImage), asImageUrl(data.heroImage), asImageUrl(data.coverImage), asImageUrl(data.image), site?.defaultOgImage);
|
|
207
207
|
const cmsOrigin = resolveCmsOrigin({ site, cmsOrigin: params.cmsOrigin, siteUrl });
|
|
208
208
|
const ogImage = realImageUrl ?? (metaTitle ? dynamicOgCardUrl(cmsOrigin, metaTitle) : null) ?? null;
|
|
209
209
|
const robots = resolveDocumentRobotsDirectives({
|
|
@@ -237,6 +237,21 @@ function siteTitleTemplateVars(params) {
|
|
|
237
237
|
* media object (`{ url }` / `{ src }` / `{ publicUrl }`); rejects bare media
|
|
238
238
|
* IDs and other non-URL strings so JSON-LD never emits a cuid as `image`.
|
|
239
239
|
*/
|
|
240
|
+
/** Alt text from a media object. A bare URL has none. */
|
|
241
|
+
function asImageAlt(value) {
|
|
242
|
+
if (!value || typeof value !== 'object')
|
|
243
|
+
return undefined;
|
|
244
|
+
const alt = value.alt;
|
|
245
|
+
return typeof alt === 'string' && alt.trim() ? alt.trim() : undefined;
|
|
246
|
+
}
|
|
247
|
+
/** URL plus alt from one field, so a later fallback cannot donate the alt. */
|
|
248
|
+
function imageField(value) {
|
|
249
|
+
const url = asImageUrl(value);
|
|
250
|
+
if (!url)
|
|
251
|
+
return undefined;
|
|
252
|
+
const alt = asImageAlt(value);
|
|
253
|
+
return alt ? { url, alt } : { url };
|
|
254
|
+
}
|
|
240
255
|
function asImageUrl(value) {
|
|
241
256
|
if (typeof value === 'string') {
|
|
242
257
|
const v = value.trim();
|
|
@@ -727,7 +742,9 @@ export function composePageMeta(input) {
|
|
|
727
742
|
// want the dynamic OG generator URL polluting structured data). Falls back to
|
|
728
743
|
// the page's hero / featured / cover image (string or `{ url }`) before the
|
|
729
744
|
// site default, so social cards use the page's own visual when set.
|
|
730
|
-
const
|
|
745
|
+
const ogFromField = imageField(page.ogImage) ?? imageField(data.ogImage);
|
|
746
|
+
const realImageUrl = ogFromField?.url ??
|
|
747
|
+
pickString(asImageUrl(data.featuredImage), asImageUrl(data.heroImage), asImageUrl(data.coverImage), asImageUrl(data.image), site?.defaultOgImage);
|
|
731
748
|
// The dynamic OG endpoint is served by the CMS API router, mounted under
|
|
732
749
|
// /api/cms on the CMS origin — not the public site root — so the default is
|
|
733
750
|
// composed against the CMS origin (seo.cmsUrl → request origin → siteUrl) or
|
|
@@ -741,8 +758,8 @@ export function composePageMeta(input) {
|
|
|
741
758
|
: 'website';
|
|
742
759
|
const profileName = ogType === 'profile' ? resolvePersonNameParts(data, rawTitle) : undefined;
|
|
743
760
|
// The generated /og.png fallback is a known fixed 1200x630 card; declare its
|
|
744
|
-
// dimensions so social crawlers don't skip/slow-render it.
|
|
745
|
-
//
|
|
761
|
+
// dimensions so social crawlers don't skip/slow-render it. A generated card
|
|
762
|
+
// uses the page title as alt. An uploaded media object's own alt wins.
|
|
746
763
|
const usingGeneratedOg = !realImageUrl && !!ogImageUrl;
|
|
747
764
|
const metaInput = {
|
|
748
765
|
title,
|
|
@@ -773,7 +790,7 @@ export function composePageMeta(input) {
|
|
|
773
790
|
ogImage: ogImageUrl
|
|
774
791
|
? {
|
|
775
792
|
url: ogImageUrl,
|
|
776
|
-
alt: title,
|
|
793
|
+
alt: ogFromField?.alt ?? title,
|
|
777
794
|
...(usingGeneratedOg ? { width: 1200, height: 630 } : {}),
|
|
778
795
|
}
|
|
779
796
|
: undefined,
|