@restura/core 0.1.0-alpha.22 → 0.1.0-alpha.24
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/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +129 -131
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +129 -131
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -2341,7 +2341,7 @@ type RequesterDetails<T extends object = {}> = {
|
|
|
2341
2341
|
userId?: number;
|
|
2342
2342
|
isSystemUser?: boolean;
|
|
2343
2343
|
} & T;
|
|
2344
|
-
interface RsRequest<T = unknown, U extends object = Record<string,
|
|
2344
|
+
interface RsRequest<T = unknown, U extends object = Record<string, unknown>> extends express.Request {
|
|
2345
2345
|
requesterDetails: RequesterDetails<U>;
|
|
2346
2346
|
data: T;
|
|
2347
2347
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2341,7 +2341,7 @@ type RequesterDetails<T extends object = {}> = {
|
|
|
2341
2341
|
userId?: number;
|
|
2342
2342
|
isSystemUser?: boolean;
|
|
2343
2343
|
} & T;
|
|
2344
|
-
interface RsRequest<T = unknown, U extends object = Record<string,
|
|
2344
|
+
interface RsRequest<T = unknown, U extends object = Record<string, unknown>> extends express.Request {
|
|
2345
2345
|
requesterDetails: RequesterDetails<U>;
|
|
2346
2346
|
data: T;
|
|
2347
2347
|
}
|
package/dist/index.js
CHANGED
|
@@ -757,9 +757,7 @@ function addApiResponseFunctions(req, res, next) {
|
|
|
757
757
|
function authenticateUser(applicationAuthenticateHandler) {
|
|
758
758
|
return (req, res, next) => {
|
|
759
759
|
applicationAuthenticateHandler(req, res, (userDetails) => {
|
|
760
|
-
req.requesterDetails
|
|
761
|
-
req.requesterDetails.ipAddress = req.ip || "";
|
|
762
|
-
req.requesterDetails = __spreadValues(__spreadValues({}, req.requesterDetails), userDetails);
|
|
760
|
+
req.requesterDetails = __spreadValues({ host: req.hostname, ipAddress: req.ip || "" }, userDetails);
|
|
763
761
|
next();
|
|
764
762
|
});
|
|
765
763
|
};
|
|
@@ -1275,6 +1273,133 @@ var import_pg_diff_sync = __toESM(require("@wmfs/pg-diff-sync"));
|
|
|
1275
1273
|
var import_pg_info = __toESM(require("@wmfs/pg-info"));
|
|
1276
1274
|
var import_pg2 = __toESM(require("pg"));
|
|
1277
1275
|
|
|
1276
|
+
// src/restura/eventManager.ts
|
|
1277
|
+
var import_bluebird2 = __toESM(require("bluebird"));
|
|
1278
|
+
var EventManager = class {
|
|
1279
|
+
constructor() {
|
|
1280
|
+
this.actionHandlers = {
|
|
1281
|
+
DATABASE_ROW_DELETE: [],
|
|
1282
|
+
DATABASE_ROW_INSERT: [],
|
|
1283
|
+
DATABASE_COLUMN_UPDATE: []
|
|
1284
|
+
};
|
|
1285
|
+
}
|
|
1286
|
+
addRowInsertHandler(onInsert, filter) {
|
|
1287
|
+
this.actionHandlers.DATABASE_ROW_INSERT.push({
|
|
1288
|
+
callback: onInsert,
|
|
1289
|
+
filter
|
|
1290
|
+
});
|
|
1291
|
+
}
|
|
1292
|
+
addColumnChangeHandler(onUpdate, filter) {
|
|
1293
|
+
this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
|
|
1294
|
+
callback: onUpdate,
|
|
1295
|
+
filter
|
|
1296
|
+
});
|
|
1297
|
+
}
|
|
1298
|
+
addRowDeleteHandler(onDelete, filter) {
|
|
1299
|
+
this.actionHandlers.DATABASE_ROW_DELETE.push({
|
|
1300
|
+
callback: onDelete,
|
|
1301
|
+
filter
|
|
1302
|
+
});
|
|
1303
|
+
}
|
|
1304
|
+
async fireActionFromDbTrigger(sqlMutationData, result) {
|
|
1305
|
+
if (sqlMutationData.mutationType === "INSERT") {
|
|
1306
|
+
await this.fireInsertActions(sqlMutationData, result);
|
|
1307
|
+
} else if (sqlMutationData.mutationType === "UPDATE") {
|
|
1308
|
+
await this.fireUpdateActions(sqlMutationData, result);
|
|
1309
|
+
} else if (sqlMutationData.mutationType === "DELETE") {
|
|
1310
|
+
await this.fireDeleteActions(sqlMutationData, result);
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
async fireInsertActions(data, triggerResult) {
|
|
1314
|
+
await import_bluebird2.default.map(
|
|
1315
|
+
this.actionHandlers.DATABASE_ROW_INSERT,
|
|
1316
|
+
({ callback, filter }) => {
|
|
1317
|
+
if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
|
|
1318
|
+
const insertData = {
|
|
1319
|
+
tableName: triggerResult.table,
|
|
1320
|
+
insertId: triggerResult.record.id,
|
|
1321
|
+
insertObject: triggerResult.record,
|
|
1322
|
+
queryMetadata: data.queryMetadata
|
|
1323
|
+
};
|
|
1324
|
+
callback(insertData, data.queryMetadata);
|
|
1325
|
+
},
|
|
1326
|
+
{ concurrency: 10 }
|
|
1327
|
+
);
|
|
1328
|
+
}
|
|
1329
|
+
async fireDeleteActions(data, triggerResult) {
|
|
1330
|
+
await import_bluebird2.default.map(
|
|
1331
|
+
this.actionHandlers.DATABASE_ROW_DELETE,
|
|
1332
|
+
({ callback, filter }) => {
|
|
1333
|
+
if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
|
|
1334
|
+
const deleteData = {
|
|
1335
|
+
tableName: triggerResult.table,
|
|
1336
|
+
deletedRow: triggerResult.previousRecord,
|
|
1337
|
+
queryMetadata: data.queryMetadata
|
|
1338
|
+
};
|
|
1339
|
+
callback(deleteData, data.queryMetadata);
|
|
1340
|
+
},
|
|
1341
|
+
{ concurrency: 10 }
|
|
1342
|
+
);
|
|
1343
|
+
}
|
|
1344
|
+
async fireUpdateActions(data, triggerResult) {
|
|
1345
|
+
await import_bluebird2.default.map(
|
|
1346
|
+
this.actionHandlers.DATABASE_COLUMN_UPDATE,
|
|
1347
|
+
({ callback, filter }) => {
|
|
1348
|
+
if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
|
|
1349
|
+
const columnChangeData = {
|
|
1350
|
+
tableName: triggerResult.table,
|
|
1351
|
+
rowId: triggerResult.record.id,
|
|
1352
|
+
newData: triggerResult.record,
|
|
1353
|
+
oldData: triggerResult.previousRecord,
|
|
1354
|
+
queryMetadata: data.queryMetadata
|
|
1355
|
+
};
|
|
1356
|
+
callback(columnChangeData, data.queryMetadata);
|
|
1357
|
+
},
|
|
1358
|
+
{ concurrency: 10 }
|
|
1359
|
+
);
|
|
1360
|
+
}
|
|
1361
|
+
hasHandlersForEventType(eventType, filter, triggerResult) {
|
|
1362
|
+
if (filter) {
|
|
1363
|
+
switch (eventType) {
|
|
1364
|
+
case "DATABASE_ROW_INSERT":
|
|
1365
|
+
case "DATABASE_ROW_DELETE":
|
|
1366
|
+
if (filter.tableName && filter.tableName !== triggerResult.table) return false;
|
|
1367
|
+
break;
|
|
1368
|
+
case "DATABASE_COLUMN_UPDATE":
|
|
1369
|
+
const filterColumnChange = filter;
|
|
1370
|
+
if (filterColumnChange.tableName !== filter.tableName) return false;
|
|
1371
|
+
if (!filterColumnChange.columns.some((item) => {
|
|
1372
|
+
const updatedColumns = Object.keys(
|
|
1373
|
+
changedValues(triggerResult.record, triggerResult.previousRecord)
|
|
1374
|
+
);
|
|
1375
|
+
return updatedColumns.includes(item);
|
|
1376
|
+
}))
|
|
1377
|
+
return false;
|
|
1378
|
+
break;
|
|
1379
|
+
}
|
|
1380
|
+
}
|
|
1381
|
+
return true;
|
|
1382
|
+
}
|
|
1383
|
+
};
|
|
1384
|
+
var eventManager = new EventManager();
|
|
1385
|
+
var eventManager_default = eventManager;
|
|
1386
|
+
function changedValues(record, previousRecord) {
|
|
1387
|
+
const changed = {};
|
|
1388
|
+
for (const i in previousRecord) {
|
|
1389
|
+
if (previousRecord[i] !== record[i]) {
|
|
1390
|
+
if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
|
|
1391
|
+
const nestedChanged = changedValues(record[i], previousRecord[i]);
|
|
1392
|
+
if (Object.keys(nestedChanged).length > 0) {
|
|
1393
|
+
changed[i] = record[i];
|
|
1394
|
+
}
|
|
1395
|
+
} else {
|
|
1396
|
+
changed[i] = record[i];
|
|
1397
|
+
}
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
return changed;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1278
1403
|
// src/restura/sql/PsqlPool.ts
|
|
1279
1404
|
var import_pg = __toESM(require("pg"));
|
|
1280
1405
|
|
|
@@ -1619,133 +1744,6 @@ var filterPsqlParser = import_pegjs.default.generate(filterSqlGrammar, {
|
|
|
1619
1744
|
});
|
|
1620
1745
|
var filterPsqlParser_default = filterPsqlParser;
|
|
1621
1746
|
|
|
1622
|
-
// src/restura/eventManager.ts
|
|
1623
|
-
var import_bluebird2 = __toESM(require("bluebird"));
|
|
1624
|
-
var EventManager = class {
|
|
1625
|
-
constructor() {
|
|
1626
|
-
this.actionHandlers = {
|
|
1627
|
-
DATABASE_ROW_DELETE: [],
|
|
1628
|
-
DATABASE_ROW_INSERT: [],
|
|
1629
|
-
DATABASE_COLUMN_UPDATE: []
|
|
1630
|
-
};
|
|
1631
|
-
}
|
|
1632
|
-
addRowInsertHandler(onInsert, filter) {
|
|
1633
|
-
this.actionHandlers.DATABASE_ROW_INSERT.push({
|
|
1634
|
-
callback: onInsert,
|
|
1635
|
-
filter
|
|
1636
|
-
});
|
|
1637
|
-
}
|
|
1638
|
-
addColumnChangeHandler(onUpdate, filter) {
|
|
1639
|
-
this.actionHandlers.DATABASE_COLUMN_UPDATE.push({
|
|
1640
|
-
callback: onUpdate,
|
|
1641
|
-
filter
|
|
1642
|
-
});
|
|
1643
|
-
}
|
|
1644
|
-
addRowDeleteHandler(onDelete, filter) {
|
|
1645
|
-
this.actionHandlers.DATABASE_ROW_DELETE.push({
|
|
1646
|
-
callback: onDelete,
|
|
1647
|
-
filter
|
|
1648
|
-
});
|
|
1649
|
-
}
|
|
1650
|
-
async fireActionFromDbTrigger(sqlMutationData, result) {
|
|
1651
|
-
if (sqlMutationData.mutationType === "INSERT") {
|
|
1652
|
-
await this.fireInsertActions(sqlMutationData, result);
|
|
1653
|
-
} else if (sqlMutationData.mutationType === "UPDATE") {
|
|
1654
|
-
await this.fireUpdateActions(sqlMutationData, result);
|
|
1655
|
-
} else if (sqlMutationData.mutationType === "DELETE") {
|
|
1656
|
-
await this.fireDeleteActions(sqlMutationData, result);
|
|
1657
|
-
}
|
|
1658
|
-
}
|
|
1659
|
-
async fireInsertActions(data, triggerResult) {
|
|
1660
|
-
await import_bluebird2.default.map(
|
|
1661
|
-
this.actionHandlers.DATABASE_ROW_INSERT,
|
|
1662
|
-
({ callback, filter }) => {
|
|
1663
|
-
if (!this.hasHandlersForEventType("DATABASE_ROW_INSERT", filter, triggerResult)) return;
|
|
1664
|
-
const insertData = {
|
|
1665
|
-
tableName: triggerResult.table,
|
|
1666
|
-
insertId: triggerResult.record.id,
|
|
1667
|
-
insertObject: triggerResult.record,
|
|
1668
|
-
queryMetadata: data.queryMetadata
|
|
1669
|
-
};
|
|
1670
|
-
callback(insertData, data.queryMetadata);
|
|
1671
|
-
},
|
|
1672
|
-
{ concurrency: 10 }
|
|
1673
|
-
);
|
|
1674
|
-
}
|
|
1675
|
-
async fireDeleteActions(data, triggerResult) {
|
|
1676
|
-
await import_bluebird2.default.map(
|
|
1677
|
-
this.actionHandlers.DATABASE_ROW_DELETE,
|
|
1678
|
-
({ callback, filter }) => {
|
|
1679
|
-
if (!this.hasHandlersForEventType("DATABASE_ROW_DELETE", filter, triggerResult)) return;
|
|
1680
|
-
const deleteData = {
|
|
1681
|
-
tableName: triggerResult.table,
|
|
1682
|
-
deletedRow: triggerResult.previousRecord,
|
|
1683
|
-
queryMetadata: data.queryMetadata
|
|
1684
|
-
};
|
|
1685
|
-
callback(deleteData, data.queryMetadata);
|
|
1686
|
-
},
|
|
1687
|
-
{ concurrency: 10 }
|
|
1688
|
-
);
|
|
1689
|
-
}
|
|
1690
|
-
async fireUpdateActions(data, triggerResult) {
|
|
1691
|
-
await import_bluebird2.default.map(
|
|
1692
|
-
this.actionHandlers.DATABASE_COLUMN_UPDATE,
|
|
1693
|
-
({ callback, filter }) => {
|
|
1694
|
-
if (!this.hasHandlersForEventType("DATABASE_COLUMN_UPDATE", filter, triggerResult)) return;
|
|
1695
|
-
const columnChangeData = {
|
|
1696
|
-
tableName: triggerResult.table,
|
|
1697
|
-
rowId: triggerResult.record.id,
|
|
1698
|
-
newData: triggerResult.record,
|
|
1699
|
-
oldData: triggerResult.previousRecord,
|
|
1700
|
-
queryMetadata: data.queryMetadata
|
|
1701
|
-
};
|
|
1702
|
-
callback(columnChangeData, data.queryMetadata);
|
|
1703
|
-
},
|
|
1704
|
-
{ concurrency: 10 }
|
|
1705
|
-
);
|
|
1706
|
-
}
|
|
1707
|
-
hasHandlersForEventType(eventType, filter, triggerResult) {
|
|
1708
|
-
if (filter) {
|
|
1709
|
-
switch (eventType) {
|
|
1710
|
-
case "DATABASE_ROW_INSERT":
|
|
1711
|
-
case "DATABASE_ROW_DELETE":
|
|
1712
|
-
if (filter.tableName && filter.tableName !== triggerResult.table) return false;
|
|
1713
|
-
break;
|
|
1714
|
-
case "DATABASE_COLUMN_UPDATE":
|
|
1715
|
-
const filterColumnChange = filter;
|
|
1716
|
-
if (filterColumnChange.tableName !== filter.tableName) return false;
|
|
1717
|
-
if (!filterColumnChange.columns.some((item) => {
|
|
1718
|
-
const updatedColumns = Object.keys(
|
|
1719
|
-
changedValues(triggerResult.record, triggerResult.previousRecord)
|
|
1720
|
-
);
|
|
1721
|
-
return updatedColumns.includes(item);
|
|
1722
|
-
}))
|
|
1723
|
-
return false;
|
|
1724
|
-
break;
|
|
1725
|
-
}
|
|
1726
|
-
}
|
|
1727
|
-
return true;
|
|
1728
|
-
}
|
|
1729
|
-
};
|
|
1730
|
-
var eventManager = new EventManager();
|
|
1731
|
-
var eventManager_default = eventManager;
|
|
1732
|
-
function changedValues(record, previousRecord) {
|
|
1733
|
-
const changed = {};
|
|
1734
|
-
for (const i in previousRecord) {
|
|
1735
|
-
if (previousRecord[i] !== record[i]) {
|
|
1736
|
-
if (typeof previousRecord[i] === "object" && typeof record[i] === "object") {
|
|
1737
|
-
const nestedChanged = changedValues(record[i], previousRecord[i]);
|
|
1738
|
-
if (Object.keys(nestedChanged).length > 0) {
|
|
1739
|
-
changed[i] = record[i];
|
|
1740
|
-
}
|
|
1741
|
-
} else {
|
|
1742
|
-
changed[i] = record[i];
|
|
1743
|
-
}
|
|
1744
|
-
}
|
|
1745
|
-
}
|
|
1746
|
-
return changed;
|
|
1747
|
-
}
|
|
1748
|
-
|
|
1749
1747
|
// src/restura/sql/PsqlEngine.ts
|
|
1750
1748
|
var { Client } = import_pg2.default;
|
|
1751
1749
|
var systemUser = {
|
|
@@ -1774,7 +1772,7 @@ var PsqlEngine = class extends SqlEngine {
|
|
|
1774
1772
|
database: this.psqlConnectionPool.poolConfig.database,
|
|
1775
1773
|
password: this.psqlConnectionPool.poolConfig.password,
|
|
1776
1774
|
port: this.psqlConnectionPool.poolConfig.port,
|
|
1777
|
-
connectionTimeoutMillis:
|
|
1775
|
+
connectionTimeoutMillis: this.psqlConnectionPool.poolConfig.connectionTimeoutMillis
|
|
1778
1776
|
});
|
|
1779
1777
|
await this.triggerClient.connect();
|
|
1780
1778
|
const promises = [];
|