@eleven-am/pondsocket 0.1.168 → 0.1.170

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.
Files changed (41) hide show
  1. package/abstracts/middleware.js +40 -17
  2. package/abstracts/redisClient.js +278 -0
  3. package/engines/channelEngine.js +163 -0
  4. package/engines/endpointEngine.js +163 -0
  5. package/engines/lobbyEngine.js +79 -0
  6. package/errors/httpError.js +11 -0
  7. package/index.js +2 -2
  8. package/managers/distributedManager.js +115 -0
  9. package/managers/localManager.js +41 -0
  10. package/managers/manager.js +219 -0
  11. package/managers/managerFactory.js +31 -0
  12. package/package.json +24 -14
  13. package/requests/eventRequest.js +51 -0
  14. package/requests/joinRequest.js +56 -0
  15. package/responses/connectionResponse.js +89 -0
  16. package/{channel → responses}/eventResponse.js +8 -79
  17. package/{lobby → responses}/joinResponse.js +25 -84
  18. package/server/{pondSocket.js → server.js} +55 -55
  19. package/types.d.ts +33 -106
  20. package/wrappers/channel.js +70 -0
  21. package/wrappers/endpoint.js +32 -0
  22. package/wrappers/pondChannel.js +48 -0
  23. package/abstracts/abstractRequest.js +0 -57
  24. package/abstracts/abstractRequest.test.js +0 -48
  25. package/abstracts/middleware.test.js +0 -70
  26. package/channel/channel.js +0 -351
  27. package/channel/channel.test.js +0 -435
  28. package/channel/eventRequest.js +0 -25
  29. package/channel/eventRequest.test.js +0 -30
  30. package/channel/eventResponse.test.js +0 -175
  31. package/endpoint/endpoint.js +0 -299
  32. package/endpoint/endpoint.test.js +0 -299
  33. package/endpoint/response.js +0 -129
  34. package/errors/pondError.js +0 -28
  35. package/lobby/JoinRequest.test.js +0 -50
  36. package/lobby/JoinResponse.test.js +0 -142
  37. package/lobby/joinRequest.js +0 -43
  38. package/lobby/lobby.js +0 -186
  39. package/matcher/matcher.test.js +0 -90
  40. package/presence/presence.js +0 -112
  41. package/presence/presenceEngine.test.js +0 -129
@@ -0,0 +1,31 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ManagerFactory = void 0;
13
+ const distributedManager_1 = require("./distributedManager");
14
+ const localManager_1 = require("./localManager");
15
+ class ManagerFactory {
16
+ static create(channelId, clientFactory, onClose) {
17
+ return __awaiter(this, void 0, void 0, function* () {
18
+ let manager;
19
+ if (clientFactory) {
20
+ const client = clientFactory(channelId);
21
+ manager = new distributedManager_1.DistributedManager(client);
22
+ }
23
+ else {
24
+ manager = new localManager_1.LocalManager(channelId);
25
+ }
26
+ yield manager.initialize(onClose);
27
+ return manager;
28
+ });
29
+ }
30
+ }
31
+ exports.ManagerFactory = ManagerFactory;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eleven-am/pondsocket",
3
- "version": "0.1.168",
3
+ "version": "0.1.170",
4
4
  "description": "PondSocket is a fast simple socket server",
5
5
  "keywords": [
6
6
  "socket",
@@ -20,8 +20,8 @@
20
20
  "build": "rimraf dist && tsc && npm run remove",
21
21
  "lint": "eslint --ext .ts src",
22
22
  "lint:fix": "eslint --fix --ext .ts src",
23
- "remove": "rm dist/types.js dist/distIndex.js",
24
- "copy": "cp src/types.ts dist/types.d.ts && cp src/distIndex.ts dist/index.d.ts && cp package.json dist && cp README.md dist && cp LICENSE dist",
23
+ "remove": "rm -r dist/tests && rm dist/distIndex.js",
24
+ "copy": "cp src/types.d.ts dist/types.d.ts && cp src/distIndex.ts dist/index.d.ts && cp package.json dist && cp README.md dist && cp LICENSE dist",
25
25
  "push": "npm version patch && npm run copy && cd dist && npm publish && cd ..",
26
26
  "pipeline": "npm run lint && npm run test && npm run build && npm run push"
27
27
  },
