prostgles-server 4.0.1 → 4.0.3

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 (43) hide show
  1. package/dist/DboBuilder/ViewHandler.d.ts +3 -3
  2. package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
  3. package/dist/DboBuilder/ViewHandler.js +2 -2
  4. package/dist/DboBuilder/ViewHandler.js.map +1 -1
  5. package/dist/DboBuilder/subscribe.d.ts +12 -3
  6. package/dist/DboBuilder/subscribe.d.ts.map +1 -1
  7. package/dist/DboBuilder/subscribe.js +23 -9
  8. package/dist/DboBuilder/subscribe.js.map +1 -1
  9. package/dist/PubSubManager/PubSubManager.d.ts +5 -4
  10. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  11. package/dist/PubSubManager/PubSubManager.js +7 -4
  12. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  13. package/dist/PubSubManager/addSub.d.ts.map +1 -1
  14. package/dist/PubSubManager/addSub.js +22 -16
  15. package/dist/PubSubManager/addSub.js.map +1 -1
  16. package/dist/PubSubManager/notifListener.js +1 -1
  17. package/dist/PubSubManager/notifListener.js.map +1 -1
  18. package/dist/PubSubManager/pushSubData.d.ts.map +1 -1
  19. package/dist/PubSubManager/pushSubData.js +10 -5
  20. package/dist/PubSubManager/pushSubData.js.map +1 -1
  21. package/lib/DboBuilder/ViewHandler.d.ts +3 -3
  22. package/lib/DboBuilder/ViewHandler.d.ts.map +1 -1
  23. package/lib/DboBuilder/ViewHandler.js +2 -2
  24. package/lib/DboBuilder/ViewHandler.ts +5 -5
  25. package/lib/DboBuilder/subscribe.d.ts +12 -3
  26. package/lib/DboBuilder/subscribe.d.ts.map +1 -1
  27. package/lib/DboBuilder/subscribe.js +23 -9
  28. package/lib/DboBuilder/subscribe.ts +28 -12
  29. package/lib/PubSubManager/PubSubManager.d.ts +5 -4
  30. package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
  31. package/lib/PubSubManager/PubSubManager.js +7 -4
  32. package/lib/PubSubManager/PubSubManager.ts +10 -7
  33. package/lib/PubSubManager/addSub.d.ts.map +1 -1
  34. package/lib/PubSubManager/addSub.js +22 -16
  35. package/lib/PubSubManager/addSub.ts +27 -19
  36. package/lib/PubSubManager/notifListener.js +1 -1
  37. package/lib/PubSubManager/notifListener.ts +1 -1
  38. package/lib/PubSubManager/pushSubData.d.ts.map +1 -1
  39. package/lib/PubSubManager/pushSubData.js +10 -5
  40. package/lib/PubSubManager/pushSubData.ts +10 -5
  41. package/package.json +1 -1
  42. package/tests/client/PID.txt +1 -1
  43. package/tests/server/package-lock.json +1 -1
@@ -5,13 +5,13 @@ const PubSubManager_1 = require("./PubSubManager");
5
5
  /* Must return a channel for socket */
6
6
  /* The distinct list of {table_name, condition} must have a corresponding trigger in the database */
