prostgles-server 4.2.535 → 4.2.538

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 (55) hide show
  1. package/dist/DboBuilder/DboBuilder.d.ts +1 -1
  2. package/dist/DboBuilder/DboBuilderTypes.d.ts +3 -1
  3. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  4. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +3 -1
  5. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  6. package/dist/DboBuilder/TableHandler/TableHandler.js +20 -6
  7. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  8. package/dist/DboBuilder/runSql/runSqlUtils.d.ts +1 -1
  9. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
  10. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.js +0 -4
  11. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.js.map +1 -1
  12. package/dist/JSONBSchemaValidation/validateJSONBSchemaSQL.d.ts +1 -1
  13. package/dist/Logging.d.ts +4 -1
  14. package/dist/Logging.d.ts.map +1 -1
  15. package/dist/PubSubManager/PubSubManager.d.ts +5 -4
  16. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  17. package/dist/PubSubManager/PubSubManager.js +4 -2
  18. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  19. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.d.ts +11 -0
  20. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.d.ts.map +1 -0
  21. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.js +25 -0
  22. package/dist/PubSubManager/SyncReplication/fetchSyncServerData.js.map +1 -0
  23. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.d.ts +14 -0
  24. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.d.ts.map +1 -0
  25. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.js +19 -0
  26. package/dist/PubSubManager/SyncReplication/getSyncBatchOptions.js.map +1 -0
  27. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.d.ts +8 -0
  28. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.d.ts.map +1 -0
  29. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.js +9 -0
  30. package/dist/PubSubManager/SyncReplication/getSyncOrderByAndFields.js.map +1 -0
  31. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts +44 -0
  32. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.d.ts.map +1 -0
  33. package/dist/{SyncReplication.js → PubSubManager/SyncReplication/getSyncUtilFunctions.js} +101 -232
  34. package/dist/PubSubManager/SyncReplication/getSyncUtilFunctions.js.map +1 -0
  35. package/dist/{SyncReplication.d.ts → PubSubManager/SyncReplication/syncData.d.ts} +4 -4
  36. package/dist/PubSubManager/SyncReplication/syncData.d.ts.map +1 -0
  37. package/dist/PubSubManager/SyncReplication/syncData.js +132 -0
  38. package/dist/PubSubManager/SyncReplication/syncData.js.map +1 -0
  39. package/dist/PubSubManager/addSync.d.ts.map +1 -1
  40. package/dist/PubSubManager/addSync.js +10 -9
  41. package/dist/PubSubManager/addSync.js.map +1 -1
  42. package/lib/DboBuilder/DboBuilderTypes.ts +2 -1
  43. package/lib/DboBuilder/TableHandler/TableHandler.ts +26 -8
  44. package/lib/DboBuilder/schema/getTablesForSchemaPostgresSQL.ts +0 -4
  45. package/lib/Logging.ts +16 -1
  46. package/lib/PubSubManager/PubSubManager.ts +7 -5
  47. package/lib/PubSubManager/SyncReplication/fetchSyncServerData.ts +55 -0
  48. package/lib/PubSubManager/SyncReplication/getSyncBatchOptions.ts +31 -0
  49. package/lib/PubSubManager/SyncReplication/getSyncOrderByAndFields.ts +11 -0
  50. package/lib/{SyncReplication.ts → PubSubManager/SyncReplication/getSyncUtilFunctions.ts} +173 -330
  51. package/lib/PubSubManager/SyncReplication/syncData.ts +195 -0
  52. package/lib/PubSubManager/addSync.ts +13 -18
  53. package/package.json +2 -2
  54. package/dist/SyncReplication.d.ts.map +0 -1
  55. package/dist/SyncReplication.js.map +0 -1