@@ -34,23 +34,33 @@
34
34
  "url": "git+https://github.com/Eleven-am/pondSocket.git"
35
35
  },
36
36
  "dependencies": {
37
- "@eleven-am/pondsocket-common": "^0.0.23",
37
+ "@eleven-am/pondsocket-common": "^0.0.24",
38
+ "ioredis": "^5.4.1",
38
39
  "ws": "^8.18.0"
39
40
  },
40
41
  "devDependencies": {
41
- "@types/jest": "^29.5.12",
42
- "@types/node": "^20.14.11",
43
- "@types/websocket": "^1.0.10",
44
- "@types/ws": "^8.5.11",
45
- "@typescript-eslint/eslint-plugin": "^7.16.1",
42
+ "@stylistic/eslint-plugin-ts": "^2.8.0",
43
+ "@types/jest": "^29.5.13",
44
+ "@types/node": "^22.7.4",
45
+ "@types/ws": "^8.5.12",
46
+ "@typescript-eslint/eslint-plugin": "^8.8.0",
47
+ "@typescript-eslint/parser": "^8.8.0",
46
48
  "eslint": "^8.57.0",
47
- "eslint-plugin-file-progress": "^1.4.0",
48
- "eslint-plugin-import": "^2.29.1",
49
+ "eslint-config-prettier": "^9.1.0",
50
+ "eslint-import-resolver-node": "^0.3.9",
51
+ "eslint-plugin-file-progress": "^1.5.0",
52
+ "eslint-plugin-import": "^2.30.0",
53
+ "eslint-plugin-prettier": "^5.2.1",
49
54
  "jest": "^29.7.0",
50
- "superwstest": "^2.0.4",
51
- "ts-jest": "^29.2.3",
55
+ "nodemon": "^3.1.7",
56
+ "prettier": "^3.3.3",
57
+ "source-map-support": "^0.5.21",
58
+ "supertest": "^7.0.0",
59
+ "ts-jest": "^29.2.5",
60
+ "ts-loader": "^9.5.1",
52
61
  "ts-node": "^10.9.2",
53
- "typescript": "^5.5.3"
62
+ "tsconfig-paths": "^4.2.0",
63
+ "typescript": "^5.6.2"
54
64
  },