7
7
  async function addSub(subscriptionParams) {
8
- const { socket, func, table_rules, filter = {}, params = {}, condition = "", throttle = 0, //subOne = false,
8
+ const { socket, localFuncs, table_rules, filter = {}, params = {}, condition = "", throttle = 0, //subOne = false,
9
9
  viewOptions, table_info, } = subscriptionParams || {};
10
10
  const table_name = table_info.name;
11
- if (!socket && !func) {
11
+ if (!socket && !localFuncs) {
12
12
  throw "socket AND func missing";
13
13
  }
14
- if (socket && func) {
14
+ if (socket && localFuncs) {
15
15
  throw "addSub: cannot have socket AND func";
16
16
  }
17
17
  let validated_throttle = subscriptionParams.throttle || 10;
@@ -23,17 +23,15 @@ async function addSub(subscriptionParams) {
23
23
  validated_throttle = throttle;
24
24
  }
25
25
  const channel_name = `${this.socketChannelPreffix}.${table_name}.${JSON.stringify(filter)}.${JSON.stringify(params)}.${"m"}.sub`;
26
- const result = {
27
- channelName: channel_name,
28
- channelNameReady: channel_name + ".ready",
29
- channelNameUnsubscribe: channel_name + ".unsubscribe"
26
+ const mainTrigger = {
27
+ table_name: table_name,
28
+ condition: (0, PubSubManager_1.parseCondition)(condition),
29
+ is_related: false,
30
30
  };
31
- this.upsertSocket(socket);
32
- // const upsertSub = _upsertSub.bind(this);
33
31
  const newSub = {
34
32
  channel_name,
35
33
  filter,
36
- func,
34
+ localFuncs,
37
35
  params,
38
36
  last_throttled: 0,
39
37
  socket,
@@ -44,13 +42,21 @@ async function addSub(subscriptionParams) {
44
42
  table_rules,
45
43
  throttle: validated_throttle,
46
44
  triggers: [
47
- {
48
- table_name: table_name,
49
- condition: (0, PubSubManager_1.parseCondition)(condition),
50
- is_related: false,
51
- }
45
+ mainTrigger
52
46
  ]
53
47
  };
48
+ const result = {
49
+ channelName: channel_name,
50
+ channelNameReady: channel_name + ".ready",
51
+ channelNameUnsubscribe: channel_name + ".unsubscribe"
52
+ };
53
+ const [matchingSub] = this.getSubs(mainTrigger.table_name, mainTrigger.condition, newSub);
54
+ if (matchingSub) {
55
+ console.error("Trying to add a duplicate sub for: ", channel_name);
56
+ return result;
57
+ }
58
+ this.upsertSocket(socket);
59
+ // const upsertSub = _upsertSub.bind(this);
54
60
  if (viewOptions) {
55
61
  for await (const relatedTable of viewOptions.relatedTables) {
56
62
  const relatedSub = {
@@ -62,7 +68,7 @@ async function addSub(subscriptionParams) {
62
68
  await this.addTrigger(relatedSub, viewOptions);
63
69
  }
64
70
  }
65
- if (func) {
71
+ if (localFuncs) {
66
72
  this.pushSubData(newSub);
67
73
  }
68
74
  else if (socket) {
@@ -9,16 +9,16 @@ type AddSubscriptionParams = SubscriptionParams & {
9
9
  /* The distinct list of {table_name, condition} must have a corresponding trigger in the database */
10
10
  export async function addSub(this: PubSubManager, subscriptionParams: Omit<AddSubscriptionParams, "channel_name" | "parentSubParams">): Promise<SubscriptionChannels> {
11
11
  const {
12
- socket, func, table_rules, filter = {},
12
+ socket, localFuncs, table_rules, filter = {},
13
13
  params = {}, condition = "", throttle = 0, //subOne = false,
14
14
  viewOptions, table_info,
15
15
  } = subscriptionParams || {};
16
16
  const table_name = table_info.name;
17
17
 
18
- if (!socket && !func) {
18
+ if (!socket && !localFuncs) {
19
19
  throw "socket AND func missing";
20
20
  }
21
- if (socket && func) {
21
+ if (socket && localFuncs) {
22
22
  throw "addSub: cannot have socket AND func";
23
23
  }
24
24
 
@@ -32,20 +32,16 @@ export async function addSub(this: PubSubManager, subscriptionParams: Omit<AddSu
32
32
  }
33
33
 
34
34
  const channel_name = `${this.socketChannelPreffix}.${table_name}.${JSON.stringify(filter)}.${JSON.stringify(params)}.${"m"}.sub`;
35
- const result: SubscriptionChannels = {
36
- channelName: channel_name,
37
- channelNameReady: channel_name + ".ready",
38
- channelNameUnsubscribe: channel_name + ".unsubscribe"
39
- }
40
-
41
- this.upsertSocket(socket);
42
-
43
- // const upsertSub = _upsertSub.bind(this);
35
+ const mainTrigger = {
36
+ table_name: table_name,
37
+ condition: parseCondition(condition),
38
+ is_related: false,
39
+ } as const;
44
40
 
45
41
  const newSub: Subscription = {
46
42
  channel_name,
47
43
  filter,
48
- func,
44
+ localFuncs,
49
45
  params,
50
46
  last_throttled: 0,
51
47
  socket,
@@ -56,14 +52,26 @@ export async function addSub(this: PubSubManager, subscriptionParams: Omit<AddSu
56
52
  table_rules,
57
53
  throttle: validated_throttle,
58
54
  triggers: [
59
- {
60
- table_name: table_name,
61
- condition: parseCondition(condition),
62
- is_related: false,
63
- }
55
+ mainTrigger
64
56
  ]
65
57
  }
66
58
 
59
+ const result: SubscriptionChannels = {
60
+ channelName: channel_name,
61
+ channelNameReady: channel_name + ".ready",
62
+ channelNameUnsubscribe: channel_name + ".unsubscribe"
63
+ }
64
+
65
+ const [matchingSub] = this.getSubs(mainTrigger.table_name, mainTrigger.condition, newSub);
66
+ if(matchingSub){
67
+ console.error("Trying to add a duplicate sub for: ", channel_name);
68
+ return result;
69
+ }
70
+
71
+ this.upsertSocket(socket);
72
+
73
+ // const upsertSub = _upsertSub.bind(this);
74
+
67
75
  if(viewOptions){
68
76
  for await(const relatedTable of viewOptions.relatedTables){
69
77
  const relatedSub = {
@@ -79,7 +87,7 @@ export async function addSub(this: PubSubManager, subscriptionParams: Omit<AddSu
79
87
 
80
88
  }
81
89
 
82
- if(func){
90
+ if(localFuncs){
83
91
  this.pushSubData(newSub);
84
92
 
85
93
  } else if (socket) {
@@ -65,7 +65,7 @@ async function notifListener(data) {
65
65
  sub.triggers.forEach(trg => {
66
66
  if (this.dbo[trg.table_name] &&
67
67
  sub.is_ready &&
68
- (sub.socket_id && this.sockets[sub.socket_id]) || sub.func) {
68
+ (sub.socket_id && this.sockets[sub.socket_id]) || sub.localFuncs) {
69
69
  const throttle = sub.throttle || 0;
70
70
  if (sub.last_throttled <= Date.now() - throttle) {
71
71
  /* It is assumed the policy was checked before this point */
@@ -87,7 +87,7 @@ export async function notifListener(this: PubSubManager, data: { payload: string
87
87
  if (
88
88
  this.dbo[trg.table_name] &&
89
89
  sub.is_ready &&
90
- (sub.socket_id && this.sockets[sub.socket_id]) || sub.func
90
+ (sub.socket_id && this.sockets[sub.socket_id]) || sub.localFuncs
91
91
  ) {
92
92
  const throttle = sub.throttle || 0;
93
93
  if (sub.last_throttled <= Date.now() - throttle) {
@@ -1 +1 @@
1
- {"version":3,"file":"pushSubData.d.ts","sourceRoot":"","sources":["pushSubData.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnE,wBAAsB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,oBA4ClF"}
1
+ {"version":3,"file":"pushSubData.d.ts","sourceRoot":"","sources":["pushSubData.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEnE,wBAAsB,WAAW,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,CAAC,EAAE,GAAG,oBAgDlF"}
@@ -1,11 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.pushSubData = void 0;
4
+ const subscribe_1 = require("../DboBuilder/subscribe");
4
5
  const PubSubManager_1 = require("./PubSubManager");
5
6
  async function pushSubData(sub, err) {
6
7
  if (!sub)
7
8
  throw "pushSubData: invalid sub";
8
- const { socket_id, channel_name, func } = sub; //, subOne = false
9
+ const { socket_id, channel_name } = sub; //, subOne = false
10
+ const localFuncs = (0, subscribe_1.parseLocalFuncs)(sub.localFuncs);
9
11
  sub.last_throttled = Date.now();
10
12
  if (err) {
11
13
  if (socket_id) {
@@ -26,8 +28,8 @@ async function pushSubData(sub, err) {
26
28
  { data }, (cb)=> { console.log(cb) });
27
29
  */
28
30
  }
29
- else if (func) {
30
- func(data);
31
+ else if (localFuncs) {
32
+ localFuncs.onData(data);
31
33
  resolve(data);
32
34
  }
33
35
  sub.last_throttled = Date.now();
@@ -37,8 +39,11 @@ async function pushSubData(sub, err) {
37
39
  if (socket_id && this.sockets[socket_id]) {
38
40
  this.sockets[socket_id].emit(channel_name, { err: errObj });
39
41
  }
40
- else if (func) {
41
- func({ err: errObj });
42
+ else if (localFuncs) {
43
+ if (!localFuncs.onError) {
44
+ console.error("Uncaught subscription error", err);
45
+ }
46
+ localFuncs.onError?.(errObj);
42
47
  }
43
48
  reject(errObj);
44
49
  }
@@ -1,9 +1,11 @@
1
+ import { parseLocalFuncs } from "../DboBuilder/subscribe";
1
2
  import { log, PubSubManager, Subscription } from "./PubSubManager";
2
3
 
3
4
  export async function pushSubData(this: PubSubManager, sub: Subscription, err?: any) {
4
5
  if (!sub) throw "pushSubData: invalid sub";
5
6
 
6
- const { socket_id, channel_name, func } = sub; //, subOne = false
7
+ const { socket_id, channel_name } = sub; //, subOne = false
8
+ const localFuncs = parseLocalFuncs(sub.localFuncs);
7
9
  sub.last_throttled = Date.now();
8
10
 
9
11
  if (err) {
@@ -28,8 +30,8 @@ export async function pushSubData(this: PubSubManager, sub: Subscription, err?:
28
30
  /* TO DO: confirm receiving data or server will unsubscribe
29
31
  { data }, (cb)=> { console.log(cb) });
30
32
  */
31
- } else if (func) {
32
- func(data);
33
+ } else if (localFuncs) {
34
+ localFuncs.onData(data);
33
35
  resolve(data);
34
36
  }
35
37
  sub.last_throttled = Date.now();
@@ -38,8 +40,11 @@ export async function pushSubData(this: PubSubManager, sub: Subscription, err?:
38
40
  const errObj = { _err_msg: err.toString(), err };
39
41
  if (socket_id && this.sockets[socket_id]) {
40
42
  this.sockets[socket_id].emit(channel_name, { err: errObj });
41
- } else if (func) {
42
- func({ err: errObj });
43
+ } else if (localFuncs) {
44
+ if(!localFuncs.onError){
45
+ console.error("Uncaught subscription error", err);
46
+ }
47
+ localFuncs.onError?.(errObj);
43
48
  }
44
49
  reject(errObj);
45
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +1 @@
1
- 27418
1
+ 56545
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "../..": {
23
23
  "name": "prostgles-server",
24
- "version": "4.0.0",
24
+ "version": "4.0.2",
25
25
  "license": "MIT",
26
26
  "dependencies": {
27
27
  "@aws-sdk/client-s3": "^3.272.0",