@forestadmin/agent 1.110.3 → 1.110.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.
@@ -0,0 +1,19 @@
1
+ import type { AuditRecord, AuditStore } from './types';
2
+ /**
3
+ * Whether a row belongs to a record that held the id before the boundary, in the trail's
4
+ * (timestamp, id) order. A boundary `delete` is the earlier record's last row, a boundary `create`
5
+ * the current record's first.
6
+ */
7
+ export declare function belongsToEarlierLife(row: AuditRecord, boundary: AuditRecord | null): boolean;
8
+ /**
9
+ * The id's latest confirmed `delete` or `create`, or null when the id has had one life only: no
10
+ * boundary at all, or a `create` with nothing filed before it.
11
+ */
12
+ export declare function lifeBoundaryOf(store: AuditStore, collection: string, recordId: string): Promise<AuditRecord | null>;
13
+ /** The rows as served: all withheld for a gone record, only the earlier lives' for a live one. */
14
+ export declare function withholdEarlierLives(rows: AuditRecord[], { gone, boundary, withhold, }: {
15
+ gone: boolean;
16
+ boundary: AuditRecord | null;
17
+ withhold: (rows: AuditRecord[]) => AuditRecord[];
18
+ }): AuditRecord[];
19
+ //# sourceMappingURL=earlier-life.d.ts.map
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.belongsToEarlierLife = belongsToEarlierLife;
4
+ exports.lifeBoundaryOf = lifeBoundaryOf;
5
+ exports.withholdEarlierLives = withholdEarlierLives;
6
+ // A delete frees the id, and a later record can take it. A live record under the caller's scope says
7
+ // nothing about the rows filed under that id before it took the id: they are another record's, and
8
+ // its values go through the same withholding as a record gone for good.
9
+ //
10
+ // A confirmed `create` marks the boundary too: a primary-key move or an unconfirmed delete frees an
11
+ // id without leaving a confirmed `delete`, and the record that takes it next starts with its create.
12
+ /**
13
+ * Whether a row belongs to a record that held the id before the boundary, in the trail's
14
+ * (timestamp, id) order. A boundary `delete` is the earlier record's last row, a boundary `create`
15
+ * the current record's first.
16
+ */
17
+ function belongsToEarlierLife(row, boundary) {
18
+ if (!boundary)
19
+ return false;
20
+ if (row.id === boundary.id)
21
+ return boundary.operation === 'delete';
22
+ return (row.timestamp < boundary.timestamp ||
23
+ (row.timestamp === boundary.timestamp && row.id < boundary.id));
24
+ }
25
+ /**
26
+ * The id's latest confirmed `delete` or `create`, or null when the id has had one life only: no
27
+ * boundary at all, or a `create` with nothing filed before it.
28
+ */
29
+ async function lifeBoundaryOf(store, collection, recordId) {
30
+ const boundaries = await store.listByRecord({
31
+ collection,
32
+ recordId,
33
+ operations: ['delete', 'create'],
34
+ order: 'desc',
35
+ });
36
+ // A pending row may never have landed, so it marks nothing. Filtered here too, not just in the
37
+ // query: a store that ignores `operations` must not turn any row into the boundary.
38
+ const boundary = boundaries.find(row => (row.operation === 'delete' || row.operation === 'create') && row.status !== 'pending') ?? null;
39
+ if (boundary?.operation !== 'create')
40
+ return boundary;
41
+ // A create with nothing filed before it began the id's only life. A record created through Forest
42
+ // has its own create here, and counting it would send every scoped search on it down the
43
+ // served-value scan. Tested on whatever comes back, should a store ignore the order or the limit.
44
+ const oldest = await store.listByRecord({ collection, recordId, order: 'asc', limit: 1 });
45
+ return oldest.some(row => belongsToEarlierLife(row, boundary)) ? boundary : null;
46
+ }
47
+ /** The rows as served: all withheld for a gone record, only the earlier lives' for a live one. */
48
+ function withholdEarlierLives(rows, { gone, boundary, withhold, }) {
49
+ if (gone)
50
+ return withhold(rows);
51
+ if (!boundary)
52
+ return rows;
53
+ const withheld = withhold(rows);
54
+ return rows.map((row, index) => (belongsToEarlierLife(row, boundary) ? withheld[index] : row));
55
+ }
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFybGllci1saWZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL2VhcmxpZXItbGlmZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWNBLG9EQVFDO0FBTUQsd0NBMkJDO0FBR0Qsb0RBa0JDO0FBMUVELHFHQUFxRztBQUNyRyxtR0FBbUc7QUFDbkcsd0VBQXdFO0FBQ3hFLEVBQUU7QUFDRixvR0FBb0c7QUFDcEcscUdBQXFHO0FBRXJHOzs7O0dBSUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxHQUFnQixFQUFFLFFBQTRCO0lBQ2pGLElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUIsSUFBSSxHQUFHLENBQUMsRUFBRSxLQUFLLFFBQVEsQ0FBQyxFQUFFO1FBQUUsT0FBTyxRQUFRLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQztJQUVuRSxPQUFPLENBQ0wsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUztRQUNsQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDLFNBQVMsSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztBQUNKLENBQUM7QUFFRDs7O0dBR0c7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUNsQyxLQUFpQixFQUNqQixVQUFrQixFQUNsQixRQUFnQjtJQUVoQixNQUFNLFVBQVUsR0FBRyxNQUFNLEtBQUssQ0FBQyxZQUFZLENBQUM7UUFDMUMsVUFBVTtRQUNWLFFBQVE7UUFDUixVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO1FBQ2hDLEtBQUssRUFBRSxNQUFNO0tBQ2QsQ0FBQyxDQUFDO0lBRUgsK0ZBQStGO0lBQy9GLG9GQUFvRjtJQUNwRixNQUFNLFFBQVEsR0FDWixVQUFVLENBQUMsSUFBSSxDQUNiLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUM5RixJQUFJLElBQUksQ0FBQztJQUVaLElBQUksUUFBUSxFQUFFLFNBQVMsS0FBSyxRQUFRO1FBQUUsT0FBTyxRQUFRLENBQUM7SUFFdEQsa0dBQWtHO0lBQ2xHLHlGQUF5RjtJQUN6RixrR0FBa0c7SUFDbEcsTUFBTSxNQUFNLEdBQUcsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRTFGLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuRixDQUFDO0FBRUQsa0dBQWtHO0FBQ2xHLFNBQWdCLG9CQUFvQixDQUNsQyxJQUFtQixFQUNuQixFQUNFLElBQUksRUFDSixRQUFRLEVBQ1IsUUFBUSxHQUtUO0lBRUQsSUFBSSxJQUFJO1FBQUUsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLFFBQVE7UUFBRSxPQUFPLElBQUksQ0FBQztJQUUzQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDIn0=
@@ -1,8 +1,9 @@
1
1
  export { default as installAuditTrailHooks, buildRecorder, MAX_SNAPSHOT_RECORDS, REDACTED, } from './instrument';
2
2
  export type { Recorder } from './instrument';
3
3
  export { captureActionPending, captureActionConfirm } from './action-capture';
4
- export { createSqlAuditStore, ensureAuditStorage, defineAuditLogModel, fieldsChangedCondition, searchCondition, toRow, fromRow, DEFAULT_SCHEMA, DEFAULT_TABLE, } from './sql-store';
4
+ export { createSqlAuditStore, ensureAuditStorage, defineAuditLogModel, toRow, fromRow, DEFAULT_SCHEMA, DEFAULT_TABLE, } from './sql-store';
5
5
  export { runAuditMigrations } from './migrations';
6
+ export { fieldsChangedCondition, jsonEscaped, matchesServedValues, searchCondition, } from './value-filters';
6
7
  export { default as revertRecord } from './revert';
7
8
  export * from './types';
8
9
  //# sourceMappingURL=index.d.ts.map