55
65
  "jest": {
56
66
  "moduleFileExtensions": [
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _EventRequest_event, _EventRequest_engine, _EventRequest_params;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.EventRequest = void 0;
16
+ const channel_1 = require("../wrappers/channel");
17
+ class EventRequest {
18
+ constructor(event, params, engine) {
19
+ _EventRequest_event.set(this, void 0);
20
+ _EventRequest_engine.set(this, void 0);
21
+ _EventRequest_params.set(this, void 0);
22
+ __classPrivateFieldSet(this, _EventRequest_event, event, "f");
23
+ __classPrivateFieldSet(this, _EventRequest_params, params, "f");
24
+ __classPrivateFieldSet(this, _EventRequest_engine, engine, "f");
25
+ }
26
+ get event() {
27
+ return {
28
+ event: __classPrivateFieldGet(this, _EventRequest_event, "f").event,
29
+ query: __classPrivateFieldGet(this, _EventRequest_params, "f").query,
30
+ params: __classPrivateFieldGet(this, _EventRequest_params, "f").params,
31
+ payload: __classPrivateFieldGet(this, _EventRequest_event, "f").payload,
32
+ };
33
+ }
34
+ get channelName() {
35
+ return __classPrivateFieldGet(this, _EventRequest_engine, "f").name;
36
+ }
37
+ get channel() {
38
+ return new channel_1.Channel(__classPrivateFieldGet(this, _EventRequest_engine, "f"));
39
+ }
40
+ get presences() {
41
+ return __classPrivateFieldGet(this, _EventRequest_engine, "f").getPresence();
42
+ }
43
+ get assigns() {
44
+ return __classPrivateFieldGet(this, _EventRequest_engine, "f").getAssigns();
45
+ }
46
+ get user() {
47
+ return __classPrivateFieldGet(this, _EventRequest_engine, "f").getUser(__classPrivateFieldGet(this, _EventRequest_event, "f").sender);
48
+ }
49
+ }
50
+ exports.EventRequest = EventRequest;
51
+ _EventRequest_event = new WeakMap(), _EventRequest_engine = new WeakMap(), _EventRequest_params = new WeakMap();
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _JoinRequest_options, _JoinRequest_engine;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.JoinRequest = void 0;
16
+ const channel_1 = require("../wrappers/channel");
17
+ class JoinRequest {
18
+ constructor(options, channel) {
19
+ _JoinRequest_options.set(this, void 0);
20
+ _JoinRequest_engine.set(this, void 0);
21
+ __classPrivateFieldSet(this, _JoinRequest_options, options, "f");
22
+ __classPrivateFieldSet(this, _JoinRequest_engine, channel, "f");
23
+ }
24
+ get event() {
25
+ return {
26
+ event: __classPrivateFieldGet(this, _JoinRequest_engine, "f").name,
27
+ query: __classPrivateFieldGet(this, _JoinRequest_options, "f").params.query,
28
+ params: __classPrivateFieldGet(this, _JoinRequest_options, "f").params.params,
29
+ payload: __classPrivateFieldGet(this, _JoinRequest_options, "f").joinParams,
30
+ };
31
+ }
32
+ get channelName() {
33
+ return __classPrivateFieldGet(this, _JoinRequest_engine, "f").name;
34
+ }
35
+ get channel() {
36
+ return new channel_1.Channel(__classPrivateFieldGet(this, _JoinRequest_engine, "f"));
37
+ }
38
+ get presences() {
39
+ return __classPrivateFieldGet(this, _JoinRequest_engine, "f").getPresence();
40
+ }
41
+ get assigns() {
42
+ return __classPrivateFieldGet(this, _JoinRequest_engine, "f").getAssigns();
43
+ }
44
+ get user() {
45
+ return {
46
+ id: __classPrivateFieldGet(this, _JoinRequest_options, "f").clientId,
47
+ assigns: __classPrivateFieldGet(this, _JoinRequest_options, "f").assigns,
48
+ presence: {},
49
+ };
50
+ }
51
+ get joinParams() {
52
+ return __classPrivateFieldGet(this, _JoinRequest_options, "f").joinParams;
53
+ }
54
+ }
55
+ exports.JoinRequest = JoinRequest;
56
+ _JoinRequest_options = new WeakMap(), _JoinRequest_engine = new WeakMap();
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
3
+ if (kind === "m") throw new TypeError("Private method is not writable");
4
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
5
+ 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");
6
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
7
+ };
8
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
9
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
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
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
12
+ };
13
+ var _ConnectionResponse_instances, _ConnectionResponse_executed, _ConnectionResponse_assigns, _ConnectionResponse_clientId, _ConnectionResponse_engine, _ConnectionResponse_params, _ConnectionResponse_webSocketServer, _ConnectionResponse_performChecks;
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ConnectionResponse = void 0;
16
+ const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
17
+ const httpError_1 = require("../errors/httpError");
18
+ class ConnectionResponse {
19
+ constructor(clientId, { engine, params, webSocketServer }) {
20
+ _ConnectionResponse_instances.add(this);
21
+ _ConnectionResponse_executed.set(this, void 0);
22
+ _ConnectionResponse_assigns.set(this, void 0);
23
+ _ConnectionResponse_clientId.set(this, void 0);
24
+ _ConnectionResponse_engine.set(this, void 0);
25
+ _ConnectionResponse_params.set(this, void 0);
26
+ _ConnectionResponse_webSocketServer.set(this, void 0);
27
+ __classPrivateFieldSet(this, _ConnectionResponse_webSocketServer, webSocketServer, "f");
28
+ __classPrivateFieldSet(this, _ConnectionResponse_clientId, clientId, "f");
29
+ __classPrivateFieldSet(this, _ConnectionResponse_executed, false, "f");
30
+ __classPrivateFieldSet(this, _ConnectionResponse_engine, engine, "f");
31
+ __classPrivateFieldSet(this, _ConnectionResponse_params, params, "f");
32
+ __classPrivateFieldSet(this, _ConnectionResponse_assigns, {}, "f");
33
+ }
34
+ assign(assigns) {
35
+ if (!__classPrivateFieldGet(this, _ConnectionResponse_executed, "f")) {
36
+ __classPrivateFieldSet(this, _ConnectionResponse_assigns, Object.assign(Object.assign({}, __classPrivateFieldGet(this, _ConnectionResponse_assigns, "f")), assigns), "f");
37
+ }
38
+ else {
39
+ const user = __classPrivateFieldGet(this, _ConnectionResponse_engine, "f").getUser(__classPrivateFieldGet(this, _ConnectionResponse_clientId, "f"));
40
+ user.assigns = Object.assign(Object.assign({}, user.assigns), assigns);
41
+ }
42
+ return this;
43
+ }
44
+ accept() {
45
+ __classPrivateFieldGet(this, _ConnectionResponse_instances, "m", _ConnectionResponse_performChecks).call(this);
46
+ __classPrivateFieldGet(this, _ConnectionResponse_webSocketServer, "f").handleUpgrade(__classPrivateFieldGet(this, _ConnectionResponse_params, "f").request, __classPrivateFieldGet(this, _ConnectionResponse_params, "f").socket, __classPrivateFieldGet(this, _ConnectionResponse_params, "f").head, (ws) => {
47
+ const cache = {
48
+ clientId: __classPrivateFieldGet(this, _ConnectionResponse_clientId, "f"),
49
+ subscriptions: new Set(),
50
+ assigns: __classPrivateFieldGet(this, _ConnectionResponse_assigns, "f"),
51
+ socket: ws,
52
+ };
53
+ __classPrivateFieldGet(this, _ConnectionResponse_webSocketServer, "f").emit('connection', ws);
54
+ __classPrivateFieldGet(this, _ConnectionResponse_engine, "f").manageSocket(cache);
55
+ });
56
+ return this;
57
+ }
58
+ decline(message, errorCode) {
59
+ __classPrivateFieldGet(this, _ConnectionResponse_instances, "m", _ConnectionResponse_performChecks).call(this);
60
+ const code = errorCode || 400;
61
+ const { socket } = __classPrivateFieldGet(this, _ConnectionResponse_params, "f");
62
+ const newMessage = message || 'Unauthorized connection';
63
+ socket.write(`HTTP/1.1 ${code} ${newMessage}\r\n\r\n`);
64
+ socket.destroy();
65
+ return this;
66
+ }
67
+ reply(event, payload) {
68
+ if (!__classPrivateFieldGet(this, _ConnectionResponse_executed, "f")) {
69
+ throw new httpError_1.HttpError(400, 'Connection has not been accepted');
70
+ }
71
+ const { socket } = __classPrivateFieldGet(this, _ConnectionResponse_engine, "f").getUser(__classPrivateFieldGet(this, _ConnectionResponse_clientId, "f"));
72
+ const message = {
73
+ event,
74
+ payload,
75
+ action: pondsocket_common_1.ServerActions.BROADCAST,
76
+ requestId: __classPrivateFieldGet(this, _ConnectionResponse_params, "f").requestId,
77
+ channelName: pondsocket_common_1.SystemSender.ENDPOINT,
78
+ };
79
+ __classPrivateFieldGet(this, _ConnectionResponse_engine, "f").sendMessage(socket, message);
80
+ return this;
81
+ }
82
+ }
83
+ exports.ConnectionResponse = ConnectionResponse;
84
+ _ConnectionResponse_executed = new WeakMap(), _ConnectionResponse_assigns = new WeakMap(), _ConnectionResponse_clientId = new WeakMap(), _ConnectionResponse_engine = new WeakMap(), _ConnectionResponse_params = new WeakMap(), _ConnectionResponse_webSocketServer = new WeakMap(), _ConnectionResponse_instances = new WeakSet(), _ConnectionResponse_performChecks = function _ConnectionResponse_performChecks() {
85
+ if (__classPrivateFieldGet(this, _ConnectionResponse_executed, "f")) {
86
+ throw new httpError_1.HttpError(400, 'Response has already been executed');
87
+ }
88
+ __classPrivateFieldSet(this, _ConnectionResponse_executed, true, "f");
89
+ };
@@ -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 _EventResponse_instances, _EventResponse_event, _EventResponse_engine, _EventResponse_requestId, _EventResponse_manageAssigns, _EventResponse_sendMessage;
13
+ var _EventResponse_instances, _EventResponse_event, _EventResponse_engine, _EventResponse_requestId, _EventResponse_sendMessage;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.EventResponse = void 0;
16
16
  const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
