@eleven-am/pondsocket 0.1.217 → 0.1.218
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/engines/channelEngine.d.ts +2 -0
- package/engines/channelEngine.js +80 -2
- package/engines/lobbyEngine.js +4 -3
- package/package.json +2 -2
- package/types.d.ts +5 -6
- package/wrappers/channel.d.ts +8 -0
- package/wrappers/channel.js +13 -0
|
@@ -17,6 +17,8 @@ export declare class ChannelEngine {
|
|
|
17
17
|
upsertPresence(userId: string, presence: PondPresence): void;
|
|
18
18
|
updateAssigns(userId: string, assigns: PondMessage): void;
|
|
19
19
|
kickUser(userId: string, reason: string): void;
|
|
20
|
+
requestUserRemoval(userId: string): void;
|
|
21
|
+
getUserAcrossNodes(userId: string, timeoutMs?: number): Promise<UserData | null>;
|
|
20
22
|
getAssigns(): UserAssigns;
|
|
21
23
|
getPresence(): UserPresences;
|
|
22
24
|
destroy(reason?: string): void;
|
package/engines/channelEngine.js
CHANGED
|
@@ -30,7 +30,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
30
30
|
}
|
|
31
31
|
return t;
|
|
32
32
|
};
|
|
33
|
-
var _ChannelEngine_instances, _ChannelEngine_endpointId, _ChannelEngine_backend, _ChannelEngine_nodeId, _ChannelEngine_presenceEngine, _ChannelEngine_assignsCache, _ChannelEngine_userSubscriptions, _ChannelEngine_publisher, _ChannelEngine_distributedSubscription, _ChannelEngine_heartbeatSubscription, _ChannelEngine_nodeLastSeen, _ChannelEngine_nodeUsers, _ChannelEngine_staleNodeTimer, _ChannelEngine_name, _ChannelEngine_closed, _ChannelEngine_distributedReady, _ChannelEngine_safeRemovePresence, _ChannelEngine_buildSubscriber, _ChannelEngine_getOrCreatePresenceEngine, _ChannelEngine_getUsersFromRecipients, _ChannelEngine_setupDistributedSubscription, _ChannelEngine_afterDistributedReady, _ChannelEngine_handleDistributedMessage, _ChannelEngine_requestChannelState, _ChannelEngine_handleStateRequest, _ChannelEngine_handleStateResponse, _ChannelEngine_handleRemoteUserJoined, _ChannelEngine_handleRemoteUserLeft, _ChannelEngine_handleRemoteMessage, _ChannelEngine_handleRemotePresenceUpdate, _ChannelEngine_handleRemotePresenceRemoved, _ChannelEngine_handleRemoteAssignsUpdate, _ChannelEngine_handleRemoteEvictUser, _ChannelEngine_setupHeartbeatTracking, _ChannelEngine_cleanupStaleNodes, _ChannelEngine_trackNodeUser, _ChannelEngine_untrackNodeUser, _ChannelEngine_broadcastToNodes;
|
|
33
|
+
var _ChannelEngine_instances, _ChannelEngine_endpointId, _ChannelEngine_backend, _ChannelEngine_nodeId, _ChannelEngine_presenceEngine, _ChannelEngine_assignsCache, _ChannelEngine_userSubscriptions, _ChannelEngine_publisher, _ChannelEngine_distributedSubscription, _ChannelEngine_heartbeatSubscription, _ChannelEngine_nodeLastSeen, _ChannelEngine_nodeUsers, _ChannelEngine_pendingUserGets, _ChannelEngine_staleNodeTimer, _ChannelEngine_name, _ChannelEngine_closed, _ChannelEngine_distributedReady, _ChannelEngine_safeRemovePresence, _ChannelEngine_buildSubscriber, _ChannelEngine_getOrCreatePresenceEngine, _ChannelEngine_getUsersFromRecipients, _ChannelEngine_setupDistributedSubscription, _ChannelEngine_afterDistributedReady, _ChannelEngine_handleDistributedMessage, _ChannelEngine_requestChannelState, _ChannelEngine_handleStateRequest, _ChannelEngine_handleStateResponse, _ChannelEngine_handleRemoteUserJoined, _ChannelEngine_handleRemoteUserLeft, _ChannelEngine_handleRemoteMessage, _ChannelEngine_handleRemotePresenceUpdate, _ChannelEngine_handleRemotePresenceRemoved, _ChannelEngine_handleRemoteAssignsUpdate, _ChannelEngine_handleRemoteEvictUser, _ChannelEngine_handleRemoteUserRemove, _ChannelEngine_handleRemoteUserGetRequest, _ChannelEngine_handleRemoteUserGetResponse, _ChannelEngine_setupHeartbeatTracking, _ChannelEngine_cleanupStaleNodes, _ChannelEngine_trackNodeUser, _ChannelEngine_untrackNodeUser, _ChannelEngine_broadcastToNodes;
|
|
34
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
35
|
exports.ChannelEngine = void 0;
|
|
36
36
|
const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
|
|
@@ -59,6 +59,7 @@ class ChannelEngine {
|
|
|
59
59
|
_ChannelEngine_heartbeatSubscription.set(this, null);
|
|
60
60
|
_ChannelEngine_nodeLastSeen.set(this, new Map());
|
|
61
61
|
_ChannelEngine_nodeUsers.set(this, new Map());
|
|
62
|
+
_ChannelEngine_pendingUserGets.set(this, new Map());
|
|
62
63
|
_ChannelEngine_staleNodeTimer.set(this, null);
|
|
63
64
|
_ChannelEngine_name.set(this, void 0);
|
|
64
65
|
_ChannelEngine_closed.set(this, false);
|
|
@@ -222,6 +223,38 @@ class ChannelEngine {
|
|
|
222
223
|
});
|
|
223
224
|
this.removeUser(userId, true);
|
|
224
225
|
}
|
|
226
|
+
requestUserRemoval(userId) {
|
|
227
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_broadcastToNodes).call(this, {
|
|
228
|
+
type: types_1.DistributedMessageType.USER_REMOVE,
|
|
229
|
+
endpointName: __classPrivateFieldGet(this, _ChannelEngine_endpointId, "f"),
|
|
230
|
+
channelName: __classPrivateFieldGet(this, _ChannelEngine_name, "f"),
|
|
231
|
+
userId,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
getUserAcrossNodes(userId, timeoutMs = 5000) {
|
|
235
|
+
if (!__classPrivateFieldGet(this, _ChannelEngine_backend, "f")) {
|
|
236
|
+
return Promise.resolve(null);
|
|
237
|
+
}
|
|
238
|
+
const requestId = (0, pondsocket_common_1.uuid)();
|
|
239
|
+
return new Promise((resolve) => {
|
|
240
|
+
const timer = setTimeout(() => {
|
|
241
|
+
__classPrivateFieldGet(this, _ChannelEngine_pendingUserGets, "f").delete(requestId);
|
|
242
|
+
resolve(null);
|
|
243
|
+
}, timeoutMs);
|
|
244
|
+
__classPrivateFieldGet(this, _ChannelEngine_pendingUserGets, "f").set(requestId, {
|
|
245
|
+
resolve,
|
|
246
|
+
timer,
|
|
247
|
+
});
|
|
248
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_broadcastToNodes).call(this, {
|
|
249
|
+
type: types_1.DistributedMessageType.USER_GET_REQUEST,
|
|
250
|
+
endpointName: __classPrivateFieldGet(this, _ChannelEngine_endpointId, "f"),
|
|
251
|
+
channelName: __classPrivateFieldGet(this, _ChannelEngine_name, "f"),
|
|
252
|
+
userId,
|
|
253
|
+
requestId,
|
|
254
|
+
fromNode: __classPrivateFieldGet(this, _ChannelEngine_nodeId, "f"),
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
}
|
|
225
258
|
getAssigns() {
|
|
226
259
|
return mapToObject(__classPrivateFieldGet(this, _ChannelEngine_assignsCache, "f"));
|
|
227
260
|
}
|
|
@@ -304,6 +337,8 @@ class ChannelEngine {
|
|
|
304
337
|
clearInterval(__classPrivateFieldGet(this, _ChannelEngine_staleNodeTimer, "f"));
|
|
305
338
|
__classPrivateFieldSet(this, _ChannelEngine_staleNodeTimer, null, "f");
|
|
306
339
|
}
|
|
340
|
+
__classPrivateFieldGet(this, _ChannelEngine_pendingUserGets, "f").forEach((pending) => clearTimeout(pending.timer));
|
|
341
|
+
__classPrivateFieldGet(this, _ChannelEngine_pendingUserGets, "f").clear();
|
|
307
342
|
__classPrivateFieldGet(this, _ChannelEngine_nodeLastSeen, "f").clear();
|
|
308
343
|
__classPrivateFieldGet(this, _ChannelEngine_nodeUsers, "f").clear();
|
|
309
344
|
__classPrivateFieldGet(this, _ChannelEngine_publisher, "f").close();
|
|
@@ -311,7 +346,7 @@ class ChannelEngine {
|
|
|
311
346
|
}
|
|
312
347
|
}
|
|
313
348
|
exports.ChannelEngine = ChannelEngine;
|
|
314
|
-
_ChannelEngine_endpointId = new WeakMap(), _ChannelEngine_backend = new WeakMap(), _ChannelEngine_nodeId = new WeakMap(), _ChannelEngine_presenceEngine = new WeakMap(), _ChannelEngine_assignsCache = new WeakMap(), _ChannelEngine_userSubscriptions = new WeakMap(), _ChannelEngine_publisher = new WeakMap(), _ChannelEngine_distributedSubscription = new WeakMap(), _ChannelEngine_heartbeatSubscription = new WeakMap(), _ChannelEngine_nodeLastSeen = new WeakMap(), _ChannelEngine_nodeUsers = new WeakMap(), _ChannelEngine_staleNodeTimer = new WeakMap(), _ChannelEngine_name = new WeakMap(), _ChannelEngine_closed = new WeakMap(), _ChannelEngine_distributedReady = new WeakMap(), _ChannelEngine_instances = new WeakSet(), _ChannelEngine_safeRemovePresence = function _ChannelEngine_safeRemovePresence(userId) {
|
|
349
|
+
_ChannelEngine_endpointId = new WeakMap(), _ChannelEngine_backend = new WeakMap(), _ChannelEngine_nodeId = new WeakMap(), _ChannelEngine_presenceEngine = new WeakMap(), _ChannelEngine_assignsCache = new WeakMap(), _ChannelEngine_userSubscriptions = new WeakMap(), _ChannelEngine_publisher = new WeakMap(), _ChannelEngine_distributedSubscription = new WeakMap(), _ChannelEngine_heartbeatSubscription = new WeakMap(), _ChannelEngine_nodeLastSeen = new WeakMap(), _ChannelEngine_nodeUsers = new WeakMap(), _ChannelEngine_pendingUserGets = new WeakMap(), _ChannelEngine_staleNodeTimer = new WeakMap(), _ChannelEngine_name = new WeakMap(), _ChannelEngine_closed = new WeakMap(), _ChannelEngine_distributedReady = new WeakMap(), _ChannelEngine_instances = new WeakSet(), _ChannelEngine_safeRemovePresence = function _ChannelEngine_safeRemovePresence(userId) {
|
|
315
350
|
if (__classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) {
|
|
316
351
|
try {
|
|
317
352
|
__classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").removePresence(userId);
|
|
@@ -421,6 +456,15 @@ _ChannelEngine_endpointId = new WeakMap(), _ChannelEngine_backend = new WeakMap(
|
|
|
421
456
|
case types_1.DistributedMessageType.EVICT_USER:
|
|
422
457
|
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_handleRemoteEvictUser).call(this, message);
|
|
423
458
|
break;
|
|
459
|
+
case types_1.DistributedMessageType.USER_REMOVE:
|
|
460
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_handleRemoteUserRemove).call(this, message);
|
|
461
|
+
break;
|
|
462
|
+
case types_1.DistributedMessageType.USER_GET_REQUEST:
|
|
463
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_handleRemoteUserGetRequest).call(this, message);
|
|
464
|
+
break;
|
|
465
|
+
case types_1.DistributedMessageType.USER_GET_RESPONSE:
|
|
466
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_handleRemoteUserGetResponse).call(this, message);
|
|
467
|
+
break;
|
|
424
468
|
case types_1.DistributedMessageType.NODE_HEARTBEAT:
|
|
425
469
|
break;
|
|
426
470
|
default:
|
|
@@ -545,6 +589,40 @@ _ChannelEngine_endpointId = new WeakMap(), _ChannelEngine_backend = new WeakMap(
|
|
|
545
589
|
unsubscribe();
|
|
546
590
|
__classPrivateFieldGet(this, _ChannelEngine_userSubscriptions, "f").delete(message.userId);
|
|
547
591
|
}
|
|
592
|
+
}, _ChannelEngine_handleRemoteUserRemove = function _ChannelEngine_handleRemoteUserRemove(message) {
|
|
593
|
+
if (__classPrivateFieldGet(this, _ChannelEngine_userSubscriptions, "f").has(message.userId)) {
|
|
594
|
+
this.removeUser(message.userId);
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
__classPrivateFieldGet(this, _ChannelEngine_assignsCache, "f").delete(message.userId);
|
|
598
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_safeRemovePresence).call(this, message.userId);
|
|
599
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_untrackNodeUser).call(this, message.sourceNodeId, message.userId);
|
|
600
|
+
}, _ChannelEngine_handleRemoteUserGetRequest = function _ChannelEngine_handleRemoteUserGetRequest(message) {
|
|
601
|
+
var _a;
|
|
602
|
+
if (!__classPrivateFieldGet(this, _ChannelEngine_userSubscriptions, "f").has(message.userId)) {
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_broadcastToNodes).call(this, {
|
|
606
|
+
type: types_1.DistributedMessageType.USER_GET_RESPONSE,
|
|
607
|
+
endpointName: __classPrivateFieldGet(this, _ChannelEngine_endpointId, "f"),
|
|
608
|
+
channelName: __classPrivateFieldGet(this, _ChannelEngine_name, "f"),
|
|
609
|
+
userId: message.userId,
|
|
610
|
+
requestId: message.requestId,
|
|
611
|
+
assigns: __classPrivateFieldGet(this, _ChannelEngine_assignsCache, "f").get(message.userId) || {},
|
|
612
|
+
presence: ((_a = __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) === null || _a === void 0 ? void 0 : _a.getPresence(message.userId)) || {},
|
|
613
|
+
});
|
|
614
|
+
}, _ChannelEngine_handleRemoteUserGetResponse = function _ChannelEngine_handleRemoteUserGetResponse(message) {
|
|
615
|
+
const pending = __classPrivateFieldGet(this, _ChannelEngine_pendingUserGets, "f").get(message.requestId);
|
|
616
|
+
if (!pending) {
|
|
617
|
+
return;
|
|
618
|
+
}
|
|
619
|
+
clearTimeout(pending.timer);
|
|
620
|
+
__classPrivateFieldGet(this, _ChannelEngine_pendingUserGets, "f").delete(message.requestId);
|
|
621
|
+
pending.resolve({
|
|
622
|
+
id: message.userId,
|
|
623
|
+
assigns: message.assigns || {},
|
|
624
|
+
presence: message.presence || {},
|
|
625
|
+
});
|
|
548
626
|
}, _ChannelEngine_setupHeartbeatTracking = function _ChannelEngine_setupHeartbeatTracking() {
|
|
549
627
|
if (!__classPrivateFieldGet(this, _ChannelEngine_backend, "f")) {
|
|
550
628
|
return;
|
package/engines/lobbyEngine.js
CHANGED
|
@@ -68,12 +68,13 @@ class LobbyEngine {
|
|
|
68
68
|
if (!params || context.isBlocked()) {
|
|
69
69
|
return next();
|
|
70
70
|
}
|
|
71
|
-
context
|
|
72
|
-
|
|
71
|
+
const typedContext = context;
|
|
72
|
+
typedContext.updateParams(params);
|
|
73
|
+
const payload = yield handler(typedContext, next);
|
|
73
74
|
if (payload === undefined || payload === null) {
|
|
74
75
|
return;
|
|
75
76
|
}
|
|
76
|
-
|
|
77
|
+
typedContext.transform(payload);
|
|
77
78
|
return next();
|
|
78
79
|
}));
|
|
79
80
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eleven-am/pondsocket",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.218",
|
|
4
4
|
"description": "PondSocket is a fast simple socket server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"socket",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"url": "git+https://github.com/Eleven-am/pondSocket.git"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@eleven-am/pondsocket-common": "^0.0.
|
|
46
|
+
"@eleven-am/pondsocket-common": "^0.0.40",
|
|
47
47
|
"@types/node": "^25.3.3",
|
|
48
48
|
"@types/ws": "^8.18.1",
|
|
49
49
|
"redis": "^5.12.1",
|
package/types.d.ts
CHANGED
|
@@ -100,20 +100,19 @@ export interface EvictUser extends DistributedMessage {
|
|
|
100
100
|
export interface UserRemove extends DistributedMessage {
|
|
101
101
|
type: DistributedMessageType.USER_REMOVE;
|
|
102
102
|
userId: string;
|
|
103
|
-
reason: string;
|
|
104
103
|
}
|
|
105
104
|
export interface UserGetRequest extends DistributedMessage {
|
|
106
105
|
type: DistributedMessageType.USER_GET_REQUEST;
|
|
107
106
|
userId: string;
|
|
108
|
-
|
|
107
|
+
requestId: string;
|
|
108
|
+
fromNode: string;
|
|
109
109
|
}
|
|
110
110
|
export interface UserGetResponse extends DistributedMessage {
|
|
111
111
|
type: DistributedMessageType.USER_GET_RESPONSE;
|
|
112
|
-
lookupRequestId: string;
|
|
113
112
|
userId: string;
|
|
114
|
-
|
|
115
|
-
assigns
|
|
116
|
-
presence
|
|
113
|
+
requestId: string;
|
|
114
|
+
assigns: PondAssigns;
|
|
115
|
+
presence: PondPresence;
|
|
117
116
|
}
|
|
118
117
|
export interface NodeHeartbeat extends DistributedMessage {
|
|
119
118
|
type: DistributedMessageType.NODE_HEARTBEAT;
|
package/wrappers/channel.d.ts
CHANGED
|
@@ -51,4 +51,12 @@ export declare class Channel<Schema extends AnyPondSchema = AnyPondSchema> {
|
|
|
51
51
|
* Updates a user's assigns
|
|
52
52
|
*/
|
|
53
53
|
updateAssigns(userId: string, assigns: Partial<AssignsOf<Schema>>): this;
|
|
54
|
+
/**
|
|
55
|
+
* Resolves a user's data from any node in the distributed cluster
|
|
56
|
+
*/
|
|
57
|
+
getUserAcrossNodes(userId: string, timeoutMs?: number): Promise<UserData<PresenceOf<Schema>, AssignsOf<Schema>> | null>;
|
|
58
|
+
/**
|
|
59
|
+
* Requests removal of a user across all nodes in the distributed cluster
|
|
60
|
+
*/
|
|
61
|
+
requestUserRemoval(userId: string): this;
|
|
54
62
|
}
|
package/wrappers/channel.js
CHANGED
|
@@ -101,6 +101,19 @@ class Channel {
|
|
|
101
101
|
__classPrivateFieldGet(this, _Channel_engine, "f").updateAssigns(userId, assigns);
|
|
102
102
|
return this;
|
|
103
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolves a user's data from any node in the distributed cluster
|
|
106
|
+
*/
|
|
107
|
+
getUserAcrossNodes(userId, timeoutMs) {
|
|
108
|
+
return __classPrivateFieldGet(this, _Channel_engine, "f").getUserAcrossNodes(userId, timeoutMs);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Requests removal of a user across all nodes in the distributed cluster
|
|
112
|
+
*/
|
|
113
|
+
requestUserRemoval(userId) {
|
|
114
|
+
__classPrivateFieldGet(this, _Channel_engine, "f").requestUserRemoval(userId);
|
|
115
|
+
return this;
|
|
116
|
+
}
|
|
104
117
|
}
|
|
105
118
|
exports.Channel = Channel;
|
|
106
119
|
_Channel_engine = new WeakMap();
|