@eleven-am/pondsocket 0.1.169 → 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 -104
  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
@@ -1,112 +0,0 @@
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 _PresenceEngine_instances, _PresenceEngine_presenceMap, _PresenceEngine_channel, _PresenceEngine_publish;
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.PresenceEngine = void 0;
16
- const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
17
- const pondError_1 = require("../errors/pondError");
18
- class PresenceEngine {
19
- constructor(channel) {
20
- _PresenceEngine_instances.add(this);
21
- _PresenceEngine_presenceMap.set(this, void 0);
22
- _PresenceEngine_channel.set(this, void 0);
23
- __classPrivateFieldSet(this, _PresenceEngine_channel, channel, "f");
24
- __classPrivateFieldSet(this, _PresenceEngine_presenceMap, new Map(), "f");
25
- }
26
- /**
27
- * @desc Lists all the presence of the users
28
- */
29
- getPresence() {
30
- return Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").entries())
31
- .reduce((acc, [key, value]) => {
32
- acc[key] = value;
33
- return acc;
34
- }, {});
35
- }
36
- /**
37
- * @desc Returns the presence of a user
38
- * @param userId - The id of the user
39
- */
40
- getUserPresence(userId) {
41
- return __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").get(userId);
42
- }
43
- /**
44
- * @desc Tracks a presence
45
- * @param presenceKey - The key of the presence
46
- * @param presence - The presence
47
- */
48
- trackPresence(presenceKey, presence) {
49
- if (!__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").has(presenceKey)) {
50
- __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").set(presenceKey, presence);
51
- __classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, pondsocket_common_1.PresenceEventTypes.JOIN, {
52
- changed: presence,
53
- presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
54
- });
55
- }
56
- else {
57
- const code = 400;
58
- const message = `PresenceEngine: Presence with key ${presenceKey} already exists`;
59
- throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, pondsocket_common_1.PresenceEventTypes.JOIN);
60
- }
61
- }
62
- /**
63
- * @desc Removes a presence from the presence engine
64
- * @param presenceKey - The key of the presence
65
- * @param safe - If true, it will not throw an error if the presence does not exist
66
- */
67
- removePresence(presenceKey, safe = false) {
68
- const presence = __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").get(presenceKey);
69
- if (presence) {
70
- __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").delete(presenceKey);
71
- __classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, pondsocket_common_1.PresenceEventTypes.LEAVE, {
72
- changed: presence,
73
- presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
74
- });
75
- }
76
- else if (!safe) {
77
- const code = 404;
78
- const message = `PresenceEngine: Presence with key ${presenceKey} does not exist`;
79
- throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, pondsocket_common_1.PresenceEventTypes.LEAVE);
80
- }
81
- return presence;
82
- }
83
- /**
84
- * @desc Updates a presence
85
- * @param presenceKey - The key of the presence
86
- * @param presence - The new presence
87
- */
88
- updatePresence(presenceKey, presence) {
89
- const oldPresence = __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").get(presenceKey);
90
- if (oldPresence) {
91
- const newPresence = Object.assign(Object.assign({}, oldPresence), presence);
92
- __classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").set(presenceKey, newPresence);
93
- __classPrivateFieldGet(this, _PresenceEngine_instances, "m", _PresenceEngine_publish).call(this, pondsocket_common_1.PresenceEventTypes.UPDATE, {
94
- changed: newPresence,
95
- presence: Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").values()),
96
- });
97
- }
98
- else {
99
- const code = 404;
100
- const message = `PresenceEngine: Presence with key ${presenceKey} does not exist`;
101
- throw new pondError_1.PresenceError(message, code, __classPrivateFieldGet(this, _PresenceEngine_channel, "f").name, pondsocket_common_1.PresenceEventTypes.UPDATE);
102
- }
103
- }
104
- }
105
- exports.PresenceEngine = PresenceEngine;
106
- _PresenceEngine_presenceMap = new WeakMap(), _PresenceEngine_channel = new WeakMap(), _PresenceEngine_instances = new WeakSet(), _PresenceEngine_publish = function _PresenceEngine_publish(event, payload) {
107
- const recipients = Array.from(__classPrivateFieldGet(this, _PresenceEngine_presenceMap, "f").keys());
108
- if (recipients.length === 0) {
109
- return;
110
- }
111
- __classPrivateFieldGet(this, _PresenceEngine_channel, "f").sendMessage(pondsocket_common_1.SystemSender.CHANNEL, recipients, pondsocket_common_1.ServerActions.PRESENCE, event, payload);
112
- };
@@ -1,129 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const pondsocket_common_1 = require("@eleven-am/pondsocket-common");
4
- const presence_1 = require("./presence");
5
- const eventResponse_test_1 = require("../channel/eventResponse.test");
6
- describe('PresenceEngine', () => {
7
- let presenceEngine;
8
- let presence;
9
- let presenceKey;
10
- let channel;
11
- beforeEach(() => {
12
- channel = (0, eventResponse_test_1.createChannelEngine)().channelEngine;
13
- channel.addUser('presenceKey', { assign: 'assign' }, () => {
14
- // do nothing
15
- });
16
- presenceEngine = new presence_1.PresenceEngine(channel);
17
- presence = {
18
- id: 'id',
19
- name: 'name',
20
- color: 'color',
21
- type: 'type',
22
- location: 'location',
23
- };
24
- presenceKey = 'presenceKey';
25
- });
26
- describe('trackPresence', () => {
27
- it('should insert a presence into the presence engine', () => {
28
- // spy on the channel sendMessage method
29
- const sendMessage = jest.spyOn(channel, 'sendMessage');
30
- presenceEngine.trackPresence(presenceKey, presence);
31
- // get all the params
32
- const params = sendMessage.mock.calls[0];
33
- // remove the first element as it contains the request id which is random
34
- params.shift();
35
- expect(params).toEqual([
36
- ['presenceKey'],
37
- pondsocket_common_1.ServerActions.PRESENCE,
38
- pondsocket_common_1.PresenceEventTypes.JOIN,
39
- {
40
- changed: presence,
41
- presence: [presence],
42
- },
43
- ]);
44
- });
45
- it('should throw an error if the presence already exists', () => {
46
- presenceEngine.trackPresence(presenceKey, presence);
47
- expect(() => presenceEngine.trackPresence(presenceKey, presence)).toThrowError(`PresenceEngine: Presence with key ${presenceKey} already exists`);
48
- });
49
- });
50
- describe('updatePresence', () => {
51
- it('should update a presence', () => {
52
- presenceEngine.trackPresence(presenceKey, presence);
53
- const newPresence = {
54
- id: 'id',
55
- name: 'name',
56
- color: 'color',
57
- type: 'type',
58
- location: 'location',
59
- };
60
- const sendMessage = jest.spyOn(channel, 'sendMessage');
61
- presenceEngine.updatePresence(presenceKey, newPresence);
62
- // get all the params
63
- const params = sendMessage.mock.calls[0];
64
- // remove the first element as it contains the request id which is random
65
- params.shift();
66
- expect(params).toEqual([
67
- ['presenceKey'],
68
- pondsocket_common_1.ServerActions.PRESENCE,
69
- pondsocket_common_1.PresenceEventTypes.UPDATE,
70
- {
71
- changed: Object.assign(Object.assign({}, presence), newPresence),
72
- presence: [newPresence],
73
- },
74
- ]);
75
- });
76
- it('should throw an error if the presence does not exist', () => {
77
- expect(() => presenceEngine.updatePresence(presenceKey, presence)).toThrowError(`PresenceEngine: Presence with key ${presenceKey} does not exist`);
78
- });
79
- });
80
- describe('removePresence', () => {
81
- it('should remove a presence from the presence engine', () => {
82
- const listener = jest.spyOn(channel, 'sendMessage');
83
- // before we can track a presence, we need make sure the user is in the channel
84
- channel.addUser('presenceKey2', { assign: 'assign' }, () => {
85
- // do nothing
86
- });
87
- listener.mockClear();
88
- presenceEngine.trackPresence(presenceKey, presence);
89
- presenceEngine.trackPresence('presenceKey2', Object.assign(Object.assign({}, presence), { key: 'presence2' }));
90
- expect(listener).toHaveBeenCalledTimes(2);
91
- // clear the mock
92
- listener.mockClear();
93
- presenceEngine.removePresence(presenceKey);
94
- expect(listener).toHaveBeenCalledTimes(1);
95
- // get all the params
96
- const params = listener.mock.calls[0];
97
- // remove the first element as it contains the request id which is random
98
- params.shift();
99
- expect(params).toEqual([
100
- ['presenceKey2'],
101
- pondsocket_common_1.ServerActions.PRESENCE,
102
- pondsocket_common_1.PresenceEventTypes.LEAVE,
103
- {
104
- changed: presence,
105
- presence: [
106
- Object.assign(Object.assign({}, presence), { key: 'presence2' }),
107
- ],
108
- },
109
- ]);
110
- listener.mockClear();
111
- presenceEngine.removePresence('presenceKey2');
112
- expect(listener).toHaveBeenCalledTimes(0);
113
- });
114
- it('should throw an error if the presence does not exist', () => {
115
- expect(() => presenceEngine.removePresence(presenceKey)).toThrowError(`PresenceEngine: Presence with key ${presenceKey} does not exist`);
116
- });
117
- it('should not throw an error if the safe flag is true', () => {
118
- expect(() => presenceEngine.removePresence(presenceKey, true)).not.toThrow();
119
- });
120
- });
121
- describe('getPresence', () => {
122
- it('should return the presence', () => {
123
- presenceEngine.trackPresence(presenceKey, presence);
124
- const data = {};
125
- data[presenceKey] = presence;
126
- expect(presenceEngine.getPresence()).toEqual(data);
127
- });
128
- });
129
- });