@forestadmin/agent 1.107.3 → 1.108.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/audit-trail/migrations.js +36 -1
- package/dist/audit-trail/query-params.d.ts +11 -0
- package/dist/audit-trail/query-params.js +107 -0
- package/dist/audit-trail/sql-store.js +38 -1
- package/dist/audit-trail/types.d.ts +28 -0
- package/dist/routes/access/audit-trail-timeline.d.ts +18 -0
- package/dist/routes/access/audit-trail-timeline.js +95 -0
- package/dist/routes/access/audit-trail.d.ts +0 -7
- package/dist/routes/access/audit-trail.js +10 -103
- package/dist/routes/capabilities.js +5 -1
- package/dist/routes/index.js +6 -1
- package/package.json +1 -1
|
@@ -22,6 +22,11 @@ function qualifiedMigrationName(schema, tableName) {
|
|
|
22
22
|
? `${schema}.${tableName}:001-create-audit-logs`
|
|
23
23
|
: `${tableName}:001-create-audit-logs`;
|
|
24
24
|
}
|
|
25
|
+
function qualifiedMigrationName002(schema, tableName) {
|
|
26
|
+
return schema
|
|
27
|
+
? `${schema}.${tableName}:002-index-timestamp-id`
|
|
28
|
+
: `${tableName}:002-index-timestamp-id`;
|
|
29
|
+
}
|
|
25
30
|
// Every table name claimed by an audit-trail store configured in this process, keyed by
|
|
26
31
|
// `schema\0name` — both its own data table and the migration table Umzug derives from it.
|
|
27
32
|
// A second store's data table can otherwise land on the exact name a first store's migration
|
|
@@ -139,6 +144,36 @@ function buildMigrations(schema, tableName) {
|
|
|
139
144
|
await context.queryInterface.dropTable({ tableName: context.tableName, schema: context.schema }, { transaction: context.transaction });
|
|
140
145
|
},
|
|
141
146
|
},
|
|
147
|
+
{
|
|
148
|
+
// Its own migration rather than an index added to 001: the table has shipped, so a database
|
|
149
|
+
// out there has already recorded 001 as applied. The timeline route reads across every
|
|
150
|
+
// record, ordered and paged by (timestamp, id): without this, each page sorts the whole table.
|
|
151
|
+
name: qualifiedMigrationName002(schema, tableName),
|
|
152
|
+
up: async ({ context }) => {
|
|
153
|
+
const table = { tableName: context.tableName, schema: context.schema };
|
|
154
|
+
const name = `${context.tableName}_timestamp_id`;
|
|
155
|
+
const hasIndex = () => indexNames(context.queryInterface, table, context.transaction).then(names => names.has(name));
|
|
156
|
+
// Idempotent for the same reason 001 is: a process losing a concurrent-boot race retries.
|
|
157
|
+
if (await hasIndex())
|
|
158
|
+
return;
|
|
159
|
+
try {
|
|
160
|
+
await context.queryInterface.addIndex(table, {
|
|
161
|
+
fields: ['timestamp', 'id'],
|
|
162
|
+
name,
|
|
163
|
+
transaction: context.transaction,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
// Without Postgres's advisory lock, another agent booting at the same moment can add the
|
|
168
|
+
// index between the check above and this statement. Anything else is a real failure.
|
|
169
|
+
if (!(await hasIndex().catch(() => false)))
|
|
170
|
+
throw error;
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
down: async ({ context }) => {
|
|
174
|
+
await context.queryInterface.removeIndex({ tableName: context.tableName, schema: context.schema }, `${context.tableName}_timestamp_id`, { transaction: context.transaction });
|
|
175
|
+
},
|
|
176
|
+
},
|
|
142
177
|
];
|
|
143
178
|
}
|
|
144
179
|
function buildUmzug(sequelize, options) {
|
|
@@ -213,4 +248,4 @@ async function runAuditMigrations(sequelize, options) {
|
|
|
213
248
|
await buildUmzug(sequelize, { ...options, transaction }).up();
|
|
214
249
|
});
|
|
215
250
|
}
|
|
216
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC10cmFpbC9taWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMk1BLGdDQTBCQztBQUtELGdFQUlDO0FBUUQsb0NBZ0JDO0FBVUQsZ0RBb0JDO0FBbFNELHlDQUFzQztBQUN0QyxpQ0FBZ0Q7QUFTaEQsK0ZBQStGO0FBQy9GLHdGQUF3RjtBQUN4RixNQUFNLGFBQWEsR0FBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbEUsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixvRUFBb0U7QUFDcEUsU0FBUyxtQkFBbUIsQ0FBQyxTQUFpQjtJQUM1QyxPQUFPLEdBQUcsU0FBUyxZQUFZLENBQUM7QUFDbEMsQ0FBQztBQUVELCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsU0FBUyxzQkFBc0IsQ0FBQyxNQUEwQixFQUFFLFNBQWlCO0lBQzNFLE9BQU8sTUFBTTtRQUNYLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxTQUFTLHdCQUF3QjtRQUNoRCxDQUFDLENBQUMsR0FBRyxTQUFTLHdCQUF3QixDQUFDO0FBQzNDLENBQUM7QUFFRCx3RkFBd0Y7QUFDeEYsMEZBQTBGO0FBQzFGLDZGQUE2RjtBQUM3RiwrRkFBK0Y7QUFDL0YsK0ZBQStGO0FBQy9GLDhGQUE4RjtBQUM5RixrR0FBa0c7QUFDbEcsK0ZBQStGO0FBQy9GLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFcEQsU0FBUyxjQUFjLENBQUMsTUFBMEIsRUFBRSxJQUFZLEVBQUUsU0FBaUI7SUFDakYsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVqRCxJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVuRCxNQUFNLElBQUksS0FBSyxDQUNiLCtCQUErQixNQUFNLG9DQUFvQyxTQUFTLFFBQVE7WUFDeEYsZUFBZSxhQUFhLDREQUE0RDtZQUN4RixnRkFBZ0YsQ0FDbkYsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hDLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUN2QixjQUE4QixFQUM5QixLQUE2QyxFQUM3QyxXQUF5QjtJQUV6QixNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sY0FBYyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUVyRSxDQUFDO0lBRUgsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELEtBQUssVUFBVSxXQUFXLENBQ3hCLGNBQThCLEVBQzlCLEtBQTZDLEVBQzdDLFdBQXlCO0lBRXpCLGlHQUFpRztJQUNqRyxnR0FBZ0c7SUFDaEcsZ0ZBQWdGO0lBQ2hGLE1BQU0sT0FBTyxHQUFHLE1BQU0sY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQVcsQ0FBQyxDQUFDO0lBRXBGLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCw4RkFBOEY7QUFDOUYsZ0dBQWdHO0FBQ2hHLGdGQUFnRjtBQUNoRixNQUFNLGlCQUFpQixHQUFHO0lBQ3hCLElBQUk7SUFDSixXQUFXO0lBQ1gsV0FBVztJQUNYLFlBQVk7SUFDWixXQUFXO0lBQ1gsU0FBUztJQUNULGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsWUFBWTtJQUNaLGFBQWE7SUFDYixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLFlBQVk7SUFDWixRQUFRO0NBQ1QsQ0FBQztBQUVGLEtBQUssVUFBVSxlQUFlLENBQzVCLGNBQThCLEVBQzlCLEtBQTZDLEVBQzdDLFdBQXlCO0lBRXpCLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDdkUsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFMUUsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFFckYsTUFBTSxJQUFJLEtBQUssQ0FDYiwrQkFBK0IsTUFBTSw0Q0FBNEM7WUFDL0UsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw2REFBNkQ7WUFDbEYseUZBQXlGLENBQzVGLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxhQUFhLENBQzFCLGNBQThCLEVBQzlCLEtBQTZDLEVBQzdDLFdBQXlCO0lBRXpCLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFdEUsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUN2QixNQUF3RCxFQUN4RCxJQUFZLEVBQ1osRUFBRTtRQUNGLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPO1FBRS9CLE1BQU0sY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQyxDQUFDO0lBRUYsMkZBQTJGO0lBQzNGLCtGQUErRjtJQUMvRixNQUFNLFdBQVcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLFlBQVksQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sV0FBVyxDQUFDLENBQUMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLGtCQUFrQixDQUFDLENBQUM7SUFDN0UsTUFBTSxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQyxTQUFTLFVBQVUsQ0FBQyxDQUFDO0FBQy9ELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxNQUEwQixFQUFFLFNBQWlCO0lBQ3BFLE9BQU87UUFDTDtZQUNFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDO1lBQy9DLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQWlDLEVBQUUsRUFBRTtnQkFDdkQsTUFBTSxLQUFLLEdBQUcsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUV2RSx3RkFBd0Y7Z0JBQ3hGLHFGQUFxRjtnQkFDckYsMEVBQTBFO2dCQUMxRSxJQUFJLE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzFGLE1BQU0sZUFBZSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFFMUUsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQ3RDLEtBQUssRUFDTDtvQkFDRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFO29CQUNyRSxtRkFBbUY7b0JBQ25GLHFGQUFxRjtvQkFDckYsMkJBQTJCO29CQUMzQixTQUFTLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtvQkFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7b0JBQ3ZELFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFO29CQUN4RCxpRkFBaUY7b0JBQ2pGLDRCQUE0QjtvQkFDNUIsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7b0JBQ3BELE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO29CQUNyRCxxRkFBcUY7b0JBQ3JGLFNBQVM7b0JBQ1QsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7b0JBQzFELGNBQWMsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO29CQUN6RCxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtvQkFDckQsd0NBQXdDO29CQUN4QyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtvQkFDdEQsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7b0JBQzVELGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7b0JBQzdFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7b0JBQ3hFLGdGQUFnRjtvQkFDaEYsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRTtpQkFDM0UsRUFDRCxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLENBQ3JDLENBQUM7Z0JBRUYsTUFBTSxhQUFhLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFpQyxFQUFFLEVBQUU7Z0JBQ3pELE1BQU0sT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQ3BDLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFDeEQsRUFBRSxXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUNyQyxDQUFDO1lBQ0osQ0FBQztTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixVQUFVLENBQ3hCLFNBQW9CLEVBQ3BCLE9BQTBFO0lBRTFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JFLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7SUFFMUYsT0FBTyxJQUFJLGFBQUssQ0FBQztRQUNmLFVBQVUsRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQzlELE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxTQUFTLENBQUMsaUJBQWlCLEVBQUU7WUFDN0MsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztZQUM1QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7U0FDakM7UUFDRCxPQUFPLEVBQUUsSUFBSSx3QkFBZ0IsQ0FBQztZQUM1QixTQUFTO1lBQ1QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1lBQ3RCLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ2pELDZGQUE2RjtZQUM3Riw2RkFBNkY7WUFDN0Ysc0ZBQXNGO1lBQ3RGLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ2xELENBQUM7UUFDRixNQUFNLEVBQUUsU0FBUztLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUVoRSxTQUFnQiwwQkFBMEIsQ0FBQyxLQUFjO0lBQ3ZELE1BQU0sSUFBSSxHQUFJLEtBQTBDLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQztJQUV6RSxPQUFPLElBQUksS0FBSyxTQUFTLElBQUksMkJBQTJCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxZQUFZLENBQ2hDLFNBQW9CLEVBQ3BCLE1BQTBCO0lBRTFCLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTztJQUVwQixNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNyRCxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUF3QixDQUFDO0lBRS9FLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFBRSxPQUFPO0lBRXJDLElBQUksQ0FBQztRQUNILE1BQU0sY0FBYyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUM7WUFBRSxNQUFNLEtBQUssQ0FBQztJQUN0RCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSSxLQUFLLFVBQVUsa0JBQWtCLENBQ3RDLFNBQW9CLEVBQ3BCLE9BQStDO0lBRS9DLE1BQU0sWUFBWSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFOUMsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDMUMsTUFBTSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRTFDLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxXQUFXLEVBQUMsRUFBRTtRQUM5QyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUU7WUFDNUQsV0FBVztZQUNYLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMzRCxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC10cmFpbC9taWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcVBBLGdDQTBCQztBQUtELGdFQUlDO0FBUUQsb0NBZ0JDO0FBVUQsZ0RBb0JDO0FBNVVELHlDQUFzQztBQUN0QyxpQ0FBZ0Q7QUFTaEQsK0ZBQStGO0FBQy9GLHdGQUF3RjtBQUN4RixNQUFNLGFBQWEsR0FBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbEUsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixvRUFBb0U7QUFDcEUsU0FBUyxtQkFBbUIsQ0FBQyxTQUFpQjtJQUM1QyxPQUFPLEdBQUcsU0FBUyxZQUFZLENBQUM7QUFDbEMsQ0FBQztBQUVELCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsU0FBUyxzQkFBc0IsQ0FBQyxNQUEwQixFQUFFLFNBQWlCO0lBQzNFLE9BQU8sTUFBTTtRQUNYLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxTQUFTLHdCQUF3QjtRQUNoRCxDQUFDLENBQUMsR0FBRyxTQUFTLHdCQUF3QixDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLE1BQTBCLEVBQUUsU0FBaUI7SUFDOUUsT0FBTyxNQUFNO1FBQ1gsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFNBQVMseUJBQXlCO1FBQ2pELENBQUMsQ0FBQyxHQUFHLFNBQVMseUJBQXlCLENBQUM7QUFDNUMsQ0FBQztBQUVELHdGQUF3RjtBQUN4RiwwRkFBMEY7QUFDMUYsNkZBQTZGO0FBQzdGLCtGQUErRjtBQUMvRiwrRkFBK0Y7QUFDL0YsOEZBQThGO0FBQzlGLGtHQUFrRztBQUNsRywrRkFBK0Y7QUFDL0YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUVwRCxTQUFTLGNBQWMsQ0FBQyxNQUEwQixFQUFFLElBQVksRUFBRSxTQUFp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QUFTLENBQUMsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDMUMsTUFBTSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRTFDLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxXQUFXLEVBQUMsRUFBRTtRQUM5QyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUU7WUFDNUQsV0FBVztZQUNYLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMzRCxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AuditOperation } from './types';
|
|
2
|
+
export declare const DEFAULT_PAGE_SIZE = 20;
|
|
3
|
+
export declare const MAX_PAGE_SIZE = 100;
|
|
4
|
+
export declare const AUDIT_OPERATIONS: readonly AuditOperation[];
|
|
5
|
+
export declare function parseUserIds(raw?: string): number[] | undefined;
|
|
6
|
+
export declare function parseOperations(raw?: string): AuditOperation[] | undefined;
|
|
7
|
+
export declare function parseFields(raw?: string): string[] | undefined;
|
|
8
|
+
export declare function parseSearch(raw?: string): string | undefined;
|
|
9
|
+
export declare function parsePageSize(raw?: string): number;
|
|
10
|
+
export declare function parseDateBoundary(raw: string | undefined, timezone: string, boundary: 'start' | 'end'): string | undefined;
|
|
11
|
+
//# sourceMappingURL=query-params.d.ts.map
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AUDIT_OPERATIONS = exports.MAX_PAGE_SIZE = exports.DEFAULT_PAGE_SIZE = void 0;
|
|
4
|
+
exports.parseUserIds = parseUserIds;
|
|
5
|
+
exports.parseOperations = parseOperations;
|
|
6
|
+
exports.parseFields = parseFields;
|
|
7
|
+
exports.parseSearch = parseSearch;
|
|
8
|
+
exports.parsePageSize = parsePageSize;
|
|
9
|
+
exports.parseDateBoundary = parseDateBoundary;
|
|
10
|
+
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
11
|
+
const luxon_1 = require("luxon");
|
|
12
|
+
const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
13
|
+
const DATE_TIME = /^(\d{4}-\d{2}-\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?$/;
|
|
14
|
+
// ISO 8601 instant: carries its own timezone designator (`Z` or `±HH:mm` / `±HHMM`).
|
|
15
|
+
const ISO_INSTANT = /[Zz]$|[+-]\d{2}:?\d{2}$/;
|
|
16
|
+
exports.DEFAULT_PAGE_SIZE = 20;
|
|
17
|
+
exports.MAX_PAGE_SIZE = 100;
|
|
18
|
+
exports.AUDIT_OPERATIONS = [
|
|
19
|
+
'create',
|
|
20
|
+
'update',
|
|
21
|
+
'delete',
|
|
22
|
+
'action',
|
|
23
|
+
'action_failed',
|
|
24
|
+
];
|
|
25
|
+
// Comma-separated integer ids; non-numeric tokens are dropped. Empty after parsing → no filter.
|
|
26
|
+
function parseUserIds(raw) {
|
|
27
|
+
if (!raw)
|
|
28
|
+
return undefined;
|
|
29
|
+
const ids = raw
|
|
30
|
+
.split(',')
|
|
31
|
+
.map(token => token.trim())
|
|
32
|
+
.filter(token => /^\d+$/.test(token))
|
|
33
|
+
.map(token => Number.parseInt(token, 10));
|
|
34
|
+
return ids.length > 0 ? ids : undefined;
|
|
35
|
+
}
|
|
36
|
+
// Comma-separated, from a closed set. An unrecognized value is rejected rather than dropped: a
|
|
37
|
+
// silently ignored filter returns unfiltered rows into a list the caller believes is filtered,
|
|
38
|
+
// which is worse than an error.
|
|
39
|
+
function parseOperations(raw) {
|
|
40
|
+
if (!raw)
|
|
41
|
+
return undefined;
|
|
42
|
+
const tokens = raw
|
|
43
|
+
.split(',')
|
|
44
|
+
.map(token => token.trim())
|
|
45
|
+
.filter(token => token.length > 0);
|
|
46
|
+
const unknown = tokens.find(token => !exports.AUDIT_OPERATIONS.includes(token));
|
|
47
|
+
if (unknown) {
|
|
48
|
+
throw new datasource_toolkit_1.ValidationError(`Invalid operation: "${unknown}" (expected one of ${exports.AUDIT_OPERATIONS.join(', ')})`);
|
|
49
|
+
}
|
|
50
|
+
return tokens.length > 0 ? tokens : undefined;
|
|
51
|
+
}
|
|
52
|
+
function parseFields(raw) {
|
|
53
|
+
if (!raw)
|
|
54
|
+
return undefined;
|
|
55
|
+
const fields = raw
|
|
56
|
+
.split(',')
|
|
57
|
+
.map(token => token.trim())
|
|
58
|
+
.filter(token => token.length > 0);
|
|
59
|
+
return fields.length > 0 ? fields : undefined;
|
|
60
|
+
}
|
|
61
|
+
// Trimmed; empty after trimming is treated the same as absent.
|
|
62
|
+
function parseSearch(raw) {
|
|
63
|
+
const trimmed = raw?.trim();
|
|
64
|
+
return trimmed || undefined;
|
|
65
|
+
}
|
|
66
|
+
// 1-based `page[size]` (default 20, capped at 100). Invalid values fall back to the default rather
|
|
67
|
+
// than erroring.
|
|
68
|
+
function parsePageSize(raw) {
|
|
69
|
+
const size = Number.parseInt(raw ?? '', 10);
|
|
70
|
+
if (Number.isNaN(size) || size < 1)
|
|
71
|
+
return exports.DEFAULT_PAGE_SIZE;
|
|
72
|
+
return Math.min(size, exports.MAX_PAGE_SIZE);
|
|
73
|
+
}
|
|
74
|
+
function toLocalInstant(raw, timezone, boundary) {
|
|
75
|
+
// An embedded offset already pins the instant — the request timezone and start/end boundary
|
|
76
|
+
// don't apply.
|
|
77
|
+
if (ISO_INSTANT.test(raw))
|
|
78
|
+
return luxon_1.DateTime.fromISO(raw, { setZone: true });
|
|
79
|
+
if (DATE_ONLY.test(raw)) {
|
|
80
|
+
const day = luxon_1.DateTime.fromISO(raw, { zone: timezone });
|
|
81
|
+
return boundary === 'end' ? day.endOf('day') : day.startOf('day');
|
|
82
|
+
}
|
|
83
|
+
const match = DATE_TIME.exec(raw);
|
|
84
|
+
if (!match)
|
|
85
|
+
return luxon_1.DateTime.invalid('unparsable');
|
|
86
|
+
const [, date, hours, minutes, seconds] = match;
|
|
87
|
+
const base = luxon_1.DateTime.fromISO(`${date}T${hours}:${minutes}`, { zone: timezone });
|
|
88
|
+
if (seconds !== undefined)
|
|
89
|
+
return base.set({ second: Number(seconds), millisecond: 0 });
|
|
90
|
+
// Minutes-only: end snaps to :59.999 to stay inclusive; start stays at :00.000.
|
|
91
|
+
return boundary === 'end' ? base.set({ second: 59, millisecond: 999 }) : base;
|
|
92
|
+
}
|
|
93
|
+
// Bare day (`YYYY-MM-DD`) or wall-clock datetime (`YYYY-MM-DD[T| ]HH:mm[:ss]`), interpreted as
|
|
94
|
+
// local time in the request timezone and returned as a UTC instant so the store can compare it
|
|
95
|
+
// to stored timestamps.
|
|
96
|
+
function parseDateBoundary(raw, timezone, boundary) {
|
|
97
|
+
if (!raw)
|
|
98
|
+
return undefined;
|
|
99
|
+
const instant = toLocalInstant(raw, timezone, boundary);
|
|
100
|
+
if (!instant.isValid) {
|
|
101
|
+
throw new datasource_toolkit_1.ValidationError(instant.invalidReason === 'unsupported zone'
|
|
102
|
+
? `Invalid timezone: "${timezone}"`
|
|
103
|
+
: `Invalid date: "${raw}" (expected YYYY-MM-DD, YYYY-MM-DDTHH:mm, or an ISO 8601 instant)`);
|
|
104
|
+
}
|
|
105
|
+
return instant.toUTC().toISO() ?? undefined;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktcGFyYW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL3F1ZXJ5LXBhcmFtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsb0NBVUM7QUFLRCwwQ0FpQkM7QUFFRCxrQ0FTQztBQUdELGtDQUlDO0FBSUQsc0NBTUM7QUE2QkQsOENBa0JDO0FBL0hELHdFQUFrRTtBQUNsRSxpQ0FBaUM7QUFFakMsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUM7QUFDeEMsTUFBTSxTQUFTLEdBQUcsdURBQXVELENBQUM7QUFDMUUscUZBQXFGO0FBQ3JGLE1BQU0sV0FBVyxHQUFHLHlCQUF5QixDQUFDO0FBRWpDLFFBQUEsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUVwQixRQUFBLGdCQUFnQixHQUE4QjtJQUN6RCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixRQUFRO0lBQ1IsZUFBZTtDQUNoQixDQUFDO0FBRUYsZ0dBQWdHO0FBQ2hHLFNBQWdCLFlBQVksQ0FBQyxHQUFZO0lBQ3ZDLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFFM0IsTUFBTSxHQUFHLEdBQUcsR0FBRztTQUNaLEtBQUssQ0FBQyxHQUFHLENBQUM7U0FDVixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDMUIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxD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
|
|
@@ -173,6 +173,28 @@ function buildHistoryWhereClause({ collection, recordId, userIds, operations, st
|
|
|
173
173
|
where[sequelize_1.Op.and] = andConditions;
|
|
174
174
|
return where;
|
|
175
175
|
}
|
|
176
|
+
function buildTimelineWhereClause({ collections, before, excludeIds, userIds, operations, startTimestamp, endTimestamp, search, }, sequelize) {
|
|
177
|
+
const where = { collection: { [sequelize_1.Op.in]: collections } };
|
|
178
|
+
if (userIds)
|
|
179
|
+
where.userId = { [sequelize_1.Op.in]: userIds };
|
|
180
|
+
if (operations?.length)
|
|
181
|
+
where.operation = { [sequelize_1.Op.in]: operations };
|
|
182
|
+
if (excludeIds?.length)
|
|
183
|
+
where.id = { [sequelize_1.Op.notIn]: excludeIds };
|
|
184
|
+
const timestampRange = {};
|
|
185
|
+
if (startTimestamp)
|
|
186
|
+
timestampRange[sequelize_1.Op.gte] = new Date(startTimestamp);
|
|
187
|
+
// The cursor bound and the `endDate` filter are both inclusive upper bounds; the tighter wins.
|
|
188
|
+
const upperBounds = [endTimestamp, before].filter(Boolean).map(bound => new Date(bound));
|
|
189
|
+
if (upperBounds.length) {
|
|
190
|
+
timestampRange[sequelize_1.Op.lte] = new Date(Math.min(...upperBounds.map(date => date.getTime())));
|
|
191
|
+
}
|
|
192
|
+
if (Object.getOwnPropertySymbols(timestampRange).length)
|
|
193
|
+
where.timestamp = timestampRange;
|
|
194
|
+
if (search)
|
|
195
|
+
where[sequelize_1.Op.and] = [searchCondition(sequelize, search)];
|
|
196
|
+
return where;
|
|
197
|
+
}
|
|
176
198
|
function fromRow(row) {
|
|
177
199
|
const plain = row.get({ plain: true });
|
|
178
200
|
const { timestamp } = plain;
|
|
@@ -286,6 +308,21 @@ function createSqlAuditStore(options) {
|
|
|
286
308
|
transaction: null,
|
|
287
309
|
});
|
|
288
310
|
},
|
|
311
|
+
async listTimeline(query) {
|
|
312
|
+
if (!query.collections.length)
|
|
313
|
+
return [];
|
|
314
|
+
const { model, connection } = await init();
|
|
315
|
+
const rows = await model.findAll({
|
|
316
|
+
where: buildTimelineWhereClause(query, connection),
|
|
317
|
+
order: [
|
|
318
|
+
['timestamp', 'DESC'],
|
|
319
|
+
['id', 'DESC'],
|
|
320
|
+
],
|
|
321
|
+
limit: query.limit,
|
|
322
|
+
transaction: null,
|
|
323
|
+
});
|
|
324
|
+
return rows.map(fromRow);
|
|
325
|
+
},
|
|
289
326
|
async listDistinctUsers(query) {
|
|
290
327
|
const { model, connection } = await init();
|
|
291
328
|
// MAX() rather than a bare column: grouping by `user_id` alone is invalid in strict SQL
|
|
@@ -338,4 +375,4 @@ function createSqlAuditStore(options) {
|
|
|
338
375
|
},
|
|
339
376
|
};
|
|
340
377
|
}
|
|
341
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL3NxbC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFxQkEsa0RBc0NDO0FBRUQsZ0RBU0M7QUFFRCxzQkFrQkM7QUFTRCx3REFpREM7QUFtQkQsMENBc0JDO0FBNkNELDBCQW9CQztBQVFELGtEQW9LQztBQWhhRCx5Q0FBcUQ7QUFFckQsNkNBQWtEO0FBRXJDLFFBQUEsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUMxQixRQUFBLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFMUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0FBRXBDLFNBQWdCLG1CQUFtQixDQUNqQyxTQUFvQixFQUNwQixPQUErQztJQUUvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQ3JCLFVBQVUsRUFDVjtRQUNFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7UUFDckUsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RiwyQkFBMkI7UUFDM0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDdkQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRiwwRUFBMEU7UUFDMUUsUUFB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
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL3NxbC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFzQkEsa0RBc0NDO0FBRUQsZ0RBU0M7QUFFRCxzQkFrQkM7QUFTRCx3REFpREM7QUFtQkQsMENBc0JDO0FBaUZELDBCQW9CQztBQVFELGtEQXFMQztBQXJkRCx5Q0FBcUQ7QUFFckQsNkNBQWtEO0FBRXJDLFFBQUEsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUMxQixRQUFBLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFMUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0FBRXBDLFNBQWdCLG1CQUFtQixDQUNqQyxTQUFvQixFQUNwQixPQUErQztJQUUvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQ3JCLFVBQVUsRUFDVjtRQUNFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7UUFDckUsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RiwyQkFBMkI7UUFDM0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDdkQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRiwwRUFBMEU7UUFDMUUsUUFB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
|
|
@@ -68,6 +68,29 @@ export type AuditHistoryQuery = {
|
|
|
68
68
|
*/
|
|
69
69
|
after?: Pick<AuditRecord, 'timestamp' | 'id'>;
|
|
70
70
|
};
|
|
71
|
+
/**
|
|
72
|
+
* Cross-collection timeline, newest first. Paged by cursor rather than by offset: a project-wide
|
|
73
|
+
* feed keeps growing at the head, so an offset silently shifts rows across pages.
|
|
74
|
+
*/
|
|
75
|
+
export type AuditTimelineQuery = {
|
|
76
|
+
/** Collections the caller is allowed to see; an empty list must match nothing. */
|
|
77
|
+
collections: string[];
|
|
78
|
+
limit: number;
|
|
79
|
+
/**
|
|
80
|
+
* Inclusive upper bound on `timestamp`, from the previous page's cursor. Inclusive so rows
|
|
81
|
+
* sharing the boundary timestamp aren't skipped; `excludeIds` drops the ones already returned.
|
|
82
|
+
*/
|
|
83
|
+
before?: string;
|
|
84
|
+
excludeIds?: number[];
|
|
85
|
+
userIds?: number[];
|
|
86
|
+
operations?: AuditOperation[];
|
|
87
|
+
/** Inclusive lower bound on `timestamp` as a UTC ISO instant. */
|
|
88
|
+
startTimestamp?: string;
|
|
89
|
+
/** Inclusive upper bound on `timestamp` as a UTC ISO instant. */
|
|
90
|
+
endTimestamp?: string;
|
|
91
|
+
/** Same free-text match as `AuditHistoryQuery.search`. */
|
|
92
|
+
search?: string;
|
|
93
|
+
};
|
|
71
94
|
export type AuditCorrelationQuery = {
|
|
72
95
|
collection: string;
|
|
73
96
|
recordId: string;
|
|
@@ -98,6 +121,11 @@ export interface AuditStore {
|
|
|
98
121
|
listByCorrelation(query: AuditCorrelationQuery): AuditRecord[] | Promise<AuditRecord[]>;
|
|
99
122
|
/** Flat list of entries recorded under any of `correlationKeys` for a record, oldest first. */
|
|
100
123
|
listByCorrelations(query: AuditCorrelationsQuery): AuditRecord[] | Promise<AuditRecord[]>;
|
|
124
|
+
/**
|
|
125
|
+
* Cross-collection timeline, newest first (ties broken by descending `id`). Optional: a store
|
|
126
|
+
* written before this existed simply doesn't serve the project-level route.
|
|
127
|
+
*/
|
|
128
|
+
listTimeline?(query: AuditTimelineQuery): AuditRecord[] | Promise<AuditRecord[]>;
|
|
101
129
|
/** Distinct authors matching the query filters, independent of pagination. */
|
|
102
130
|
listDistinctUsers(query: Omit<AuditHistoryQuery, 'skip' | 'limit' | 'order'>): AuditUserSummary[] | Promise<AuditUserSummary[]>;
|
|
103
131
|
/** One-shot bootstrap awaited by `agent.start()`. Must be idempotent. */
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ForestAdminHttpDriverServices } from '../../services';
|
|
2
|
+
import type { AgentOptionsWithDefaults } from '../../types';
|
|
3
|
+
import type { DataSource } from '@forestadmin/datasource-toolkit';
|
|
4
|
+
import type Router from '@koa/router';
|
|
5
|
+
import type { Context } from 'koa';
|
|
6
|
+
import { RouteType } from '../../types';
|
|
7
|
+
import BaseRoute from '../base-route';
|
|
8
|
+
export default class AuditTrailTimelineRoute extends BaseRoute {
|
|
9
|
+
readonly type = RouteType.PrivateRoute;
|
|
10
|
+
private readonly dataSource;
|
|
11
|
+
constructor(services: ForestAdminHttpDriverServices, options: AgentOptionsWithDefaults, dataSource: DataSource);
|
|
12
|
+
setupRoutes(router: Router): void;
|
|
13
|
+
handleTimeline(context: Context): Promise<void>;
|
|
14
|
+
private readableCollections;
|
|
15
|
+
private static nextCursor;
|
|
16
|
+
private static parseCursor;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=audit-trail-timeline.d.ts.map
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const query_params_1 = require("../../audit-trail/query-params");
|
|
7
|
+
const types_1 = require("../../types");
|
|
8
|
+
const base_route_1 = __importDefault(require("../base-route"));
|
|
9
|
+
class AuditTrailTimelineRoute extends base_route_1.default {
|
|
10
|
+
constructor(services, options, dataSource) {
|
|
11
|
+
super(services, options);
|
|
12
|
+
this.type = types_1.RouteType.PrivateRoute;
|
|
13
|
+
this.dataSource = dataSource;
|
|
14
|
+
}
|
|
15
|
+
setupRoutes(router) {
|
|
16
|
+
router.get('/_audit-trail', this.handleTimeline.bind(this));
|
|
17
|
+
}
|
|
18
|
+
async handleTimeline(context) {
|
|
19
|
+
const query = context.request.query;
|
|
20
|
+
const timezone = query.timezone?.toString() || 'UTC';
|
|
21
|
+
const limit = (0, query_params_1.parsePageSize)(query['page[size]']?.toString());
|
|
22
|
+
const cursor = AuditTrailTimelineRoute.parseCursor(context);
|
|
23
|
+
// Parsed before the permission sweep so a malformed filter reads as a 400 whatever the caller
|
|
24
|
+
// is allowed to see.
|
|
25
|
+
const filters = {
|
|
26
|
+
userIds: (0, query_params_1.parseUserIds)(query.userIds?.toString()),
|
|
27
|
+
operations: (0, query_params_1.parseOperations)(query.operations?.toString()),
|
|
28
|
+
startTimestamp: (0, query_params_1.parseDateBoundary)(query.startDate?.toString(), timezone, 'start'),
|
|
29
|
+
endTimestamp: (0, query_params_1.parseDateBoundary)(query.endDate?.toString(), timezone, 'end'),
|
|
30
|
+
search: (0, query_params_1.parseSearch)(query.search?.toString()),
|
|
31
|
+
};
|
|
32
|
+
const collections = await this.readableCollections(context);
|
|
33
|
+
const { store } = this.options.auditTrail;
|
|
34
|
+
// One row over the page: the only way to know whether a further page exists without a count.
|
|
35
|
+
const fetched = collections.length
|
|
36
|
+
? await store.listTimeline({ ...filters, ...cursor, collections, limit: limit + 1 })
|
|
37
|
+
: [];
|
|
38
|
+
const page = fetched.slice(0, limit);
|
|
39
|
+
context.response.body = {
|
|
40
|
+
data: page,
|
|
41
|
+
meta: {
|
|
42
|
+
cursor: fetched.length > limit ? AuditTrailTimelineRoute.nextCursor(page, cursor) : null,
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
// Collections whose rows this caller may see at all. A record-level permission scope can't be evaluated
|
|
47
|
+
// across a whole timeline without fetching every record it mentions, so a collection the caller
|
|
48
|
+
// only sees through a permission scope is left out entirely rather than surfaced unfiltered: the row alone
|
|
49
|
+
// would reveal that a record it cannot read exists and was touched.
|
|
50
|
+
async readableCollections(context) {
|
|
51
|
+
const names = await Promise.all(this.dataSource.collections.map(async (collection) => {
|
|
52
|
+
const readable = await this.services.authorization.canRead(context, collection.name);
|
|
53
|
+
if (!readable)
|
|
54
|
+
return null;
|
|
55
|
+
return (await this.services.authorization.getScope(collection, context))
|
|
56
|
+
? null
|
|
57
|
+
: collection.name;
|
|
58
|
+
}));
|
|
59
|
+
return names.filter(Boolean);
|
|
60
|
+
}
|
|
61
|
+
// `before` is an inclusive upper bound, so the rows sharing the last row's timestamp are carried
|
|
62
|
+
// over as `excludeIds` rather than being skipped — that is what keeps a tie from falling between
|
|
63
|
+
// two pages. When the previous page ended on the same timestamp its exclusions still apply, so a
|
|
64
|
+
// timestamp holding more rows than fit on one page walks forward instead of looping.
|
|
65
|
+
//
|
|
66
|
+
// Null when that walk makes no progress. Staying on the same timestamp must add at least the last
|
|
67
|
+
// row's id to the exclusions; if it doesn't, the ids this page named are not the ones the store
|
|
68
|
+
// matched and the next page would repeat this one forever. The one way that happens today is an
|
|
69
|
+
// id past 2^53, which `fromRow` rounds on its way through `Number()` — an audit table would need
|
|
70
|
+
// ~9e15 rows to reach it. Ending the walk is the safe answer at that point; the upgrade, if such
|
|
71
|
+
// a table ever exists, is to carry the id as a string through `AuditRecord`, the cursor and the
|
|
72
|
+
// SQL binding.
|
|
73
|
+
static nextCursor(page, previous) {
|
|
74
|
+
const last = page[page.length - 1];
|
|
75
|
+
const sameBoundary = previous.before === last.timestamp;
|
|
76
|
+
const carried = sameBoundary ? previous.excludeIds : [];
|
|
77
|
+
const tied = page.filter(row => row.timestamp === last.timestamp).map(row => row.id);
|
|
78
|
+
const excludeIds = [...new Set([...carried, ...tied])];
|
|
79
|
+
if (sameBoundary && excludeIds.length === carried.length)
|
|
80
|
+
return null;
|
|
81
|
+
return { before: last.timestamp, excludeIds };
|
|
82
|
+
}
|
|
83
|
+
static parseCursor(context) {
|
|
84
|
+
const query = context.request.query;
|
|
85
|
+
const before = (0, query_params_1.parseDateBoundary)(query.before?.toString(), 'UTC', 'end');
|
|
86
|
+
const excludeIds = (query.excludeIds?.toString() ?? '')
|
|
87
|
+
.split(',')
|
|
88
|
+
.map(token => token.trim())
|
|
89
|
+
.filter(token => /^\d+$/.test(token))
|
|
90
|
+
.map(token => Number.parseInt(token, 10));
|
|
91
|
+
return { before, excludeIds };
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
exports.default = AuditTrailTimelineRoute;
|
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwtdGltZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC10aW1lbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU9BLGlFQU13QztBQUN4Qyx1Q0FBd0M7QUFDeEMsK0RBQXNDO0FBSXRDLE1BQXFCLHVCQUF3QixTQUFRLG9CQUFTO0lBSzVELFlBQ0UsUUFBdUMsRUFDdkMsT0FBaUMsRUFDakMsVUFBc0I7UUFFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQVRsQixTQUFJLEdBQUcsaUJBQVMsQ0FBQyxZQUFZLENBQUM7UUFVckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBZ0I7UUFDMUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFnQyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUEsNEJBQWEsRUFBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUQsOEZBQThGO1FBQzlGLHFCQUFxQjtRQUNyQixNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxJQUFBLDJCQUFZLEVBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVB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
|
|
@@ -13,14 +13,7 @@ export default class AuditTrailRoute extends CollectionRoute {
|
|
|
13
13
|
private static parseAt;
|
|
14
14
|
private static parseSort;
|
|
15
15
|
private static parsePagination;
|
|
16
|
-
private static parsePageSize;
|
|
17
16
|
private static parsePageNumber;
|
|
18
17
|
private static parseFilters;
|
|
19
|
-
private static parseUserIds;
|
|
20
|
-
private static parseOperations;
|
|
21
|
-
private static parseFields;
|
|
22
|
-
private static parseSearch;
|
|
23
|
-
private static parseDateBoundary;
|
|
24
|
-
private static toLocalInstant;
|
|
25
18
|
}
|
|
26
19
|
//# sourceMappingURL=audit-trail.d.ts.map
|
|
@@ -37,28 +37,15 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
|
|
40
|
-
const luxon_1 = require("luxon");
|
|
41
40
|
const audit_trail_1 = require("../../audit-trail");
|
|
41
|
+
const query_params_1 = require("../../audit-trail/query-params");
|
|
42
42
|
const record_visibility_1 = __importStar(require("../../audit-trail/record-visibility"));
|
|
43
43
|
const withhold_1 = __importStar(require("../../audit-trail/withhold"));
|
|
44
44
|
const types_1 = require("../../types");
|
|
45
45
|
const id_1 = __importDefault(require("../../utils/id"));
|
|
46
46
|
const query_string_1 = __importDefault(require("../../utils/query-string"));
|
|
47
47
|
const collection_route_1 = __importDefault(require("../collection-route"));
|
|
48
|
-
const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
|
|
49
|
-
const DATE_TIME = /^(\d{4}-\d{2}-\d{2})[T ](\d{2}):(\d{2})(?::(\d{2}))?$/;
|
|
50
|
-
// ISO 8601 instant: carries its own timezone designator (`Z` or `±HH:mm` / `±HHMM`).
|
|
51
|
-
const ISO_INSTANT = /[Zz]$|[+-]\d{2}:?\d{2}$/;
|
|
52
|
-
const DEFAULT_PAGE_SIZE = 20;
|
|
53
|
-
const MAX_PAGE_SIZE = 100;
|
|
54
48
|
const SCAN_BATCH_SIZE = 500;
|
|
55
|
-
const AUDIT_OPERATIONS = [
|
|
56
|
-
'create',
|
|
57
|
-
'update',
|
|
58
|
-
'delete',
|
|
59
|
-
'action',
|
|
60
|
-
'action_failed',
|
|
61
|
-
];
|
|
62
49
|
class AuditTrailRoute extends collection_route_1.default {
|
|
63
50
|
setupRoutes(router) {
|
|
64
51
|
router.get(`/_audit-trail/${this.collectionUrlSlug}/:id`, this.handleHistory.bind(this));
|
|
@@ -313,7 +300,7 @@ class AuditTrailRoute extends collection_route_1.default {
|
|
|
313
300
|
if (!raw)
|
|
314
301
|
throw new datasource_toolkit_1.ValidationError('Missing "at" query parameter');
|
|
315
302
|
const timezone = query.timezone?.toString() || 'UTC';
|
|
316
|
-
return
|
|
303
|
+
return (0, query_params_1.parseDateBoundary)(raw, timezone, 'start');
|
|
317
304
|
}
|
|
318
305
|
// JSON:API `sort=timestamp` → oldest first, anything else (or absent) → newest first.
|
|
319
306
|
static parseSort(context) {
|
|
@@ -324,16 +311,10 @@ class AuditTrailRoute extends collection_route_1.default {
|
|
|
324
311
|
// fall back to the defaults rather than erroring.
|
|
325
312
|
static parsePagination(context) {
|
|
326
313
|
const query = context.request.query;
|
|
327
|
-
const size =
|
|
314
|
+
const size = (0, query_params_1.parsePageSize)(query['page[size]']?.toString());
|
|
328
315
|
const number = AuditTrailRoute.parsePageNumber(query['page[number]']?.toString());
|
|
329
316
|
return { skip: (number - 1) * size, limit: size };
|
|
330
317
|
}
|
|
331
|
-
static parsePageSize(raw) {
|
|
332
|
-
const size = Number.parseInt(raw ?? '', 10);
|
|
333
|
-
if (Number.isNaN(size) || size < 1)
|
|
334
|
-
return DEFAULT_PAGE_SIZE;
|
|
335
|
-
return Math.min(size, MAX_PAGE_SIZE);
|
|
336
|
-
}
|
|
337
318
|
static parsePageNumber(raw) {
|
|
338
319
|
const number = Number.parseInt(raw ?? '', 10);
|
|
339
320
|
return Number.isNaN(number) || number < 1 ? 1 : number;
|
|
@@ -342,88 +323,14 @@ class AuditTrailRoute extends collection_route_1.default {
|
|
|
342
323
|
const query = context.request.query;
|
|
343
324
|
const timezone = query.timezone?.toString() || 'UTC';
|
|
344
325
|
return {
|
|
345
|
-
userIds:
|
|
346
|
-
operations:
|
|
347
|
-
startTimestamp:
|
|
348
|
-
endTimestamp:
|
|
349
|
-
fields:
|
|
350
|
-
search:
|
|
326
|
+
userIds: (0, query_params_1.parseUserIds)(query.userIds?.toString()),
|
|
327
|
+
operations: (0, query_params_1.parseOperations)(query.operations?.toString()),
|
|
328
|
+
startTimestamp: (0, query_params_1.parseDateBoundary)(query.startDate?.toString(), timezone, 'start'),
|
|
329
|
+
endTimestamp: (0, query_params_1.parseDateBoundary)(query.endDate?.toString(), timezone, 'end'),
|
|
330
|
+
fields: (0, query_params_1.parseFields)(query.fields?.toString()),
|
|
331
|
+
search: (0, query_params_1.parseSearch)(query.search?.toString()),
|
|
351
332
|
};
|
|
352
333
|
}
|
|
353
|
-
// Comma-separated integer ids; non-numeric tokens are dropped. Empty after parsing → no filter.
|
|
354
|
-
static parseUserIds(raw) {
|
|
355
|
-
if (!raw)
|
|
356
|
-
return undefined;
|
|
357
|
-
const ids = raw
|
|
358
|
-
.split(',')
|
|
359
|
-
.map(token => token.trim())
|
|
360
|
-
.filter(token => /^\d+$/.test(token))
|
|
361
|
-
.map(token => Number.parseInt(token, 10));
|
|
362
|
-
return ids.length > 0 ? ids : undefined;
|
|
363
|
-
}
|
|
364
|
-
// Comma-separated, from a closed set. An unrecognized value is rejected rather than dropped: a
|
|
365
|
-
// silently ignored filter returns unfiltered rows into a list the caller believes is filtered,
|
|
366
|
-
// which is worse than an error.
|
|
367
|
-
static parseOperations(raw) {
|
|
368
|
-
if (!raw)
|
|
369
|
-
return undefined;
|
|
370
|
-
const tokens = raw
|
|
371
|
-
.split(',')
|
|
372
|
-
.map(token => token.trim())
|
|
373
|
-
.filter(token => token.length > 0);
|
|
374
|
-
const unknown = tokens.find(token => !AUDIT_OPERATIONS.includes(token));
|
|
375
|
-
if (unknown) {
|
|
376
|
-
throw new datasource_toolkit_1.ValidationError(`Invalid operation: "${unknown}" (expected one of ${AUDIT_OPERATIONS.join(', ')})`);
|
|
377
|
-
}
|
|
378
|
-
return tokens.length > 0 ? tokens : undefined;
|
|
379
|
-
}
|
|
380
|
-
static parseFields(raw) {
|
|
381
|
-
if (!raw)
|
|
382
|
-
return undefined;
|
|
383
|
-
const fields = raw
|
|
384
|
-
.split(',')
|
|
385
|
-
.map(token => token.trim())
|
|
386
|
-
.filter(token => token.length > 0);
|
|
387
|
-
return fields.length > 0 ? fields : undefined;
|
|
388
|
-
}
|
|
389
|
-
// Trimmed; empty after trimming is treated the same as absent.
|
|
390
|
-
static parseSearch(raw) {
|
|
391
|
-
const trimmed = raw?.trim();
|
|
392
|
-
return trimmed || undefined;
|
|
393
|
-
}
|
|
394
|
-
// Bare day (`YYYY-MM-DD`) or wall-clock datetime (`YYYY-MM-DD[T| ]HH:mm[:ss]`), interpreted as
|
|
395
|
-
// local time in the request timezone and returned as a UTC instant so the store can compare it
|
|
396
|
-
// to stored timestamps.
|
|
397
|
-
static parseDateBoundary(raw, timezone, boundary) {
|
|
398
|
-
if (!raw)
|
|
399
|
-
return undefined;
|
|
400
|
-
const instant = AuditTrailRoute.toLocalInstant(raw, timezone, boundary);
|
|
401
|
-
if (!instant.isValid) {
|
|
402
|
-
throw new datasource_toolkit_1.ValidationError(instant.invalidReason === 'unsupported zone'
|
|
403
|
-
? `Invalid timezone: "${timezone}"`
|
|
404
|
-
: `Invalid date: "${raw}" (expected YYYY-MM-DD, YYYY-MM-DDTHH:mm, or an ISO 8601 instant)`);
|
|
405
|
-
}
|
|
406
|
-
return instant.toUTC().toISO() ?? undefined;
|
|
407
|
-
}
|
|
408
|
-
static toLocalInstant(raw, timezone, boundary) {
|
|
409
|
-
// An embedded offset already pins the instant — the request timezone and start/end boundary
|
|
410
|
-
// don't apply.
|
|
411
|
-
if (ISO_INSTANT.test(raw))
|
|
412
|
-
return luxon_1.DateTime.fromISO(raw, { setZone: true });
|
|
413
|
-
if (DATE_ONLY.test(raw)) {
|
|
414
|
-
const day = luxon_1.DateTime.fromISO(raw, { zone: timezone });
|
|
415
|
-
return boundary === 'end' ? day.endOf('day') : day.startOf('day');
|
|
416
|
-
}
|
|
417
|
-
const match = DATE_TIME.exec(raw);
|
|
418
|
-
if (!match)
|
|
419
|
-
return luxon_1.DateTime.invalid('unparsable');
|
|
420
|
-
const [, date, hours, minutes, seconds] = match;
|
|
421
|
-
const base = luxon_1.DateTime.fromISO(`${date}T${hours}:${minutes}`, { zone: timezone });
|
|
422
|
-
if (seconds !== undefined)
|
|
423
|
-
return base.set({ second: Number(seconds), millisecond: 0 });
|
|
424
|
-
// Minutes-only: end snaps to :59.999 to stay inclusive; start stays at :00.000.
|
|
425
|
-
return boundary === 'end' ? base.set({ second: 59, millisecond: 999 }) : base;
|
|
426
|
-
}
|
|
427
334
|
}
|
|
428
335
|
exports.default = AuditTrailRoute;
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLHdFQU15QztBQUN6QyxpQ0FBaUM7QUFFakMsbURBQWlEO0FBQ2pELHlGQUc2QztBQUM3Qyx1RUFHb0M7QUFDcEMsdUNBQXVDO0FBQ3ZDLHdEQUFxQztBQUNyQyw0RUFBeUQ7QUFDekQsMkVBQWtEO0FBRWxELE1BQU0sU0FBUyxHQUFHLHFCQUFxQixDQUFDO0FBQ3hDLE1BQU0sU0FBUyxHQUFHLHVEQUF1RCxDQUFDO0FBQzFFLHFGQUFxRjtBQUNyRixNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQztBQUU5QyxNQUFNLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUM3QixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUM7QUFDMUIsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBRTVCLE1BQU0sZ0JBQWdCLEdBQThCO0lBQ2xELFFBQVE7SUFDUixRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixlQUFlO0NBQ2hCLENBQUM7QUFXRixNQUFxQixlQUFnQixTQUFRLDBCQUFlO0lBQzFELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUN6QyxNQUFN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
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLHdFQU15QztBQUV6QyxtREFBaUQ7QUFDakQsaUVBT3dDO0FBQ3hDLHlGQUc2QztBQUM3Qyx1RUFHb0M7QUFDcEMsdUNBQXVDO0FBQ3ZDLHdEQUFxQztBQUNyQyw0RUFBeUQ7QUFDekQsMkVBQWtEO0FBRWxELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQVc1QixNQUFxQixlQUFnQixTQUFRLDBCQUFlO0lBQzFELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUN6QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvRSxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdGLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxJQUFBLDJCQUFxQixFQUMzRCxJQUFJLENBQUMs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
|
|
@@ -28,6 +28,10 @@ class Capabilities extends base_route_1.default {
|
|
|
28
28
|
// `x-forest-correlation-id` is emitted on every response regardless — the frontend must
|
|
29
29
|
// gate the History tab on this flag rather than inferring the feature from that header.
|
|
30
30
|
canUseAuditTrail: this.options.auditTrail !== null,
|
|
31
|
+
// The cross-collection timeline is mounted only when the store can list it: an older agent,
|
|
32
|
+
// or a custom store without `listTimeline`, omits it or answers false, and the front keeps
|
|
33
|
+
// the project page on the activity logs instead of 404ing on every batch.
|
|
34
|
+
canUseAuditTrailTimeline: Boolean(this.options.auditTrail?.store?.listTimeline),
|
|
31
35
|
checksRelationReadPermissions: !this.options.skipRelationReadPermissions,
|
|
32
36
|
},
|
|
33
37
|
collections: collections?.map(collection => {
|
|
@@ -79,4 +83,4 @@ class Capabilities extends base_route_1.default {
|
|
|
79
83
|
}
|
|
80
84
|
}
|
|
81
85
|
exports.default = Capabilities;
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwYWJpbGl0aWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JvdXRlcy9jYXBhYmlsaXRpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFNQSx3RUFBNkQ7QUFFN0QsOERBQXFDO0FBQ3JDLG9DQUErQztBQUUvQyxNQUFxQixZQUFhLFNBQVEsb0JBQVM7SUFJakQsWUFDRSxRQUF1QyxFQUN2QyxPQUFpQyxFQUNqQyxVQUFzQjtRQUV0QixLQUFLLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBUmxCLFNBQUksR0FBRyxpQkFBUyxDQUFDLFlBQVksQ0FBQztRQVNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWM7UUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxPQUFnQjtRQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FDakUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFzQyxDQUFDLGVBQWUsRUFBRSxRQUFRLENBQy9FLFVBQVUsQ0FBQyxJQUFJLENBQ2hCLENBQ0YsQ0FBQztRQUVGLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHO1lBQ3RCLHNCQUFzQixFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEdBQUcsQ0FDN0UsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxDQUFDLENBQzdDO1lBQ0QsaUJBQWlCLEVBQUU7Z0JBQ2pCLHdCQUF3QixFQUFFLElB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
|
package/dist/routes/index.js
CHANGED
|
@@ -9,6 +9,7 @@ const api_chart_collection_1 = __importDefault(require("./access/api-chart-colle
|
|
|
9
9
|
const api_chart_datasource_1 = __importDefault(require("./access/api-chart-datasource"));
|
|
10
10
|
const audit_trail_1 = __importDefault(require("./access/audit-trail"));
|
|
11
11
|
const audit_trail_correlation_1 = __importDefault(require("./access/audit-trail-correlation"));
|
|
12
|
+
const audit_trail_timeline_1 = __importDefault(require("./access/audit-trail-timeline"));
|
|
12
13
|
const chart_1 = __importDefault(require("./access/chart"));
|
|
13
14
|
const count_1 = __importDefault(require("./access/count"));
|
|
14
15
|
const count_related_1 = __importDefault(require("./access/count-related"));
|
|
@@ -127,6 +128,10 @@ function getAuditTrailRoutes(dataSource, options, services) {
|
|
|
127
128
|
// Registered before the per-collection routes: if a collection is named "correlation", its
|
|
128
129
|
// `/_audit-trail/correlation/:id` route would otherwise shadow this one.
|
|
129
130
|
new audit_trail_correlation_1.default(services, options, dataSource),
|
|
131
|
+
// A store written before the cross-collection timeline existed simply doesn't serve it.
|
|
132
|
+
...(options.auditTrail.store.listTimeline
|
|
133
|
+
? [new audit_trail_timeline_1.default(services, options, dataSource)]
|
|
134
|
+
: []),
|
|
130
135
|
...dataSource.collections.map(collection => new audit_trail_1.default(services, options, dataSource, collection.name)),
|
|
131
136
|
];
|
|
132
137
|
}
|
|
@@ -145,4 +150,4 @@ function makeRoutes(dataSource, options, services) {
|
|
|
145
150
|
// Ensure routes and middlewares are loaded in the right order.
|
|
146
151
|
return routes.sort((a, b) => a.type - b.type);
|
|
147
152
|
}
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm91dGVzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXFNQSw2QkFtQkM7QUFuTkQseUZBQW9FO0FBQ3BFLHlGQUFvRTtBQUNwRSx1RUFBbUQ7QUFDbkQsK0ZBQTBFO0FBQzFFLHlGQUFvRTtBQUNwRSwyREFBbUM7QUFDbkMsMkRBQW1DO0FBQ25DLDJFQUFrRDtBQUNsRCx1REFBK0I7QUFDL0IsdUVBQThDO0FBQzlDLHVEQUErQjtBQUMvQix5REFBaUM7QUFDakMseUVBQWdEO0FBQ2hELCtGQUFxRTtBQUNyRSxrRUFBMEM7QUFDMUMsMEVBQXVEO0FBQ3ZELHlGQUFnRTtBQUNoRSxtRUFBMkM7QUFDM0MsbUVBQTJDO0FBQzNDLHlHQUErRTtBQUMvRSxtRUFBMkM7QUFDM0MsK0VBQXNEO0FBQ3RELHFGQUE0RDtBQUM1RCwrRUFBdUQ7QUFDdkQsMkVBQWtEO0FBQ2xELHVGQUE4RDtBQUM5RCw2RUFBb0Q7QUFDcEQsdUVBQStDO0FBQy9DLDZEQUFxQztBQUNyQyxpR0FBNEU7QUFFL0QsUUFBQSxnQkFBZ0IsR0FBRztJQUM5Qix3QkFBYztJQUNkLHdCQUFhO0lBQ2IscUJBQVc7SUFDWCxzQkFBVztJQUNYLGdCQUFNO0lBQ04sNEJBQWlCO0NBQ2xCLENBQUM7QUFDVyxRQUFBLHNCQUFzQixHQUFHO0lBQ3BDLGVBQUs7SUFDTCxlQUFLO0lBQ0wsZ0JBQU07SUFDTixhQUFHO0lBQ0gsZ0JBQU07SUFDTixhQUFHO0lBQ0gsY0FBSTtJQUNKLGdCQUFNO0lBQ04sc0JBQVc7Q0FDWixDQUFDO0FBQ1csUUFBQSxtQkFBbUIsR0FBRztJQUNqQywyQkFBZ0I7SUFDaEIsdUJBQVk7SUFDWixxQkFBVTtJQUNWLG1DQUF1QjtJQUN2QixzQkFBVztDQUNaLENBQUM7QUFDVyxRQUFBLDRCQUE0QixHQUFHLENBQUMseUJBQWMsQ0FBQyxDQUFDO0FBQ2hELFFBQUEsd0JBQXdC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
|