@@ -0,0 +1,195 @@
1
+ import type { AnyObject } from "prostgles-types";
2
+ import { pickKeys } from "prostgles-types";
3
+ import { WAL } from "prostgles-types/dist/WAL";
4
+ import type { PubSubManager, SyncParams } from "../PubSubManager";
5
+ import { getSyncUtilFunctions } from "./getSyncUtilFunctions";
6
+ import type { EventTypes } from "../../Logging";
7
+
8
+ export type ClientSyncInfo = Partial<{
9
+ c_fr: AnyObject;
10
+ c_lr: AnyObject;
11
+ /**
12
+ * PG count is usually string due to bigint
13
+ */
14
+ c_count: number | string;
15
+ }>;
16
+
17
+ export type ServerSyncInfo = Partial<{
18
+ s_fr: AnyObject;
19
+ s_lr: AnyObject;
20
+ /**
21
+ * PG count is usually string due to bigint
22
+ */
23
+ s_count: number | string;
24
+ }>;
25
+
26
+ export type SyncBatchInfo = Partial<{
27
+ from_synced: number | null;
28
+ to_synced: number | null;
29
+ end_offset: number | null;
30
+ }>;
31
+
32
+ export type onSyncRequestResponse =
33
+ | {
34
+ onSyncRequest?: ClientSyncInfo;
35
+ }
36
+ | {
37
+ err: AnyObject | string;
38
+ };
39
+
40
+ export type ClientExpressData = ClientSyncInfo & {
41
+ data?: AnyObject[];
42
+ deleted?: AnyObject[];
43
+ };
44
+
45
+ /**
46
+ * Server or client requested data sync
47
+ */
48
+ export async function syncData(
49
+ this: PubSubManager,
50
+ sync: SyncParams,
51
+ clientData: ClientExpressData | undefined,
52
+ source: "trigger" | "client",
53
+ ) {
54
+ const logSyncData = (state: Extract<EventTypes.Sync, { command: "syncData" }>["state"]) => {
55
+ return this._log({
56
+ type: "sync",
57
+ command: "syncData",
58
+ channelName: sync.channel_name,
59
+ tableName: sync.table_name,
60
+ sid: sync.sid,
61
+ source,
62
+ ...pickKeys(sync, ["socket_id", "condition", "last_synced", "is_syncing"]),
63
+ lr: JSON.stringify(sync.lr),
64
+ connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map((s) => s.id),
65
+ localParams: undefined,
66
+ duration: -1,
67
+ socketId: sync.socket_id,
68
+ syncParams: sync,
69
+ state,
70
+ });
71
+ };
72
+ await logSyncData("start");
73
+
74
+ const { socket_id, table_name, synced_field, id_fields = [], batch_size, throttle = 0 } = sync;
75
+
76
+ const socket = this.sockets[socket_id];
77
+ if (!socket?.connected) {
78
+ await logSyncData("socket?.connected");
79
+ return;
80
+ }
81
+ const tableHandler = this.dbo[table_name];
82
+ if (!tableHandler?.find) {
83
+ throw `dbo.${table_name}.find missing or not allowed`;
84
+ }
85
+
86
+ const {
87
+ upsertData,
88
+ updateSyncLR,
89
+ getServerRowInfo,
90
+ deleteData,
91
+ getLastSynced,
92
+ pushData,
93
+ syncBatch,
94
+ rowsFullyMatch,
95
+ } = getSyncUtilFunctions({
96
+ tableHandler,
97
+ socket,
98
+ sync,
99
+ pubSubManager: this,
100
+ logSyncData,
101
+ });
102
+
103
+ /* Used to throttle and merge incoming updates */
104
+ sync.wal ??= new WAL({
105
+ id_fields,
106
+ synced_field,
107
+ throttle,
108
+ batch_size,
109
+ DEBUG_MODE: this.dboBuilder.prostgles.opts.DEBUG_MODE,
110
+ onSendStart: () => {
111
+ sync.is_syncing = true;
112
+ },
113
+ onSend: async (data) => {
114
+ const res = await upsertData(data);
115
+ return res;
116
+ },
117
+ onSendEnd: (batch) => {
118
+ updateSyncLR(batch);
119
+ sync.is_syncing = false;
120
+
121
+ /**
122
+ * After all data was inserted request SyncInfo from client and sync again if necessary
123
+ */
124
+ void this.syncData(sync, undefined, source);
125
+ },
126
+ });
127
+
128
+ /* Debounce sync requests */
129
+ if (!sync.wal.isSending() && sync.is_syncing) {
130
+ if (!this.syncTimeout) {
131
+ this.syncTimeout = setTimeout(() => {
132
+ this.syncTimeout = undefined;
133
+ void this.syncData(sync, undefined, source);
134
+ }, throttle);
135
+ }
136
+ return;
137
+ }
138
+
139
+ /**
140
+ * Express data sent from a client that has already been synced
141
+ * Add to WAL manager which will sync at the end
142
+ */
143
+ if (clientData) {
144
+ if (clientData.data && Array.isArray(clientData.data) && clientData.data.length) {
145
+ return sync.wal.addData(clientData.data.map((d) => ({ current: d })));
146
+ /* Not expecting this anymore. use normal db.table.delete channel */
147
+ } else if (
148
+ clientData.deleted &&
149
+ Array.isArray(clientData.deleted) &&
150
+ clientData.deleted.length
151
+ ) {
152
+ await deleteData(clientData.deleted);
153
+ }
154
+ } else {
155
+ // do nothing
156
+ }
157
+
158
+ if (sync.wal.isSending()) {
159
+ await logSyncData("sync.wal.isSending()");
160
+ return;
161
+ }
162
+
163
+ sync.is_syncing = true;
164
+
165
+ // from synced does not make sense. It should be sync.lr only!!!
166
+ let from_synced = null;
167
+
168
+ /** Sync was already synced */
169
+ if (sync.lr) {
170
+ const { s_lr } = await getServerRowInfo();
171
+
172
+ /* Make sure trigger is not firing on freshly synced data */
173
+ if (!rowsFullyMatch(sync.lr, s_lr)) {
174
+ from_synced = sync.last_synced;
175
+ await logSyncData("sync.last_synced");
176
+ } else {
177
+ await logSyncData("rowsFullyMatch");
178
+ }
179
+ } else {
180
+ await logSyncData("getLastSynced(clientData)");
181
+ from_synced = await getLastSynced(clientData);
182
+ }
183
+
184
+ if (from_synced !== null) {
185
+ await logSyncData("syncBatch.start");
186
+ await syncBatch(from_synced);
187
+ await logSyncData("syncBatch.end");
188
+ } else {
189
+ await logSyncData("nothingToSync");
190
+ }
191
+
192
+ await pushData([], true);
193
+
194
+ sync.is_syncing = false;
195
+ }
@@ -1,7 +1,7 @@
1
1
  import { find, getSerialisableError, getSyncChannelName, tryCatchV2 } from "prostgles-types";
