@eleven-am/pondsocket 0.1.114 → 0.1.116

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.
@@ -21,15 +21,53 @@ var __rest = (this && this.__rest) || function (s, e) {
21
21
  }
22
22
  return t;
23
23
  };
24
- var _ChannelEngine_instances, _ChannelEngine_receiver, _ChannelEngine_presenceEngine, _ChannelEngine_users, _ChannelEngine_parentEngine, _ChannelEngine_subscribe, _ChannelEngine_getUsersFromRecipients, _Channel_engine;
24
+ var _Channel_engine, _ChannelEngine_instances, _ChannelEngine_receiver, _ChannelEngine_presenceEngine, _ChannelEngine_users, _ChannelEngine_parentEngine, _ChannelEngine_subscribe, _ChannelEngine_getUsersFromRecipients;
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.Channel = exports.ChannelEngine = void 0;
26
+ exports.ChannelEngine = exports.Channel = void 0;
27
27
  const eventRequest_1 = require("./eventRequest");
28
28
  const eventResponse_1 = require("./eventResponse");
29
29
  const enums_1 = require("../enums");
30
30
  const pondError_1 = require("../errors/pondError");
31
31
  const presence_1 = require("../presence/presence");
32
32
  const subject_1 = require("../subjects/subject");
33
+ class Channel {
34
+ constructor(engine) {
35
+ _Channel_engine.set(this, void 0);
36
+ __classPrivateFieldSet(this, _Channel_engine, engine, "f");
37
+ }
38
+ get name() {
39
+ return __classPrivateFieldGet(this, _Channel_engine, "f").name;
40
+ }
41
+ getAssigns() {
42
+ return __classPrivateFieldGet(this, _Channel_engine, "f").getAssigns();
43
+ }
44
+ getUserData(userId) {
45
+ return __classPrivateFieldGet(this, _Channel_engine, "f").getUserData(userId);
46
+ }
47
+ broadcastMessage(event, payload) {
48
+ __classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
49
+ }
50
+ sendToUser(userId, event, payload) {
51
+ __classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.BROADCAST, event, payload);
52
+ }
53
+ sendToUsers(userIds, event, payload) {
54
+ __classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, userIds, enums_1.ServerActions.BROADCAST, event, payload);
55
+ }
56
+ evictUser(userId, reason) {
57
+ __classPrivateFieldGet(this, _Channel_engine, "f").kickUser(userId, reason !== null && reason !== void 0 ? reason : 'You have been banned from the channel');
58
+ }
59
+ trackPresence(userId, presence) {
60
+ __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.trackPresence(userId, presence);
61
+ }
62
+ removePresence(userId) {
63
+ __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.removePresence(userId);
64
+ }
65
+ updatePresence(userId, presence) {
66
+ __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.updatePresence(userId, presence);
67
+ }
68
+ }
69
+ exports.Channel = Channel;
70
+ _Channel_engine = new WeakMap();
33
71
  class ChannelEngine {
34
72
  constructor(name, parent) {
35
73
  _ChannelEngine_instances.add(this);
@@ -74,6 +112,7 @@ class ChannelEngine {
74
112
  __classPrivateFieldGet(this, _ChannelEngine_parentEngine, "f").leaveCallback({
75
113
  userId,
76
114
  assigns: user,
115
+ channel: new Channel(this),
77
116
  });
78
117
  }
79
118
  if (__classPrivateFieldGet(this, _ChannelEngine_users, "f").size === 0) {
@@ -247,41 +286,3 @@ _ChannelEngine_receiver = new WeakMap(), _ChannelEngine_presenceEngine = new Wea
247
286
  }
248
287
  return users;
249
288
  };
250
- class Channel {
251
- constructor(engine) {
252
- _Channel_engine.set(this, void 0);
253
- __classPrivateFieldSet(this, _Channel_engine, engine, "f");
254
- }
255
- get name() {
256
- return __classPrivateFieldGet(this, _Channel_engine, "f").name;
257
- }
258
- getAssigns() {
259
- return __classPrivateFieldGet(this, _Channel_engine, "f").getAssigns();
260
- }
261
- getUserData(userId) {
262
- return __classPrivateFieldGet(this, _Channel_engine, "f").getUserData(userId);
263
- }
264
- broadcastMessage(event, payload) {
265
- __classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
266
- }
267
- sendToUser(userId, event, payload) {
268
- __classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.BROADCAST, event, payload);
269
- }
270
- sendToUsers(userIds, event, payload) {
271
- __classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, userIds, enums_1.ServerActions.BROADCAST, event, payload);
272
- }
273
- evictUser(userId, reason) {
274
- __classPrivateFieldGet(this, _Channel_engine, "f").kickUser(userId, reason !== null && reason !== void 0 ? reason : 'You have been banned from the channel');
275
- }
276
- trackPresence(userId, presence) {
277
- __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.trackPresence(userId, presence);
278
- }
279
- removePresence(userId) {
280
- __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.removePresence(userId);
281
- }
282
- updatePresence(userId, presence) {
283
- __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.updatePresence(userId, presence);
284
- }
285
- }
286
- exports.Channel = Channel;
287
- _Channel_engine = new WeakMap();
package/nest.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export {
2
+ GetChannel,
2
3
  OnJoinRequest,
3
4
  ChannelInstance,
4
5
  EndpointInstance,
package/nest.js CHANGED
@@ -20,7 +20,7 @@ var __rest = (this && this.__rest) || function (s, e) {
20
20
  return t;
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.PondSocketModule = exports.Endpoint = exports.Channel = exports.EndpointInstance = exports.ChannelInstance = exports.OnLeaveEvent = exports.OnEvent = exports.OnJoinRequest = exports.OnConnectionRequest = exports.GetLeaveEvent = exports.GetEventRequest = exports.GetEventResponse = exports.GetEventQuery = exports.GetEventParams = exports.GetEventPayload = exports.GetJoinParams = exports.GetJoinResponse = exports.GetJoinRequest = exports.GetConnectionQuery = exports.GetConnectionHeaders = exports.GetConnectionParams = exports.GetConnectionRequestId = exports.GetConnectionResponse = exports.GetConnectionRequest = exports.GetUserPresences = exports.GetInternalChannel = exports.GetUserData = exports.createParamDecorator = exports.PondGuards = void 0;
23
+ exports.PondSocketModule = exports.Endpoint = exports.Channel = exports.EndpointInstance = exports.ChannelInstance = exports.OnLeaveEvent = exports.OnEvent = exports.OnJoinRequest = exports.OnConnectionRequest = exports.GetChannel = exports.GetLeaveEvent = exports.GetEventRequest = exports.GetEventResponse = exports.GetEventQuery = exports.GetEventParams = exports.GetEventPayload = exports.GetJoinParams = exports.GetJoinResponse = exports.GetJoinRequest = exports.GetConnectionQuery = exports.GetConnectionHeaders = exports.GetConnectionParams = exports.GetConnectionRequestId = exports.GetConnectionResponse = exports.GetConnectionRequest = exports.GetUserPresences = exports.GetInternalChannel = exports.GetUserData = exports.createParamDecorator = exports.PondGuards = void 0;
24
24
  const http_1 = require("http");
25
25
  const common_1 = require("@nestjs/common");
26
26
  // eslint-disable-next-line import/no-unresolved
@@ -263,25 +263,30 @@ class Context {
263
263
  return (_a = this.data[key]) !== null && _a !== void 0 ? _a : null;
264
264
  }
265
265
  }
266
- function manageResponse(data, response) {
267
- if (response.hasResponded || !isNotEmpty(data)) {
266
+ function manageResponse(data, channel, response) {
267
+ if (response && response.hasResponded || !isNotEmpty(data)) {
268
268
  return;
269
269
  }
270
270
  const { event, presence, updatePresence, assigns, broadcast } = data, rest = __rest(data, ["event", "presence", "updatePresence", "assigns", "broadcast"]);
271
- if (event && typeof event === 'string' && isNotEmpty(rest)) {
272
- response.send(event, rest, assigns);
273
- }
274
- else if (isNotEmpty(assigns)) {
275
- response.accept(assigns);
276
- }
277
- if (broadcast && typeof broadcast === 'string' && isNotEmpty(rest) && 'broadcast' in response) {
278
- response.broadcast(broadcast, rest);
279
- }
280
- if ('trackPresence' in response && presence) {
281
- response.trackPresence(presence);
271
+ if (response) {
272
+ if (event && typeof event === 'string' && isNotEmpty(rest)) {
273
+ response.send(event, rest, assigns);
274
+ }
275
+ else if (isNotEmpty(assigns)) {
276
+ response.accept(assigns);
277
+ }
278
+ if (broadcast && typeof broadcast === 'string' && isNotEmpty(rest) && 'broadcast' in response) {
279
+ response.broadcast(broadcast, rest);
280
+ }
281
+ if ('trackPresence' in response && presence) {
282
+ response.trackPresence(presence);
283
+ }
284
+ else if ('updatePresence' in response && updatePresence) {
285
+ response.updatePresence(updatePresence);
286
+ }
282
287
  }
283
- else if ('updatePresence' in response && updatePresence) {
284
- response.updatePresence(updatePresence);
288
+ else if (channel && broadcast && typeof broadcast === 'string' && isNotEmpty(rest)) {
289
+ channel.broadcastMessage(broadcast, rest);
285
290
  }
286
291
  }
287
292
  function manageError(error, response) {
@@ -517,29 +522,48 @@ function GetLeaveEvent() {
517
522
  })(null);
518
523
  }
519
524
  exports.GetLeaveEvent = GetLeaveEvent;
520
- function manageAction(instance, moduleRef, originalMethod, propertyKey, request, response) {
525
+ function GetChannel() {
526
+ return createParamDecorator((_, context) => {
527
+ const channel = context.channel;
528
+ if (!channel) {
529
+ throw new Error('Invalid decorator usage: GetChannel');
530
+ }
531
+ return channel;
532
+ })(null);
533
+ }
534
+ exports.GetChannel = GetChannel;
535
+ function manageAction(instance, moduleRef, originalMethod, propertyKey, leaveEvent, request, response) {
521
536
  return __awaiter(this, void 0, void 0, function* () {
522
537
  const req = {};
523
538
  const res = {};
524
- if (request instanceof joinRequest_1.JoinRequest && response instanceof joinResponse_1.JoinResponse) {
525
- req.joinRequest = request;
526
- res.joinResponse = response;
527
- }
528
- else if (request instanceof eventRequest_1.EventRequest && response instanceof eventResponse_1.EventResponse) {
529
- req.eventRequest = request;
530
- res.eventResponse = response;
539
+ let channel = null;
540
+ if (request && response) {
541
+ if (request instanceof joinRequest_1.JoinRequest && response instanceof joinResponse_1.JoinResponse) {
542
+ channel = request.channel;
543
+ req.joinRequest = request;
544
+ res.joinResponse = response;
545
+ }
546
+ else if (request instanceof eventRequest_1.EventRequest && response instanceof eventResponse_1.EventResponse) {
547
+ channel = request.channel;
548
+ req.eventRequest = request;
549
+ res.eventResponse = response;
550
+ }
551
+ else if ('headers' in request && response instanceof response_1.ConnectionResponse) {
552
+ req.connection = request;
553
+ res.connection = response;
554
+ }
531
555
  }
532
- else if ('headers' in request && response instanceof response_1.ConnectionResponse) {
533
- req.connection = request;
534
- res.connection = response;
556
+ else if (leaveEvent) {
557
+ channel = leaveEvent.channel;
558
+ req.leveeEvent = leaveEvent;
535
559
  }
536
560
  const context = new Context(req, res, instance, propertyKey);
537
561
  const canProceed = yield resolveGuards(moduleRef, context);
538
562
  if (canProceed) {
539
563
  const data = yield originalMethod.apply(instance, resolveParameters(context));
540
- manageResponse(data, response);
564
+ manageResponse(data, channel, response);
541
565
  }
542
- else {
566
+ else if (response) {
543
567
  response.reject('Unauthorized', 401);
544
568
  }
545
569
  });
@@ -550,7 +574,7 @@ function OnConnectionRequest() {
550
574
  const { set } = manageConnectionHandlers(target);
551
575
  set('', (instance, moduleRef, request, response) => __awaiter(this, void 0, void 0, function* () {
552
576
  try {
553
- yield manageAction(instance, moduleRef, originalMethod, propertyKey, request, response);
577
+ yield manageAction(instance, moduleRef, originalMethod, propertyKey, null, request, response);
554
578
  }
555
579
  catch (error) {
556
580
  manageError(error, response);
@@ -565,7 +589,7 @@ function OnJoinRequest() {
565
589
  const { set } = manageJoinHandlers(target);
566
590
  set('', (instance, moduleRef, request, response) => __awaiter(this, void 0, void 0, function* () {
567
591
  try {
568
- yield manageAction(instance, moduleRef, originalMethod, propertyKey, request, response);
592
+ yield manageAction(instance, moduleRef, originalMethod, propertyKey, null, request, response);
569
593
  }
570
594
  catch (error) {
571
595
  manageError(error, response);
@@ -580,7 +604,7 @@ function OnEvent(event = '*') {
580
604
  const { set } = manageEventHandlers(target);
581
605
  set(event, (instance, moduleRef, request, response) => __awaiter(this, void 0, void 0, function* () {
582
606
  try {
583
- yield manageAction(instance, moduleRef, originalMethod, propertyKey, request, response);
607
+ yield manageAction(instance, moduleRef, originalMethod, propertyKey, null, request, response);
584
608
  }
585
609
  catch (error) {
586
610
  manageError(error, response);
@@ -593,11 +617,8 @@ function OnLeaveEvent() {
593
617
  return (target, propertyKey, descriptor) => {
594
618
  const originalMethod = descriptor.value;
595
619
  const { set } = manageOnLeaveHandlers(target);
596
- set('', (instance, _, event) => __awaiter(this, void 0, void 0, function* () {
597
- const context = new Context({
598
- leveeEvent: event,
599
- }, {}, instance, propertyKey);
600
- yield originalMethod.apply(instance, resolveParameters(context));
620
+ set('', (instance, moduleRef, event) => __awaiter(this, void 0, void 0, function* () {
621
+ yield manageAction(instance, moduleRef, originalMethod, propertyKey, event);
601
622
  }));
602
623
  };
603
624
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eleven-am/pondsocket",
3
- "version": "0.1.114",
3
+ "version": "0.1.116",
4
4
  "description": "PondSocket is a fast simple socket server",
5
5
  "keywords": [
6
6
  "socket",
package/types.d.ts CHANGED
@@ -84,6 +84,7 @@ type IncomingConnection<Path> = EventParams<Path> & {
84
84
  interface LeaveEvent {
85
85
  userId: string;
86
86
  assigns: PondAssigns;
87
+ channel: Channel;
87
88
  }
88
89
 
89
90
  type LeaveCallback = (event: LeaveEvent) => void;
@@ -854,6 +855,12 @@ declare function GetConnectionQuery(): ParameterDecorator;
854
855
  */
855
856
  declare function GetLeaveEvent(): ParameterDecorator;
856
857
 
858
+ /**
859
+ * @desc The Decorator for retrieving the Channel object from the request in a handler
860
+ * @returns {Channel}
861
+ */
862
+ declare function GetChannel (): ParameterDecorator;
863
+
857
864
  /**
858
865
  * @desc Function to create a param decorator
859
866
  * @param callback - The callback to call when the decorator is used