@eleven-am/pondsocket 0.1.124 → 0.1.126
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/abstracts/abstractResponse.js +3 -0
- package/channel/channel.js +13 -9
- package/channel/eventResponse.js +8 -8
- package/client/channel.js +75 -36
- package/client.js +1 -1
- package/endpoint/endpoint.js +21 -24
- package/endpoint/response.js +4 -2
- package/lobby/joinResponse.js +7 -5
- package/lobby/lobby.js +3 -2
- package/misc/uuid.js +12 -0
- package/package.json +1 -1
- package/presence/presence.js +2 -1
- package/schema.js +13 -0
- package/types.d.ts +25 -1
package/channel/channel.js
CHANGED
|
@@ -28,6 +28,7 @@ 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
|
+
const uuid_1 = require("../misc/uuid");
|
|
31
32
|
const presence_1 = require("../presence/presence");
|
|
32
33
|
const subject_1 = require("../subjects/subject");
|
|
33
34
|
class Channel {
|
|
@@ -45,16 +46,16 @@ class Channel {
|
|
|
45
46
|
return __classPrivateFieldGet(this, _Channel_engine, "f").getUserData(userId);
|
|
46
47
|
}
|
|
47
48
|
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
|
+
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
|
|
49
50
|
}
|
|
50
51
|
broadcastMessageFromUser(userId, event, payload) {
|
|
51
|
-
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(userId, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER, enums_1.ServerActions.BROADCAST, event, payload);
|
|
52
|
+
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage((0, uuid_1.uuid)(), userId, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER, enums_1.ServerActions.BROADCAST, event, payload);
|
|
52
53
|
}
|
|
53
54
|
sendToUser(userId, event, payload) {
|
|
54
|
-
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.BROADCAST, event, payload);
|
|
55
|
+
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.BROADCAST, event, payload);
|
|
55
56
|
}
|
|
56
57
|
sendToUsers(userIds, event, payload) {
|
|
57
|
-
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, userIds, enums_1.ServerActions.BROADCAST, event, payload);
|
|
58
|
+
__classPrivateFieldGet(this, _Channel_engine, "f").sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, userIds, enums_1.ServerActions.BROADCAST, event, payload);
|
|
58
59
|
}
|
|
59
60
|
evictUser(userId, reason) {
|
|
60
61
|
__classPrivateFieldGet(this, _Channel_engine, "f").kickUser(userId, reason !== null && reason !== void 0 ? reason : 'You have been banned from the channel');
|
|
@@ -132,12 +133,12 @@ class ChannelEngine {
|
|
|
132
133
|
* @param reason - The reason for kicking the user
|
|
133
134
|
*/
|
|
134
135
|
kickUser(userId, reason) {
|
|
135
|
-
this.sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.SYSTEM, 'kicked_out', {
|
|
136
|
+
this.sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.SYSTEM, 'kicked_out', {
|
|
136
137
|
message: reason,
|
|
137
138
|
code: 403,
|
|
138
139
|
});
|
|
139
140
|
this.removeUser(userId);
|
|
140
|
-
this.sendMessage(enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.SYSTEM, 'kicked', {
|
|
141
|
+
this.sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.SYSTEM, 'kicked', {
|
|
141
142
|
userId,
|
|
142
143
|
reason,
|
|
143
144
|
});
|
|
@@ -147,7 +148,7 @@ class ChannelEngine {
|
|
|
147
148
|
* @param reason - The reason for self-destructing the channel
|
|
148
149
|
*/
|
|
149
150
|
destroy(reason) {
|
|
150
|
-
this.sendMessage(enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.ERROR, 'destroyed', {
|
|
151
|
+
this.sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.ERROR, 'destroyed', {
|
|
151
152
|
message: reason !== null && reason !== void 0 ? reason : 'Channel has been destroyed',
|
|
152
153
|
});
|
|
153
154
|
__classPrivateFieldGet(this, _ChannelEngine_parentEngine, "f").destroyChannel();
|
|
@@ -195,19 +196,21 @@ class ChannelEngine {
|
|
|
195
196
|
}
|
|
196
197
|
/**
|
|
197
198
|
* @desc Sends a message to a specified set of users, from a specified sender
|
|
199
|
+
* @param requestId - The id of the request
|
|
198
200
|
* @param sender - The sender of the message
|
|
199
201
|
* @param recipient - The users to send the message to
|
|
200
202
|
* @param action - The action of the message
|
|
201
203
|
* @param event - The event name
|
|
202
204
|
* @param payload - The payload of the message
|
|
203
205
|
*/
|
|
204
|
-
sendMessage(sender, recipient, action, event, payload) {
|
|
206
|
+
sendMessage(requestId, sender, recipient, action, event, payload) {
|
|
205
207
|
if (!__classPrivateFieldGet(this, _ChannelEngine_users, "f").has(sender) && sender !== enums_1.SystemSender.CHANNEL) {
|
|
206
208
|
throw new pondError_1.ChannelError(`ChannelEngine: User with id ${sender} does not exist in channel ${this.name}`, 404, this.name);
|
|
207
209
|
}
|
|
208
210
|
const eventMessage = {
|
|
209
211
|
recipients: __classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_getUsersFromRecipients).call(this, recipient, sender),
|
|
210
212
|
channelName: this.name,
|
|
213
|
+
requestId,
|
|
211
214
|
action,
|
|
212
215
|
payload,
|
|
213
216
|
event,
|
|
@@ -229,12 +232,13 @@ class ChannelEngine {
|
|
|
229
232
|
payload: message.payload,
|
|
230
233
|
action: enums_1.ServerActions.BROADCAST,
|
|
231
234
|
channelName: this.name,
|
|
235
|
+
requestId: message.requestId,
|
|
232
236
|
recipients: __classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_getUsersFromRecipients).call(this, message.addresses || enums_1.ChannelReceiver.ALL_USERS, userId),
|
|
233
237
|
};
|
|
234
238
|
const request = new eventRequest_1.EventRequest(responseEvent, this);
|
|
235
239
|
const response = new eventResponse_1.EventResponse(responseEvent, this);
|
|
236
240
|
__classPrivateFieldGet(this, _ChannelEngine_parentEngine, "f").execute(request, response, () => {
|
|
237
|
-
this.sendMessage(enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.ERROR, enums_1.ErrorTypes.HANDLER_NOT_FOUND, {
|
|
241
|
+
this.sendMessage(responseEvent.requestId, enums_1.SystemSender.CHANNEL, [userId], enums_1.ServerActions.ERROR, enums_1.ErrorTypes.HANDLER_NOT_FOUND, {
|
|
238
242
|
message: 'A handler did not respond to the event',
|
|
239
243
|
code: 404,
|
|
240
244
|
});
|
package/channel/eventResponse.js
CHANGED
|
@@ -18,7 +18,7 @@ const enums_1 = require("../enums");
|
|
|
18
18
|
const pondError_1 = require("../errors/pondError");
|
|
19
19
|
class EventResponse extends abstractResponse_1.PondResponse {
|
|
20
20
|
constructor(event, engine) {
|
|
21
|
-
super();
|
|
21
|
+
super(event.requestId);
|
|
22
22
|
_EventResponse_instances.add(this);
|
|
23
23
|
_EventResponse_event.set(this, void 0);
|
|
24
24
|
_EventResponse_engine.set(this, void 0);
|
|
@@ -39,7 +39,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
39
39
|
*/
|
|
40
40
|
accept(assigns) {
|
|
41
41
|
__classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_manageAssigns).call(this, assigns);
|
|
42
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, __classPrivateFieldGet(this, _EventResponse_event, "f").recipients, __classPrivateFieldGet(this, _EventResponse_event, "f").action, __classPrivateFieldGet(this, _EventResponse_event, "f").event, __classPrivateFieldGet(this, _EventResponse_event, "f").payload);
|
|
42
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _EventResponse_event, "f").sender, __classPrivateFieldGet(this, _EventResponse_event, "f").recipients, __classPrivateFieldGet(this, _EventResponse_event, "f").action, __classPrivateFieldGet(this, _EventResponse_event, "f").event, __classPrivateFieldGet(this, _EventResponse_event, "f").payload);
|
|
43
43
|
return this;
|
|
44
44
|
}
|
|
45
45
|
/**
|
|
@@ -51,7 +51,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
51
51
|
reject(message, errorCode, assigns) {
|
|
52
52
|
__classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_manageAssigns).call(this, assigns);
|
|
53
53
|
const text = message || 'Unauthorized request';
|
|
54
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], enums_1.ServerActions.ERROR, enums_1.ErrorTypes.UNAUTHORIZED_BROADCAST, {
|
|
54
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], enums_1.ServerActions.ERROR, enums_1.ErrorTypes.UNAUTHORIZED_BROADCAST, {
|
|
55
55
|
message: text,
|
|
56
56
|
code: errorCode || 403,
|
|
57
57
|
});
|
|
@@ -65,7 +65,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
65
65
|
*/
|
|
66
66
|
send(event, payload, assigns) {
|
|
67
67
|
this.accept(assigns);
|
|
68
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], enums_1.ServerActions.SYSTEM, event, payload);
|
|
68
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], enums_1.ServerActions.SYSTEM, event, payload);
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
71
|
* @desc Emits a direct message to the client without accepting the request
|
|
@@ -75,7 +75,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
75
75
|
*/
|
|
76
76
|
sendOnly(event, payload, assigns) {
|
|
77
77
|
__classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_manageAssigns).call(this, assigns);
|
|
78
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], enums_1.ServerActions.SYSTEM, event, payload);
|
|
78
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], enums_1.ServerActions.SYSTEM, event, payload);
|
|
79
79
|
}
|
|
80
80
|
/**
|
|
81
81
|
* @desc Sends a message to all clients in the channel
|
|
@@ -83,7 +83,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
83
83
|
* @param payload - the payload to send
|
|
84
84
|
*/
|
|
85
85
|
broadcast(event, payload) {
|
|
86
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
|
|
86
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _EventResponse_event, "f").sender, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
|
|
87
87
|
return this;
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
@@ -92,7 +92,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
92
92
|
* @param payload - the payload to send
|
|
93
93
|
*/
|
|
94
94
|
broadcastFromUser(event, payload) {
|
|
95
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER, enums_1.ServerActions.BROADCAST, event, payload);
|
|
95
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _EventResponse_event, "f").sender, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER, enums_1.ServerActions.BROADCAST, event, payload);
|
|
96
96
|
return this;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
@@ -102,7 +102,7 @@ class EventResponse extends abstractResponse_1.PondResponse {
|
|
|
102
102
|
* @param userIds - the ids of the clients to send the message to
|
|
103
103
|
*/
|
|
104
104
|
sendToUsers(event, payload, userIds) {
|
|
105
|
-
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, userIds, enums_1.ServerActions.BROADCAST, event, payload);
|
|
105
|
+
__classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _EventResponse_event, "f").sender, userIds, enums_1.ServerActions.BROADCAST, event, payload);
|
|
106
106
|
return this;
|
|
107
107
|
}
|
|
108
108
|
/**
|
package/client/channel.js
CHANGED
|
@@ -10,23 +10,24 @@ 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 _Channel_instances, _Channel_name,
|
|
13
|
+
var _Channel_instances, _Channel_name, _Channel_queue, _Channel_presence, _Channel_publisher, _Channel_joinParams, _Channel_presenceSub, _Channel_receiver, _Channel_clientState, _Channel_joinState, _Channel_send, _Channel_publish, _Channel_subscribeToPresence, _Channel_init, _Channel_emptyQueue, _Channel_buildJoinMessage, _Channel_onMessage;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.Channel = void 0;
|
|
16
16
|
const enums_1 = require("../enums");
|
|
17
|
+
const uuid_1 = require("../misc/uuid");
|
|
17
18
|
const subject_1 = require("../subjects/subject");
|
|
18
19
|
class Channel {
|
|
19
|
-
constructor(publisher, clientState, name, receiver, params
|
|
20
|
+
constructor(publisher, clientState, name, receiver, params) {
|
|
20
21
|
_Channel_instances.add(this);
|
|
21
22
|
_Channel_name.set(this, void 0);
|
|
23
|
+
_Channel_queue.set(this, void 0);
|
|
24
|
+
_Channel_presence.set(this, void 0);
|
|
25
|
+
_Channel_publisher.set(this, void 0);
|
|
22
26
|
_Channel_joinParams.set(this, void 0);
|
|
27
|
+
_Channel_presenceSub.set(this, void 0);
|
|
23
28
|
_Channel_receiver.set(this, void 0);
|
|
24
29
|
_Channel_clientState.set(this, void 0);
|
|
25
30
|
_Channel_joinState.set(this, void 0);
|
|
26
|
-
_Channel_publisher.set(this, void 0);
|
|
27
|
-
_Channel_queue.set(this, void 0);
|
|
28
|
-
_Channel_presence.set(this, void 0);
|
|
29
|
-
_Channel_presenceSub.set(this, void 0);
|
|
30
31
|
__classPrivateFieldSet(this, _Channel_name, name, "f");
|
|
31
32
|
__classPrivateFieldSet(this, _Channel_queue, [], "f");
|
|
32
33
|
__classPrivateFieldSet(this, _Channel_presence, [], "f");
|
|
@@ -37,6 +38,12 @@ class Channel {
|
|
|
37
38
|
__classPrivateFieldSet(this, _Channel_joinState, new subject_1.SimpleBehaviorSubject(enums_1.ChannelState.IDLE), "f");
|
|
38
39
|
__classPrivateFieldSet(this, _Channel_presenceSub, __classPrivateFieldGet(this, _Channel_instances, "m", _Channel_init).call(this, receiver), "f");
|
|
39
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* @desc Gets the current connection state of the channel.
|
|
43
|
+
*/
|
|
44
|
+
get channelState() {
|
|
45
|
+
return __classPrivateFieldGet(this, _Channel_joinState, "f").value;
|
|
46
|
+
}
|
|
40
47
|
/**
|
|
41
48
|
* @desc Connects to the channel.
|
|
42
49
|
*/
|
|
@@ -44,12 +51,7 @@ class Channel {
|
|
|
44
51
|
if (__classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.CLOSED) {
|
|
45
52
|
throw new Error('This channel has been closed');
|
|
46
53
|
}
|
|
47
|
-
const joinMessage =
|
|
48
|
-
action: enums_1.ClientActions.JOIN_CHANNEL,
|
|
49
|
-
channelName: __classPrivateFieldGet(this, _Channel_name, "f"),
|
|
50
|
-
event: enums_1.ClientActions.JOIN_CHANNEL,
|
|
51
|
-
payload: __classPrivateFieldGet(this, _Channel_joinParams, "f"),
|
|
52
|
-
};
|
|
54
|
+
const joinMessage = __classPrivateFieldGet(this, _Channel_instances, "m", _Channel_buildJoinMessage).call(this);
|
|
53
55
|
__classPrivateFieldGet(this, _Channel_joinState, "f").publish(enums_1.ChannelState.JOINING);
|
|
54
56
|
if (__classPrivateFieldGet(this, _Channel_clientState, "f").value) {
|
|
55
57
|
__classPrivateFieldGet(this, _Channel_publisher, "f").call(this, joinMessage);
|
|
@@ -63,9 +65,11 @@ class Channel {
|
|
|
63
65
|
*/
|
|
64
66
|
leave() {
|
|
65
67
|
const leaveMessage = {
|
|
68
|
+
addresses: enums_1.ChannelReceiver.ALL_USERS,
|
|
66
69
|
action: enums_1.ClientActions.LEAVE_CHANNEL,
|
|
67
|
-
channelName: __classPrivateFieldGet(this, _Channel_name, "f"),
|
|
68
70
|
event: enums_1.ClientActions.LEAVE_CHANNEL,
|
|
71
|
+
channelName: __classPrivateFieldGet(this, _Channel_name, "f"),
|
|
72
|
+
requestId: (0, uuid_1.uuid)(),
|
|
69
73
|
payload: {},
|
|
70
74
|
};
|
|
71
75
|
__classPrivateFieldGet(this, _Channel_instances, "m", _Channel_publish).call(this, leaveMessage);
|
|
@@ -77,10 +81,8 @@ class Channel {
|
|
|
77
81
|
* @param callback - The callback to call when a message is received.
|
|
78
82
|
*/
|
|
79
83
|
onMessage(callback) {
|
|
80
|
-
return __classPrivateFieldGet(this,
|
|
81
|
-
|
|
82
|
-
return callback(data.event, data.payload);
|
|
83
|
-
}
|
|
84
|
+
return __classPrivateFieldGet(this, _Channel_instances, "m", _Channel_onMessage).call(this, (event, message) => {
|
|
85
|
+
callback(event, message);
|
|
84
86
|
});
|
|
85
87
|
}
|
|
86
88
|
/**
|
|
@@ -144,7 +146,26 @@ class Channel {
|
|
|
144
146
|
* @param recipient - The clients to send the message to.
|
|
145
147
|
*/
|
|
146
148
|
sendMessage(event, payload, recipient) {
|
|
147
|
-
|
|
149
|
+
const requestId = (0, uuid_1.uuid)();
|
|
150
|
+
__classPrivateFieldGet(this, _Channel_instances, "m", _Channel_send).call(this, event, requestId, payload, recipient);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* @desc Sends a message to the server and waits for a response.
|
|
154
|
+
* @param sentEvent - The event to send.
|
|
155
|
+
* @param payload - The message to send.
|
|
156
|
+
* @param responseEvent - The event to wait for.
|
|
157
|
+
*/
|
|
158
|
+
sendForResponse(sentEvent, payload, responseEvent) {
|
|
159
|
+
const requestId = (0, uuid_1.uuid)();
|
|
160
|
+
return new Promise((resolve) => {
|
|
161
|
+
const unsub = __classPrivateFieldGet(this, _Channel_instances, "m", _Channel_onMessage).call(this, (event, message, responseId) => {
|
|
162
|
+
if (event === responseEvent && requestId === responseId) {
|
|
163
|
+
resolve(message);
|
|
164
|
+
unsub();
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
__classPrivateFieldGet(this, _Channel_instances, "m", _Channel_send).call(this, sentEvent, requestId, payload);
|
|
168
|
+
});
|
|
148
169
|
}
|
|
149
170
|
/**
|
|
150
171
|
* @desc Broadcasts a message to every other client in the channel except yourself.
|
|
@@ -152,7 +173,8 @@ class Channel {
|
|
|
152
173
|
* @param payload - The message to send.
|
|
153
174
|
*/
|
|
154
175
|
broadcastFrom(event, payload) {
|
|
155
|
-
|
|
176
|
+
const requestId = (0, uuid_1.uuid)();
|
|
177
|
+
__classPrivateFieldGet(this, _Channel_instances, "m", _Channel_send).call(this, event, requestId, payload, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER);
|
|
156
178
|
}
|
|
157
179
|
/**
|
|
158
180
|
* @desc Broadcasts a message to the channel, including yourself.
|
|
@@ -160,13 +182,8 @@ class Channel {
|
|
|
160
182
|
* @param payload - The message to send.
|
|
161
183
|
*/
|
|
162
184
|
broadcast(event, payload) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* @desc Gets the current connection state of the channel.
|
|
167
|
-
*/
|
|
168
|
-
get channelState() {
|
|
169
|
-
return __classPrivateFieldGet(this, _Channel_joinState, "f").value;
|
|
185
|
+
const requestId = (0, uuid_1.uuid)();
|
|
186
|
+
__classPrivateFieldGet(this, _Channel_instances, "m", _Channel_send).call(this, event, requestId, payload);
|
|
170
187
|
}
|
|
171
188
|
/**
|
|
172
189
|
* @desc Gets the current presence of the channel.
|
|
@@ -182,11 +199,23 @@ class Channel {
|
|
|
182
199
|
return __classPrivateFieldGet(this, _Channel_instances, "m", _Channel_subscribeToPresence).call(this, (_event, payload) => callback(payload.presence));
|
|
183
200
|
}
|
|
184
201
|
/**
|
|
185
|
-
* @desc
|
|
202
|
+
* @desc Checks if the channel is connected.
|
|
186
203
|
*/
|
|
187
204
|
isConnected() {
|
|
188
205
|
return __classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.JOINED || __classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.STALLED;
|
|
189
206
|
}
|
|
207
|
+
/**
|
|
208
|
+
* @desc Checks if the channel is stalled.
|
|
209
|
+
*/
|
|
210
|
+
isStalled() {
|
|
211
|
+
return __classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.STALLED;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* @desc Checks if the channel is closed.
|
|
215
|
+
*/
|
|
216
|
+
isClosed() {
|
|
217
|
+
return __classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.CLOSED;
|
|
218
|
+
}
|
|
190
219
|
/**
|
|
191
220
|
* @desc Monitors the connection state of the channel.
|
|
192
221
|
* @param callback - The callback to call when the connection state changes.
|
|
@@ -198,13 +227,14 @@ class Channel {
|
|
|
198
227
|
}
|
|
199
228
|
}
|
|
200
229
|
exports.Channel = Channel;
|
|
201
|
-
_Channel_name = new WeakMap(),
|
|
230
|
+
_Channel_name = new WeakMap(), _Channel_queue = new WeakMap(), _Channel_presence = new WeakMap(), _Channel_publisher = new WeakMap(), _Channel_joinParams = new WeakMap(), _Channel_presenceSub = new WeakMap(), _Channel_receiver = new WeakMap(), _Channel_clientState = new WeakMap(), _Channel_joinState = new WeakMap(), _Channel_instances = new WeakSet(), _Channel_send = function _Channel_send(event, requestId, payload, receivers = enums_1.ChannelReceiver.ALL_USERS) {
|
|
202
231
|
const message = {
|
|
203
232
|
action: enums_1.ClientActions.BROADCAST,
|
|
204
233
|
channelName: __classPrivateFieldGet(this, _Channel_name, "f"),
|
|
234
|
+
addresses: receivers,
|
|
235
|
+
requestId,
|
|
205
236
|
event,
|
|
206
237
|
payload,
|
|
207
|
-
addresses: receivers,
|
|
208
238
|
};
|
|
209
239
|
__classPrivateFieldGet(this, _Channel_instances, "m", _Channel_publish).call(this, message);
|
|
210
240
|
}, _Channel_publish = function _Channel_publish(data) {
|
|
@@ -235,12 +265,7 @@ _Channel_name = new WeakMap(), _Channel_joinParams = new WeakMap(), _Channel_rec
|
|
|
235
265
|
});
|
|
236
266
|
const unsubStateChange = __classPrivateFieldGet(this, _Channel_clientState, "f").subscribe((state) => {
|
|
237
267
|
if (state && __classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.STALLED) {
|
|
238
|
-
const joinMessage =
|
|
239
|
-
action: enums_1.ClientActions.JOIN_CHANNEL,
|
|
240
|
-
channelName: __classPrivateFieldGet(this, _Channel_name, "f"),
|
|
241
|
-
event: enums_1.ClientActions.JOIN_CHANNEL,
|
|
242
|
-
payload: __classPrivateFieldGet(this, _Channel_joinParams, "f"),
|
|
243
|
-
};
|
|
268
|
+
const joinMessage = __classPrivateFieldGet(this, _Channel_instances, "m", _Channel_buildJoinMessage).call(this);
|
|
244
269
|
__classPrivateFieldGet(this, _Channel_publisher, "f").call(this, joinMessage);
|
|
245
270
|
}
|
|
246
271
|
else if (!state && __classPrivateFieldGet(this, _Channel_joinState, "f").value === enums_1.ChannelState.JOINED) {
|
|
@@ -261,6 +286,20 @@ _Channel_name = new WeakMap(), _Channel_joinParams = new WeakMap(), _Channel_rec
|
|
|
261
286
|
.forEach((message) => {
|
|
262
287
|
__classPrivateFieldGet(this, _Channel_publisher, "f").call(this, message);
|
|
263
288
|
});
|
|
264
|
-
__classPrivateFieldGet(this, _Channel_joinState, "f").publish(enums_1.ChannelState.JOINED);
|
|
265
289
|
__classPrivateFieldSet(this, _Channel_queue, [], "f");
|
|
290
|
+
}, _Channel_buildJoinMessage = function _Channel_buildJoinMessage() {
|
|
291
|
+
return {
|
|
292
|
+
addresses: enums_1.ChannelReceiver.ALL_USERS,
|
|
293
|
+
action: enums_1.ClientActions.JOIN_CHANNEL,
|
|
294
|
+
event: enums_1.ClientActions.JOIN_CHANNEL,
|
|
295
|
+
payload: __classPrivateFieldGet(this, _Channel_joinParams, "f"),
|
|
296
|
+
channelName: __classPrivateFieldGet(this, _Channel_name, "f"),
|
|
297
|
+
requestId: (0, uuid_1.uuid)(),
|
|
298
|
+
};
|
|
299
|
+
}, _Channel_onMessage = function _Channel_onMessage(callback) {
|
|
300
|
+
return __classPrivateFieldGet(this, _Channel_receiver, "f").subscribe((data) => {
|
|
301
|
+
if (data.action !== enums_1.ServerActions.PRESENCE) {
|
|
302
|
+
return callback(data.event, data.payload, data.requestId);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
266
305
|
};
|
package/client.js
CHANGED
|
@@ -85,7 +85,7 @@ class PondClient {
|
|
|
85
85
|
return __classPrivateFieldGet(this, _PondClient_channels, "f")[name];
|
|
86
86
|
}
|
|
87
87
|
const publisher = __classPrivateFieldGet(this, _PondClient_instances, "m", _PondClient_createPublisher).call(this);
|
|
88
|
-
const channel = new channel_1.Channel(publisher, this._connectionState, name, this._broadcaster, params);
|
|
88
|
+
const channel = new channel_1.Channel(publisher, this._connectionState, name, this._broadcaster, params || {});
|
|
89
89
|
__classPrivateFieldGet(this, _PondClient_channels, "f")[name] = channel;
|
|
90
90
|
return channel;
|
|
91
91
|
}
|
package/endpoint/endpoint.js
CHANGED
|
@@ -13,6 +13,7 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
13
13
|
var _Endpoint_instances, _Endpoint_middleware, _Endpoint_channels, _Endpoint_sockets, _Endpoint_sendMessage, _Endpoint_joinChannel, _Endpoint_execute, _Endpoint_handleMessage, _Endpoint_readMessage, _Endpoint_isObjectEmpty;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.Endpoint = void 0;
|
|
16
|
+
const zod_1 = require("zod");
|
|
16
17
|
const middleware_1 = require("../abstracts/middleware");
|
|
17
18
|
const enums_1 = require("../enums");
|
|
18
19
|
const pondError_1 = require("../errors/pondError");
|
|
@@ -20,6 +21,8 @@ const joinRequest_1 = require("../lobby/joinRequest");
|
|
|
20
21
|
const joinResponse_1 = require("../lobby/joinResponse");
|
|
21
22
|
const lobby_1 = require("../lobby/lobby");
|
|
22
23
|
const matcher_1 = require("../matcher/matcher");
|
|
24
|
+
const uuid_1 = require("../misc/uuid");
|
|
25
|
+
const schema_1 = require("../schema");
|
|
23
26
|
class Endpoint {
|
|
24
27
|
constructor() {
|
|
25
28
|
_Endpoint_instances.add(this);
|
|
@@ -83,6 +86,7 @@ class Endpoint {
|
|
|
83
86
|
const message = {
|
|
84
87
|
event,
|
|
85
88
|
payload,
|
|
89
|
+
requestId: (0, uuid_1.uuid)(),
|
|
86
90
|
action: enums_1.ServerActions.BROADCAST,
|
|
87
91
|
channelName: enums_1.SystemSender.ENDPOINT,
|
|
88
92
|
};
|
|
@@ -125,8 +129,8 @@ class Endpoint {
|
|
|
125
129
|
exports.Endpoint = Endpoint;
|
|
126
130
|
_Endpoint_middleware = new WeakMap(), _Endpoint_channels = new WeakMap(), _Endpoint_sockets = new WeakMap(), _Endpoint_instances = new WeakSet(), _Endpoint_sendMessage = function _Endpoint_sendMessage(socket, message) {
|
|
127
131
|
socket.send(JSON.stringify(message));
|
|
128
|
-
}, _Endpoint_joinChannel = function _Endpoint_joinChannel(channel, socket, joinParams) {
|
|
129
|
-
const cache = Object.assign(Object.assign({}, socket), { channelName: channel });
|
|
132
|
+
}, _Endpoint_joinChannel = function _Endpoint_joinChannel(channel, socket, joinParams, requestId) {
|
|
133
|
+
const cache = Object.assign(Object.assign({}, socket), { requestId, channelName: channel });
|
|
130
134
|
__classPrivateFieldGet(this, _Endpoint_middleware, "f").run(cache, joinParams, () => {
|
|
131
135
|
throw new pondError_1.EndpointError(`GatewayEngine: Channel ${channel} does not exist`, 404);
|
|
132
136
|
});
|
|
@@ -142,7 +146,7 @@ _Endpoint_middleware = new WeakMap(), _Endpoint_channels = new WeakMap(), _Endpo
|
|
|
142
146
|
}, _Endpoint_handleMessage = function _Endpoint_handleMessage(cache, message) {
|
|
143
147
|
switch (message.action) {
|
|
144
148
|
case enums_1.ClientActions.JOIN_CHANNEL:
|
|
145
|
-
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_joinChannel).call(this, message.channelName, cache, message.payload);
|
|
149
|
+
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_joinChannel).call(this, message.channelName, cache, message.payload, message.requestId);
|
|
146
150
|
break;
|
|
147
151
|
case enums_1.ClientActions.LEAVE_CHANNEL:
|
|
148
152
|
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_execute).call(this, message.channelName, (channel) => {
|
|
@@ -162,34 +166,22 @@ _Endpoint_middleware = new WeakMap(), _Endpoint_channels = new WeakMap(), _Endpo
|
|
|
162
166
|
event: enums_1.ErrorTypes.INVALID_MESSAGE,
|
|
163
167
|
action: enums_1.ServerActions.ERROR,
|
|
164
168
|
channelName: enums_1.SystemSender.ENDPOINT,
|
|
169
|
+
requestId: (0, uuid_1.uuid)(),
|
|
165
170
|
payload: {},
|
|
166
171
|
};
|
|
167
172
|
try {
|
|
168
173
|
const data = JSON.parse(message);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
else if (!data.channelName) {
|
|
175
|
-
errorMessage.payload = {
|
|
176
|
-
message: 'No channel name provided',
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
else if (!data.payload) {
|
|
174
|
+
const result = schema_1.clientMessageSchema.parse(data);
|
|
175
|
+
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_handleMessage).call(this, cache, result);
|
|
176
|
+
}
|
|
177
|
+
catch (e) {
|
|
178
|
+
if (e instanceof zod_1.ZodError) {
|
|
180
179
|
errorMessage.payload = {
|
|
181
|
-
message:
|
|
180
|
+
message: e.message,
|
|
181
|
+
code: 400,
|
|
182
182
|
};
|
|
183
183
|
}
|
|
184
|
-
if (
|
|
185
|
-
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_sendMessage).call(this, cache.socket, errorMessage);
|
|
186
|
-
}
|
|
187
|
-
else {
|
|
188
|
-
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_handleMessage).call(this, cache, data);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
catch (e) {
|
|
192
|
-
if (e instanceof SyntaxError) {
|
|
184
|
+
else if (e instanceof SyntaxError) {
|
|
193
185
|
errorMessage.payload = {
|
|
194
186
|
message: 'Invalid JSON',
|
|
195
187
|
};
|
|
@@ -224,6 +216,11 @@ _Endpoint_middleware = new WeakMap(), _Endpoint_channels = new WeakMap(), _Endpo
|
|
|
224
216
|
code: e.code,
|
|
225
217
|
};
|
|
226
218
|
}
|
|
219
|
+
else {
|
|
220
|
+
errorMessage.payload = {
|
|
221
|
+
message: 'Unknown error',
|
|
222
|
+
};
|
|
223
|
+
}
|
|
227
224
|
__classPrivateFieldGet(this, _Endpoint_instances, "m", _Endpoint_sendMessage).call(this, cache.socket, errorMessage);
|
|
228
225
|
}
|
|
229
226
|
}, _Endpoint_isObjectEmpty = function _Endpoint_isObjectEmpty(obj) {
|
package/endpoint/response.js
CHANGED
|
@@ -16,9 +16,10 @@ exports.ConnectionResponse = void 0;
|
|
|
16
16
|
const abstractResponse_1 = require("../abstracts/abstractResponse");
|
|
17
17
|
const enums_1 = require("../enums");
|
|
18
18
|
const pondError_1 = require("../errors/pondError");
|
|
19
|
+
const uuid_1 = require("../misc/uuid");
|
|
19
20
|
class ConnectionResponse extends abstractResponse_1.PondResponse {
|
|
20
21
|
constructor(webSocket, engine, clientId) {
|
|
21
|
-
super();
|
|
22
|
+
super((0, uuid_1.uuid)());
|
|
22
23
|
_ConnectionResponse_instances.add(this);
|
|
23
24
|
_ConnectionResponse_webSocket.set(this, void 0);
|
|
24
25
|
_ConnectionResponse_engine.set(this, void 0);
|
|
@@ -76,9 +77,10 @@ class ConnectionResponse extends abstractResponse_1.PondResponse {
|
|
|
76
77
|
exports.ConnectionResponse = ConnectionResponse;
|
|
77
78
|
_ConnectionResponse_webSocket = new WeakMap(), _ConnectionResponse_engine = new WeakMap(), _ConnectionResponse_clientId = new WeakMap(), _ConnectionResponse_executed = new WeakMap(), _ConnectionResponse_instances = new WeakSet(), _ConnectionResponse_sendMessage = function _ConnectionResponse_sendMessage(action, event, payload) {
|
|
78
79
|
const message = {
|
|
79
|
-
action,
|
|
80
80
|
event,
|
|
81
|
+
action,
|
|
81
82
|
payload,
|
|
83
|
+
requestId: this.requestId,
|
|
82
84
|
channelName: enums_1.SystemSender.ENDPOINT,
|
|
83
85
|
};
|
|
84
86
|
__classPrivateFieldGet(this, _ConnectionResponse_webSocket, "f").send(JSON.stringify(message));
|
package/lobby/joinResponse.js
CHANGED
|
@@ -18,7 +18,7 @@ const enums_1 = require("../enums");
|
|
|
18
18
|
const pondError_1 = require("../errors/pondError");
|
|
19
19
|
class JoinResponse extends abstractResponse_1.PondResponse {
|
|
20
20
|
constructor(user, engine) {
|
|
21
|
-
super();
|
|
21
|
+
super(user.requestId);
|
|
22
22
|
_JoinResponse_instances.add(this);
|
|
23
23
|
_JoinResponse_user.set(this, void 0);
|
|
24
24
|
_JoinResponse_engine.set(this, void 0);
|
|
@@ -44,6 +44,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
44
44
|
action: enums_1.ServerActions.SYSTEM,
|
|
45
45
|
channelName: __classPrivateFieldGet(this, _JoinResponse_engine, "f").name,
|
|
46
46
|
event: enums_1.Events.ACKNOWLEDGE,
|
|
47
|
+
requestId: this.requestId,
|
|
47
48
|
payload: {},
|
|
48
49
|
};
|
|
49
50
|
__classPrivateFieldGet(this, _JoinResponse_user, "f").socket.send(JSON.stringify(acknowledgement));
|
|
@@ -67,6 +68,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
67
68
|
},
|
|
68
69
|
channelName: __classPrivateFieldGet(this, _JoinResponse_engine, "f").name,
|
|
69
70
|
action: enums_1.ServerActions.ERROR,
|
|
71
|
+
requestId: this.requestId,
|
|
70
72
|
};
|
|
71
73
|
__classPrivateFieldGet(this, _JoinResponse_user, "f").socket.send(JSON.stringify(errorMessage));
|
|
72
74
|
return this;
|
|
@@ -79,7 +81,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
79
81
|
*/
|
|
80
82
|
send(event, payload, assigns) {
|
|
81
83
|
this.accept(assigns);
|
|
82
|
-
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId], enums_1.ServerActions.SYSTEM, event, payload);
|
|
84
|
+
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(this.requestId, enums_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId], enums_1.ServerActions.SYSTEM, event, payload);
|
|
83
85
|
return this;
|
|
84
86
|
}
|
|
85
87
|
/**
|
|
@@ -88,7 +90,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
88
90
|
* @param payload - the payload to send
|
|
89
91
|
*/
|
|
90
92
|
broadcast(event, payload) {
|
|
91
|
-
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
|
|
93
|
+
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.BROADCAST, event, payload);
|
|
92
94
|
return this;
|
|
93
95
|
}
|
|
94
96
|
/**
|
|
@@ -97,7 +99,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
97
99
|
* @param payload - the payload to send
|
|
98
100
|
*/
|
|
99
101
|
broadcastFromUser(event, payload) {
|
|
100
|
-
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER, enums_1.ServerActions.BROADCAST, event, payload);
|
|
102
|
+
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, enums_1.ChannelReceiver.ALL_EXCEPT_SENDER, enums_1.ServerActions.BROADCAST, event, payload);
|
|
101
103
|
return this;
|
|
102
104
|
}
|
|
103
105
|
/**
|
|
@@ -107,7 +109,7 @@ class JoinResponse extends abstractResponse_1.PondResponse {
|
|
|
107
109
|
* @param userIds - the ids of the clients to send the message to
|
|
108
110
|
*/
|
|
109
111
|
sendToUsers(event, payload, userIds) {
|
|
110
|
-
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, userIds, enums_1.ServerActions.BROADCAST, event, payload);
|
|
112
|
+
__classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(this.requestId, __classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, userIds, enums_1.ServerActions.BROADCAST, event, payload);
|
|
111
113
|
return this;
|
|
112
114
|
}
|
|
113
115
|
/**
|
package/lobby/lobby.js
CHANGED
|
@@ -16,6 +16,7 @@ exports.PondChannel = exports.LobbyEngine = void 0;
|
|
|
16
16
|
const middleware_1 = require("../abstracts/middleware");
|
|
17
17
|
const channel_1 = require("../channel/channel");
|
|
18
18
|
const enums_1 = require("../enums");
|
|
19
|
+
const uuid_1 = require("../misc/uuid");
|
|
19
20
|
class LobbyEngine {
|
|
20
21
|
constructor() {
|
|
21
22
|
_LobbyEngine_channels.set(this, void 0);
|
|
@@ -68,11 +69,11 @@ class LobbyEngine {
|
|
|
68
69
|
if (!channel) {
|
|
69
70
|
throw new Error(`GatewayEngine: Channel ${channelName} does not exist`);
|
|
70
71
|
}
|
|
71
|
-
channel.sendMessage(enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.SYSTEM, event, payload);
|
|
72
|
+
channel.sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.SYSTEM, event, payload);
|
|
72
73
|
}
|
|
73
74
|
else {
|
|
74
75
|
__classPrivateFieldGet(this, _LobbyEngine_channels, "f").forEach((channel) => {
|
|
75
|
-
channel.sendMessage(enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.SYSTEM, event, payload);
|
|
76
|
+
channel.sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, enums_1.ChannelReceiver.ALL_USERS, enums_1.ServerActions.SYSTEM, event, payload);
|
|
76
77
|
});
|
|
77
78
|
}
|
|
78
79
|
}
|
package/misc/uuid.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uuid = void 0;
|
|
4
|
+
function uuid() {
|
|
5
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'
|
|
6
|
+
.replace(/[xy]/g, (c) => {
|
|
7
|
+
const r = Math.random() * 16 | 0;
|
|
8
|
+
const v = c === 'x' ? r : (r & 0x3 | 0x8);
|
|
9
|
+
return v.toString(16);
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
exports.uuid = uuid;
|
package/package.json
CHANGED
package/presence/presence.js
CHANGED
|
@@ -15,6 +15,7 @@ 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 uuid_1 = require("../misc/uuid");
|
|
18
19
|
class PresenceEngine {
|
|
19
20
|
constructor(channel) {
|
|
20
21
|
_PresenceEngine_instances.add(this);
|
|
@@ -107,5 +108,5 @@ _PresenceEngine_presenceMap = new WeakMap(), _PresenceEngine_channel = new WeakM
|
|
|
107
108
|
if (recipients.length === 0) {
|
|
108
109
|
return;
|
|
109
110
|
}
|
|
110
|
-
__classPrivateFieldGet(this, _PresenceEngine_channel, "f").sendMessage(enums_1.SystemSender.CHANNEL, recipients, enums_1.ServerActions.PRESENCE, event, payload);
|
|
111
|
+
__classPrivateFieldGet(this, _PresenceEngine_channel, "f").sendMessage((0, uuid_1.uuid)(), enums_1.SystemSender.CHANNEL, recipients, enums_1.ServerActions.PRESENCE, event, payload);
|
|
111
112
|
};
|
package/schema.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clientMessageSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const enums_1 = require("./enums");
|
|
6
|
+
exports.clientMessageSchema = zod_1.z.object({
|
|
7
|
+
event: zod_1.z.string(),
|
|
8
|
+
requestId: zod_1.z.string(),
|
|
9
|
+
channelName: zod_1.z.string(),
|
|
10
|
+
payload: zod_1.z.record(zod_1.z.any()),
|
|
11
|
+
action: zod_1.z.nativeEnum(enums_1.ClientActions),
|
|
12
|
+
addresses: zod_1.z.union([zod_1.z.nativeEnum(enums_1.ChannelReceiver), zod_1.z.array(zod_1.z.string())]).optional(),
|
|
13
|
+
});
|
package/types.d.ts
CHANGED
|
@@ -380,6 +380,14 @@ export declare class ClientChannel<EventType extends PondEvenType = PondEvenType
|
|
|
380
380
|
*/
|
|
381
381
|
sendMessage <Key extends keyof EventType> (event: Key, payload: EventType[Key], recipient: string[]): void;
|
|
382
382
|
|
|
383
|
+
/**
|
|
384
|
+
* @desc Sends a message to the server and waits for a response.
|
|
385
|
+
* @param sentEvent - The event to send.
|
|
386
|
+
* @param payload - The message to send.
|
|
387
|
+
* @param responseEvent - The event to wait for.
|
|
388
|
+
*/
|
|
389
|
+
sendForResponse <ResponseKey extends keyof EventType, SentKey extends keyof EventType> (sentEvent: SentKey, payload: EventType[SentKey], responseEvent: ResponseKey): Promise<EventType[ResponseKey]>;
|
|
390
|
+
|
|
383
391
|
/**
|
|
384
392
|
* @desc Broadcasts a message to every other client in the channel except yourself.
|
|
385
393
|
* @param event - The event to send.
|
|
@@ -406,15 +414,31 @@ export declare class ClientChannel<EventType extends PondEvenType = PondEvenType
|
|
|
406
414
|
onUsersChange (callback: (users: PondPresence[]) => void): Unsubscribe;
|
|
407
415
|
|
|
408
416
|
/**
|
|
409
|
-
* @desc
|
|
417
|
+
* @desc Checks if the channel is connected.
|
|
410
418
|
*/
|
|
411
419
|
isConnected (): boolean;
|
|
412
420
|
|
|
421
|
+
/**
|
|
422
|
+
* @desc Checks if the channel is stalled.
|
|
423
|
+
*/
|
|
424
|
+
isStalled (): boolean;
|
|
425
|
+
|
|
426
|
+
/**
|
|
427
|
+
* @desc Checks if the channel is closed.
|
|
428
|
+
*/
|
|
429
|
+
isClosed (): boolean;
|
|
430
|
+
|
|
413
431
|
/**
|
|
414
432
|
* @desc Monitors the connection state of the channel.
|
|
415
433
|
* @param callback - The callback to call when the connection state changes.
|
|
416
434
|
*/
|
|
417
435
|
onConnectionChange (callback: (connected: boolean) => void): Unsubscribe;
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* @desc Gets the first response from the channel.
|
|
439
|
+
* @param event - The event to monitor.
|
|
440
|
+
*/
|
|
441
|
+
getFirstResponse <Key extends keyof EventType> (event: Key): Promise<EventType[Key]>;
|
|
418
442
|
}
|
|
419
443
|
|
|
420
444
|
declare class Endpoint {
|