@@ -24,116 +24,45 @@ class EventResponse {
24
24
  __classPrivateFieldSet(this, _EventResponse_engine, engine, "f");
25
25
  __classPrivateFieldSet(this, _EventResponse_requestId, event.requestId, "f");
26
26
  }
27
- /**
28
- * @desc Assigns data to the client
29
- * @param assigns - the data to assign to the client
30
- */
31
27
  assign(assigns) {
32
- __classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_manageAssigns).call(this, assigns);
28
+ __classPrivateFieldGet(this, _EventResponse_engine, "f").updateAssigns(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, assigns);
33
29
  return this;
34
30
  }
35
- /**
36
- * @desc Emits a direct message to the client
37
- * @param event - the event name
38
- * @param payload - the payload to send
39
- */
40
31
  reply(event, payload) {
41
32
  __classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(pondsocket_common_1.SystemSender.CHANNEL, [__classPrivateFieldGet(this, _EventResponse_event, "f").sender], pondsocket_common_1.ServerActions.SYSTEM, event, payload, __classPrivateFieldGet(this, _EventResponse_requestId, "f"));
42
33
  return this;
43
34
  }
44
- /**
45
- * @desc Sends a message to all clients in the channel
46
- * @param event - the event to send
47
- * @param payload - the payload to send
48
- */
49
35
  broadcast(event, payload) {
50
36
  __classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_sendMessage).call(this, pondsocket_common_1.ChannelReceiver.ALL_USERS, event, payload);
