@forestadmin/agent 1.107.3 → 1.108.1

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.
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC10cmFpbC9taWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMk1BLGdDQTBCQztBQUtELGdFQUlDO0FBUUQsb0NBZ0JDO0FBVUQsZ0RBb0JDO0FBbFNELHlDQUFzQztBQUN0QyxpQ0FBZ0Q7QUFTaEQsK0ZBQStGO0FBQy9GLHdGQUF3RjtBQUN4RixNQUFNLGFBQWEsR0FBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbEUsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixvRUFBb0U7QUFDcEUsU0FBUyxtQkFBbUIsQ0FBQyxTQUFpQjtJQUM1QyxPQUFPLEdBQUcsU0FBUyxZQUFZLENBQUM7QUFDbEMsQ0FBQztBQUVELCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsU0FBUyxzQkFBc0IsQ0FBQyxNQUEwQixFQUFFLFNBQWlCO0lBQzNFLE9BQU8sTUFBTTtRQUNYLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxTQUFTLHdCQUF3QjtRQUNoRCxDQUFDLENBQUMsR0FBRyxTQUFTLHdCQUF3QixDQUFDO0FBQzNDLENBQUM7QUFFRCx3RkFBd0Y7QUFDeEYsMEZBQTBGO0FBQzFGLDZGQUE2RjtBQUM3RiwrRkFBK0Y7QUFDL0YsK0ZBQStGO0FBQy9GLDhGQUE4RjtBQUM5RixrR0FBa0c7QUFDbEcsK0ZBQStGO0FBQy9GLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7QUFFcEQsU0FBUyxjQUFjLENBQUMsTUFBMEIsRUFBRSxJQUFZLEVBQUUsU0FBaUI7SUFDakYsTUFBTSxHQUFHLEdBQUcsR0FBRyxNQUFNLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ3ZDLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUVqRCxJQUFJLGFBQWEsS0FBSyxTQUFT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
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwtdGltZWxpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC10aW1lbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQU9BLGlFQU13QztBQUN4Qyx1Q0FBd0M7QUFDeEMsK0RBQXNDO0FBSXRDLE1BQXFCLHVCQUF3QixTQUFRLG9CQUFTO0lBSzVELFlBQ0UsUUFBdUMsRUFDdkMsT0FBaUMsRUFDakMsVUFBc0I7UUFFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQVRsQixTQUFJLEdBQUcsaUJBQVMsQ0FBQyxZQUFZLENBQUM7UUFVckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBZ0I7UUFDMUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFnQyxDQUFDO1FBQy9ELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksS0FBSyxDQUFDO1FBQ3JELE1BQU0sS0FBSyxHQUFHLElBQUEsNEJBQWEsRUFBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUQsOEZBQThGO1FBQzlGLHFCQUFxQjtRQUNyQixNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxJQUFBLDJCQUFZLEVBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNoRCxVQUFVLEVBQUUsSUFBQSw4QkFBZSxFQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUM7WUFDekQsY0FBYyxFQUFFLElBQUEsZ0NBQWlCLEVBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDO1lBQ2pGLFlBQVksRUFBRSxJQUFBLGdDQUFpQixFQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQztZQUMzRSxNQUFNLEVBQUUsSUFBQSwwQkFBVyxFQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7U0FDOUMsQ0FBQztRQUVGLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUUxQyw2RkFBNkY7UUFDN0YsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE1BQU07WUFDaEMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BGLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDUCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVyQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRztZQUN0QixJQUFJLEVBQUUsSUFBSTtZQUNWLElBQUksRUFBRTtnQkFDSixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7YUFDekY7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELHdHQUF3RztJQUN4RyxnR0FBZ0c7SUFDaEcsMkdBQTJHO0lBQzNHLG9FQUFvRTtJQUM1RCxLQUFLLENBQUMsbUJBQW1CLENBQUMsT0FBZ0I7UUFDaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLFVBQVUsRUFBQyxFQUFFO1lBQ2pELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFckYsSUFBSSxDQUFDLFFBQVE7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFFM0IsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLElBQUk7Z0JBQ04sQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQsaUdBQWlHO0lBQ2pHLGlHQUFpRztJQUNqRyxpR0FBaUc7SUFDakcscUZBQXFGO0lBQ3JGLEVBQUU7SUFDRixrR0FBa0c7SUFDbEcsZ0dBQWdHO0lBQ2hHLGdHQUFnRztJQUNoRyxpR0FBaUc7SUFDakcsaUdBQWlHO0lBQ2pHLGdHQUFnRztJQUNoRyxlQUFlO0lBQ1AsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFtQixFQUFFLFFBQWdCO1FBQzdELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUN4RCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZELElBQUksWUFBWSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUV0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBZ0I7UUFDekMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFnQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLElBQUEsZ0NBQWlCLEVBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekUsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNwRCxLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDcEMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUU1QyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRjtBQTFHRCwwQ0EwR0MifQ==
@@ -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