@eleven-am/pondsocket 0.1.54 → 0.1.56

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.
@@ -52,7 +52,7 @@ class ChannelEngine {
52
52
  const oldUser = __classPrivateFieldGet(this, _ChannelEngine_users, "f").get(userId);
53
53
  if (oldUser) {
54
54
  const message = `ChannelEngine: User with id ${userId} already exists in channel ${this.name}`;
55
- const code = 404;
55
+ const code = 400;
56
56
  throw new pondError_1.ChannelError(message, code, this.name);
57
57
  }
58
58
  __classPrivateFieldGet(this, _ChannelEngine_users, "f").set(userId, assigns);
@@ -123,11 +123,12 @@ class ChannelEngine {
123
123
  * @param userId - The id of the user to get
124
124
  */
125
125
  getUserData(userId) {
126
+ const assigns = __classPrivateFieldGet(this, _ChannelEngine_users, "f").get(userId);
126
127
  const presence = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f") ? __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").getUserPresence(userId) : {};
127
- if (__classPrivateFieldGet(this, _ChannelEngine_users, "f").has(userId)) {
128
+ if (assigns) {
128
129
  return {
130
+ assigns,
129
131
  id: userId,
130
- assigns: __classPrivateFieldGet(this, _ChannelEngine_users, "f").get(userId),
131
132
  presence: presence || {},
132
133
  };
133
134
  }
@@ -201,11 +202,8 @@ class ChannelEngine {
201
202
  if (!__classPrivateFieldGet(this, _ChannelEngine_users, "f").has(userId)) {
202
203
  throw new pondError_1.ChannelError(`ChannelEngine: User with id ${userId} does not exist in channel ${this.name}`, 404, this.name);
203
204
  }
204
- __classPrivateFieldSet(this, _ChannelEngine_presenceEngine, (_a = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) !== null && _a !== void 0 ? _a : new presence_1.PresenceEngine(this.name), "f");
205
- __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").trackPresence(userId, presence, (change) => {
206
- const { type } = change, rest = __rest(change, ["type"]);
207
- this.sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.PRESENCE, type, rest);
208
- });
205
+ __classPrivateFieldSet(this, _ChannelEngine_presenceEngine, (_a = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) !== null && _a !== void 0 ? _a : new presence_1.PresenceEngine(this), "f");
206
+ __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").trackPresence(userId, presence);
209
207
  }
210
208
  /**
211
209
  * @desc Gets the presence engine for the channel
@@ -33,7 +33,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
33
33
  */
34
34
  accept(assigns) {
35
35
  __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_performChecks).call(this);
36
- assigns = Object.assign(Object.assign({}, assigns), __classPrivateFieldGet(this, _JoinResponse_user, "f").assigns);
36
+ const newAssigns = Object.assign(Object.assign({}, assigns || {}), __classPrivateFieldGet(this, _JoinResponse_user, "f").assigns);
37
37
  const acknowledgement = {
38
38
  action: enums_1.ServerActions.SYSTEM,
39
39
  channelName: __classPrivateFieldGet(this, _JoinResponse_engine, "f").name,
@@ -41,7 +41,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
41
41
  payload: {},
42
42
  };
43
43
  __classPrivateFieldGet(this, _JoinResponse_user, "f").socket.send(JSON.stringify(acknowledgement));
44
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").addUser(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, assigns, (event) => {
44
+ __classPrivateFieldGet(this, _JoinResponse_engine, "f").addUser(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, newAssigns, (event) => {
45
45
  __classPrivateFieldGet(this, _JoinResponse_user, "f").socket.send(JSON.stringify(event));
46
46
  });
47
47
  return this;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eleven-am/pondsocket",
3
- "version": "0.1.54",
3
+ "version": "0.1.56",
4
4
  "description": "PondSocket is a fast simple socket server",
5
5
  "keywords": [
6
6
  "socket",
@@ -10,19 +10,17 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
10
10
  if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
11
11
  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
12
  };
13
- var _PresenceEngine_engine, _PresenceEngine_presenceMap, _PresenceEngine_channel;
13
+ var _PresenceEngine_instances, _PresenceEngine_presenceMap, _PresenceEngine_channel, _PresenceEngine_publish;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.PresenceEngine = void 0;
16
16
  const enums_1 = require("../enums");
17
17
  const pondError_1 = require("../errors/pondError");