51
37
  return this;
52
38
  }
53
- /**
54
- * @desc Sends a message to all clients in the channel except the client making the request
55
- * @param event - the event to send
56
- * @param payload - the payload to send
57
- */
58
39
  broadcastFrom(event, payload) {
59
40
  __classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_sendMessage).call(this, pondsocket_common_1.ChannelReceiver.ALL_EXCEPT_SENDER, event, payload);
60
41
  return this;
61
42
  }
62
- /**
63
- * @desc Sends a message to a set of clients in the channel
64
- * @param event - the event to send
65
- * @param payload - the payload to send
66
- * @param userIds - the ids of the clients to send the message to
67
- */
68
43
  broadcastTo(event, payload, userIds) {
69
44
  const ids = Array.isArray(userIds) ? userIds : [userIds];
70
45
  __classPrivateFieldGet(this, _EventResponse_instances, "m", _EventResponse_sendMessage).call(this, ids, event, payload);
71
46
  return this;
72
47
  }
73
- /**
74
- * @desc Tracks a user's presence in the channel
75
- * @param presence - the initial presence data
76
- * @param userId - the id of the user to track
77
- */
78
48
  trackPresence(presence, userId = __classPrivateFieldGet(this, _EventResponse_event, "f").sender) {
79
- __classPrivateFieldGet(this, _EventResponse_engine, "f").presenceEngine.trackPresence(userId, presence);
49
+ __classPrivateFieldGet(this, _EventResponse_engine, "f").trackPresence(userId, presence);
80
50
  return this;
81
51
  }
82
- /**
83
- * @desc Updates a user's presence in the channel
84
- * @param presence - the updated presence data
85
- * @param userId - the id of the user to update
86
- */
87
52
  updatePresence(presence, userId = __classPrivateFieldGet(this, _EventResponse_event, "f").sender) {
88
- __classPrivateFieldGet(this, _EventResponse_engine, "f").presenceEngine.updatePresence(userId, presence);
89
- return this;
90
- }
91
- /**
92
- * @desc Removes a user's presence from the channel
93
- * @param userId - the id of the user to remove
94
- */
95
- removePresence(userId = __classPrivateFieldGet(this, _EventResponse_event, "f").sender) {
96
- __classPrivateFieldGet(this, _EventResponse_engine, "f").presenceEngine.removePresence(userId);
97
- return this;
98
- }
99
- /**
100
- * @desc Subscribes the client to a channel
101
- * @param channel - the channel to subscribe to
102
- */
103
- subscribeTo(channel) {
104
- __classPrivateFieldGet(this, _EventResponse_engine, "f").subscribeTo(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, channel);
53
+ __classPrivateFieldGet(this, _EventResponse_engine, "f").updatePresence(userId, presence);
105
54
  return this;
106
55
  }
