@forestadmin/agent 1.110.2 → 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.
- package/dist/audit-trail/earlier-life.d.ts +19 -0
- package/dist/audit-trail/earlier-life.js +56 -0
- package/dist/audit-trail/index.d.ts +2 -1
- package/dist/audit-trail/index.js +7 -4
- package/dist/audit-trail/migrations.js +65 -19
- package/dist/audit-trail/record-visibility.d.ts +7 -3
- package/dist/audit-trail/record-visibility.js +11 -6
- package/dist/audit-trail/sql-store.d.ts +0 -2
- package/dist/audit-trail/sql-store.js +5 -82
- package/dist/audit-trail/value-filters.d.ts +11 -0
- package/dist/audit-trail/value-filters.js +117 -0
- package/dist/routes/access/audit-trail-correlation.js +16 -7
- package/dist/routes/access/audit-trail.d.ts +0 -1
- package/dist/routes/access/audit-trail.js +34 -28
- package/package.json +8 -6
|
@@ -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,
|
|
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.
|
|
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,
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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
|
-
|
|
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
|
|
24
|
-
*
|
|
25
|
-
*
|
|
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
|
|
41
|
-
*
|
|
42
|
-
*
|
|
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
|
|
49
|
+
if (!permissionScope)
|
|
46
50
|
return null;
|
|
47
|
-
|
|
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,
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0LXRyYWlsL3NxbC1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3QkEsa0RBc0NDO0FBRUQsZ0RBU0M7QUFFRCxzQkFrQkM7QUFzSEQsMEJBb0JDO0FBUUQsa0RBb0tDO0FBdllELHlDQUFxRDtBQUVyRCw2Q0FBa0Q7QUFDbEQsbURBQTBFO0FBRTdELFFBQUEsY0FBYyxHQUFHLFFBQVEsQ0FBQztBQUMxQixRQUFBLGFBQWEsR0FBRyxZQUFZLENBQUM7QUFFMUMsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBRTdELE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDO0FBRXBDLFNBQWdCLG1CQUFtQixDQUNqQyxTQUFvQixFQUNwQixPQUErQztJQUUvQyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQ3JCLFVBQVUsRUFDVjtRQUNFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7UUFDckUsc0ZBQXNGO1FBQ3RGLDRGQUE0RjtRQUM1RiwyQkFBMkI7UUFDM0IsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsU0FBUyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDdkQsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUU7UUFDeEQsNEZBQTRGO1FBQzVGLDJGQUEyRjtRQUMzRiwwRUFBMEU7UUFDMUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7UUFDbkQsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUU7UUFDcEQsNEZBQTRGO1FBQzVGLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQ3hELFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQ3ZELFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO1FBQ3BELHdDQUF3QztRQUN4QyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtRQUNyRCxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtRQUMzRCxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQVMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFO1FBQzVFLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxxQkFBUyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7UUFDdkUsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFTLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRTtLQUMzRSxFQUNEO1FBQ0UsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztRQUM1QixVQUFVLEVBQUUsS0FBSztRQUNqQixXQUFXLEVBQUUsSUFBSTtRQUNqQixlQUFlLEVBQUUsSUFBSTtLQUN0QixDQUNGLENBQUM7QUFDSixDQUFDO0FBRU0sS0FBSyxVQUFVLGtCQUFrQixDQUN0QyxTQUFvQixFQUNwQixPQUErQztJQUUvQyxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUU5RixNQUFNLElBQUEsK0JBQWtCLEVBQUMsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUU5RSxPQUFPLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELFNBQWdCLEtBQUssQ0FDbkIsTUFBb0Q7SUFFcEQsT0FBTztRQUNMLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtRQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1FBQ25DLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtRQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO1FBQzdCLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztRQUNyQyxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtLQUN0QixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsdUJBQXVCLENBQzlCLEVBQ0UsVUFBVSxFQUNWLFFBQVEsRUFDUixPQUFPLEVBQ1AsVUFBVSxFQUNWLGNBQWMsRUFDZCxZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxHQUNhLEVBQ3BCLFNBQW9CO0lBRXBCLE1BQU0sS0FBSyxHQUFxQyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUV6RSxJQUFJLE9BQU87UUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDakQsSUFBSSxVQUFVLEVBQUUsTUFBTTtRQUFFLEtBQUssQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLGNBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUVsRSxNQUFNLGNBQWMsR0FBeUIsRUFBRSxDQUFDO0lBQ2hELElBQUksY0FBYztRQUFFLGNBQWMsQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEUsSUFBSSxZQUFZO1FBQUUsY0FBYyxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNO1FBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFFMUYsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLElBQUksTUFBTSxFQUFFLE1BQU07UUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUEsc0NBQXNCLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDbEYsSUFBSSxNQUFNO1FBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFBLCtCQUFlLEVBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFbkUsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxHQUFHLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLGNBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGNBQUUsQ0FBQyxFQUFFLENBQUM7UUFDOUMsTUFBTSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXJDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDakIsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztTQUN0RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxhQUFhLENBQUMsTUFBTTtRQUFFLEtBQUssQ0FBQyxjQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDO0lBRXhELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVELFNBQVMsd0JBQXdCLENBQy9CLEVBQ0UsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsVUFBVSxFQUNWLE9BQU8sRUFDUCxVQUFVLEVBQ1YsY0FBYyxFQUNkLFlBQVksRUFDWixNQUFNLEdBQzRCLEVBQ3BDLFNBQW9CO0lBRXBCLE1BQU0sS0FBSyxHQUFxQyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7SUFFekYsSUFBSSxPQUFPO1FBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsY0FBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ2pELElBQUksVUFBVSxFQUFFLE1BQU07UUFBRSxLQUFLLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxjQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDbEUsSUFBSSxVQUFVLEVBQUUsTUFBTTtRQUFFLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLGNBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUU5RCxNQUFNLGNBQWMsR0FBeUIsRUFBRSxDQUFDO0lBRWhELDBGQUEwRjtJQUMxRixNQUFNLFdBQVcsR0FBRyxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMxRixNQUFNLFdBQVcsR0FBRyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUV6RixJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixjQUFjLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QixjQUFjLENBQUMsY0FBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNO1FBQUUsS0FBSyxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUM7SUFFMUYsSUFBSSxNQUFNO1FBQUUsS0FBSyxDQUFDLGNBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUEsK0JBQWUsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUVqRSxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsV0FBVyxDQUN4QixLQUF5QixFQUN6QixLQUF1QztJQUV2Qyx3RkFBd0Y7SUFDeEYsZ0VBQWdFO0lBQ2hFLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ2hDLEtBQUs7UUFDTCxVQUFVLEVBQUU7WUFDVixRQUFRO1lBQ1IsQ0FBQyxxQkFBUyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUscUJBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztZQUN4RSxDQUFDLHFCQUFTLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxxQkFBUyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO1lBQ3RFLENBQUMscUJBQVMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLHFCQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO1NBQ2hFO1FBQ0QsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDO1FBQ2pCLEdBQUcsRUFBRSxJQUFJO1FBQ1QsV0FBVyxFQUFFLElBQUk7S0FDbEIsQ0FBQyxDQUtBLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLEVBQUUsRUFBRSxHQUFHLENBQUMsTUFBTTtRQUNkLFNBQVMsRUFBRSxHQUFHLENBQUMsYUFBYSxJQUFJLElBQUk7UUFDcEMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksSUFBSTtRQUNsQyxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVMsSUFBSSxJQUFJO0tBQzdCLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUVELFNBQWdCLE9BQU8sQ0FBQyxHQUFVO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQTRCLENBQUM7SUFDbEUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQztJQUU1QixPQUFPO1FBQ0wsRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BCLFNBQVMsRUFBRSxTQUFTLFlBQVksSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbEYsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFxQztRQUN0RCxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQW9CO1FBQ3RDLFFBQVEsRUFBRyxLQUFLLENBQUMsUUFBbUIsSUFBSSxJQUFJO1FBQzVDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBZ0I7UUFDOUIsYUFBYSxFQUFHLEtBQUssQ0FBQyxhQUF3QixJQUFJLElBQUk7UUFDdEQsWUFBWSxFQUFHLEtBQUssQ0FBQyxZQUF1QixJQUFJLElBQUk7UUFDcEQsU0FBUyxFQUFHLEtBQUssQ0FBQyxTQUFvQixJQUFJLElBQUk7UUFDOUMsVUFBVSxFQUFHLEtBQUssQ0FBQyxVQUFxQixJQUFJLElBQUk7UUFDaEQsY0FBYyxFQUFFLEtBQUssQ0FBQyxjQUF3QjtRQUM5QyxjQUFjLEVBQUcsS0FBSyxDQUFDLGNBQTBDLElBQUksRUFBRTtRQUN2RSxTQUFTLEVBQUcsS0FBSyxDQUFDLFNBQXFDLElBQUksRUFBRTtRQUM3RCxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQXFCO0tBQ3BDLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxPQUE0QjtJQUk5RCxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxHQUFHLHNCQUFjLEVBQUUsU0FBUyxHQUFHLHFCQUFhLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFekYsSUFBSSxTQUFTLEdBQXFCLElBQUksQ0FBQztJQUN2QyxJQUFJLFNBQVMsR0FBeUUsSUFBSSxDQUFDO0lBRTNGLE1BQU0sSUFBSSxHQUFHLEdBQWtFLEVBQUU7UUFDL0UsSUFBSSxTQUFTO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFaEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxxQkFBUyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdkUsU0FBUyxHQUFHLFVBQVUsQ0FBQztRQUN2QixTQUFTLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN0QixJQUFJLENBQUM7Z0JBQ0gseUZBQXlGO2dCQUN6RixzRkFBc0Y7Z0JBQ3RGLDBGQUEwRjtnQkFDMUYsMEZBQTBGO2dCQUMxRix5RkFBeUY7Z0JBQ3pGLHNGQUFzRjtnQkFDdEYsMkVBQTJFO2dCQUMzRSxNQUFNLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDckQsTUFBTSxLQUFLLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFFMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUMvQixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixrRUFBa0U7Z0JBQ2xFLE1BQU0sVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDaEQsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDakIsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDakIsTUFBTSxLQUFLLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVMLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUMsQ0FBQztJQUVGLHlGQUF5RjtJQUN6RixNQUFNLGtCQUFrQixHQUFHO1FBQ3pCLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQztRQUNwQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7S0FDTCxDQUFDO0lBRVgsT0FBTztRQUNMLEtBQUssRUFBRTtZQUNMLEtBQUssQ0FBQyxJQUFJO2dCQUNSLE1BQU0sSUFBSSxFQUFFLENBQUM7WUFDZixDQUFDO1lBQ0QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNO2dCQUN4QixNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFO29CQUN0RSxXQUFXLEVBQUUsSUFBSTtpQkFDbEIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvQixDQUFDO1lBQ0QsdUZBQXVGO1lBQ3ZGLDZGQUE2RjtZQUM3Riw2RkFBNkY7WUFDN0YsNkZBQTZGO1lBQzdGLDJGQUEyRjtZQUMzRix1Q0FBdUM7WUFDdkMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQU87Z0JBQzlCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxVQUFVLENBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUM5RCxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztnQkFFRixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLEtBQUs7Z0JBQ3JCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUMvQixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN6RixDQUFDO1lBQ0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLO2dCQUN0QixNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQzNDLE1BQU0sRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDO2dCQUNqRCxNQUFNLFNBQVMsR0FBRyxLQUFLLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFFcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDO29CQUMvQixLQUFLLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztvQkFDakQsS0FBSyxFQUFFO3dCQUNMLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQzt3QkFDeEIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO3FCQUNsQjtvQkFDRCxNQUFNLEVBQUUsSUFBSTtvQkFDWixLQUFLO29CQUNMLFdBQVcsRUFBRSxJQUFJO2lCQUNsQixDQUFDLENBQUM7Z0JBRUgsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzNCLENBQUM7WUFDRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQUs7Z0JBQ3ZCLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFFM0MsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO29CQUNqQixLQUFLLEVBQUUsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQztvQkFDakQsV0FBVyxFQUFFLElBQUk7aUJBQ2xCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUs7Z0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU07b0JBQUUsT0FBTyxFQUFFLENBQUM7Z0JBRXpDLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDM0MsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUV6RCxNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBQy9CLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDO29CQUNsRCxLQUFLLEVBQUU7d0JBQ0wsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO3dCQUN4QixDQUFDLElBQUksRUFBRSxTQUFTLENBQUM7cUJBQ2xCO29CQUNELEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztvQkFDbEIsV0FBVyxFQUFFLElBQUk7aUJBQ2xCLENBQUMsQ0FBQztnQkFFSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0IsQ0FBQztZQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUMzQixNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBRTNDLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSx1QkFBdUIsQ0FBQyxLQUEwQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDN0YsQ0FBQztZQUNELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNO29CQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUV6QyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBRTNDLE9BQU8sV0FBVyxDQUFDLEtBQUssRUFBRSx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN6RSxDQUFDO1lBQ0QsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUU7Z0JBQzlELE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLElBQUksRUFBRSxDQUFDO2dCQUUvQixNQUFNLElBQUksR0FBRyxNQUFNLEtBQUssQ0FBQyxPQUFPLENBQUM7b0JBQy9CLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFO29CQUMvQyxLQUFLLEVBQUUsa0JBQTJCO29CQUNsQyxXQUFXLEVBQUUsSUFBSTtpQkFDbEIsQ0FBQyxDQUFDO2dCQUVILE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzQixDQUFDO1lBQ0QsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUU7Z0JBQ2hFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTTtvQkFBRSxPQUFPLEVBQUUsQ0FBQztnQkFFdkMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBRS9CLE1BQU0sSUFBSSxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQztvQkFDL0IsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsRUFBRTtvQkFDN0UsS0FBSyxFQUFFLGtCQUEyQjtvQkFDbEMsV0FBVyxFQUFFLElBQUk7aUJBQ2xCLENBQUMsQ0FBQztnQkFFSCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0IsQ0FBQztTQUNGO1FBQ0QsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ2hCLElBQUksU0FBUztnQkFBRSxNQUFNLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN2QyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDbkIsQ0FBQztLQUNGLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -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
|
|
105
|
+
if (!target.permissionScope)
|
|
105
106
|
return entries;
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
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,
|
|
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 (
|
|
81
|
-
const matched = await this.scanServedValues(context,
|
|
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(
|
|
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
|
-
//
|
|
118
|
-
//
|
|
119
|
-
|
|
120
|
-
await
|
|
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 ?
|
|
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,
|
|
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 =
|
|
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
|
+
"version": "1.110.4",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"publishConfig": {
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"@forestadmin/datasource-customizer": "1.73.2",
|
|
18
18
|
"@forestadmin/datasource-toolkit": "1.56.2",
|
|
19
19
|
"@forestadmin/forestadmin-client": "1.44.1",
|
|
20
|
-
"@forestadmin/mcp-server": "1.29.
|
|
20
|
+
"@forestadmin/mcp-server": "1.29.2",
|
|
21
21
|
"@koa/bodyparser": "^6.0.0",
|
|
22
22
|
"@koa/cors": "^5.0.0",
|
|
23
23
|
"@koa/router": "^13.1.0",
|
|
@@ -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",
|
|
@@ -49,9 +51,9 @@
|
|
|
49
51
|
},
|
|
50
52
|
"devDependencies": {
|
|
51
53
|
"@fastify/express": "^1.1.0",
|
|
52
|
-
"@forestadmin/agent-bff": "1.42.
|
|
54
|
+
"@forestadmin/agent-bff": "1.42.2",
|
|
53
55
|
"@forestadmin/datasource-sql": "1.17.17",
|
|
54
|
-
"@forestadmin/workflow-executor": "1.
|
|
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",
|
|
@@ -75,8 +77,8 @@
|
|
|
75
77
|
},
|
|
76
78
|
"peerDependencies": {
|
|
77
79
|
"@fastify/express": "^1.1.0 || ^2.0.0 || ^3.0.0 || ^4.0.0",
|
|
78
|
-
"@forestadmin/agent-bff": "1.42.
|
|
79
|
-
"@forestadmin/workflow-executor": "1.
|
|
80
|
+
"@forestadmin/agent-bff": "1.42.2",
|
|
81
|
+
"@forestadmin/workflow-executor": "1.35.0"
|
|
80
82
|
},
|
|
81
83
|
"peerDependenciesMeta": {
|
|
82
84
|
"@fastify/express": {
|