2
- import type { onSyncRequestResponse } from "../SyncReplication";
3
- import type { AddSyncParams, BasicCallback, PubSubManager } from "./PubSubManager";
2
+ import type { AddSyncParams, BasicCallback, PubSubManager, SyncParams } from "./PubSubManager";
4
3
  import { parseCondition } from "./PubSubManagerUtils";
4
+ import type { onSyncRequestResponse } from "./SyncReplication/syncData";
5
5
 
6
6
  /**
7
7
  * Returns a sync channel
@@ -13,17 +13,8 @@ export async function addSync(
13
13
  ): Promise<{ channelName: string }> {
14
14
  const sid = this.dboBuilder.prostgles.authHandler.getSIDNoError({ socket: syncParams.socket });
15
15
  const res = await tryCatchV2(async () => {
16
- const {
17
- socket = null,
18
- table_info = null,
19
- table_rules,
20
- synced_field = null,
21
- filter = {},
22
- params,
23
- condition = "",
24
- } = syncParams;
16
+ const { socket, table_info, table_rules, filter, params, condition } = syncParams;
25
17
  const conditionParsed = parseCondition(condition);
26
- if (!socket || !table_info) throw "socket or table_info missing";
27
18
 
28
19
  const { name: table_name } = table_info;
29
20
  const channelName = getSyncChannelName({
@@ -32,12 +23,12 @@ export async function addSync(
32
23
  select: params.select,
33
24
  });
34
25
 
35
- if (!synced_field) throw "synced_field missing from table_rules";
36
-
37
26
  this.upsertSocket(socket);
38
27
 
39
28
  const syncConfig = this.dboBuilder.prostgles.tableConfigurator?.getTableSyncConfig(table_name);
40
- if (!syncConfig) throw `Sync not configured for table ${table_name}`;
29
+ if (!syncConfig) {
30
+ throw `Sync not configured for table ${table_name}`;
31
+ }
41
32
  const upsertSync = () => {
42
33
  const newSync = {
43
34
  channel_name: channelName,
@@ -58,7 +49,7 @@ export async function addSync(
58
49
  params,
59
50
  };
60
51
 
61
- /* Only a sync per socket per table per condition allowed */
52
+ /* Only a sync per socket per table/condition/select allowed */
62
53
  const existing = find(this.syncs, { socket_id: socket.id, channel_name: channelName });
