prostgles-server 3.0.153 → 3.0.155

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 (42) hide show
  1. package/dist/PubSubManager/PubSubManager.d.ts +21 -26
  2. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  3. package/dist/PubSubManager/PubSubManager.js +43 -393
  4. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  5. package/dist/PubSubManager/addSub.d.ts +7 -0
  6. package/dist/PubSubManager/addSub.d.ts.map +1 -0
  7. package/dist/PubSubManager/addSub.js +153 -0
  8. package/dist/PubSubManager/addSub.js.map +1 -0
  9. package/dist/PubSubManager/addSync.d.ts +8 -0
  10. package/dist/PubSubManager/addSync.d.ts.map +1 -0
  11. package/dist/PubSubManager/addSync.js +110 -0
  12. package/dist/PubSubManager/addSync.js.map +1 -0
  13. package/dist/PubSubManager/notifListener.d.ts +5 -0
  14. package/dist/PubSubManager/notifListener.d.ts.map +1 -0
  15. package/dist/PubSubManager/notifListener.js +97 -0
  16. package/dist/PubSubManager/notifListener.js.map +1 -0
  17. package/lib/DboBuilder/TableHandler.d.ts +1 -5
  18. package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
  19. package/lib/PubSubManager/PubSubManager.d.ts +20 -29
  20. package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
  21. package/lib/PubSubManager/PubSubManager.js +44 -397
  22. package/lib/PubSubManager/PubSubManager.ts +82 -508
  23. package/lib/PubSubManager/addSub.d.ts +7 -0
  24. package/lib/PubSubManager/addSub.d.ts.map +1 -0
  25. package/lib/PubSubManager/addSub.js +152 -0
  26. package/lib/PubSubManager/addSub.ts +178 -0
  27. package/lib/PubSubManager/addSync.d.ts +8 -0
  28. package/lib/PubSubManager/addSync.d.ts.map +1 -0
  29. package/lib/PubSubManager/addSync.js +109 -0
  30. package/lib/PubSubManager/addSync.ts +127 -0
  31. package/lib/PubSubManager/notifListener.d.ts +5 -0
  32. package/lib/PubSubManager/notifListener.d.ts.map +1 -0
  33. package/lib/PubSubManager/notifListener.js +96 -0
  34. package/lib/PubSubManager/notifListener.ts +122 -0
  35. package/package.json +2 -2
  36. package/tests/client/PID.txt +1 -1
  37. package/tests/client/tsconfig.json +2 -1
  38. package/tests/client_only_queries.js +1 -1
  39. package/tests/client_only_queries.ts +1 -1
  40. package/tests/isomorphic_queries.ts +1 -1
  41. package/tests/server/package-lock.json +1 -1
  42. package/tests/server/tsconfig.json +2 -1
@@ -29,7 +29,7 @@ export type SyncParams = {
29
29
  last_synced: number;
30
30
  is_syncing: boolean;
31
31
  };
