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.
- package/dist/PubSubManager/PubSubManager.d.ts +21 -26
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +43 -393
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/addSub.d.ts +7 -0
- package/dist/PubSubManager/addSub.d.ts.map +1 -0
- package/dist/PubSubManager/addSub.js +153 -0
- package/dist/PubSubManager/addSub.js.map +1 -0
- package/dist/PubSubManager/addSync.d.ts +8 -0
- package/dist/PubSubManager/addSync.d.ts.map +1 -0
- package/dist/PubSubManager/addSync.js +110 -0
- package/dist/PubSubManager/addSync.js.map +1 -0
- package/dist/PubSubManager/notifListener.d.ts +5 -0
- package/dist/PubSubManager/notifListener.d.ts.map +1 -0
- package/dist/PubSubManager/notifListener.js +97 -0
- package/dist/PubSubManager/notifListener.js.map +1 -0
- package/lib/DboBuilder/TableHandler.d.ts +1 -5
- package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
- package/lib/PubSubManager/PubSubManager.d.ts +20 -29
- package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/PubSubManager.js +44 -397
- package/lib/PubSubManager/PubSubManager.ts +82 -508
- package/lib/PubSubManager/addSub.d.ts +7 -0
- package/lib/PubSubManager/addSub.d.ts.map +1 -0
- package/lib/PubSubManager/addSub.js +152 -0
- package/lib/PubSubManager/addSub.ts +178 -0
- package/lib/PubSubManager/addSync.d.ts +8 -0
- package/lib/PubSubManager/addSync.d.ts.map +1 -0
- package/lib/PubSubManager/addSync.js +109 -0
- package/lib/PubSubManager/addSync.ts +127 -0
- package/lib/PubSubManager/notifListener.d.ts +5 -0
- package/lib/PubSubManager/notifListener.d.ts.map +1 -0
- package/lib/PubSubManager/notifListener.js +96 -0
- package/lib/PubSubManager/notifListener.ts +122 -0
- package/package.json +2 -2
- package/tests/client/PID.txt +1 -1
- package/tests/client/tsconfig.json +2 -1
- package/tests/client_only_queries.js +1 -1
- package/tests/client_only_queries.ts +1 -1
- package/tests/isomorphic_queries.ts +1 -1
- package/tests/server/package-lock.json +1 -1
- 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
|
|
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:
|
|
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):
|
|
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:
|
|
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
|
-
|
|
155
|
-
|
|
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":";AAKA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,eAAe,CAAC;AAClH,OAAO,EAAE,EAAE,EAAe,MAAM,cAAc,CAAC;AAO/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAU,GAAG,
|
|
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
|
|
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.
|
|
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
|
-
|
|
195
|
-
this.
|
|
196
|
-
|
|
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
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
return subs
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
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 {
|
|
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", () =>
|
|
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
|
-
|
|
487
|
-
|
|
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
|
-
|
|
520
|
-
|
|
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
|
-
|
|
653
|
-
|
|
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; } });
|