@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 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, never>> extends express.Request {
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, never>> extends express.Request {
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.host = req.hostname;
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: 2e3
1775
+ connectionTimeoutMillis: this.psqlConnectionPool.poolConfig.connectionTimeoutMillis
1778
1776
  });
1779
1777
  await this.triggerClient.connect();
1780
1778
  const promises = [];