@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.
- package/channel/channel.js +41 -40
- package/nest.d.ts +1 -0
- package/nest.js +58 -37
- package/package.json +1 -1
- package/types.d.ts +7 -0
package/channel/channel.js
CHANGED
|
@@ -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
|
|
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.
|
|
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
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 (
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
response
|
|
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 (
|
|
284
|
-
|
|
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
|
|
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
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
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 (
|
|
533
|
-
|
|
534
|
-
|
|
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,
|
|
597
|
-
|
|
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
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
|