107
- /**
108
- * @desc Unsubscribes the client from a channel
109
- * @param channel - the channel to unsubscribe from
110
- */
111
- unsubscribeFrom(channel) {
112
- __classPrivateFieldGet(this, _EventResponse_engine, "f").unsubscribeFrom(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, channel);
113
- return this;
114
- }
115
- /**
116
- * @desc Evicts a user from the channel
117
- * @param reason - the reason for the eviction
118
- * @param userId - the id of the user to evict,
119
- */
120
56
  evictUser(reason, userId = __classPrivateFieldGet(this, _EventResponse_event, "f").sender) {
121
57
  __classPrivateFieldGet(this, _EventResponse_engine, "f").kickUser(userId, reason);
122
58
  return this;
123
59
  }
124
- /**
125
- * @desc Closes the channel from the server side for all clients
126
- * @param reason - the reason for closing the channel
127
- */
128
- closeChannel(reason) {
129
- __classPrivateFieldGet(this, _EventResponse_engine, "f").destroy(reason);
60
+ removePresence(userId = __classPrivateFieldGet(this, _EventResponse_event, "f").sender) {
61
+ __classPrivateFieldGet(this, _EventResponse_engine, "f").removePresence(userId);
62
+ return this;
130
63
  }
131
64
  }
132
65
  exports.EventResponse = EventResponse;
133
- _EventResponse_event = new WeakMap(), _EventResponse_engine = new WeakMap(), _EventResponse_requestId = new WeakMap(), _EventResponse_instances = new WeakSet(), _EventResponse_manageAssigns = function _EventResponse_manageAssigns(assigns) {
134
- if (assigns) {
135
- __classPrivateFieldGet(this, _EventResponse_engine, "f").updateAssigns(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, assigns);
136
- }
137
- }, _EventResponse_sendMessage = function _EventResponse_sendMessage(recipient, event, payload) {
66
+ _EventResponse_event = new WeakMap(), _EventResponse_engine = new WeakMap(), _EventResponse_requestId = new WeakMap(), _EventResponse_instances = new WeakSet(), _EventResponse_sendMessage = function _EventResponse_sendMessage(recipient, event, payload) {
138
67
  __classPrivateFieldGet(this, _EventResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _EventResponse_event, "f").sender, recipient, pondsocket_common_1.ServerActions.BROADCAST, event, payload, __classPrivateFieldGet(this, _EventResponse_requestId, "f"));
139
68
  };
@@ -10,11 +10,11 @@ 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 _JoinResponse_instances, _JoinResponse_user, _JoinResponse_engine, _JoinResponse_newAssigns, _JoinResponse_executed, _JoinResponse_accepted, _JoinResponse_performChecks, _JoinResponse_sendMessage, _JoinResponse_directMessage;
13
+ var _JoinResponse_instances, _JoinResponse_user, _JoinResponse_engine, _JoinResponse_newAssigns, _JoinResponse_executed, _JoinResponse_accepted, _JoinResponse_sendMessage, _JoinResponse_directMessage, _JoinResponse_performChecks;
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.JoinResponse = void 0;
16
16
  const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