18
- const subject_1 = require("../subjects/subject");
19
18
  class PresenceEngine {
20
19
  constructor(channel) {
21
- _PresenceEngine_engine.set(this, void 0);
20
+ _PresenceEngine_instances.add(this);
22
21
  _PresenceEngine_presenceMap.set(this, void 0);
23
22
  _PresenceEngine_channel.set(this, void 0);
24
23
  __classPrivateFieldSet(this, _PresenceEngine_channel, channel, "f");
25
- __classPrivateFieldSet(this, _PresenceEngine_engine, new subject_1.BehaviorSubject(), "f");
26
24
  __classPrivateFieldSet(this, _PresenceEngine_presenceMap, new Map(), "f");
27
25
  }
28
26
  /**
@@ -46,23 +44,20 @@ class PresenceEngine {
46
44
  * @desc Tracks a presence
47
45
  * @param presenceKey - The key of the presence
48
46
  * @param presence - The presence
49
- * @param onPresenceChange - The callback to be called when the presence changes
50
47
  */
51
- trackPresence(presenceKey, presence, onPresenceChange) {
48
+ trackPresence(presenceKey, presence) {
52
49
  if (!__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").has(presenceKey)) {
53
50
  __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").set(presenceKey, presence);
54
- __classPrivateFieldGet(this, _PresenceEngine_engine, "f").publish({
55
- type: enums_1.PresenceEventTypes.JOIN,
51
+ __classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, enums_1.PresenceEventTypes.JOIN, {
56
52
  changed: presence,
57
53
  presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
58
54
  });
59
55
  }
60
56
  else {
61
- const code = 404;
57
+ const code = 400;
62
58
  const message = `PresenceEngine: Presence with key ${presenceKey} already exists`;
63
- throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f"), enums_1.PresenceEventTypes.JOIN);
59
+ throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, enums_1.PresenceEventTypes.JOIN);
64
60
  }
65
- return __classPrivateFieldGet(this, _PresenceEngine_engine, "f").subscribeWith(presenceKey, onPresenceChange);
66
61
  }
67
62
  /**
68
63
  * @desc Removes a presence from the presence engine
@@ -72,10 +67,8 @@ class PresenceEngine {
72
67
  removePresence(presenceKey, graceful = false) {
73
68
  const presence = __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").get(presenceKey);
74
69
  if (presence) {
75
- __classPrivateFieldGet(this, _PresenceEngine_engine, "f").unsubscribe(presenceKey);
76
70
  __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").delete(presenceKey);
77
- __classPrivateFieldGet(this, _PresenceEngine_engine, "f").publish({
78
- type: enums_1.PresenceEventTypes.LEAVE,
71
+ __classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, enums_1.PresenceEventTypes.LEAVE, {
79
72
  changed: presence,
80
73
  presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
81
74
  });
@@ -83,7 +76,7 @@ class PresenceEngine {
83
76
  else if (!graceful) {
84
77
  const code = 404;
85
78
  const message = `PresenceEngine: Presence with key ${presenceKey} does not exist`;
86
- throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f"), enums_1.PresenceEventTypes.LEAVE);
79
+ throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, enums_1.PresenceEventTypes.LEAVE);
87
80
  }
88
81
  }
89
82
  /**
@@ -96,8 +89,7 @@ class PresenceEngine {
96
89
  if (oldPresence) {
97
90
  const newPresence = Object.assign(Object.assign({}, oldPresence), presence);
98
91
  __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").set(presenceKey, newPresence);
99
- __classPrivateFieldGet(this, _PresenceEngine_engine, "f").publish({
100
- type: enums_1.PresenceEventTypes.UPDATE,
92
+ __classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, enums_1.PresenceEventTypes.UPDATE, {
101
93
  changed: newPresence,
102
94
  presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
103
95
  });
@@ -105,9 +97,15 @@ class PresenceEngine {
105
97
  else {
106
98
  const code = 404;
107
99
  const message = `PresenceEngine: Presence with key ${presenceKey} does not exist`;
108
- throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f"), enums_1.PresenceEventTypes.UPDATE);
100
+ throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, enums_1.PresenceEventTypes.UPDATE);
109
101
  }
110
102
  }
111
103
  }
112
104
  exports.PresenceEngine = PresenceEngine;
113
- _PresenceEngine_engine = new WeakMap(), _PresenceEngine_presenceMap = new WeakMap(), _PresenceEngine_channel = new WeakMap();
105
+ _PresenceEngine_presenceMap = new WeakMap(), _PresenceEngine_channel = new WeakMap(), _PresenceEngine_instances = new WeakSet(), _PresenceEngine_publish = function _PresenceEngine_publish(event, payload) {
106
+ const recipients = Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").keys());
107
+ if (recipients.length === 0) {
108
+ return;
109
+ }
110
+ __classPrivateFieldGet(this, _PresenceEngine_channel, "f").sendMessage(enums_1.SystemSender.CHANNEL, recipients, enums_1.ServerActions.PRESENCE, event, payload);
111
+ };
@@ -88,7 +88,7 @@ _PondSocket_server = new WeakMap(), _PondSocket_socketServer = new WeakMap(), _P
88
88
  return socket.terminate();
89
89
  }
90
90
  socket.isAlive = false;
91
- socket.ping(() => { });
91
+ socket.ping();
92
92
  });
93
93
  }, 30000);
94
94
  __classPrivateFieldGet(this, _PondSocket_socketServer, "f").on('close', () => clearInterval(interval));
@@ -18,13 +18,24 @@ class SimpleSubject {
18
18
  _SimpleSubject_observers.set(this, void 0);
19
19
  __classPrivateFieldSet(this, _SimpleSubject_observers, new Set(), "f");
20
20
  }
21
+ /**
22
+ * @desc Subscribes to a subject
23
+ * @param observer - The observer to subscribe
24
+ */
21
25
  subscribe(observer) {
22
26
  __classPrivateFieldGet(this, _SimpleSubject_observers, "f").add(observer);
23
27
  return () => __classPrivateFieldGet(this, _SimpleSubject_observers, "f").delete(observer);
24
28
  }
29
+ /**
30
+ * @desc Publishes a message to all subscribers
31
+ * @param message - The message to publish
32
+ */
25
33
  publish(message) {
26
34
  __classPrivateFieldGet(this, _SimpleSubject_observers, "f").forEach((observer) => observer(message));
27
35
  }
36
+ /**
37
+ * @desc Returns the number of subscribers
38
+ */
28
39
  get size() {
29
40
  return __classPrivateFieldGet(this, _SimpleSubject_observers, "f").size;
30
41
  }
@@ -37,13 +48,24 @@ class SimpleBehaviorSubject extends SimpleSubject {
37
48
  _SimpleBehaviorSubject_lastMessage.set(this, void 0);
38
49
  __classPrivateFieldSet(this, _SimpleBehaviorSubject_lastMessage, initialValue, "f");
39
50
  }
51
+ /**
52
+ * @desc Returns the last message published
53
+ */
40
54
  get value() {
41
55
  return __classPrivateFieldGet(this, _SimpleBehaviorSubject_lastMessage, "f");
42
56
  }
57
+ /**
58
+ * @desc Publishes a message to all subscribers
59
+ * @param message - The message to publish
60
+ */
43
61
  publish(message) {
44
62
  __classPrivateFieldSet(this, _SimpleBehaviorSubject_lastMessage, message, "f");
45
63
  super.publish(message);
46
64
  }
65
+ /**
66
+ * @desc Subscribes to a subject
67
+ * @param observer - The observer to subscribe
68
+ */
47
69
  subscribe(observer) {
48
70
  if (__classPrivateFieldGet(this, _SimpleBehaviorSubject_lastMessage, "f")) {
49
71
  observer(__classPrivateFieldGet(this, _SimpleBehaviorSubject_lastMessage, "f"));
@@ -58,14 +80,27 @@ class Subject extends SimpleSubject {
58
80
  super(...arguments);
59
81
  _Subject_subscriptions.set(this, {});
60
82
  }
83
+ /**
84
+ * @desc Subscribes to a subject
85
+ * @param identifier - The identifier of the subscription
86
+ * @param observer - The observer to subscribe
87
+ */
61
88
  subscribeWith(identifier, observer) {
62
89
  __classPrivateFieldGet(this, _Subject_subscriptions, "f")[identifier] = super.subscribe(observer);
63
90
  }
91
+ /**
92
+ * @desc Unsubscribes from a subject
93
+ * @param identifier - The identifier of the subscription
94
+ */
64
95
  unsubscribe(identifier) {
65
96
  var _a, _b;
66
97
  (_b = (_a = __classPrivateFieldGet(this, _Subject_subscriptions, "f"))[identifier]) === null || _b === void 0 ? void 0 : _b.call(_a);
67
98
  delete __classPrivateFieldGet(this, _Subject_subscriptions, "f")[identifier];
68
99
  }
100
+ /**
101
+ * @desc Checks if a subscription exists
102
+ * @param identifier - The identifier of the subscription
103
+ */
69
104
  has(identifier) {
70
105
  return Boolean(__classPrivateFieldGet(this, _Subject_subscriptions, "f")[identifier]);
71
106
  }
@@ -78,12 +113,21 @@ class BehaviorSubject extends Subject {
78
113
  _BehaviorSubject_lastMessage.set(this, void 0);
79
114
  __classPrivateFieldSet(this, _BehaviorSubject_lastMessage, initialValue, "f");
80
115
  }
116
+ /**
117
+ * @desc Subscribes to a subject
118
+ * @param identifier - The identifier of the subscription
119
+ * @param observer - The observer to subscribe
120
+ */
81
121
  subscribeWith(identifier, observer) {
82
122
  if (__classPrivateFieldGet(this, _BehaviorSubject_lastMessage, "f")) {
83
123
  observer(__classPrivateFieldGet(this, _BehaviorSubject_lastMessage, "f"));
84
124
  }
85
125
  super.subscribeWith(identifier, observer);
86
126
  }
127
+ /**
128
+ * @desc Publishes a message to all subscribers
129
+ * @param message - The message to publish
130
+ */
87
131
  publish(message) {
88
132
  __classPrivateFieldSet(this, _BehaviorSubject_lastMessage, message, "f");
89
133
  super.publish(message);