32
- type AddSyncParams = {
32
+ export type AddSyncParams = {
33
33
  socket: any;
34
34
  table_info: TableInfo;
35
35
  table_rules: TableRule;
@@ -58,11 +58,9 @@ export type ViewSubscriptionOptions = ({
58
58
  condition: string;
59
59
  }[];
60
60
  };
61
- type SubscriptionParams = {
61
+ export type SubscriptionParams = {
62
62
  socket_id?: string;
63
63
  channel_name: string;
64
- table_name: string;
65
- socket: PRGLIOSocket | undefined;
66
64
  /**
67
65
  * If this is a view then an array with all related tables will be
68
66
  * */
@@ -72,15 +70,13 @@ type SubscriptionParams = {
72
70
  table_rules?: TableRule;
73
71
  filter: object;
74
72
  params: SelectParams;
75
- func?: (data: any) => any;
73
+ func: undefined | ((data: any) => any);
74
+ socket: PRGLIOSocket | undefined;
76
75
  throttle?: number;
77
76
  last_throttled: number;
78
77
  is_throttling?: any;
79
78
  is_ready?: boolean;
80
79
  };
81
- type AddSubscriptionParams = SubscriptionParams & {
82
- condition: string;
83
- };
84
80
  export type PubSubManagerOptions = {
85
81
  dboBuilder: DboBuilder;
86
82
  wsChannelNamePrefix?: string;
@@ -90,20 +86,21 @@ export type PubSubManagerOptions = {
90
86
  query: string;
91
87
  }) => void;
92
88
  };
89
+ export type Subscription = Pick<SubscriptionParams, "throttle" | "is_throttling" | "last_throttled" | "channel_name" | "is_ready" | "func" | "socket" | "socket_id" | "table_info" | "filter" | "params" | "table_rules"> & {
90
+ triggers: {
91
+ table_name: string;
92
+ condition: string;
93
+ is_related: boolean;
94
+ }[];
95
+ };
93
96
  export declare class PubSubManager {
94
97
  static DELIMITER: string;
95
98
  dboBuilder: DboBuilder;
96
99
  get db(): DB;
97
100
  get dbo(): DBHandlerServer;
98
101
  _triggers?: Record<string, string[]>;
99
- sockets: any;
100
- subs: {
101
- [ke: string]: {
102
- [ke: string]: {
103
- subs: SubscriptionParams[];
104
- };
105
- };
106
- };
102
+ sockets: AnyObject;
103
+ subs: Subscription[];
107
104
  syncs: SyncParams[];
108
105
  socketChannelPreffix: string;
109
106
  onSchemaChange?: ((event: {
@@ -141,27 +138,24 @@ export declare class PubSubManager {
141
138
  static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID: string;
142
139
  prepareTriggers: () => Promise<boolean>;
143
140
  isReady(): any;
144
- getSubs(table_name: string, condition: string): SubscriptionParams[];
141
+ getSubs(table_name: string, condition: string, client?: Pick<Subscription, "func" | "socket_id">): Subscription[];
142
+ removeLocalSub(tableName: string, conditionRaw: string, func: (items: object[]) => any): void;
145
143
  getSyncs(table_name: string, condition: string): SyncParams[];
146
144
  notifListener: (data: {
147
145
  payload: string;
148
146
  }) => Promise<void>;
149
- pushSubData(sub: SubscriptionParams, err?: any): true | Promise<unknown>;
147
+ pushSubData(sub: Subscription, err?: any): true | Promise<unknown>;
150
148
  upsertSocket(socket: any): void;
151
149
  syncTimeout?: ReturnType<typeof setTimeout>;
152
150
  syncData(sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"): Promise<void>;
153
- /**
154
- * Returns a sync channel
155
- * A sync channel is unique per socket for each filter
156
- */
157
- addSync(syncParams: AddSyncParams): Promise<string>;
158
- addSub(subscriptionParams: Omit<AddSubscriptionParams, "channel_name" | "parentSubParams">): Promise<string>;
159
- removeLocalSub(table_name: string, condition: string, func: (items: object[]) => any): void;
151
+ addSync: (syncParams: AddSyncParams) => Promise<string>;
152
+ addSub: (subscriptionParams: Omit<SubscriptionParams & {
153
+ condition: string;
154
+ }, "channel_name" | "parentSubParams">) => Promise<string>;
160
155
  getActiveListeners: () => {
161
156
  table_name: string;
162
157
  condition: string;
163
158
  }[];
164
- onSocketDisconnected(socket?: PRGLIOSocket, channel_name?: string): string;
165
159
  checkIfTimescaleBug: (table_name: string) => Promise<boolean>;
166
160
  getMyTriggerQuery: () => Promise<string>;
167
161
  addingTrigger: any;
@@ -171,5 +165,6 @@ export declare class PubSubManager {
171
165
  condition: string;
172
166
  }, viewOptions?: ViewSubscriptionOptions): Promise<true | undefined>;
173
167
  }
168
+ export declare const parseCondition: (condition: string) => string;
174
169
  export { pickKeys, omitKeys } from "prostgles-types";
175
170
  //# sourceMappingURL=PubSubManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/PubSubManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/PubSubManager.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,8 @@
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  var _a;
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.omitKeys = exports.pickKeys = exports.PubSubManager = exports.log = exports.DEFAULT_SYNC_BATCH_SIZE = exports.asValue = void 0;
9
- const utils_1 = require("../utils");
8
+ exports.omitKeys = exports.pickKeys = exports.parseCondition = exports.PubSubManager = exports.log = exports.DEFAULT_SYNC_BATCH_SIZE = exports.asValue = void 0;
9
+ const addSync_1 = require("./addSync");
10
10
  const DboBuilder_1 = require("../DboBuilder");
11
11
  const Prostgles_1 = require("../Prostgles");
12
12
  const initPubSubManager_1 = require("./initPubSubManager");
@@ -16,6 +16,8 @@ const prostgles_types_1 = require("prostgles-types");
16
16
  const SyncReplication_1 = require("../SyncReplication");
17
17
  const util_1 = require("prostgles-types/dist/util");
18
18
  const getInitQuery_1 = require("./getInitQuery");
19
+ const addSub_1 = require("./addSub");
20
+ const notifListener_1 = require("./notifListener");
19
21
  const pgp = pgPromise({
20
22
  promiseLib: Bluebird
21
23
  });
@@ -36,6 +38,10 @@ class PubSubManager {
36
38
  return this.dboBuilder.dbo;
37
39
  }
38
40
  constructor(options) {
41
+ this.sockets = {};
42
+ // subs: { [ke: string]: { [ke: string]: { subs: SubscriptionParams[] } } };
43
+ this.subs = [];
44
+ this.syncs = [];
39
45
  this.onSchemaChange = undefined;
40
46
  this.NOTIF_TYPE = {
41
47
  data: "data_has_changed",
@@ -57,7 +63,8 @@ class PubSubManager {
57
63
  if (this.appCheck) {
58
64
  clearInterval(this.appCheck);
59
65
  }
60
- this.onSocketDisconnected();
66
+ this.subs = [];
67
+ this.syncs = [];
61
68
  if (!this.postgresNotifListenManager) {
62
69
  throw "this.postgresNotifListenManager missing";
63
70
  }
@@ -191,103 +198,9 @@ class PubSubManager {
191
198
  throw e;
192
199
  }
193
200
  };
194
- /* Relay relevant data to relevant subscriptions */
195
- this.notifListener = async (data) => {
196
- const str = data.payload;
197
- if (!str) {
198
- console.error("Empty notif?");
199
- return;
200
- }
201
- const dataArr = str.split(PubSubManager.DELIMITER), notifType = dataArr[0];
202
- (0, exports.log)(str);
203
- if (notifType === this.NOTIF_TYPE.schema) {
204
- if (this.onSchemaChange) {
205
- const command = dataArr[1], event_type = dataArr[2], query = dataArr[3];
206
- if (query) {
207
- this.onSchemaChange({ command, query });
208
- }
209
- }
210
- return;
211
- }
212
- if (notifType !== this.NOTIF_TYPE.data) {
213
- console.error("Unexpected notif type: ", notifType);
214
- return;
215
- }
216
- if (dataArr.length < 3) {
217
- throw "dataArr length < 3";
218
- }
219
- const table_name = dataArr[1], op_name = dataArr[2], condition_ids_str = dataArr[3];
220
- // const triggers = await this.db.any("SELECT * FROM prostgles.triggers WHERE table_name = $1 AND id IN ($2:csv)", [table_name, condition_ids_str.split(",").map(v => +v)]);
221
- // const conditions: string[] = triggers.map(t => t.condition);
222
- /**
223
- * Trigger error
224
- */
225
- (0, exports.log)("PG Trigger ->", dataArr.join("__"));
226
- if (condition_ids_str && condition_ids_str.startsWith("error") &&
227
- this._triggers &&
228
- this._triggers[table_name]?.length) {
229
- const pref = "INTERNAL ERROR";
230
- console.error(`${pref}: condition_ids_str: ${condition_ids_str}`);
231
- this._triggers[table_name].map(c => {
232
- const subs = this.getSubs(table_name, c);
233
- subs.map(s => {
234
- this.pushSubData(s, pref + ". Check server logs. Schema might have changed");
235
- });
236
- });
237
- /**
238
- * Trigger ok
239
- */
240
- }
241
- else if (condition_ids_str?.split(",").length &&
242
- condition_ids_str?.split(",").every((c) => Number.isInteger(+c)) &&
243
- this._triggers?.[table_name]?.length) {
244
- const idxs = condition_ids_str.split(",").map(v => +v);
245
- const conditions = this._triggers[table_name].filter((c, i) => idxs.includes(i));
246
- (0, exports.log)("PG Trigger -> ", { table_name, op_name, condition_ids_str, conditions }, this._triggers[table_name]);
247
- conditions.map(condition => {
248
- const subs = this.getSubs(table_name, condition);
249
- const syncs = this.getSyncs(table_name, condition);
250
- syncs.map((s) => {
251
- this.syncData(s, undefined, "trigger");
252
- });
253
- if (!subs) {
254
- // console.error(`sub missing for ${table_name} ${condition}`, this.triggers);
255
- // console.log(this.subs)
256
- return;
257
- }
258
- /* Throttle the subscriptions */
259
- for (let i = 0; i < subs.length; i++) {
260
- const sub = subs[i];
261
- if (this.dbo[sub.table_name] &&
262
- sub.is_ready &&
263
- (sub.socket_id && this.sockets[sub.socket_id]) || sub.func) {
264
- const throttle = sub.throttle || 0;
265
- if (sub.last_throttled <= Date.now() - throttle) {
266
- /* It is assumed the policy was checked before this point */
267
- this.pushSubData(sub);
268
- // sub.last_throttled = Date.now();
269
- }
270
- else if (!sub.is_throttling) {
271
- (0, exports.log)("throttling sub");
272
- sub.is_throttling = setTimeout(() => {
273
- (0, exports.log)("throttling finished. pushSubData...");
274
- sub.is_throttling = null;
275
- this.pushSubData(sub);
276
- }, throttle); // sub.throttle);
277
- }
278
- }
279
- }
280
- });
281
- }
282
- else {
283
- // if(!this._triggers || !this._triggers[table_name] || !this._triggers[table_name].length){
284
- // console.warn(190, "Trigger sub not found. DROPPING TRIGGER", table_name, condition_ids_str, this._triggers);
285
- // this.dropTrigger(table_name);
286
- // } else {
287
- // }
288
- console.warn(190, "Trigger sub issue: ", table_name, condition_ids_str, this._triggers);
289
- }
290
- };
201
+ this.notifListener = notifListener_1.notifListener.bind(this);
202
+ this.addSync = addSync_1.addSync.bind(this);
203
+ this.addSub = addSub_1.addSub.bind(this);
291
204
  this.getActiveListeners = () => {
292
205
  const result = [];
293
206
  const upsert = (t, c) => {
@@ -298,11 +211,9 @@ class PubSubManager {
298
211
  (this.syncs || []).map(s => {
299
212
  upsert(s.table_name, s.condition);
300
213
  });
301
- Object.keys(this.subs || {}).map(table_name => {
302
- Object.keys(this.subs[table_name] || {}).map(condition => {
303
- if (this.subs[table_name][condition].subs.length) {
304
- upsert(table_name, condition);
305
- }
214
+ this.subs.forEach(s => {
215
+ s.triggers.forEach(trg => {
216
+ upsert(trg.table_name, trg.condition);
306
217
  });
307
218
  });
308
219
  return result;
@@ -343,9 +254,6 @@ class PubSubManager {
343
254
  }
344
255
  this.onSchemaChange = onSchemaChange;
345
256
  this.dboBuilder = dboBuilder;
346
- this.sockets = {};
347
- this.subs = {};
348
- this.syncs = [];
349
257
  this.socketChannelPreffix = wsChannelNamePrefix || "_psqlWS_";
350
258
  (0, exports.log)("Created PubSubManager");
351
259
  }
@@ -354,29 +262,21 @@ class PubSubManager {
354
262
  throw "this.postgresNotifListenManager missing";
355
263
  return this.postgresNotifListenManager.isListening();
356
264
  }
357
- getSubs(table_name, condition) {
358
- const subs = this.subs?.[table_name]?.[condition]?.subs ?? [];
359
- // if(!subs){
360
- // log("Subs not found:", { table_name, condition }, this.subs)
361
- // }
362
- return subs.flatMap(s => {
363
- /* Return parentSubs to ensure throttling works */
364
- if (s.parentSubParams) {
365
- const parentSubs = [];
366
- const parentChannel = s.parentSubParams.channel_name;
367
- for (const tableName in (0, util_1.getKeys)(this.subs)) {
368
- for (const condition in (0, util_1.getKeys)(this.subs[tableName])) {
369
- this.subs[tableName][condition].subs.forEach(parentSub => {
370
- if (!parentSub.parentSubParams && parentSub.channel_name === parentChannel) {
371
- parentSubs.push(parentSub);
372
- }
373
- });
374
- }
375
- }
376
- return parentSubs ?? s;
377
- }
378
- return s;
379
- });
265
+ getSubs(table_name, condition, client) {
266
+ const subs = this.subs.filter(s => (0, util_1.find)(s.triggers, { table_name, condition }));
267
+ if (client) {
268
+ return subs.filter(s => client.func && s.func === client.func || client.socket_id && s.socket_id === client.socket_id);
269
+ }
270
+ return subs;
271
+ }
272
+ removeLocalSub(tableName, conditionRaw, func) {
273
+ const condition = (0, exports.parseCondition)(conditionRaw);
274
+ if (this.getSubs(tableName, condition, { func }).length) {
275
+ this.subs = this.subs.filter(s => s.func !== func && !(0, util_1.find)(s.triggers, { tableName, condition }));
276
+ }
277
+ else {
278
+ console.error("Could not unsubscribe. Subscription might not have initialised yet", { tableName, condition });
279
+ }
380
280
  }
381
281
  getSyncs(table_name, condition) {
382
282
  return (this.syncs || [])
@@ -385,7 +285,8 @@ class PubSubManager {
385
285
  pushSubData(sub, err) {
386
286
  if (!sub)
387
287
  throw "pushSubData: invalid sub";
388
- const { table_name, filter, params, table_rules, socket_id, channel_name, func } = sub; //, subOne = false
288
+ const { table_info, filter, params, table_rules, socket_id, channel_name, func } = sub; //, subOne = false
289
+ const { name: table_name } = table_info;
389
290
  sub.last_throttled = Date.now();
390
291
  if (err) {
391
292
  if (socket_id) {
@@ -430,272 +331,20 @@ class PubSubManager {
430
331
  upsertSocket(socket) {
431
332
  if (socket && !this.sockets[socket.id]) {
432
333
  this.sockets[socket.id] = socket;
433
- socket.on("disconnect", () => this.onSocketDisconnected(socket));
434
- }
435
- }
436
- async syncData(sync, clientData, source) {
437
- return await (0, SyncReplication_1.syncData)(this, sync, clientData, source);
438
- }
439
- /**
440
- * Returns a sync channel
441
- * A sync channel is unique per socket for each filter
442
- */
443
- async addSync(syncParams) {
444
- const { socket = null, table_info = null, table_rules, synced_field = null, allow_delete = false, id_fields = [], filter = {}, params, condition = "", throttle = 0 } = syncParams || {};
445
- const conditionParsed = parseCondition(condition);
446
- if (!socket || !table_info)
447
- throw "socket or table_info missing";
448
- const { name: table_name } = table_info, channel_name = `${this.socketChannelPreffix}.${table_name}.${JSON.stringify(filter)}.sync`;
449
- if (!synced_field)
450
- throw "synced_field missing from table_rules";
451
- this.upsertSocket(socket);
452
- const upsertSync = () => {
453
- const newSync = {
454
- channel_name,
455
- table_name,
456
- filter,
457
- condition: conditionParsed,
458
- synced_field,
459
- id_fields,
460
- allow_delete,
461
- table_rules,
462
- throttle: Math.max(throttle || 0, table_rules?.sync?.throttle || 0),
463
- batch_size: (0, utils_1.get)(table_rules, "sync.batch_size") || exports.DEFAULT_SYNC_BATCH_SIZE,
464
- last_throttled: 0,
465
- socket_id: socket.id,
466
- is_sync: true,
467
- last_synced: 0,
468
- lr: undefined,
469
- table_info,
470
- is_syncing: false,
471
- wal: undefined,
472
- socket,
473
- params
474
- };
475
- /* Only a sync per socket per table per condition allowed */
476
- this.syncs = this.syncs || [];
477
- const existing = (0, util_1.find)(this.syncs, { socket_id: socket.id, channel_name });
478
- if (!existing) {
479
- this.syncs.push(newSync);
480
- // console.log("Added SYNC");
481
- socket.removeAllListeners(channel_name + "unsync");
482
- socket.once(channel_name + "unsync", (_data, cb) => {
483
- this.onSocketDisconnected(socket, channel_name);
484
- cb(null, { res: "ok" });
334
+ socket.on("disconnect", () => {
335
+ this.subs = this.subs.filter(s => {
336
+ return !(s.socket && s.socket.id === socket.id);
485
337
  });
486
- socket.removeAllListeners(channel_name);
487
- socket.on(channel_name, (data, cb) => {
488
- if (!data) {
489
- cb({ err: "Unexpected request. Need data or onSyncRequest" });
490
- return;
491
- }
492
- /*
493
- */
494
- /* Server will:
495
- 1. Ask for last_synced emit(onSyncRequest)
496
- 2. Ask for data >= server_synced emit(onPullRequest)
497
- -> Upsert that data
498
- 2. Push data >= last_synced emit(data.data)
499
-
500
- Client will:
501
- 1. Send last_synced on(onSyncRequest)
502
- 2. Send data >= server_synced on(onPullRequest)
503
- 3. Send data on CRUD emit(data.data | data.deleted)
504
- 4. Upsert data.data | deleted on(data.data | data.deleted)
505
- */
506
- // if(data.data){
507
- // console.error("THIS SHOUKD NEVER FIRE !! NEW DATA FROM SYNC");
508
- // this.upsertClientData(newSync, data.data);
509
- // } else
510
- if (data.onSyncRequest) {
511
- // console.log("syncData from socket")
512
- this.syncData(newSync, data.onSyncRequest, "client");
513
- // console.log("onSyncRequest ", socket._user)
514
- }
515
- else {
516
- console.error("Unexpected sync request data from client: ", data);
517
- }
338
+ this.syncs = this.syncs.filter(s => {
339
+ return !(s.socket_id && s.socket_id === socket.id);
518
340
  });
519
- // socket.emit(channel_name, { onSyncRequest: true }, (response) => {
520
- // console.log(response)
521
- // });
522
- }
523
- else {
524
- console.warn("UNCLOSED DUPLICATE SYNC FOUND", existing.channel_name);
525
- }
526
- return newSync;
527
- };
528
- // const { min_id, max_id, count, max_synced } = params;
529
- const _sync = upsertSync();
530
- await this.addTrigger({ table_name, condition: conditionParsed });
531
- return channel_name;
532
- }
533
- /* Must return a channel for socket */
534
- /* The distinct list of channel names must have a corresponding trigger in the database */
535
- async addSub(subscriptionParams) {
536
- const { socket, func = null, table_info = null, table_rules, filter = {}, params = {}, condition = "", throttle = 0, //subOne = false,
537
- viewOptions } = subscriptionParams || {};
538
- let validated_throttle = subscriptionParams.throttle || 10;
539
- if ((!socket && !func) || !table_info)
540
- throw "socket/func or table_info missing";
541
- const pubThrottle = (0, utils_1.get)(table_rules, ["subscribe", "throttle"]) || 0;
542
- if (pubThrottle && Number.isInteger(pubThrottle) && pubThrottle > 0) {
543
- validated_throttle = pubThrottle;
544
- }
545
- if (throttle && Number.isInteger(throttle) && throttle >= pubThrottle) {
546
- validated_throttle = throttle;
547
- }
548
- const channel_name = `${this.socketChannelPreffix}.${table_info.name}.${JSON.stringify(filter)}.${JSON.stringify(params)}.${"m"}.sub`;
549
- this.upsertSocket(socket);
550
- const upsertSub = (newSubData, isReadyOverride) => {
551
- const { table_name, condition: _cond, is_ready = false, parentSubParams } = newSubData, condition = parseCondition(_cond), newSub = {
552
- socket,
553
- table_name: table_info.name,
554
- table_info,
555
- filter,
556
- params,
557
- table_rules,
558
- channel_name,
559
- parentSubParams,
560
- func: func ?? undefined,
561
- socket_id: socket?.id,
562
- throttle: validated_throttle,
563
- is_throttling: null,
564
- last_throttled: 0,
565
- is_ready,
566
- };
567
- this.subs[table_name] = this.subs[table_name] ?? {};
568
- this.subs[table_name][condition] = this.subs[table_name][condition] ?? { subs: [] };
569
- this.subs[table_name][condition].subs = this.subs[table_name][condition].subs ?? [];
570
- // console.log("1034 upsertSub", this.subs)
571
- const sub_idx = this.subs[table_name][condition].subs.findIndex(s => s.channel_name === channel_name &&
572
- (socket && s.socket_id === socket.id ||
573
- func && s.func === func));
574
- if (sub_idx < 0) {
575
- this.subs[table_name][condition].subs.push(newSub);
576
- if (socket) {
577
- const chnUnsub = channel_name + "unsubscribe";
578
- socket.removeAllListeners(chnUnsub);
579
- socket.once(chnUnsub, (_data, cb) => {
580
- const res = this.onSocketDisconnected(socket, channel_name);
581
- cb(null, { res });
582
- });
583
- }
584
- }
585
- else {
586
- this.subs[table_name][condition].subs[sub_idx] = newSub;
587
- }
588
- if (isReadyOverride ?? is_ready) {
589
- this.pushSubData(newSub);
590
- }
591
- };
592
- viewOptions?.relatedTables.map(async (relatedTable, relatedTableIdx) => {
593
- const params = {
594
- table_name: relatedTable.tableName,
595
- condition: relatedTable.condition,
596
- parentSubParams: {
597
- ...subscriptionParams,
598
- channel_name
599
- },
600
- };
601
- upsertSub({
602
- ...params,
603
- is_ready: false,
604
- }, false);
605
- await this.addTrigger(params, viewOptions);
606
- /** Trigger pushSubData only on last related table (if it's a view) to prevent duplicate firings */
607
- const isLast = relatedTableIdx === viewOptions.relatedTables.length - 1;
608
- upsertSub({
609
- ...params,
610
- is_ready: true
611
- }, isLast && !table_info.is_view);
612
- });
613
- if (table_info.is_view) {
614
- if (!viewOptions?.relatedTables.length) {
615
- throw "PubSubManager: view parent_tables missing";
616
- }
617
- return channel_name;
618
- }
619
- /* Just a table, add table + condition trigger */
620
- // console.log(table_info, 202);
621
- upsertSub({
622
- table_name: table_info.name,
623
- condition: parseCondition(condition),
624
- parentSubParams: undefined,
625
- is_ready: false
626
- }, undefined);
627
- await this.addTrigger({
628
- table_name: table_info.name,
629
- condition: parseCondition(condition),
630
- });
631
- upsertSub({
632
- table_name: table_info.name,
633
- condition: parseCondition(condition),
634
- parentSubParams: undefined,
635
- is_ready: true
636
- }, undefined);
637
- return channel_name;
638
- }
639
- removeLocalSub(table_name, condition, func) {
640
- const cond = parseCondition(condition);
641
- if ((0, utils_1.get)(this.subs, [table_name, cond, "subs"])) {
642
- this.subs[table_name][cond].subs.map((sub, i) => {
643
- if (sub.func && sub.func === func) {
644
- this.subs[table_name][cond].subs.splice(i, 1);
645
- }
341
+ delete this.sockets[socket.id];
342
+ return "ok";
646
343
  });
647
344
  }
648
- else {
649
- console.error("Could not unsubscribe. Subscription might not have initialised yet");
650
- }
651
345
  }
652
- onSocketDisconnected(socket, channel_name) {
653
- // process.on('warning', e => {
654
- // console.warn(e.stack)
655
- // });
656
- // console.log("onSocketDisconnected", channel_name, this.syncs)
657
- if (this.subs) {
658
- Object.keys(this.subs).map(table_name => {
659
- Object.keys(this.subs[table_name]).map(condition => {
660
- this.subs[table_name][condition].subs.map((sub, i) => {
661
- /**
662
- * If a channel name is specified then delete triggers
663
- */
664
- if ((socket && sub.socket_id === socket.id) &&
665
- (!channel_name || sub.channel_name === channel_name)) {
666
- this.subs[table_name][condition].subs.splice(i, 1);
667
- if (!this.subs[table_name][condition].subs.length) {
668
- delete this.subs[table_name][condition];
669
- if ((0, prostgles_types_1.isEmpty)(this.subs[table_name])) {
670
- delete this.subs[table_name];
671
- }
672
- }
673
- }
674
- });
675
- });
676
- });
677
- }
678
- if (this.syncs) {
679
- this.syncs = this.syncs.filter(s => {
680
- const matchesSocket = Boolean(socket && s.socket_id !== socket.id);
681
- if (channel_name) {
682
- return matchesSocket || s.channel_name !== channel_name;
683
- }
684
- return matchesSocket;
685
- });
686
- }
687
- if (!socket) {
688
- // Do nothing
689
- }
690
- else if (!channel_name) {
691
- delete this.sockets[socket.id];
692
- }
693
- else {
694
- socket.removeAllListeners(channel_name);
695
- socket.removeAllListeners(channel_name + "unsync");
696
- socket.removeAllListeners(channel_name + "unsubscribe");
697
- }
698
- return "ok";
346
+ async syncData(sync, clientData, source) {
347
+ return await (0, SyncReplication_1.syncData)(this, sync, clientData, source);
699
348
  }
700
349
  async addTrigger(params, viewOptions) {
701
350
  try {
@@ -774,6 +423,7 @@ PubSubManager.create = async (options) => {
774
423
  PubSubManager.SCHEMA_ALTERING_QUERIES = ['CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
775
424
  PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID = "prostgles internal query that should be excluded from schema watch ";
776
425
  const parseCondition = (condition) => condition && condition.trim().length ? condition : "TRUE";
426
+ exports.parseCondition = parseCondition;
777
427
  var prostgles_types_2 = require("prostgles-types");
778
428
  Object.defineProperty(exports, "pickKeys", { enumerable: true, get: function () { return prostgles_types_2.pickKeys; } });
779
429
  Object.defineProperty(exports, "omitKeys", { enumerable: true, get: function () { return prostgles_types_2.omitKeys; } });