63
54
  if (!existing) {
64
55
  this.syncs.push(newSync);
@@ -72,9 +63,11 @@ export async function addSync(
72
63
  socketId: socket.id,
73
64
  tableName: table_name,
74
65
  condition,
66
+ channelName,
75
67
  sid,
76
68
  connectedSocketIds: this.connectedSocketIds,
77
69
  duration: -1,
70
+ syncParams: newSync,
78
71
  });
79
72
  socket.removeAllListeners(channelName);
80
73
  socket.removeAllListeners(unsyncChn);
@@ -122,7 +115,7 @@ export async function addSync(
122
115
  return newSync;
123
116
  };
124
117
 
125
- upsertSync();
118
+ const newSync = upsertSync();
126
119
 
127
120
  await this.addTrigger(
128
121
  { table_name, condition: conditionParsed, tracked_columns: undefined },
@@ -130,7 +123,7 @@ export async function addSync(
130
123
  socket,
131
124
  );
132
125
 
133
- return { channelName };
126
+ return { channelName, newSync };
134
127
  });
135
128
 
136
129
  await this._log({
@@ -143,6 +136,8 @@ export async function addSync(
143
136
  duration: res.duration,
144
137
  error: res.error,
145
138
  sid,
139
+ channelName: res.data?.channelName || "",
140
+ syncParams: res.data?.newSync ?? ({} as SyncParams),
146
141
  });
147
142
 
148
143
  if (res.hasError) throw res.error;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.535",
3
+ "version": "4.2.538",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -57,7 +57,7 @@
57
57
  "pg": "^8.19.0",
58
58
  "pg-cursor": "^2.19.0",
59
59
  "pg-promise": "^12.6.2",
60
- "prostgles-types": "^4.0.246"
60
+ "prostgles-types": "^4.0.251"
61
61
  },
62
62
  "devDependencies": {
63
63
  "@eslint/js": "^9.22.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncReplication.d.ts","sourceRoot":"","sources":["../lib/SyncReplication.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAA4B,MAAM,iBAAiB,CAAC;AAG3E,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG/E,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,SAAS,CAAC;IAChB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC;IAClC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAC7B;IACE,aAAa,CAAC,EAAE,cAAc,CAAC;CAChC,GACD;IACE,GAAG,EAAE,SAAS,GAAG,MAAM,CAAC;CACzB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG,cAAc,GAAG;IAC/C,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;CACvB,CAAC;AAMF;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,aAAa,EACnB,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,iBAAiB,GAAG,SAAS,EACzC,MAAM,EAAE,SAAS,GAAG,QAAQ,iBA2lB7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncReplication.js","sourceRoot":"","sources":["../lib/SyncReplication.ts"],"names":[],"mappings":"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"}