17
- const pondError_1 = require("../errors/pondError");
17
+ const httpError_1 = require("../errors/httpError");
18
18
  class JoinResponse {
19
19
  constructor(user, engine) {
20
20
  _JoinResponse_instances.add(this);
@@ -29,41 +29,14 @@ class JoinResponse {
29
29
  __classPrivateFieldSet(this, _JoinResponse_accepted, false, "f");
30
30
  __classPrivateFieldSet(this, _JoinResponse_newAssigns, Object.assign({}, user.assigns), "f");
31
31
  }
32
- /**
33
- * @desc Whether the server has responded to the request
34
- */
35
- get hasResponded() {
36
- return __classPrivateFieldGet(this, _JoinResponse_executed, "f");
37
- }
38
- /**
39
- * @desc Assigns data to the client
40
- * @param assigns - the data to assign
41
- */
42
- assign(assigns) {
43
- if (__classPrivateFieldGet(this, _JoinResponse_accepted, "f")) {
44
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").updateAssigns(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, assigns);
45
- }
46
- else {
47
- __classPrivateFieldSet(this, _JoinResponse_newAssigns, Object.assign(Object.assign({}, __classPrivateFieldGet(this, _JoinResponse_newAssigns, "f")), assigns), "f");
48
- }
49
- return this;
50
- }
51
- /**
52
- * @desc Accepts the join request to the channel
53
- */
54
32
  accept() {
55
33
  __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_performChecks).call(this);
56
34
  const onMessage = __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_directMessage).bind(this);
57
- const unsubscribe = __classPrivateFieldGet(this, _JoinResponse_engine, "f").addUser(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, __classPrivateFieldGet(this, _JoinResponse_newAssigns, "f"), onMessage);
58
- __classPrivateFieldGet(this, _JoinResponse_user, "f").subscriptions.set(__classPrivateFieldGet(this, _JoinResponse_engine, "f").name, unsubscribe);
35
+ const subscription = __classPrivateFieldGet(this, _JoinResponse_engine, "f").addUser(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, __classPrivateFieldGet(this, _JoinResponse_newAssigns, "f"), onMessage);
36
+ __classPrivateFieldGet(this, _JoinResponse_user, "f").subscriptions.add(subscription);
59
37
  __classPrivateFieldSet(this, _JoinResponse_accepted, true, "f");
60
38
  return this;
61
39
  }
62
- /**
63
- * @desc Rejects the request and optionally assigns data to the client
64
- * @param message - the error message
65
- * @param errorCode - the error code
66
- */
67
40
  decline(message, errorCode) {
68
41
  __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_performChecks).call(this);
69
42
  const errorMessage = {
@@ -79,11 +52,15 @@ class JoinResponse {
79
52
  __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_directMessage).call(this, errorMessage);
80
53
  return this;
81
54
  }
82
- /**
83
- * @desc Emits a direct message to the client
84
- * @param event - the event name
85
- * @param payload - the payload to send
86
- */
55
+ assign(assigns) {
56
+ if (__classPrivateFieldGet(this, _JoinResponse_accepted, "f")) {
57
+ void __classPrivateFieldGet(this, _JoinResponse_engine, "f").updateAssigns(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, assigns);
58
+ }
59
+ else {
60
+ __classPrivateFieldSet(this, _JoinResponse_newAssigns, Object.assign(Object.assign({}, __classPrivateFieldGet(this, _JoinResponse_newAssigns, "f")), assigns), "f");
61
+ }
62
+ return this;
63
+ }
87
64
  reply(event, payload) {
88
65
  const message = {
89
66
  action: pondsocket_common_1.ServerActions.SYSTEM,
@@ -95,70 +72,34 @@ class JoinResponse {
95
72
  __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_directMessage).call(this, message);
96
73
  return this;
97
74
  }
98
- /**
99
- * @desc Sends a message to all clients in the channel
100
- * @param event - the event to send
101
- * @param payload - the payload to send
102
- */
103
- broadcast(event, payload) {
104
- __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_sendMessage).call(this, pondsocket_common_1.ChannelReceiver.ALL_USERS, event, payload);
105
- return this;
106
- }
107
- /**
108
- * @desc Sends a message to all clients in the channel except the client making the request
109
- * @param event - the event to send
110
- * @param payload - the payload to send
111
- */
112
- broadcastFrom(event, payload) {
113
- __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_sendMessage).call(this, pondsocket_common_1.ChannelReceiver.ALL_EXCEPT_SENDER, event, payload);
114
- return this;
115
- }
116
- /**
117
- * @desc Sends a message to a set of clients in the channel
118
- * @param event - the event to send
119
- * @param payload - the payload to send
120
- * @param userIds - the ids of the clients to send the message to
121
- */
122
75
  broadcastTo(event, payload, userIds) {
123
76
  const ids = Array.isArray(userIds) ? userIds : [userIds];
124
77
  __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_sendMessage).call(this, ids, event, payload);
