@eleven-am/pondsocket 0.1.166 → 0.1.168
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/abstractRequest.js +1 -14
- package/channel/channel.js +3 -44
- package/endpoint/endpoint.js +3 -11
- package/endpoint/endpoint.test.js +1 -2
- package/package.json +1 -2
- package/server/pondSocket.js +4 -18
- package/types.d.ts +2 -2
- package/pubSub/pubSubEngine.js +0 -150
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
3
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
4
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
@@ -51,11 +42,7 @@ class AbstractRequest {
|
|
|
51
42
|
return this._engine.getAssigns();
|
|
52
43
|
}
|
|
53
44
|
getPresence() {
|
|
54
|
-
return
|
|
55
|
-
const external = yield this._engine.getPubSubPresence();
|
|
56
|
-
const internal = this._engine.presenceEngine.getPresence();
|
|
57
|
-
return Object.assign(Object.assign({}, internal), external);
|
|
58
|
-
});
|
|
45
|
+
return this._engine.presenceEngine.getPresence();
|
|
59
46
|
}
|
|
60
47
|
/**
|
|
61
48
|
* @desc Parses the event and returns true if the event matches the path
|
package/channel/channel.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
3
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
4
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
@@ -30,7 +21,7 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
30
21
|
}
|
|
31
22
|
return t;
|
|
32
23
|
};
|
|
33
|
-
var _ChannelEngine_instances, _ChannelEngine_receiver,
|
|
24
|
+
var _ChannelEngine_instances, _ChannelEngine_receiver, _ChannelEngine_presenceEngine, _ChannelEngine_users, _ChannelEngine_parentEngine, _ChannelEngine_subscribe, _ChannelEngine_getUsersFromRecipients, _ChannelEngine_buildSubscription, _ChannelEngine_removeUser, _Channel_engine;
|
|
34
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
26
|
exports.Channel = exports.ChannelEngine = void 0;
|
|
36
27
|
const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
|
|
@@ -42,7 +33,6 @@ class ChannelEngine {
|
|
|
42
33
|
constructor(name, parent) {
|
|
43
34
|
_ChannelEngine_instances.add(this);
|
|
44
35
|
_ChannelEngine_receiver.set(this, void 0);
|
|
45
|
-
_ChannelEngine_pubSubCLient.set(this, void 0);
|
|
46
36
|
_ChannelEngine_presenceEngine.set(this, void 0);
|
|
47
37
|
_ChannelEngine_users.set(this, void 0);
|
|
48
38
|
_ChannelEngine_parentEngine.set(this, void 0);
|
|
@@ -50,8 +40,6 @@ class ChannelEngine {
|
|
|
50
40
|
__classPrivateFieldSet(this, _ChannelEngine_parentEngine, parent, "f");
|
|
51
41
|
__classPrivateFieldSet(this, _ChannelEngine_users, new Map(), "f");
|
|
52
42
|
__classPrivateFieldSet(this, _ChannelEngine_receiver, new pondsocket_common_1.Subject(), "f");
|
|
53
|
-
__classPrivateFieldSet(this, _ChannelEngine_pubSubCLient, parent.parent.getPubSubClient(), "f");
|
|
54
|
-
__classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_initPubSub).call(this);
|
|
55
43
|
}
|
|
56
44
|
/**
|
|
57
45
|
* @desc Gets the presence engine for the channel
|
|
@@ -179,7 +167,6 @@ class ChannelEngine {
|
|
|
179
167
|
event,
|
|
180
168
|
payload,
|
|
181
169
|
};
|
|
182
|
-
__classPrivateFieldGet(this, _ChannelEngine_pubSubCLient, "f").publish(recipient, channelEvent);
|
|
183
170
|
const recipients = __classPrivateFieldGet(this, _ChannelEngine_instances, "m", _ChannelEngine_getUsersFromRecipients).call(this, recipient, sender);
|
|
184
171
|
__classPrivateFieldGet(this, _ChannelEngine_receiver, "f").publish(Object.assign(Object.assign({}, channelEvent), { recipients }));
|
|
185
172
|
}
|
|
@@ -225,18 +212,9 @@ class ChannelEngine {
|
|
|
225
212
|
unsubscribeFrom(userId, channel) {
|
|
226
213
|
__classPrivateFieldGet(this, _ChannelEngine_parentEngine, "f").parent.unsubscribeFrom(userId, channel);
|
|
227
214
|
}
|
|
228
|
-
/**
|
|
229
|
-
* @desc Gets the presence from the pubSub client
|
|
230
|
-
*/
|
|
231
|
-
getPubSubPresence() {
|
|
232
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
-
const presence = yield __classPrivateFieldGet(this, _ChannelEngine_pubSubCLient, "f").getPresence(this.name);
|
|
234
|
-
return presence.reduce((acc, value) => Object.assign(acc, value), {});
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
215
|
}
|
|
238
216
|
exports.ChannelEngine = ChannelEngine;
|
|
239
|
-
_ChannelEngine_receiver = new WeakMap(),
|
|
217
|
+
_ChannelEngine_receiver = new WeakMap(), _ChannelEngine_presenceEngine = new WeakMap(), _ChannelEngine_users = new WeakMap(), _ChannelEngine_parentEngine = new WeakMap(), _ChannelEngine_instances = new WeakSet(), _ChannelEngine_subscribe = function _ChannelEngine_subscribe(userId, onMessage) {
|
|
240
218
|
const unsubscribe = __classPrivateFieldGet(this, _ChannelEngine_receiver, "f").subscribe((_a) => {
|
|
241
219
|
var { recipients } = _a, event = __rest(_a, ["recipients"]);
|
|
242
220
|
if (recipients.includes(userId)) {
|
|
@@ -299,21 +277,6 @@ _ChannelEngine_receiver = new WeakMap(), _ChannelEngine_pubSubCLient = new WeakM
|
|
|
299
277
|
}
|
|
300
278
|
unsubscribe();
|
|
301
279
|
cachedUser.subscriptions.delete(this.name);
|
|
302
|
-
}, _ChannelEngine_initPubSub = function _ChannelEngine_initPubSub() {
|
|
303
|
-
__classPrivateFieldGet(this, _ChannelEngine_pubSubCLient, "f").subscribeToPresence(this.name, () => {
|
|
304
|
-
if (__classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f")) {
|
|
305
|
-
return __classPrivateFieldGet(this, _ChannelEngine_presenceEngine, "f").getPresence();
|
|
306
|
-
}
|
|
307
|
-
return {};
|
|
308
|
-
});
|
|
309
|
-
__classPrivateFieldGet(this, _ChannelEngine_pubSubCLient, "f").subscribe(this.name, (recipients, data) => {
|
|
310
|
-
try {
|
|
311
|
-
this.sendMessage(pondsocket_common_1.SystemSender.CHANNEL, recipients, data.action, data.event, data.payload, data.requestId);
|
|
312
|
-
}
|
|
313
|
-
catch (error) {
|
|
314
|
-
// noop
|
|
315
|
-
}
|
|
316
|
-
});
|
|
317
280
|
};
|
|
318
281
|
class Channel {
|
|
319
282
|
constructor(engine) {
|
|
@@ -327,11 +290,7 @@ class Channel {
|
|
|
327
290
|
return __classPrivateFieldGet(this, _Channel_engine, "f").getAssigns();
|
|
328
291
|
}
|
|
329
292
|
getPresences() {
|
|
330
|
-
return
|
|
331
|
-
const external = yield __classPrivateFieldGet(this, _Channel_engine, "f").getPubSubPresence();
|
|
332
|
-
const internal = __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.getPresence();
|
|
333
|
-
return Object.assign(Object.assign({}, internal), external);
|
|
334
|
-
});
|
|
293
|
+
return __classPrivateFieldGet(this, _Channel_engine, "f").presenceEngine.getPresence();
|
|
335
294
|
}
|
|
336
295
|
getUserData(userId) {
|
|
337
296
|
return __classPrivateFieldGet(this, _Channel_engine, "f").getUserData(userId);
|
package/endpoint/endpoint.js
CHANGED
|
@@ -10,7 +10,7 @@ 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 _EndpointEngine_instances, _EndpointEngine_middleware, _EndpointEngine_lobbyEngines, _EndpointEngine_channels, _EndpointEngine_sockets, _EndpointEngine_parentEngine,
|
|
13
|
+
var _EndpointEngine_instances, _EndpointEngine_middleware, _EndpointEngine_lobbyEngines, _EndpointEngine_channels, _EndpointEngine_sockets, _EndpointEngine_parentEngine, _EndpointEngine_joinChannel, _EndpointEngine_broadcastMessage, _EndpointEngine_retrieveChannel, _EndpointEngine_handleMessage, _EndpointEngine_readMessage, _EndpointEngine_buildError, _EndpointEngine_leaveChannel, _Endpoint_engine;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.Endpoint = exports.EndpointEngine = void 0;
|
|
16
16
|
const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
|
|
@@ -22,20 +22,18 @@ const joinResponse_1 = require("../lobby/joinResponse");
|
|
|
22
22
|
const lobby_1 = require("../lobby/lobby");
|
|
23
23
|
const matcher_1 = require("../matcher/matcher");
|
|
24
24
|
class EndpointEngine {
|
|
25
|
-
constructor(parent
|
|
25
|
+
constructor(parent) {
|
|
26
26
|
_EndpointEngine_instances.add(this);
|
|
27
27
|
_EndpointEngine_middleware.set(this, void 0);
|
|
28
28
|
_EndpointEngine_lobbyEngines.set(this, void 0);
|
|
29
29
|
_EndpointEngine_channels.set(this, void 0);
|
|
30
30
|
_EndpointEngine_sockets.set(this, void 0);
|
|
31
31
|
_EndpointEngine_parentEngine.set(this, void 0);
|
|
32
|
-
_EndpointEngine_client.set(this, void 0);
|
|
33
32
|
__classPrivateFieldSet(this, _EndpointEngine_sockets, new Map(), "f");
|
|
34
33
|
__classPrivateFieldSet(this, _EndpointEngine_middleware, new middleware_1.Middleware(), "f");
|
|
35
34
|
__classPrivateFieldSet(this, _EndpointEngine_lobbyEngines, new Map(), "f");
|
|
36
35
|
__classPrivateFieldSet(this, _EndpointEngine_parentEngine, parent, "f");
|
|
37
36
|
__classPrivateFieldSet(this, _EndpointEngine_channels, new Map(), "f");
|
|
38
|
-
__classPrivateFieldSet(this, _EndpointEngine_client, client, "f");
|
|
39
37
|
}
|
|
40
38
|
get parent() {
|
|
41
39
|
return __classPrivateFieldGet(this, _EndpointEngine_parentEngine, "f");
|
|
@@ -164,15 +162,9 @@ class EndpointEngine {
|
|
|
164
162
|
sendMessage(socket, message) {
|
|
165
163
|
socket.send(JSON.stringify(message));
|
|
166
164
|
}
|
|
167
|
-
/**
|
|
168
|
-
* @desc Gets the PubSubClient for this endpoint
|
|
169
|
-
*/
|
|
170
|
-
getPubSubClient() {
|
|
171
|
-
return __classPrivateFieldGet(this, _EndpointEngine_client, "f");
|
|
172
|
-
}
|
|
173
165
|
}
|
|
174
166
|
exports.EndpointEngine = EndpointEngine;
|
|
175
|
-
_EndpointEngine_middleware = new WeakMap(), _EndpointEngine_lobbyEngines = new WeakMap(), _EndpointEngine_channels = new WeakMap(), _EndpointEngine_sockets = new WeakMap(), _EndpointEngine_parentEngine = new WeakMap(),
|
|
167
|
+
_EndpointEngine_middleware = new WeakMap(), _EndpointEngine_lobbyEngines = new WeakMap(), _EndpointEngine_channels = new WeakMap(), _EndpointEngine_sockets = new WeakMap(), _EndpointEngine_parentEngine = new WeakMap(), _EndpointEngine_instances = new WeakSet(), _EndpointEngine_joinChannel = function _EndpointEngine_joinChannel(channel, socket, joinParams, requestId) {
|
|
176
168
|
const cache = Object.assign(Object.assign({}, socket), { requestId, channelName: channel });
|
|
177
169
|
__classPrivateFieldGet(this, _EndpointEngine_middleware, "f").run(cache, joinParams, () => {
|
|
178
170
|
throw new pondError_1.EndpointError(`GatewayEngine: Channel ${channel} does not exist`, 404);
|
|
@@ -16,7 +16,6 @@ exports.createEndpointEngine = void 0;
|
|
|
16
16
|
const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
|
|
17
17
|
const superwstest_1 = __importDefault(require("superwstest"));
|
|
18
18
|
const pondSocket_1 = require("../server/pondSocket");
|
|
19
|
-
/* eslint-disable line-comment-position, no-inline-comments */
|
|
20
19
|
const createEndpointEngine = (socket) => ({
|
|
21
20
|
createChannel: jest.fn(),
|
|
22
21
|
listConnections: jest.fn(),
|
|
@@ -95,7 +94,7 @@ describe('endpoint', () => {
|
|
|
95
94
|
});
|
|
96
95
|
yield (0, superwstest_1.default)(server)
|
|
97
96
|
.ws('/api/socket')
|
|
98
|
-
.expectUpgrade((res) => expect(res.statusCode).toBe(101))
|
|
97
|
+
.expectUpgrade((res) => expect(res.statusCode).toBe(101))
|
|
99
98
|
.expectMessage(expect.objectContaining({
|
|
100
99
|
action: pondsocket_common_1.ServerActions.ERROR,
|
|
101
100
|
event: pondsocket_common_1.ErrorTypes.UNAUTHORIZED_CONNECTION,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eleven-am/pondsocket",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.168",
|
|
4
4
|
"description": "PondSocket is a fast simple socket server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"socket",
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@eleven-am/pondsocket-common": "^0.0.23",
|
|
38
|
-
"ioredis": "^5.4.1",
|
|
39
38
|
"ws": "^8.18.0"
|
|
40
39
|
},
|
|
41
40
|
"devDependencies": {
|
package/server/pondSocket.js
CHANGED
|
@@ -10,7 +10,7 @@ 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 _PondSocket_instances, _PondSocket_server,
|
|
13
|
+
var _PondSocket_instances, _PondSocket_server, _PondSocket_socketServer, _PondSocket_middleware, _PondSocket_manageHeartbeat, _PondSocket_init;
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.PondSocket = void 0;
|
|
16
16
|
const http_1 = require("http");
|
|
@@ -20,26 +20,15 @@ const middleware_1 = require("../abstracts/middleware");
|
|
|
20
20
|
const endpoint_1 = require("../endpoint/endpoint");
|
|
21
21
|
const response_1 = require("../endpoint/response");
|
|
22
22
|
const matcher_1 = require("../matcher/matcher");
|
|
23
|
-
const pubSubEngine_1 = require("../pubSub/pubSubEngine");
|
|
24
23
|
class PondSocket {
|
|
25
|
-
constructor({ server, socketServer
|
|
24
|
+
constructor({ server, socketServer } = {}) {
|
|
26
25
|
_PondSocket_instances.add(this);
|
|
27
26
|
_PondSocket_server.set(this, void 0);
|
|
28
|
-
_PondSocket_pubSubEngine.set(this, void 0);
|
|
29
27
|
_PondSocket_socketServer.set(this, void 0);
|
|
30
28
|
_PondSocket_middleware.set(this, void 0);
|
|
31
29
|
__classPrivateFieldSet(this, _PondSocket_server, server !== null && server !== void 0 ? server : new http_1.Server(), "f");
|
|
32
30
|
__classPrivateFieldSet(this, _PondSocket_socketServer, socketServer !== null && socketServer !== void 0 ? socketServer : new ws_1.WebSocketServer({ noServer: true }), "f");
|
|
33
31
|
__classPrivateFieldSet(this, _PondSocket_middleware, new middleware_1.Middleware(), "f");
|
|
34
|
-
if (redisUrl && db !== undefined) {
|
|
35
|
-
__classPrivateFieldSet(this, _PondSocket_pubSubEngine, new pubSubEngine_1.PubSubEngine({
|
|
36
|
-
redisUrl,
|
|
37
|
-
db,
|
|
38
|
-
}), "f");
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
__classPrivateFieldSet(this, _PondSocket_pubSubEngine, new pubSubEngine_1.PubSubEngine(), "f");
|
|
42
|
-
}
|
|
43
32
|
__classPrivateFieldGet(this, _PondSocket_instances, "m", _PondSocket_init).call(this);
|
|
44
33
|
}
|
|
45
34
|
/**
|
|
@@ -73,8 +62,7 @@ class PondSocket {
|
|
|
73
62
|
* })
|
|
74
63
|
*/
|
|
75
64
|
createEndpoint(path, handler) {
|
|
76
|
-
const
|
|
77
|
-
const endpoint = new endpoint_1.EndpointEngine(this, client);
|
|
65
|
+
const endpoint = new endpoint_1.EndpointEngine(this);
|
|
78
66
|
__classPrivateFieldGet(this, _PondSocket_middleware, "f").use((req, socket, next) => {
|
|
79
67
|
const event = (0, matcher_1.parseAddress)(path, req.address);
|
|
80
68
|
if (event) {
|
|
@@ -88,7 +76,7 @@ class PondSocket {
|
|
|
88
76
|
}
|
|
89
77
|
}
|
|
90
78
|
exports.PondSocket = PondSocket;
|
|
91
|
-
_PondSocket_server = new WeakMap(),
|
|
79
|
+
_PondSocket_server = new WeakMap(), _PondSocket_socketServer = new WeakMap(), _PondSocket_middleware = new WeakMap(), _PondSocket_instances = new WeakSet(), _PondSocket_manageHeartbeat = function _PondSocket_manageHeartbeat() {
|
|
92
80
|
__classPrivateFieldGet(this, _PondSocket_socketServer, "f").on('connection', (socket) => {
|
|
93
81
|
socket.on('pong', () => {
|
|
94
82
|
socket.isAlive = true;
|
|
@@ -107,12 +95,10 @@ _PondSocket_server = new WeakMap(), _PondSocket_pubSubEngine = new WeakMap(), _P
|
|
|
107
95
|
const timeout = __classPrivateFieldGet(this, _PondSocket_instances, "m", _PondSocket_manageHeartbeat).call(this);
|
|
108
96
|
__classPrivateFieldGet(this, _PondSocket_server, "f").on('error', (error) => {
|
|
109
97
|
clearInterval(timeout);
|
|
110
|
-
__classPrivateFieldGet(this, _PondSocket_pubSubEngine, "f").close();
|
|
111
98
|
throw new Error(error.message);
|
|
112
99
|
});
|
|
113
100
|
__classPrivateFieldGet(this, _PondSocket_server, "f").on('close', () => {
|
|
114
101
|
clearInterval(timeout);
|
|
115
|
-
__classPrivateFieldGet(this, _PondSocket_pubSubEngine, "f").close();
|
|
116
102
|
});
|
|
117
103
|
__classPrivateFieldGet(this, _PondSocket_server, "f").on('upgrade', (req, socket, head) => {
|
|
118
104
|
const clientId = req.headers['sec-websocket-key'];
|
package/types.d.ts
CHANGED
|
@@ -196,7 +196,7 @@ export declare class Channel<EventType extends PondEventMap = PondEventMap, Pres
|
|
|
196
196
|
/**
|
|
197
197
|
* @desc Gets the current presence data for the channel.
|
|
198
198
|
*/
|
|
199
|
-
getPresences():
|
|
199
|
+
getPresences(): Record<string, PresenceType>;
|
|
200
200
|
|
|
201
201
|
/**
|
|
202
202
|
* @desc Gets the assign date for a specific user.
|
|
@@ -290,7 +290,7 @@ export declare class AbstractRequest<Path extends string, PresenceType extends P
|
|
|
290
290
|
|
|
291
291
|
assigns: Record<string, AssignType>;
|
|
292
292
|
|
|
293
|
-
getPresence():
|
|
293
|
+
getPresence(): Record<string, PresenceType>;
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
export declare class JoinRequest<Path extends string, PresenceType extends PondPresence = PondPresence, AssignType extends PondAssigns = PondAssigns> extends AbstractRequest<Path, PresenceType, AssignType> {
|
package/pubSub/pubSubEngine.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
14
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
15
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
16
|
-
};
|
|
17
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
18
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
19
|
-
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");
|
|
20
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
|
-
};
|
|
22
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
23
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
24
|
-
};
|
|
25
|
-
var _PubSubEngine_instances, _PubSubEngine_subscriber, _PubSubEngine_redis, _PubSubEngine_pubSub, _PubSubEngine_id, _PubSubEngine_expirationTime, _PubSubEngine_heartbeatInterval, _PubSubEngine_interval, _PubSubEngine_getPresence, _PubSubEngine_registerInstance, _PubSubEngine_getActiveInstances, _PubSubEngine_subscribeToChannel, _PubSubEngine_getPresenceFromInstance, _PubSubEngine_subscribeToPresence, _PubSubEngine_subscribe, _PubSubEngine_publish;
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.PubSubEngine = void 0;
|
|
28
|
-
const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
|
|
29
|
-
const ioredis_1 = __importDefault(require("ioredis"));
|
|
30
|
-
class PubSubEngine {
|
|
31
|
-
constructor(options = null) {
|
|
32
|
-
_PubSubEngine_instances.add(this);
|
|
33
|
-
_PubSubEngine_subscriber.set(this, void 0);
|
|
34
|
-
_PubSubEngine_redis.set(this, void 0);
|
|
35
|
-
_PubSubEngine_pubSub.set(this, void 0);
|
|
36
|
-
_PubSubEngine_id.set(this, (0, pondsocket_common_1.uuid)());
|
|
37
|
-
_PubSubEngine_expirationTime.set(this, 60);
|
|
38
|
-
_PubSubEngine_heartbeatInterval.set(this, 5000);
|
|
39
|
-
_PubSubEngine_interval.set(this, void 0);
|
|
40
|
-
__classPrivateFieldSet(this, _PubSubEngine_subscriber, new pondsocket_common_1.Subject(), "f");
|
|
41
|
-
__classPrivateFieldSet(this, _PubSubEngine_redis, options ? new ioredis_1.default(options.redisUrl, { db: options.db }) : null, "f");
|
|
42
|
-
__classPrivateFieldSet(this, _PubSubEngine_pubSub, options ? new ioredis_1.default(options.redisUrl, { db: options.db }) : null, "f");
|
|
43
|
-
__classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_subscribeToChannel).call(this);
|
|
44
|
-
__classPrivateFieldSet(this, _PubSubEngine_interval, setInterval(() => __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_registerInstance).call(this), __classPrivateFieldGet(this, _PubSubEngine_heartbeatInterval, "f")), "f");
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @desc Builds a client for the given endpoint
|
|
48
|
-
* @param endpoint - the endpoint to build the client for
|
|
49
|
-
*/
|
|
50
|
-
buildClient(endpoint) {
|
|
51
|
-
const subscribeToPresence = __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_subscribeToPresence).bind(this, endpoint);
|
|
52
|
-
const getPresence = __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_getPresence).bind(this, endpoint);
|
|
53
|
-
const subscribe = __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_subscribe).bind(this, endpoint);
|
|
54
|
-
const publish = __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_publish).bind(this, endpoint);
|
|
55
|
-
const client = {
|
|
56
|
-
getPresence,
|
|
57
|
-
publish,
|
|
58
|
-
subscribeToPresence,
|
|
59
|
-
subscribe,
|
|
60
|
-
};
|
|
61
|
-
return client;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* @desc Closes the connection
|
|
65
|
-
*/
|
|
66
|
-
close() {
|
|
67
|
-
var _a, _b;
|
|
68
|
-
clearInterval(__classPrivateFieldGet(this, _PubSubEngine_interval, "f"));
|
|
69
|
-
(_a = __classPrivateFieldGet(this, _PubSubEngine_redis, "f")) === null || _a === void 0 ? void 0 : _a.quit();
|
|
70
|
-
(_b = __classPrivateFieldGet(this, _PubSubEngine_pubSub, "f")) === null || _b === void 0 ? void 0 : _b.quit();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
exports.PubSubEngine = PubSubEngine;
|
|
74
|
-
_PubSubEngine_subscriber = new WeakMap(), _PubSubEngine_redis = new WeakMap(), _PubSubEngine_pubSub = new WeakMap(), _PubSubEngine_id = new WeakMap(), _PubSubEngine_expirationTime = new WeakMap(), _PubSubEngine_heartbeatInterval = new WeakMap(), _PubSubEngine_interval = new WeakMap(), _PubSubEngine_instances = new WeakSet(), _PubSubEngine_getPresence = function _PubSubEngine_getPresence(endpoint, channel) {
|
|
75
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
76
|
-
const instances = yield __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_getActiveInstances).call(this);
|
|
77
|
-
return Promise.all(instances.map((instance) => __classPrivateFieldGet(this, _PubSubEngine_instances, "m", _PubSubEngine_getPresenceFromInstance).call(this, endpoint, channel, instance)));
|
|
78
|
-
});
|
|
79
|
-
}, _PubSubEngine_registerInstance = function _PubSubEngine_registerInstance() {
|
|
80
|
-
if (!__classPrivateFieldGet(this, _PubSubEngine_redis, "f")) {
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
__classPrivateFieldGet(this, _PubSubEngine_redis, "f").setex(`app:instance:${__classPrivateFieldGet(this, _PubSubEngine_id, "f")}`, __classPrivateFieldGet(this, _PubSubEngine_expirationTime, "f"), 'active');
|
|
84
|
-
}, _PubSubEngine_getActiveInstances = function _PubSubEngine_getActiveInstances() {
|
|
85
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
86
|
-
if (!__classPrivateFieldGet(this, _PubSubEngine_redis, "f")) {
|
|
87
|
-
return [];
|
|
88
|
-
}
|
|
89
|
-
const keys = yield __classPrivateFieldGet(this, _PubSubEngine_redis, "f").keys('app:instance:*');
|
|
90
|
-
return keys.map((key) => key.replace('app:instance:', ''))
|
|
91
|
-
.filter((key) => key !== __classPrivateFieldGet(this, _PubSubEngine_id, "f"));
|
|
92
|
-
});
|
|
93
|
-
}, _PubSubEngine_subscribeToChannel = function _PubSubEngine_subscribeToChannel() {
|
|
94
|
-
if (!__classPrivateFieldGet(this, _PubSubEngine_pubSub, "f")) {
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
__classPrivateFieldGet(this, _PubSubEngine_pubSub, "f").subscribe('app:messages', (err) => {
|
|
98
|
-
if (err) {
|
|
99
|
-
console.error('Failed to subscribe: ', err);
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
__classPrivateFieldGet(this, _PubSubEngine_pubSub, "f").on('message', (channel, message) => {
|
|
103
|
-
const data = pondsocket_common_1.pubSubEventSchema.parse(JSON.parse(message));
|
|
104
|
-
if (data.pubSubId === __classPrivateFieldGet(this, _PubSubEngine_id, "f")) {
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
__classPrivateFieldGet(this, _PubSubEngine_subscriber, "f").publish(data);
|
|
108
|
-
});
|
|
109
|
-
}, _PubSubEngine_getPresenceFromInstance = function _PubSubEngine_getPresenceFromInstance(endpoint, channel, instance) {
|
|
110
|
-
return new Promise((resolve) => {
|
|
111
|
-
const unsubscribe = __classPrivateFieldGet(this, _PubSubEngine_subscriber, "f").subscribe((data) => {
|
|
112
|
-
if (data.endpoint === endpoint && data.channel === channel && data.event === pondsocket_common_1.PubSubEvents.PRESENCE && data.pubSubId === instance) {
|
|
113
|
-
resolve(data.presence);
|
|
114
|
-
unsubscribe();
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
}, _PubSubEngine_subscribeToPresence = function _PubSubEngine_subscribeToPresence(endpoint, channel, handler) {
|
|
119
|
-
return __classPrivateFieldGet(this, _PubSubEngine_subscriber, "f").subscribe((data) => {
|
|
120
|
-
var _a;
|
|
121
|
-
if (data.endpoint === endpoint && data.channel === channel && data.event === pondsocket_common_1.PubSubEvents.GET_PRESENCE) {
|
|
122
|
-
const presence = handler();
|
|
123
|
-
const message = {
|
|
124
|
-
event: pondsocket_common_1.PubSubEvents.PRESENCE,
|
|
125
|
-
pubSubId: __classPrivateFieldGet(this, _PubSubEngine_id, "f"),
|
|
126
|
-
endpoint,
|
|
127
|
-
channel,
|
|
128
|
-
presence,
|
|
129
|
-
};
|
|
130
|
-
(_a = __classPrivateFieldGet(this, _PubSubEngine_pubSub, "f")) === null || _a === void 0 ? void 0 : _a.publish('app:messages', JSON.stringify(message));
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
}, _PubSubEngine_subscribe = function _PubSubEngine_subscribe(endpoint, channel, handler) {
|
|
134
|
-
return __classPrivateFieldGet(this, _PubSubEngine_subscriber, "f").subscribe((data) => {
|
|
135
|
-
if (data.endpoint === endpoint && data.channel === channel && data.event === pondsocket_common_1.PubSubEvents.MESSAGE) {
|
|
136
|
-
handler(data.recipient, data.message);
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
}, _PubSubEngine_publish = function _PubSubEngine_publish(endpoint, recipients, data) {
|
|
140
|
-
var _a;
|
|
141
|
-
const message = {
|
|
142
|
-
event: pondsocket_common_1.PubSubEvents.MESSAGE,
|
|
143
|
-
pubSubId: __classPrivateFieldGet(this, _PubSubEngine_id, "f"),
|
|
144
|
-
endpoint,
|
|
145
|
-
channel: data.channelName,
|
|
146
|
-
message: data,
|
|
147
|
-
recipient: recipients,
|
|
148
|
-
};
|
|
149
|
-
(_a = __classPrivateFieldGet(this, _PubSubEngine_redis, "f")) === null || _a === void 0 ? void 0 : _a.publish('app:messages', JSON.stringify(message));
|
|
150
|
-
};
|