@@ -17,7 +17,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
17
17
  return (mod && mod.__esModule) ? mod : { "default": mod };
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.revertRecord = exports.runAuditMigrations = exports.DEFAULT_TABLE = exports.DEFAULT_SCHEMA = exports.fromRow = exports.toRow = exports.searchCondition = exports.fieldsChangedCondition = exports.defineAuditLogModel = exports.ensureAuditStorage = exports.createSqlAuditStore = exports.captureActionConfirm = exports.captureActionPending = exports.REDACTED = exports.MAX_SNAPSHOT_RECORDS = exports.buildRecorder = exports.installAuditTrailHooks = void 0;
20
+ exports.revertRecord = exports.searchCondition = exports.matchesServedValues = exports.jsonEscaped = exports.fieldsChangedCondition = exports.runAuditMigrations = exports.DEFAULT_TABLE = exports.DEFAULT_SCHEMA = exports.fromRow = exports.toRow = exports.defineAuditLogModel = exports.ensureAuditStorage = exports.createSqlAuditStore = exports.captureActionConfirm = exports.captureActionPending = exports.REDACTED = exports.MAX_SNAPSHOT_RECORDS = exports.buildRecorder = exports.installAuditTrailHooks = void 0;
21
21
  var instrument_1 = require("./instrument");
22
22
  Object.defineProperty(exports, "installAuditTrailHooks", { enumerable: true, get: function () { return __importDefault(instrument_1).default; } });
23
23
  Object.defineProperty(exports, "buildRecorder", { enumerable: true, get: function () { return instrument_1.buildRecorder; } });
@@ -30,15 +30,18 @@ var sql_store_1 = require("./sql-store");
30
30
  Object.defineProperty(exports, "createSqlAuditStore", { enumerable: true, get: function () { return sql_store_1.createSqlAuditStore; } });
31
31
  Object.defineProperty(exports, "ensureAuditStorage", { enumerable: true, get: function () { return sql_store_1.ensureAuditStorage; } });
32
32
  Object.defineProperty(exports, "defineAuditLogModel", { enumerable: true, get: function () { return sql_store_1.defineAuditLogModel; } });
33
- Object.defineProperty(exports, "fieldsChangedCondition", { enumerable: true, get: function () { return sql_store_1.fieldsChangedCondition; } });
34
- Object.defineProperty(exports, "searchCondition", { enumerable: true, get: function () { return sql_store_1.searchCondition; } });
35
33
  Object.defineProperty(exports, "toRow", { enumerable: true, get: function () { return sql_store_1.toRow; } });
36
34
  Object.defineProperty(exports, "fromRow", { enumerable: true, get: function () { return sql_store_1.fromRow; } });
37
35
  Object.defineProperty(exports, "DEFAULT_SCHEMA", { enumerable: true, get: function () { return sql_store_1.DEFAULT_SCHEMA; } });
38
36
  Object.defineProperty(exports, "DEFAULT_TABLE", { enumerable: true, get: function () { return sql_store_1.DEFAULT_TABLE; } });
39
37
  var migrations_1 = require("./migrations");
40
38
  Object.defineProperty(exports, "runAuditMigrations", { enumerable: true, get: function () { return migrations_1.runAuditMigrations; } });
39
+ var value_filters_1 = require("./value-filters");
40
+ Object.defineProperty(exports, "fieldsChangedCondition", { enumerable: true, get: function () { return value_filters_1.fieldsChangedCondition; } });
41
+ Object.defineProperty(exports, "jsonEscaped", { enumerable: true, get: function () { return value_filters_1.jsonEscaped; } });
42
+ Object.defineProperty(exports, "matchesServedValues", { enumerable: true, get: function () { return value_filters_1.matchesServedValues; } });
43
+ Object.defineProperty(exports, "searchCondition", { enumerable: true, get: function () { return value_filters_1.searchCondition; } });
41
44
  var revert_1 = require("./revert");
42
45
  Object.defineProperty(exports, "revertRecord", { enumerable: true, get: function () { return __importDefault(revert_1).default; } });
43
46
  __exportStar(require("./types"), exports);
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQtdHJhaWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FLc0I7QUFKcEIscUlBQUEsT0FBTyxPQUEwQjtBQUNqQywyR0FBQSxhQUFhLE9BQUE7QUFDYixrSEFBQSxvQkFBb0IsT0FBQTtBQUNwQixzR0FBQSxRQUFRLE9BQUE7QUFHVixtREFBOEU7QUFBckUsc0hBQUEsb0JBQW9CLE9BQUE7QUFBRSxzSEFBQSxvQkFBb0IsT0FBQTtBQUNuRCx5Q0FVcUI7QUFUbkIsZ0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsK0dBQUEsa0JBQWtCLE9BQUE7QUFDbEIsZ0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsbUhBQUEsc0JBQXNCLE9BQUE7QUFDdEIsNEdBQUEsZUFBZSxPQUFBO0FBQ2Ysa0dBQUEsS0FBSyxPQUFBO0FBQ0wsb0dBQUEsT0FBTyxPQUFBO0FBQ1AsMkdBQUEsY0FBYyxPQUFBO0FBQ2QsMEdBQUEsYUFBYSxPQUFBO0FBRWYsMkNBQWtEO0FBQXpDLGdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLG1DQUFtRDtBQUExQyx1SEFBQSxPQUFPLE9BQWdCO0FBQ2hDLDBDQUF3QiJ9
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQtdHJhaWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FLc0I7QUFKcEIscUlBQUEsT0FBTyxPQUEwQjtBQUNqQywyR0FBQSxhQUFhLE9BQUE7QUFDYixrSEFBQSxvQkFBb0IsT0FBQTtBQUNwQixzR0FBQSxRQUFRLE9BQUE7QUFHVixtREFBOEU7QUFBckUsc0hBQUEsb0JBQW9CLE9BQUE7QUFBRSxzSEFBQSxvQkFBb0IsT0FBQTtBQUNuRCx5Q0FRcUI7QUFQbkIsZ0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsK0dBQUEsa0JBQWtCLE9BQUE7QUFDbEIsZ0hBQUEsbUJBQW1CLE9BQUE7QUFDbkIsa0dBQUEsS0FBSyxPQUFBO0FBQ0wsb0dBQUEsT0FBTyxPQUFBO0FBQ1AsMkdBQUEsY0FBYyxPQUFBO0FBQ2QsMEdBQUEsYUFBYSxPQUFBO0FBRWYsMkNBQWtEO0FBQXpDLGdIQUFBLGtCQUFrQixPQUFBO0FBQzNCLGlEQUt5QjtBQUp2Qix1SEFBQSxzQkFBc0IsT0FBQTtBQUN0Qiw0R0FBQSxXQUFXLE9BQUE7QUFDWCxvSEFBQSxtQkFBbUIsT0FBQTtBQUNuQixnSEFBQSxlQUFlLE9BQUE7QUFFakIsbUNBQW1EO0FBQTFDLHVIQUFBLE9BQU8sT0FBZ0I7QUFDaEMsMENBQXdCIn0=
@@ -27,6 +27,12 @@ function qualifiedMigrationName002(schema, tableName) {
27
27
  ? `${schema}.${tableName}:002-index-timestamp-id`
28
28
  : `${tableName}:002-index-timestamp-id`;
29
29
  }
30
+ function qualifiedMigrationName003(schema, tableName) {
31
+ return schema
32
+ ? `${schema}.${tableName}:003-index-record-history`
33
+ : `${tableName}:003-index-record-history`;
34
+ }
35
+ const DIALECTS_WITHOUT_PARTIAL_INDEXES = new Set(['mysql', 'mariadb']);
30
36
  // Every table name claimed by an audit-trail store configured in this process, keyed by
31
37
  // `schema\0name` — both its own data table and the migration table Umzug derives from it.
32
38
  // A second store's data table can otherwise land on the exact name a first store's migration
@@ -51,6 +57,26 @@ async function indexNames(queryInterface, table, transaction) {
51
57
  const indexes = (await queryInterface.showIndex(table, { transaction }));
52
58
  return new Set(indexes.map(index => index.name));
53
59
  }