125
78
  return this;
126
79
  }
127
- /**
128
- * @desc Tracks a user's presence in the channel
129
- * @param presence - the initial presence data
130
- */
131
- trackPresence(presence) {
132
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").presenceEngine.trackPresence(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, presence);
80
+ broadcast(event, payload) {
81
+ __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_sendMessage).call(this, pondsocket_common_1.ChannelReceiver.ALL_USERS, event, payload);
133
82
  return this;
134
83
  }
135
- /**
136
- * @desc Subscribes the client to a channel
137
- * @param channel - the channel to subscribe to
138
- */
139
- subscribeTo(channel) {
140
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").subscribeTo(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, channel);
84
+ broadcastFrom(event, payload) {
85
+ __classPrivateFieldGet(this, _JoinResponse_instances, "m", _JoinResponse_sendMessage).call(this, pondsocket_common_1.ChannelReceiver.ALL_EXCEPT_SENDER, event, payload);
141
86
  return this;
142
87
  }
143
- /**
144
- * @desc Unsubscribes the client from a channel
145
- * @param channel - the channel to unsubscribe from
146
- */
147
- unsubscribeFrom(channel) {
148
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").unsubscribeFrom(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, channel);
88
+ trackPresence(presence) {
89
+ __classPrivateFieldGet(this, _JoinResponse_engine, "f").trackPresence(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, presence);
149
90
  return this;
150
91
  }
151
92
  }
152
93
  exports.JoinResponse = JoinResponse;
153
- _JoinResponse_user = new WeakMap(), _JoinResponse_engine = new WeakMap(), _JoinResponse_newAssigns = new WeakMap(), _JoinResponse_executed = new WeakMap(), _JoinResponse_accepted = new WeakMap(), _JoinResponse_instances = new WeakSet(), _JoinResponse_performChecks = function _JoinResponse_performChecks() {
94
+ _JoinResponse_user = new WeakMap(), _JoinResponse_engine = new WeakMap(), _JoinResponse_newAssigns = new WeakMap(), _JoinResponse_executed = new WeakMap(), _JoinResponse_accepted = new WeakMap(), _JoinResponse_instances = new WeakSet(), _JoinResponse_sendMessage = function _JoinResponse_sendMessage(recipient, event, payload) {
95
+ __classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, recipient, pondsocket_common_1.ServerActions.BROADCAST, event, payload, __classPrivateFieldGet(this, _JoinResponse_user, "f").requestId);
96
+ }, _JoinResponse_directMessage = function _JoinResponse_directMessage(event) {
97
+ __classPrivateFieldGet(this, _JoinResponse_engine, "f").parent.parent.sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").socket, event);
98
+ }, _JoinResponse_performChecks = function _JoinResponse_performChecks() {
154
99
  if (__classPrivateFieldGet(this, _JoinResponse_executed, "f")) {
155
100
  const message = `Request to join channel ${__classPrivateFieldGet(this, _JoinResponse_engine, "f").name} rejected: Request already executed`;
156
101
  const code = 403;
157
- throw new pondError_1.ChannelError(message, code, __classPrivateFieldGet(this, _JoinResponse_engine, "f").name);
102
+ throw new httpError_1.HttpError(code, message);
158
103
  }
159
104
  __classPrivateFieldSet(this, _JoinResponse_executed, true, "f");
160
- }, _JoinResponse_sendMessage = function _JoinResponse_sendMessage(recipient, event, payload) {
161
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").clientId, recipient, pondsocket_common_1.ServerActions.BROADCAST, event, payload, __classPrivateFieldGet(this, _JoinResponse_user, "f").requestId);
162
- }, _JoinResponse_directMessage = function _JoinResponse_directMessage(event) {
163
- __classPrivateFieldGet(this, _JoinResponse_engine, "f").parent.parent.sendMessage(__classPrivateFieldGet(this, _JoinResponse_user, "f").socket, event);
164
105
  };