prostgles-server 4.2.638 → 4.2.640

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.
Files changed (94) hide show
  1. package/debug/sync-logging-build.log +4 -0
  2. package/debug/sync-logging-main.log +688 -0
  3. package/debug/sync-logging-server-build.log +0 -0
  4. package/debug/sync-race-client-build.log +12 -0
  5. package/debug/sync-race-main-e2e-final.log +659 -0
  6. package/debug/sync-race-main-e2e.log +643 -0
  7. package/debug/sync-race-server-build.log +11 -0
  8. package/debug/sync-race-test-lib-final.log +59 -0
  9. package/debug/sync-race-test-lib.log +59 -0
  10. package/debug/sync-review-build.log +4 -0
  11. package/debug/sync-review-client-build.log +0 -0
  12. package/debug/sync-review-main-final.log +685 -0
  13. package/debug/sync-review-main.log +644 -0
  14. package/debug/sync-review-server-build.log +0 -0
  15. package/debug/sync-review-syncData.js +147 -0
  16. package/debug/sync-review-without-reconcile.log +647 -0
  17. package/dist/Auth/AuthHandler.d.ts +2 -2
  18. package/dist/Auth/AuthHandler.d.ts.map +1 -1
  19. package/dist/Auth/AuthHandler.js.map +1 -1
  20. package/dist/Auth/AuthTypes.d.ts +2 -2
  21. package/dist/Auth/AuthTypes.d.ts.map +1 -1
  22. package/dist/Auth/utils/getClientRequestIPsInfo.d.ts +2 -2
  23. package/dist/Auth/utils/getClientRequestIPsInfo.d.ts.map +1 -1
  24. package/dist/DBEventsManager.d.ts +5 -5
  25. package/dist/DBEventsManager.d.ts.map +1 -1
  26. package/dist/DBEventsManager.js.map +1 -1
  27. package/dist/DboBuilder/DboBuilderTypes.d.ts +1 -1
  28. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  29. package/dist/DboBuilder/runSql/QueryStreamer.d.ts +2 -2
  30. package/dist/DboBuilder/runSql/QueryStreamer.d.ts.map +1 -1
  31. package/dist/Logging.d.ts +4 -0
  32. package/dist/Logging.d.ts.map +1 -1
  33. package/dist/Prostgles.d.ts +4 -4
  34. package/dist/Prostgles.d.ts.map +1 -1
  35. package/dist/Prostgles.js.map +1 -1
  36. package/dist/ProstglesTypes.d.ts +3 -3
  37. package/dist/ProstglesTypes.d.ts.map +1 -1
  38. package/dist/PubSubManager/PubSubManager.d.ts +8 -7
  39. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  40. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  41. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts +2 -2
  42. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts.map +1 -1
  43. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js +1 -3
  44. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js.map +1 -1
  45. package/dist/PubSubManager/SyncReplication/logSyncError.d.ts +6 -0
  46. package/dist/PubSubManager/SyncReplication/logSyncError.d.ts.map +1 -0
  47. package/dist/PubSubManager/SyncReplication/logSyncError.js +18 -0
  48. package/dist/PubSubManager/SyncReplication/logSyncError.js.map +1 -0
  49. package/dist/PubSubManager/SyncReplication/syncData.d.ts.map +1 -1
  50. package/dist/PubSubManager/SyncReplication/syncData.js +48 -27
  51. package/dist/PubSubManager/SyncReplication/syncData.js.map +1 -1
  52. package/dist/PubSubManager/addSync.d.ts.map +1 -1
  53. package/dist/PubSubManager/addSync.js +3 -3
  54. package/dist/PubSubManager/addSync.js.map +1 -1
  55. package/dist/PubSubManager/addTrigger.d.ts +2 -2
  56. package/dist/PubSubManager/addTrigger.d.ts.map +1 -1
  57. package/dist/PubSubManager/addTrigger.js.map +1 -1
  58. package/dist/TableConfig/getCreateSchemaQueries.d.ts.map +1 -1
  59. package/dist/TableConfig/getCreateSchemaQueries.js +3 -2
  60. package/dist/TableConfig/getCreateSchemaQueries.js.map +1 -1
  61. package/dist/TableConfig/getTableConfigVersion.d.ts +2 -0
  62. package/dist/TableConfig/getTableConfigVersion.d.ts.map +1 -0
  63. package/dist/TableConfig/getTableConfigVersion.js +11 -0
  64. package/dist/TableConfig/getTableConfigVersion.js.map +1 -0
  65. package/dist/TableConfig/runMigrations.d.ts.map +1 -1
  66. package/dist/TableConfig/runMigrations.js +12 -6
  67. package/dist/TableConfig/runMigrations.js.map +1 -1
  68. package/dist/WebsocketAPI/onSocketConnected.d.ts +2 -2
  69. package/dist/WebsocketAPI/onSocketConnected.d.ts.map +1 -1
  70. package/dist/WebsocketAPI/onSocketConnected.js.map +1 -1
  71. package/dist/WebsocketAPI/pushSocketSchema.d.ts +2 -2
  72. package/dist/WebsocketAPI/pushSocketSchema.d.ts.map +1 -1
  73. package/dist/WebsocketAPI/pushSocketSchema.js.map +1 -1
  74. package/lib/Auth/AuthHandler.ts +2 -2
  75. package/lib/Auth/AuthTypes.ts +2 -2
  76. package/lib/Auth/utils/getClientRequestIPsInfo.ts +2 -2
  77. package/lib/DBEventsManager.ts +5 -5
  78. package/lib/DboBuilder/DboBuilderTypes.ts +1 -1
  79. package/lib/DboBuilder/runSql/QueryStreamer.ts +2 -2
  80. package/lib/Logging.ts +5 -0
  81. package/lib/Prostgles.ts +2 -2
  82. package/lib/ProstglesTypes.ts +3 -3
  83. package/lib/PubSubManager/PubSubManager.ts +7 -6
  84. package/lib/PubSubManager/SyncReplication/getSyncUtilFunctions.ts +3 -8
  85. package/lib/PubSubManager/SyncReplication/logSyncError.ts +22 -0
  86. package/lib/PubSubManager/SyncReplication/syncData.ts +54 -30
  87. package/lib/PubSubManager/addSync.ts +3 -4
  88. package/lib/PubSubManager/addTrigger.ts +2 -2
  89. package/lib/TableConfig/getCreateSchemaQueries.ts +4 -3
  90. package/lib/TableConfig/getTableConfigVersion.ts +6 -0
  91. package/lib/TableConfig/runMigrations.ts +19 -9
  92. package/lib/WebsocketAPI/onSocketConnected.ts +2 -2
  93. package/lib/WebsocketAPI/pushSocketSchema.ts +2 -2
  94. package/package.json +1 -1