60
+ async function addIndexOnce(context, name, options) {
61
+ const table = { tableName: context.tableName, schema: context.schema };
62
+ const hasIndex = () => indexNames(context.queryInterface, table, context.transaction).then(names => names.has(name));
63
+ // Idempotent for the same reason 001 is: a process losing a concurrent-boot race retries.
64
+ if (await hasIndex())
65
+ return;
66
+ try {
67
+ await context.queryInterface.addIndex(table, {
68
+ ...options,
69
+ name,
70
+ transaction: context.transaction,
71
+ });
72
+ }
73
+ catch (error) {
74
+ // Without Postgres's advisory lock, another agent booting at the same moment can add the
75
+ // index between the check above and this statement. Anything else is a real failure.
76
+ if (!(await hasIndex().catch(() => false)))
77
+ throw error;
78
+ }
79
+ }
54
80
  async function columnNames(queryInterface, table, transaction) {
55
81
  // `describeTable`'s options type omits `transaction`, unlike its sibling queryInterface methods,
56
82
  // even though it forwards the whole options object into the underlying `sequelize.query()` call
@@ -150,28 +176,48 @@ function buildMigrations(schema, tableName) {
150
176
  // record, ordered and paged by (timestamp, id): without this, each page sorts the whole table.
151
177
  name: qualifiedMigrationName002(schema, tableName),
152
178
  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())
179
+ await addIndexOnce(context, `${context.tableName}_timestamp_id`, {
180
+ fields: ['timestamp', 'id'],
181
+ });
182
+ },
183
+ down: async ({ context }) => {
184
+ await context.queryInterface.removeIndex({ tableName: context.tableName, schema: context.schema }, `${context.tableName}_timestamp_id`, { transaction: context.transaction });
185
+ },
186
+ },
187
+ {
188
+ // A record's history is read by (collection, record_id) in (timestamp, id) order. With only
189
+ // `record_id` and `(timestamp, id)` to choose from, Postgres either reads every row the id
190
+ // holds across all collections, or walks the whole table's (timestamp, id) index under a
191
+ // LIMIT: finding a recent record's oldest row discarded 2.1M rows (534 ms) on a 2.1M-row table.
192
+ name: qualifiedMigrationName003(schema, tableName),
193
+ up: async ({ context }) => {
194
+ await addIndexOnce(context, `${context.tableName}_record_history`, {
195
+ fields: ['collection', { name: 'record_id', length: 191 }, 'timestamp', 'id'],
196
+ });
197
+ if (DIALECTS_WITHOUT_PARTIAL_INDEXES.has(context.queryInterface.sequelize.getDialect())) {
158
198
  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
199
  }
200
+ // The life boundary lookup keeps a record's `create` and `delete` rows only: without this,
201
+ // a record updated 100k times is read whole to find its one `create`.
202
+ await addIndexOnce(context, `${context.tableName}_life_boundaries`, {
203
+ fields: ['collection', { name: 'record_id', length: 191 }, 'timestamp', 'id'],
204
+ where: { operation: ['create', 'delete'] },
205
+ });
172
206
  },
173
207
  down: async ({ context }) => {
174
- await context.queryInterface.removeIndex({ tableName: context.tableName, schema: context.schema }, `${context.tableName}_timestamp_id`, { transaction: context.transaction });
208
+ const table = { tableName: context.tableName, schema: context.schema };
209
+ const existing = await indexNames(context.queryInterface, table, context.transaction);
210
+ for (const name of [
211
+ `${context.tableName}_life_boundaries`,
212
+ `${context.tableName}_record_history`,
213
+ ]) {
214
+ if (existing.has(name)) {
215
+ // eslint-disable-next-line no-await-in-loop
216
+ await context.queryInterface.removeIndex(table, name, {
217
+ transaction: context.transaction,
218
+ });
219
+ }
220
+ }
175
221
  },
176
222
  },
177
223
  ];
@@ -248,4 +294,4 @@ async function runAuditMigrations(sequelize, options) {
248
294
  await buildUmzug(sequelize, { ...options, transaction }).up();
249
295
  });
250
296
  }
