@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.
@@ -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 __awaiter(this, void 0, void 0, function* () {
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
@@ -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, _ChannelEngine_pubSubCLient, _ChannelEngine_presenceEngine, _ChannelEngine_users, _ChannelEngine_parentEngine, _ChannelEngine_subscribe, _ChannelEngine_getUsersFromRecipients, _ChannelEngine_buildSubscription, _ChannelEngine_removeUser, _ChannelEngine_initPubSub, _Channel_engine;
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(), _ChannelEngine_pubSubCLient = 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) {
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 __awaiter(this, void 0, void 0, function* () {
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);
@@ -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, _EndpointEngine_client, _EndpointEngine_joinChannel, _EndpointEngine_broadcastMessage, _EndpointEngine_retrieveChannel, _EndpointEngine_handleMessage, _EndpointEngine_readMessage, _EndpointEngine_buildError, _EndpointEngine_leaveChannel, _Endpoint_engine;
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, client) {
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(), _EndpointEngine_client = new WeakMap(), _EndpointEngine_instances = new WeakSet(), _EndpointEngine_joinChannel = function _EndpointEngine_joinChannel(channel, socket, joinParams, requestId) {
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)) // the connection is still upgraded, so we can send error messages
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.166",
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": {
@@ -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, _PondSocket_pubSubEngine, _PondSocket_socketServer, _PondSocket_middleware, _PondSocket_manageHeartbeat, _PondSocket_init;
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, db, redisUrl } = {}) {
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 client = __classPrivateFieldGet(this, _PondSocket_pubSubEngine, "f").buildClient(path);
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(), _PondSocket_pubSubEngine = new WeakMap(), _PondSocket_socketServer = new WeakMap(), _PondSocket_middleware = new WeakMap(), _PondSocket_instances = new WeakSet(), _PondSocket_manageHeartbeat = function _PondSocket_manageHeartbeat() {
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(): Promise<Record<string, PresenceType>>;
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(): Promise<Record<string, PresenceType>>;
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> {
@@ -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
- };