@@ -0,0 +1,147 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.syncData = syncData;
4
+ const prostgles_types_1 = require("prostgles-types");
5
+ const WAL_1 = require("prostgles-types/dist/WAL");
6
+ const getSyncUtilFunctions_1 = require("./getSyncUtilFunctions");
7
+ /**
8
+ * Server or client requested data sync
9
+ */
10
+ function syncData(sync, clientData, source) {
11
+ const run = () => runSyncData.call(this, sync, clientData, source);
12
+ const queued = (sync.syncQueue ?? Promise.resolve()).then(run);
13
+ sync.syncQueue = queued.then(() => undefined, () => undefined);
14
+ return queued;
15
+ }
16
+ async function runSyncData(sync, clientData, source) {
17
+ const logSyncData = (state) => {
18
+ return this._log({
19
+ type: "sync",
20
+ command: "syncData",
21
+ channelName: sync.channel_name,
22
+ tableName: sync.table_name,
23
+ sid: sync.sid,
24
+ source,
25
+ ...(0, prostgles_types_1.pickKeys)(sync, ["socket_id", "condition", "lr", "is_syncing"]),
26
+ lr: JSON.stringify(sync.lr),
27
+ connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
28
+ localParams: undefined,
29
+ duration: -1,
30
+ socketId: sync.socket_id,
31
+ syncParams: sync,
32
+ state,
33
+ });
34
+ };
35
+ await logSyncData("start");
36
+ const { socket_id, table_name, synced_field, id_fields = [], batch_size, throttle = 0 } = sync;
37
+ const socket = this.sockets.get(socket_id);
38
+ if (!socket?.connected) {
39
+ await logSyncData("socket?.connected");
40
+ return;
41
+ }
42
+ const tableHandler = this.dbo[table_name];
43
+ if (!tableHandler?.find) {
44
+ throw `dbo.${table_name}.find missing or not allowed`;
45
+ }
46
+ const { upsertData, updateSyncLR, getServerRowInfo, deleteData, getLastSynced, pushData, syncBatch, rowsFullyMatch, } = (0, getSyncUtilFunctions_1.getSyncUtilFunctions)({
47
+ tableHandler,
48
+ socket,
49
+ sync,
50
+ pubSubManager: this,
51
+ logSyncData,
52
+ localParams: sync.localParams,
53
+ });
54
+ /* Used to throttle and merge incoming updates */
55
+ sync.wal ??= new WAL_1.WAL({
56
+ id_fields,
57
+ synced_field,
58
+ throttle,
59
+ batch_size,
60
+ DEBUG_MODE: this.dboBuilder.prostgles.opts.DEBUG_MODE,
61
+ onSendStart: () => {
62
+ sync.is_syncing = true;
63
+ },
64
+ onSend: async (data) => {
65
+ const res = await upsertData(data, "WAL");
66
+ return res;
67
+ },
68
+ onSendEnd: (batch, _, error) => {
69
+ if (error === undefined) {
70
+ updateSyncLR(batch);
71
+ }
72
+ sync.is_syncing = false;
73
+ /**
74
+ * After all data was inserted request SyncInfo from client and sync again if necessary
75
+ */
76
+ void this.syncData(sync, undefined, source).catch((error) => {
77
+ const socket = this.sockets.get(sync.socket_id);
78
+ if (!socket?.connected) {
79
+ return;
80
+ }
81
+ console.error("Follow-up replication failed", {
82
+ tableName: sync.table_name,
83
+ channelName: sync.channel_name,
84
+ socketId: sync.socket_id,
85
+ error,
86
+ });
87
+ });
88
+ },
89
+ });
90
+ /**
91
+ * Express data sent from a client that has already been synced
92
+ * Add to WAL manager which will sync at the end
93
+ */
94
+ if (clientData) {
95
+ if (clientData.data && Array.isArray(clientData.data) && clientData.data.length) {
96
+ await logSyncData("sync.wal.addData");
97
+ return sync.wal.addData(clientData.data.map((d) => ({ current: d })));
98
+ /* Not expecting this anymore. use normal db.table.delete channel */
99
+ }
100
+ else if (clientData.deleted &&
101
+ Array.isArray(clientData.deleted) &&
102
+ clientData.deleted.length) {
103
+ await deleteData(clientData.deleted);
104
+ }
105
+ }
106
+ else {
107
+ // do nothing
108
+ }
109
+ if (sync.wal.isSending()) {
110
+ await logSyncData("sync.wal.isSending()");
111
+ return;
112
+ }
113
+ sync.is_syncing = true;
114
+ try {
115
+ let from_synced = null;
116
+ /** Client runs must reconcile the client's snapshot after reattachment. */
117
+ if (sync.lr && !clientData) {
118
+ const { s_lr } = await getServerRowInfo();
119
+ /* Make sure trigger is not firing on freshly synced data */
120
+ if (!rowsFullyMatch(sync.lr, s_lr)) {
121
+ from_synced = Number(sync.lr[synced_field]);
122
+ await logSyncData("sync.lr");
123
+ }
124
+ else {
125
+ await logSyncData("rowsFullyMatch");
126
+ }
127
+ }
128
+ else {
129
+ await logSyncData("getLastSynced(clientData).start");
130
+ from_synced = await getLastSynced(clientData);
131
+ await logSyncData("getLastSynced(clientData).end");
132
+ }
133
+ if (from_synced !== null) {
134
+ await logSyncData("syncBatch.start");
135
+ await syncBatch(from_synced);
136
+ await logSyncData("syncBatch.end");
137
+ }
138
+ else {
139
+ await logSyncData("nothingToSync");
140
+ }
141
+ await pushData({ state: "synced" });
142
+ }
143
+ finally {
144
+ sync.is_syncing = false;
145
+ }
146
+ }
147
+ //# sourceMappingURL=syncData.js.map