251
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC10cmFpbC9taWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBcVBBLGdDQTBCQztBQUtELGdFQUlDO0FBUUQsb0NBZ0JDO0FBVUQsZ0RBb0JDO0FBNVVELHlDQUFzQztBQUN0QyxpQ0FBZ0Q7QUFTaEQsK0ZBQStGO0FBQy9GLHdGQUF3RjtBQUN4RixNQUFNLGFBQWEsR0FBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbEUsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixvRUFBb0U7QUFDcEUsU0FBUyxtQkFBbUIsQ0FBQyxTQUFpQjtJQUM1QyxPQUFPLEdBQUcsU0FBUyxZQUFZLENBQUM7QUFDbEMsQ0FBQztBQUVELCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsU0FBUyxzQkFBc0IsQ0FBQyxNQUEwQixFQUFFLFNBQWlCO0lBQzNFLE9BQU8sTUFBTTtRQUNYLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxTQUFTLHdCQUF3QjtRQUNoRCxDQUFDLENBQUMsR0FBRyxTQUFTLHdCQUF3QixDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLE1BQTBCLEVBQUUsU0FBaUI7SUFDOUUsT0FBTyxNQUFNO1FBQ1gsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFNBQVMseUJBQXlCO1FBQ2pELENBQUMsQ0FBQyxHQUFHLFNBQVMseUJBQXlCLENBQUM7QUFDNUMsQ0FBQztBQUVELHdGQUF3RjtBQUN4RiwwRkFBMEY7QUFDMUYsNkZBQTZGO0FBQzdGLCtGQUErRjtBQUMvRiwrRkFBK0Y7QUFDL0YsOEZBQThGO0FBQzlGLGtHQUFrRztBQUNsRywrRkFBK0Y7QUFDL0YsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztBQUVwRCxTQUFTLGNBQWMsQ0FBQyxNQUEwQixFQUFFLElBQVksRUFBRSxTQUFp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QUFTLENBQUMsVUFBVSxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDMUMsTUFBTSxVQUFVLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBRTFDLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBQyxXQUFXLEVBQUMsRUFBRTtRQUM5QyxNQUFNLFNBQVMsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLEVBQUU7WUFDNUQsV0FBVztZQUNYLFlBQVksRUFBRSxFQUFFLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUMzRCxDQUFDLENBQUM7UUFFSCxNQUFNLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2hFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyJ9
297
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC10cmFpbC9taWdyYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMlNBLGdDQTBCQztBQUtELGdFQUlDO0FBUUQsb0NBZ0JDO0FBVUQsZ0RBb0JDO0FBbFlELHlDQUFzQztBQUN0QyxpQ0FBZ0Q7QUFTaEQsK0ZBQStGO0FBQy9GLHdGQUF3RjtBQUN4RixNQUFNLGFBQWEsR0FBOEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFFbEUsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixvRUFBb0U7QUFDcEUsU0FBUyxtQkFBbUIsQ0FBQyxTQUFpQjtJQUM1QyxPQUFPLEdBQUcsU0FBUyxZQUFZLENBQUM7QUFDbEMsQ0FBQztBQUVELCtGQUErRjtBQUMvRixtR0FBbUc7QUFDbkcsU0FBUyxzQkFBc0IsQ0FBQyxNQUEwQixFQUFFLFNBQWlCO0lBQzNFLE9BQU8sTUFBTTtRQUNYLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxTQUFTLHdCQUF3QjtRQUNoRCxDQUFDLENBQUMsR0FBRyxTQUFTLHdCQUF3QixDQUFDO0FBQzNDLENBQUM7QUFFRCxTQUFTLHlCQUF5QixDQUFDLE1BQTBCLEVBQUUsU0FBaUI7SUFDOUUsT0FBTyxNQUFNO1FBQ1gsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJQUFJLFNBQVMseUJBQXlCO1FBQ2pELENBQUMsQ0FBQyxHQUFHLFNBQVMseUJBQXlCLENBQUM7QUFDNUMsQ0FBQztBQUVELFNBQVMseUJBQXlCLENBQUMsTUFBMEIsRUFBRSxTQUFpQjtJQUM5RSxPQUFPLE1BQU07UUFDWCxDQUFDLENBQUMsR0FBRyxNQUFNLElBQUksU0FBUywyQkFBMkI7UUFDbkQsQ0FBQyxDQUFDLEdBQUcsU0FBUywyQkFBMkIsQ0FBQztBQUM5QyxDQUFDO0FBRUQsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8s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
@@ -20,9 +20,13 @@ export default function checkRecordVisibility(collection: Collection, packedId:
20
20
  * The record can be deleted — or moved out of the caller's permission scope — between the check
21
21
  * that authorized the request and the audit read that answers it: the audit trail lives in its own
22
22
  * database, often its own engine, so no single snapshot spans both. Re-reads once the rows are in
23
- * hand, and returns null when there is nothing to re-read: a caller with no scope has nothing to
24
- * withhold, and a record already gone at the first check has already had the withholding applied —
25
- * an id recreated in the meantime would only widen what is served, never what is hidden.
23
+ * hand, and returns null only for a caller with no scope, who has nothing to withhold.
24
+ *
25
+ * Both reads count, and neither can clear the other, as in agent-ruby. The first is the only one that
26
+ * saw the record whose rows these are, so an id freed by a delete and taken by another record since
27
+ * answers for itself, never for the earlier life: gone at either read means gone. The second is the
28
+ * only one that sees a record deleted since, and the one that answers 404 when the id now belongs to
29
+ * a record this caller cannot read — even if it was already gone at the first.
26
30
  */
27
31
  export declare function recheckRecordVisibility(collection: Collection, packedId: string, context: Context, permissionScope: ConditionTree | null, wasGoneEntirely: boolean): Promise<RecordVisibility | null>;
28
32
  //# sourceMappingURL=record-visibility.d.ts.map
@@ -37,13 +37,18 @@ async function checkRecordVisibility(collection, packedId, context, permissionSc
37
37
  * The record can be deleted — or moved out of the caller's permission scope — between the check
38
38
  * that authorized the request and the audit read that answers it: the audit trail lives in its own
39
39
  * database, often its own engine, so no single snapshot spans both. Re-reads once the rows are in
40
- * hand, and returns null when there is nothing to re-read: a caller with no scope has nothing to
41
- * withhold, and a record already gone at the first check has already had the withholding applied —
42
- * an id recreated in the meantime would only widen what is served, never what is hidden.
40
+ * hand, and returns null only for a caller with no scope, who has nothing to withhold.
41
+ *
42
+ * Both reads count, and neither can clear the other, as in agent-ruby. The first is the only one that
43
+ * saw the record whose rows these are, so an id freed by a delete and taken by another record since
44
+ * answers for itself, never for the earlier life: gone at either read means gone. The second is the
45
+ * only one that sees a record deleted since, and the one that answers 404 when the id now belongs to
46
+ * a record this caller cannot read — even if it was already gone at the first.
43
47
  */
44
48
  async function recheckRecordVisibility(collection, packedId, context, permissionScope, wasGoneEntirely) {
45
- if (!permissionScope || wasGoneEntirely)
49
+ if (!permissionScope)
46
50
  return null;
47
- return checkRecordVisibility(collection, packedId, context, permissionScope);
51
+ const now = await checkRecordVisibility(collection, packedId, context, permissionScope);
52
+ return { visible: now.visible, goneEntirely: wasGoneEntirely || now.goneEntirely };
48
53
  }
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXZpc2liaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQtdHJhaWwvcmVjb3JkLXZpc2liaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFhQSxvQ0FxQkM7QUF3QkQsd0NBZUM7QUFVRCwwREFVQztBQTFGRCx3RUFLeUM7QUFFekMscURBQWtDO0FBQ2xDLHlFQUFzRDtBQUUvQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxVQUFzQixFQUN0QixRQUFnQixFQUNoQixPQUFnQixFQUNoQixlQUFxQztJQUVyQyxNQUFNLEVBQUUsR0FBRyxZQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQ0FBZSxDQUFDO1FBQ2pDLGFBQWEsRUFBRSx5Q0FBb0IsQ0FBQyxTQUFTLENBQzNDLHlDQUFvQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDdEQsZUFBZSxDQUNoQjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FDbkMsc0JBQWlCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNsRSxNQUFNLEVBQ04sSUFBSSwrQkFBVSxDQUFDLEdBQUcsZ0NBQVcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ2pFLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFpQkQsK0dBQStHO0FBQy9HLGdIQUFnSDtBQUNoSCxxR0FBcUc7QUFDckcsNEVBQTRFO0FBQzVFLGtHQUFrRztBQUNsRyxnR0FBZ0c7QUFDaEcsOENBQThDO0FBQy9CLEtBQUssVUFBVSxxQkFBcUIsQ0FDakQsVUFBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsT0FBZ0IsRUFDaEIsZUFBcUM7SUFFckMsSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFcEUsSUFBSSxNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUU3RixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztBQUNqRyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsVUFBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsT0FBZ0IsRUFDaEIsZUFBcUMsRUFDckMsZUFBd0I7SUFFeEIsSUFBSSxDQUFDLGVBQWUsSUFBSSxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFckQsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMvRSxDQUFDIn0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLXZpc2liaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQtdHJhaWwvcmVjb3JkLXZpc2liaWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFhQSxvQ0FxQkM7QUF3QkQsd0NBZUM7QUFjRCwwREFZQztBQWhHRCx3RUFLeUM7QUFFekMscURBQWtDO0FBQ2xDLHlFQUFzRDtBQUUvQyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxVQUFzQixFQUN0QixRQUFnQixFQUNoQixPQUFnQixFQUNoQixlQUFxQztJQUVyQyxNQUFNLEVBQUUsR0FBRyxZQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDekQsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQ0FBZSxDQUFDO1FBQ2pDLGFBQWEsRUFBRSx5Q0FBb0IsQ0FBQyxTQUFTLENBQzNDLHlDQUFvQixDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFDdEQsZUFBZSxDQUNoQjtLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sT0FBTyxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FDbkMsc0JBQWlCLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUNsRSxNQUFNLEVBQ04sSUFBSSwrQkFBVSxDQUFDLEdBQUcsZ0NBQVcsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ2pFLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLENBQUM7QUFpQkQsK0dBQStHO0FBQy9HLGdIQUFnSDtBQUNoSCxxR0FBcUc7QUFDckcsNEVBQTRFO0FBQzVFLGtHQUFrRztBQUNsRyxnR0FBZ0c7QUFDaEcsOENBQThDO0FBQy9CLEtBQUssVUFBVSxxQkFBcUIsQ0FDakQsVUFBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsT0FBZ0IsRUFDaEIsZUFBcUM7SUFFckMsSUFBSSxDQUFDLGVBQWU7UUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFcEUsSUFBSSxNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBRUQsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUU3RixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsWUFBWSxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztBQUNqRyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsdUJBQXVCLENBQzNDLFVBQXNCLEVBQ3RCLFFBQWdCLEVBQ2hCLE9BQWdCLEVBQ2hCLGVBQXFDLEVBQ3JDLGVBQXdCO0lBRXhCLElBQUksQ0FBQyxlQUFlO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFbEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztJQUV4RixPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDckYsQ0FBQyJ9
@@ -14,8 +14,6 @@ export declare function ensureAuditStorage(sequelize: Sequelize, options: {
14
14
  export declare function toRow(record: PendingAuditRecord & {
15
15
  status: AuditStatus;
16
16
  }): Record<string, unknown>;
17
- export declare function fieldsChangedCondition(sequelize: Sequelize, fields: string[]): import("sequelize/types/utils").Literal;
18
- export declare function searchCondition(sequelize: Sequelize, term: string): import("sequelize/types/utils").Literal;
19
17
  export declare function fromRow(row: Model): AuditRecord;
20
18
  /**
21
19
  * Returns a SQL-backed audit store. Construction is synchronous so the store can be passed to
@@ -4,12 +4,11 @@ exports.DEFAULT_TABLE = exports.DEFAULT_SCHEMA = void 0;
4
4
  exports.defineAuditLogModel = defineAuditLogModel;
5
5
  exports.ensureAuditStorage = ensureAuditStorage;
6
6
  exports.toRow = toRow;
7
- exports.fieldsChangedCondition = fieldsChangedCondition;
8
- exports.searchCondition = searchCondition;
9
7
  exports.fromRow = fromRow;
10
8
  exports.createSqlAuditStore = createSqlAuditStore;
11
9
  const sequelize_1 = require("sequelize");
12
10
  const migrations_1 = require("./migrations");
11
+ const value_filters_1 = require("./value-filters");
13
12
  exports.DEFAULT_SCHEMA = 'forest';
14
13
  exports.DEFAULT_TABLE = 'audit_logs';
15
14
  const DIALECTS_WITH_SCHEMAS = new Set(['postgres', 'mssql']);
@@ -68,82 +67,6 @@ function toRow(record) {
68
67
  status: record.status,
69
68
  };
70
69
  }
71
- // A bare `$.${field}` path treats a dot in `field` as a nested-member separator instead of a
72
- // literal character (so `profile.name` would look up `profile` → `name` instead of the top-level
73
- // key `"profile.name"` the audit row actually stores under). Quoting the segment makes it literal.
74
- function jsonPath(field) {
75
- return `$."${field.replace(/"/g, '\\"')}"`;
76
- }
77
- function fieldsChangedCondition(sequelize, fields) {
78
- const dialect = sequelize.getDialect();
79
- if (dialect === 'postgres') {
80
- const keys = fields.map(field => sequelize.escape(field)).join(',');
81
- return sequelize_1.Sequelize.literal(`(jsonb_exists_any("previous_values"::jsonb, ARRAY[${keys}]) ` +
82
- `OR jsonb_exists_any("new_values"::jsonb, ARRAY[${keys}]))`);
83
- }
84
- if (dialect === 'sqlite') {
85
- const tests = fields.flatMap(field => {
86
- const path = sequelize.escape(jsonPath(field));
87
- return [
88
- `json_type(previous_values, ${path}) IS NOT NULL`,
89
- `json_type(new_values, ${path}) IS NOT NULL`,
90
- ];
91
- });
92
- return sequelize_1.Sequelize.literal(`(${tests.join(' OR ')})`);
93
- }
94
- if (dialect === 'mysql' || dialect === 'mariadb') {
95
- const paths = fields.map(field => sequelize.escape(jsonPath(field))).join(',');
96
- return sequelize_1.Sequelize.literal(`(JSON_CONTAINS_PATH(previous_values, 'one', ${paths}) ` +
97
- `OR JSON_CONTAINS_PATH(new_values, 'one', ${paths}))`);
98
- }
99
- if (dialect === 'mssql') {
100
- const tests = fields.flatMap(field => {
101
- const path = sequelize.escape(jsonPath(field));
102
- return [
103
- `JSON_PATH_EXISTS(previous_values, ${path}) = 1`,
104
- `JSON_PATH_EXISTS(new_values, ${path}) = 1`,
105
- ];
106
- });
107
- // JSON_PATH_EXISTS requires SQL Server 2022+.
108
- return sequelize_1.Sequelize.literal(`(${tests.join(' OR ')})`);
109
- }
110
- throw new Error(`Audit-trail "fields" filter is not supported on dialect "${dialect}"`);
111
- }
112
- // JSON columns are already stored as plain text on dialects with no native JSON type (sqlite,
113
- // mssql); only postgres/mysql/mariadb need an explicit cast before a text match can run on them.
114
- function jsonColumnAsText(sequelize, column) {
115
- const dialect = sequelize.getDialect();
116
- if (dialect === 'postgres')
117
- return `${column}::text`;
118
- if (dialect === 'mysql' || dialect === 'mariadb')
119
- return `CAST(${column} AS CHAR)`;
120
- return column;
121
- }
122
- // A free-text search against the *serialized* JSON text naturally covers "keys and scalar values
123
- // at any depth" without walking the structure by hand: both a key and a value appear as a quoted
124
- // literal substring of that text. This runs as a SQL WHERE clause (not an in-memory scan of
125
- // fetched rows), so it composes with pagination and COUNT the same way every other filter does. A
126
- // redacted value can't match a search for the real value — the real value already isn't in this
127
- // text, `redactValues` replaced it before the row was ever written.
128
- function searchCondition(sequelize, term) {
129
- // `~` rather than the standard `\`: MySQL/MariaDB treat backslash as a string-literal escape
130
- // character under the default sql_mode (no NO_BACKSLASH_ESCAPES), so a bare `ESCAPE '\'` is
131
- // itself malformed there — the backslash escapes the closing quote instead of terminating the
132
- // literal. `~` has no special meaning to any of the four supported dialects' string literals, so
133
- // it sidesteps that interaction entirely. Escapes the two LIKE wildcards plus itself, so a term
134
- // containing `%`/`_`/`~` is matched literally instead of behaving like a pattern.
135
- const escaped = term.replace(/[~%_]/g, char => `~${char}`);
136
- const pattern = sequelize.escape(`%${escaped}%`);
137
- const columns = [
138
- 'action_name',
139
- 'user_first_name',
140
- 'user_last_name',
141
- 'user_email',
142
- jsonColumnAsText(sequelize, 'previous_values'),
143
- jsonColumnAsText(sequelize, 'new_values'),
144
- ];
145
- return sequelize_1.Sequelize.literal(`(${columns.map(column => `LOWER(${column}) LIKE LOWER(${pattern}) ESCAPE '~'`).join(' OR ')})`);
146
- }
147
70
  function buildHistoryWhereClause({ collection, recordId, userIds, operations, startTimestamp, endTimestamp, fields, search, order, after, }, sequelize) {
148
71
  const where = { collection, recordId };
149
72
  if (userIds)
@@ -159,9 +82,9 @@ function buildHistoryWhereClause({ collection, recordId, userIds, operations, st
159
82
  where.timestamp = timestampRange;
160
83
  const andConditions = [];
161
84
  if (fields?.length)
162
- andConditions.push(fieldsChangedCondition(sequelize, fields));
85
+ andConditions.push((0, value_filters_1.fieldsChangedCondition)(sequelize, fields));
163
86
  if (search)
164
- andConditions.push(searchCondition(sequelize, search));
87
+ andConditions.push((0, value_filters_1.searchCondition)(sequelize, search));
165
88
  if (after) {
166
89
  const past = order === 'desc' ? sequelize_1.Op.lt : sequelize_1.Op.gt;
167
90
  const at = new Date(after.timestamp);
@@ -194,7 +117,7 @@ function buildTimelineWhereClause({ collections, before, after, excludeIds, user
194
117
  if (Object.getOwnPropertySymbols(timestampRange).length)
195
118
  where.timestamp = timestampRange;
196
119
  if (search)
197
- where[sequelize_1.Op.and] = [searchCondition(sequelize, search)];
120
+ where[sequelize_1.Op.and] = [(0, value_filters_1.searchCondition)(sequelize, search)];
198
121
  return where;
199
122
  }
200
123
  async function listAuthors(model, where) {
@@ -387,4 +310,4 @@ function createSqlAuditStore(options) {
387
310
  },
388
311
  };
389
312
  }
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL3NxbC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1QkEsa0RBc0NDO0FBRUQsZ0RBU0M7QUFFRCxzQkFrQkM7QUFTRCx3REFpREM7QUFtQkQsMENBc0JDO0FBc0hELDBCQW9CQztBQVFELGtEQW9LQztBQXplRCx5Q0FBcUQ7QUFFckQsNkNBQWtEO0FBRXJDLFFBQUEsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUMxQixRQUFBLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFMUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0FBRXBDLFNBQWdCLG1CQUFtQixDQUNqQyxTQUFvQixFQUNwQixPQUErQztJQUUvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQ3JCLFVBQVUsRUFDVjtRQUNFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7UUFDckUsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RiwyQkFBMkI7UUFDM0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDdkQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRiwwRUFBMEU7UUFDMUUsUUFB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
313
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL3NxbC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3QkEsa0RBc0NDO0FBRUQsZ0RBU0M7QUFFRCxzQkFrQkM7QUFzSEQsMEJBb0JDO0FBUUQsa0RBb0tDO0FBdllELHlDQUFxRDtBQUVyRCw2Q0FBa0Q7QUFDbEQsbURBQTBFO0FBRTdELFFBQUEsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUMxQixRQUFBLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFMUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0FBRXBDLFNBQWdCLG1CQUFtQixDQUNqQyxTQUFvQixFQUNwQixPQUErQztJQUUvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQ3JCLFVBQVUsRUFDVjtRQUNFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7UUFDckUsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RiwyQkFBMkI7UUFDM0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDdkQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRiwwRUFBMEU7UUFDMUUsUUFBUSxFQUFFLEVBQUUs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
@@ -0,0 +1,11 @@
1
+ import type { AuditRecord } from './types';
2
+ import { Sequelize } from 'sequelize';
3
+ export declare function fieldsChangedCondition(sequelize: Sequelize, fields: string[]): import("sequelize/types/utils").Literal;
4
+ export declare function jsonEscaped(term: string): string;
5
+ export declare function searchCondition(sequelize: Sequelize, term: string): import("sequelize/types/utils").Literal;
6
+ /** `fieldsChangedCondition` and `searchCondition`, run on the values as served. */
7
+ export declare function matchesServedValues(entry: AuditRecord, { fields, search }: {
8
+ fields?: string[];
9
+ search?: string;
10
+ }): boolean;
11
+ //# sourceMappingURL=value-filters.d.ts.map
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fieldsChangedCondition = fieldsChangedCondition;
4
+ exports.jsonEscaped = jsonEscaped;
5
+ exports.searchCondition = searchCondition;
6
+ exports.matchesServedValues = matchesServedValues;
7
+ const sequelize_1 = require("sequelize");
8
+ const instrument_1 = require("./instrument");
9
+ // The `fields` and `search` filters, matched in SQL by the store and on the values as served by a
10
+ // route that withholds some of them. Both read the columns below, so they cannot drift apart.
11
+ const IDENTITY_COLUMNS = [
12
+ ['actionName', 'action_name'],
13
+ ['userFirstName', 'user_first_name'],
14
+ ['userLastName', 'user_last_name'],
15
+ ['userEmail', 'user_email'],
16
+ ];
17
+ const VALUE_COLUMNS = [
18
+ ['previousValues', 'previous_values'],
19
+ ['newValues', 'new_values'],
20
+ ];
21
+ // A bare `$.${field}` path treats a dot in `field` as a nested-member separator instead of a
22
+ // literal character (so `profile.name` would look up `profile` → `name` instead of the top-level
23
+ // key `"profile.name"` the audit row actually stores under). Quoting the segment makes it literal.
24
+ function jsonPath(field) {
25
+ return `$."${field.replace(/"/g, '\\"')}"`;
26
+ }
27
+ function fieldsChangedCondition(sequelize, fields) {
28
+ const dialect = sequelize.getDialect();
29
+ if (dialect === 'postgres') {
30
+ const keys = fields.map(field => sequelize.escape(field)).join(',');
31
+ return sequelize_1.Sequelize.literal(`(jsonb_exists_any("previous_values"::jsonb, ARRAY[${keys}]) ` +
32
+ `OR jsonb_exists_any("new_values"::jsonb, ARRAY[${keys}]))`);
33
+ }
34
+ if (dialect === 'sqlite') {
35
+ const tests = fields.flatMap(field => {
36
+ const path = sequelize.escape(jsonPath(field));
37
+ return [
38
+ `json_type(previous_values, ${path}) IS NOT NULL`,
39
+ `json_type(new_values, ${path}) IS NOT NULL`,
40
+ ];
41
+ });
42
+ return sequelize_1.Sequelize.literal(`(${tests.join(' OR ')})`);
43
+ }
44
+ if (dialect === 'mysql' || dialect === 'mariadb') {
45
+ const paths = fields.map(field => sequelize.escape(jsonPath(field))).join(',');
46
+ return sequelize_1.Sequelize.literal(`(JSON_CONTAINS_PATH(previous_values, 'one', ${paths}) ` +
47
+ `OR JSON_CONTAINS_PATH(new_values, 'one', ${paths}))`);
48
+ }
49
+ if (dialect === 'mssql') {
50
+ const tests = fields.flatMap(field => {
51
+ const path = sequelize.escape(jsonPath(field));
52
+ return [
53
+ `JSON_PATH_EXISTS(previous_values, ${path}) = 1`,
54
+ `JSON_PATH_EXISTS(new_values, ${path}) = 1`,
55
+ ];
56
+ });
57
+ // JSON_PATH_EXISTS requires SQL Server 2022+.
58
+ return sequelize_1.Sequelize.literal(`(${tests.join(' OR ')})`);
59
+ }
60
+ throw new Error(`Audit-trail "fields" filter is not supported on dialect "${dialect}"`);
61
+ }
62
+ // JSON columns are already stored as plain text on dialects with no native JSON type (sqlite,
63
+ // mssql); only postgres/mysql/mariadb need an explicit cast before a text match can run on them.
64
+ function jsonColumnAsText(sequelize, column) {
65
+ const dialect = sequelize.getDialect();
66
+ if (dialect === 'postgres')
67
+ return `${column}::text`;
68
+ if (dialect === 'mysql' || dialect === 'mariadb')
69
+ return `CAST(${column} AS CHAR)`;
70
+ return column;
71
+ }
72
+ // What serializing the term would have produced, minus its own surrounding quotes.
73
+ function jsonEscaped(term) {
74
+ return JSON.stringify(term).slice(1, -1);
75
+ }
76
+ // A free-text search against the *serialized* JSON text naturally covers "keys and scalar values
77
+ // at any depth" without walking the structure by hand: both a key and a value appear as a quoted
78
+ // literal substring of that text. This runs as a SQL WHERE clause (not an in-memory scan of
79
+ // fetched rows), so it composes with pagination and COUNT the same way every other filter does.
80
+ //
81
+ // Two things keep it honest about what the text holds. The term is escaped the way JSON wrote the
82
+ // values, so `15" monitor` (stored as `15\" monitor`) is found, and a bare quote can't match the
83
+ // document's own structure. And the redaction mask is removed before matching, so `search=redacted`
84
+ // can't confirm which rows hold a masked value. Both mirror agent-ruby's `Sql::TextSearch`.
85
+ function searchCondition(sequelize, term) {
86
+ // `~` rather than the standard `\`: MySQL/MariaDB treat backslash as a string-literal escape
87
+ // character under the default sql_mode (no NO_BACKSLASH_ESCAPES), so a bare `ESCAPE '\'` is
88
+ // itself malformed there — the backslash escapes the closing quote instead of terminating the
89
+ // literal. `~` has no special meaning to any of the four supported dialects' string literals, so
90
+ // it sidesteps that interaction entirely. Escapes the two LIKE wildcards plus itself, so a term
91
+ // containing `%`/`_`/`~` is matched literally instead of behaving like a pattern.
92
+ const like = (expression, text) => {
93
+ const escaped = text.replace(/[~%_]/g, char => `~${char}`);
94
+ return `LOWER(${expression}) LIKE LOWER(${sequelize.escape(`%${escaped}%`)}) ESCAPE '~'`;
95
+ };
96
+ const valuesAsText = (column) => `REPLACE(${jsonColumnAsText(sequelize, column)}, ${sequelize.escape(instrument_1.REDACTED)}, '')`;
97
+ const clauses = [
98
+ ...IDENTITY_COLUMNS.map(([, column]) => like(column, term)),
99
+ ...VALUE_COLUMNS.map(([, column]) => like(valuesAsText(column), jsonEscaped(term))),
100
+ ];
101
+ return sequelize_1.Sequelize.literal(`(${clauses.join(' OR ')})`);
102
+ }
103
+ /** `fieldsChangedCondition` and `searchCondition`, run on the values as served. */
104
+ function matchesServedValues(entry, { fields, search }) {
105
+ const sides = VALUE_COLUMNS.map(([attribute]) => entry[attribute] ?? {});
106
+ const touchesField = !fields ||
107
+ sides.some(values => fields.some(field => Object.prototype.hasOwnProperty.call(values, field)));
108
+ if (!touchesField)
109
+ return false;
110
+ if (!search)
111
+ return true;
112
+ const term = search.toLowerCase();
113
+ const valueTerm = jsonEscaped(term);
114
+ return (IDENTITY_COLUMNS.some(([attribute]) => entry[attribute]?.toLowerCase().includes(term)) ||
115
+ sides.some(values => JSON.stringify(values).split(instrument_1.REDACTED).join('').toLowerCase().includes(valueTerm)));
116
+ }
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUtZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdWRpdC10cmFpbC92YWx1ZS1maWx0ZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBMkJBLHdEQWlEQztBQWNELGtDQUVDO0FBV0QsMENBc0JDO0FBR0Qsa0RBcUJDO0FBbkpELHlDQUFzQztBQUV0Qyw2Q0FBd0M7QUFFeEMsa0dBQWtHO0FBQ2xHLDhGQUE4RjtBQUM5RixNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQztJQUM3QixDQUFDLGVBQWUsRUFBRSxpQkFBaUIsQ0FBQztJQUNwQyxDQUFDLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQztJQUNsQyxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUM7Q0FDbkIsQ0FBQztBQUVYLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUM7SUFDckMsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO0NBQ25CLENBQUM7QUFFWCw2RkFBNkY7QUFDN0YsaUdBQWlHO0FBQ2pHLG1HQUFtRztBQUNuRyxTQUFTLFFBQVEsQ0FBQyxLQUFhO0lBQzdCLE9BQU8sTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFnQixzQkFBc0IsQ0FBQyxTQUFvQixFQUFFLE1BQWdCO0lBQzNFLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUV2QyxJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVwRSxPQUFPLHFCQUFTLENB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
@@ -37,6 +37,7 @@ 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 earlier_life_1 = require("../../audit-trail/earlier-life");
40
41
  const record_visibility_1 = __importStar(require("../../audit-trail/record-visibility"));
41
42
  const withhold_1 = __importDefault(require("../../audit-trail/withhold"));
42
43
  const types_1 = require("../../types");
@@ -101,13 +102,21 @@ class AuditTrailCorrelationRoute extends base_route_1.default {
101
102
  return null;
102
103
  }
103
104
  const gone = after ? after.goneEntirely : target.goneEntirely;
104
- if (!target.permissionScope || !gone)
105
+ if (!target.permissionScope)
105
106
  return entries;
106
- return (0, withhold_1.default)(entries, {
107
- collection: target.collectionObject,
108
- permissionScope: target.permissionScope,
109
- timezone: query_string_1.default.parseCaller(context, { defaultTimezone: 'UTC' }).timezone,
110
- logger: this.options.logger,
107
+ // Live now, but the rows before the current record took the id may be an earlier record's.
108
+ const boundary = gone
109
+ ? null
110
+ : await (0, earlier_life_1.lifeBoundaryOf)(this.options.auditTrail.store, target.collection, target.recordId);
111
+ return (0, earlier_life_1.withholdEarlierLives)(entries, {
112
+ gone,
113
+ boundary,
114
+ withhold: rows => (0, withhold_1.default)(rows, {
115
+ collection: target.collectionObject,
116
+ permissionScope: target.permissionScope,
117
+ timezone: query_string_1.default.parseCaller(context, { defaultTimezone: 'UTC' }).timezone,
118
+ logger: this.options.logger,
119
+ }),
111
120
  });
112
121
  }
113
122
  // Returns null (after issuing the 404) when a configured record-level permission scope excludes the id —
@@ -154,4 +163,4 @@ class AuditTrailCorrelationRoute extends base_route_1.default {
154
163
  }
155
164
  }
156
165
  exports.default = AuditTrailCorrelationRoute;
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwtY29ycmVsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC1jb3JyZWxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLHdFQUFrRTtBQUVsRSx5RkFFNkM7QUFDN0MsMEVBQXdFO0FBQ3hFLHVDQUFrRDtBQUNsRCw0RUFBeUQ7QUFDekQsK0RBQXNDO0FBVXRDLE1BQXFCLDBCQUEyQixTQUFRLG9CQUFTO0lBSy9ELFlBQ0UsUUFBdUMsRUFDdkMsT0FBaUMsRUFDakMsVUFBc0I7UUFFdEIsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQVRsQixTQUFJLEdBQUcsaUJBQVMsQ0FBQyxZQUFZLENBQUM7UUFVckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7SUFDL0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsMkNBQTJDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN2RixzRUFBc0U7UUFDdEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU87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
166
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwtY29ycmVsYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC1jb3JyZWxhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9BLHdFQUFrRTtBQUVsRSxpRUFBc0Y7QUFDdEYseUZBRTZDO0FBQzdDLDBFQUF3RTtBQUN4RSx1Q0FBa0Q7QUFDbEQsNEVBQXlEO0FBQ3pELCtEQUFzQztBQVV0QyxNQUFxQiwwQkFBMkIsU0FBUSxvQkFBUztJQUsvRCxZQUNFLFFBQXVDLEVBQ3ZDLE9BQWlDLEVBQ2pDLFVBQXNCO1FBRXRCLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFUbEIsU0FBSSxHQUFHLGlCQUFTLENBQUMsWUFBWSxDQUFDO1FBVXJDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBYztRQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLDJDQUEyQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDdkYsc0VBQXNFO1FBQ3RFLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDekUsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDekMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE1B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
@@ -5,7 +5,6 @@ export default class AuditTrailRoute extends CollectionRoute {
5
5
  setupRoutes(router: Router): void;
6
6
  handleHistory(context: Context): Promise<void>;
7
7
  private scanServedValues;
8
- private static matchesServedValues;
9
8
  private withhold;
10
9
  handleStateAt(context: Context): Promise<void>;
11
10
  private fetchCurrentRecord;
@@ -38,6 +38,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  const datasource_toolkit_1 = require("@forestadmin/datasource-toolkit");
40
40
  const audit_trail_1 = require("../../audit-trail");
41
+ const earlier_life_1 = require("../../audit-trail/earlier-life");
41
42
  const query_params_1 = require("../../audit-trail/query-params");
42
43
  const record_visibility_1 = __importStar(require("../../audit-trail/record-visibility"));
43
44
  const withhold_1 = __importStar(require("../../audit-trail/withhold"));
@@ -77,8 +78,8 @@ class AuditTrailRoute extends collection_route_1.default {
77
78
  // saw rather than it silently drifting across pages, mirroring Forest's activity-logs route.
78
79
  const isFirstFetch = context.request.query['page[number]'] === undefined;
79
80
  const filtersOnValues = Boolean(fields || search);
80
- const serveMatchedValues = async (scope) => {
81
- const matched = await this.scanServedValues(context, scope, rowFilters, {
81
+ const serveMatchedValues = async (withholdServed) => {
82
+ const matched = await this.scanServedValues(context, withholdServed, rowFilters, {
82
83
  fields,
83
84
  search,
84
85
  order,
@@ -93,8 +94,14 @@ class AuditTrailRoute extends collection_route_1.default {
93
94
  },
94
95
  };
95
96
  };
97
+ const withholdAll = (rows) => permissionScope ? this.withhold(rows, permissionScope, context) : rows;
96
98
  if (permissionScope && goneEntirely && filtersOnValues) {
97
- await serveMatchedValues(permissionScope);
99
+ await serveMatchedValues(withholdAll);
100
+ // Gone at the check, so everything stays withheld whatever the re-read finds; it is asked
101
+ // only for the 404, when the id has since been taken by a record this caller cannot read.
102
+ const recheck = await (0, record_visibility_1.recheckRecordVisibility)(this.collection, context.params.id, context, permissionScope, goneEntirely);
103
+ if (recheck && !recheck.visible)
104
+ context.throw(types_1.HttpCode.NotFound, 'Record does not exists');
98
105
  return;
99
106
  }
100
107
  // `count` reflects the active filters and is independent of the page.
@@ -114,18 +121,24 @@ class AuditTrailRoute extends collection_route_1.default {
114
121
  return;
115
122
  }
116
123
  const gone = after ? after.goneEntirely : goneEntirely;
117
- // Gone between the check and the read: this answer withholds, so the rows, count and authors
118
- // matched in SQL above must not decide what is served either.
119
- if (permissionScope && gone && filtersOnValues) {
120
- await serveMatchedValues(permissionScope);
124
+ // Live now, but the id may have been freed and taken since: the rows before the current record
125
+ // took it are an earlier record's, which the current one's scope says nothing about.
126
+ const boundary = permissionScope && !gone
127
+ ? await (0, earlier_life_1.lifeBoundaryOf)(store, this.collection.name, context.params.id)
128
+ : null;
129
+ const withholdServed = (rows) => (0, earlier_life_1.withholdEarlierLives)(rows, { gone, boundary, withhold: withholdAll });
130
+ // Gone between the check and the read, or carrying an earlier life: this answer withholds, so
131
+ // the rows, count and authors matched in SQL above must not decide what is served either.
132
+ if (permissionScope && (gone || boundary) && filtersOnValues) {
133
+ await serveMatchedValues(withholdServed);
121
134
  return;
122
135
  }
123
136
  // A genuinely deleted record bypasses the permission-scope check above — there's nothing left to check
124
137
  // existence against — but create/update/delete rows still carry captured column values from
125
138
  // when the record existed. If those values themselves would have failed the caller's permission scope,
126
139
  // withhold them while still surfacing that the row happened, by whom and when: that part
127
- // stays visible regardless.
128
- const data = permissionScope && gone ? this.withhold(rawData, permissionScope, context) : rawData;
140
+ // stays visible regardless. The same holds for an earlier record that held this id.
141
+ const data = permissionScope && (gone || boundary) ? withholdServed(rawData) : rawData;
129
142
  context.response.body = {
130
143
  data,
131
144
  meta: { count, ...(availableUsers && { availableUsers }) },
@@ -137,7 +150,7 @@ class AuditTrailRoute extends collection_route_1.default {
137
150
  // scanning the whole history: in batches, keeping only the page asked for, each continuing past
138
151
  // the last row read rather than at an offset that entries written in between would shift, and
139
152
  // bounded at the instant the scan starts so an id taken since cannot keep it chasing new rows.
140
- async scanServedValues(context, permissionScope, rowFilters, { fields, search, order, skip, limit, }) {
153
+ async scanServedValues(context, withholdServed, rowFilters, { fields, search, order, skip, limit, }) {
141
154
  const { store } = this.options.auditTrail;
142
155
  const now = new Date().toISOString();
143
156
  const endTimestamp = rowFilters.endTimestamp && rowFilters.endTimestamp < now ? rowFilters.endTimestamp : now;
@@ -155,7 +168,7 @@ class AuditTrailRoute extends collection_route_1.default {
155
168
  limit: SCAN_BATCH_SIZE,
156
169
  ...(after && { after: { timestamp: after.timestamp, id: after.id } }),
157
170
  });
158
- const matched = this.withhold(rows, permissionScope, context).filter(entry => AuditTrailRoute.matchesServedValues(entry, fields, search));
171
+ const matched = withholdServed(rows).filter(entry => (0, audit_trail_1.matchesServedValues)(entry, { fields, search }));
159
172
  for (const entry of matched) {
160
173
  if (count >= skip && page.length < limit)
161
174
  page.push(entry);
@@ -174,21 +187,6 @@ class AuditTrailRoute extends collection_route_1.default {
174
187
  } while (rows.length === SCAN_BATCH_SIZE);
175
188
  return { page, count, authors };
176
189
  }
177
- // The SQL store's `fieldsChangedCondition` and `searchCondition`, run on the values as served.
178
- static matchesServedValues(entry, fields, search) {
179
- const sides = [entry.previousValues ?? {}, entry.newValues ?? {}];
180
- const term = search?.toLowerCase();
181
- const touchesField = !fields ||
182
- sides.some(values => fields.some(field => Object.prototype.hasOwnProperty.call(values, field)));
183
- const texts = [
184
- entry.actionName,
185
- entry.userFirstName,
186
- entry.userLastName,
187
- entry.userEmail,
188
- ...sides.map(values => JSON.stringify(values)),
189
- ];
190
- return touchesField && (!term || texts.some(text => text?.toLowerCase().includes(term)));
191
- }
192
190
  withhold(entries, permissionScope, context) {
193
191
  return (0, withhold_1.default)(entries, {
194
192
  collection: this.collection,
@@ -233,6 +231,14 @@ class AuditTrailRoute extends collection_route_1.default {
233
231
  return;
234
232
  }
235
233
  const goneNow = after ? after.goneEntirely : goneEntirely;
234
+ // A live record whose id was freed and taken since: a state before that boundary is the
235
+ // earlier record's, which the current one's scope says nothing about. Strictly before: at the
236
+ // boundary's own instant the state already reflects every row there, including a replacement
237
+ // `create` sharing it.
238
+ const boundary = permissionScope && !goneNow
239
+ ? await (0, earlier_life_1.lifeBoundaryOf)(store, this.collection.name, context.params.id)
240
+ : null;
241
+ const ofEarlierLife = Boolean(boundary && at < boundary.timestamp);
236
242
  // `startTimestamp` is an inclusive lower bound, so an entry timestamped exactly `at` comes
237
243
  // back too — but the record already reflects that entry's change at instant `at`, so it must
238
244
  // be kept rather than reverted (which would wrongly return the state just *before* it).
@@ -263,7 +269,7 @@ class AuditTrailRoute extends collection_route_1.default {
263
269
  // kept — withholds too: absent is not the same as passing, here as everywhere else. The packed
264
270
  // id is merged in first for the same reason it is on a row: a read-only primary key never lands
265
271
  // in the capture, so a scope on the id would blank the very record it names.
266
- if (goneNow &&
272
+ if ((goneNow || ofEarlierLife) &&
267
273
  !(0, withhold_1.permissionScopeAccepts)(
268
274
  // `false`: the reconstruction may sit on the far side of a primary-key move this route
269
275
  // cannot see, so the requested id does not answer for a key the trail redacted.
@@ -333,4 +339,4 @@ class AuditTrailRoute extends collection_route_1.default {
333
339
  }
334
340
  }
335
341
  exports.default = AuditTrailRoute;
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLHdFQU15QztBQUV6QyxtREFBaUQ7QUFDakQsaUVBT3dDO0FBQ3hDLHlGQUc2QztBQUM3Qyx1RUFHb0M7QUFDcEMsdUNBQXVDO0FBQ3ZDLHdEQUFxQztBQUNyQyw0RUFBeUQ7QUFDekQsMkVBQWtEO0FBRWxELE1BQU0sZUFBZSxHQUFHLEdBQUcsQ0FBQztBQVc1QixNQUFxQixlQUFnQixTQUFRLDBCQUFlO0lBQzFELFdBQVcsQ0FBQyxNQUFjO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxDQUFDLGlCQUFpQixZQUFZLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUFnQjtRQUN6QyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvRSxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzdGLE1BQU0sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxJQUFBLDJCQUFxQixFQUMzRCxJQUFJLENBQUMs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
342
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdHJhaWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGVzL2FjY2Vzcy9hdWRpdC10cmFpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLHdFQU15QztBQUV6QyxtREFBc0U7QUFDdEUsaUVBQXNGO0FBQ3RGLGlFQU93QztBQUN4Qyx5RkFHNkM7QUFDN0MsdUVBR29DO0FBQ3BDLHVDQUF1QztBQUN2Qyx3REFBcUM7QUFDckMsNEVBQXlEO0FBQ3pELDJFQUFrRDtBQUVsRCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFXNUIsTUFBcUIsZUFBZ0IsU0FBUSwwQkFBZTtJQUMxRCxXQUFXLENBQUMsTUFBYztRQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLENBQUMsaUJBQWlCLE1BQU0sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsWUFBWSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakcsQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDekMsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFL0UsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM3RixNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sSUFBQSwyQkFBcUIsRUFD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/agent",
3
- "version": "1.110.3",
3
+ "version": "1.110.4",
4
4
  "main": "dist/index.js",
5
5
  "license": "Apache-2.0",
6
6
  "publishConfig": {
@@ -31,6 +31,8 @@
31
31
  "light-my-request": "^5.14.0",
32
32
  "luxon": "^3.2.1",
33
33
  "object-hash": "^3.0.0",
34
+ "pg": "^8.8.0",
35
+ "pg-hstore": "^2.3.4",
34
36
  "sequelize": "^6.37.8",
35
37
  "superagent": "^10.3.0",
36
38
  "umzug": "^3.8.2",
@@ -51,7 +53,7 @@
51
53
  "@fastify/express": "^1.1.0",
52
54
  "@forestadmin/agent-bff": "1.42.2",
53
55
  "@forestadmin/datasource-sql": "1.17.17",
54
- "@forestadmin/workflow-executor": "1.34.0",
56
+ "@forestadmin/workflow-executor": "1.35.0",
55
57
  "@nestjs/common": "^11.1.24",
56
58
  "@nestjs/core": "^11.1.24",
57
59
  "@nestjs/platform-express": "^11.1.24",
@@ -76,7 +78,7 @@
76
78
  "peerDependencies": {
77
79
  "@fastify/express": "^1.1.0 || ^2.0.0 || ^3.0.0 || ^4.0.0",
78
80
  "@forestadmin/agent-bff": "1.42.2",
79
- "@forestadmin/workflow-executor": "1.34.0"
81
+ "@forestadmin/workflow-executor": "1.35.0"
80
82
  },
81
83
  "peerDependenciesMeta": {
82
84
  "@fastify/express": {