airdcpp-apisocket 2.4.4 → 2.4.5-beta.1

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 (111) hide show
  1. package/GUIDE.md +6 -6
  2. package/babel.config.cjs +6 -0
  3. package/dist/NodeSocket.d.ts +3 -3
  4. package/dist/NodeSocket.js +9 -5
  5. package/dist/NodeSocket.js.map +1 -1
  6. package/dist/Promise.js +6 -6
  7. package/dist/Promise.js.map +1 -1
  8. package/dist/PublicHelpers.d.ts +1 -1
  9. package/dist/PublicHelpers.js +75 -168
  10. package/dist/PublicHelpers.js.map +1 -1
  11. package/dist/SocketBase.d.ts +2 -2
  12. package/dist/SocketBase.js +81 -97
  13. package/dist/SocketBase.js.map +1 -1
  14. package/dist/SocketLogger.d.ts +2 -2
  15. package/dist/SocketLogger.js +28 -38
  16. package/dist/SocketLogger.js.map +1 -1
  17. package/dist/SocketRequestHandler.d.ts +6 -6
  18. package/dist/SocketRequestHandler.js +55 -69
  19. package/dist/SocketRequestHandler.js.map +1 -1
  20. package/dist/SocketSubscriptionHandler.d.ts +5 -5
  21. package/dist/SocketSubscriptionHandler.js +55 -70
  22. package/dist/SocketSubscriptionHandler.js.map +1 -1
  23. package/dist/types/api.d.ts +3 -3
  24. package/dist/types/api_internal.d.ts +2 -2
  25. package/dist/types/index.d.ts +7 -7
  26. package/dist/types/index.js +12 -8
  27. package/dist/types/index.js.map +1 -1
  28. package/dist/types/options.d.ts +3 -3
  29. package/dist/types/public_helpers.d.ts +1 -1
  30. package/dist/types/public_helpers_internal.d.ts +2 -2
  31. package/dist/types/requests.d.ts +1 -1
  32. package/dist/types/socket.d.ts +7 -7
  33. package/dist/types/socket.js +0 -1
  34. package/dist/types/socket.js.map +1 -1
  35. package/dist/types/subscriptions.d.ts +9 -9
  36. package/dist/utils.d.ts +2 -2
  37. package/dist/utils.js +1 -1
  38. package/dist/utils.js.map +1 -1
  39. package/dist-es/NodeSocket.d.ts +3 -3
  40. package/dist-es/NodeSocket.js +3 -3
  41. package/dist-es/NodeSocket.js.map +1 -1
  42. package/dist-es/Promise.js +6 -6
  43. package/dist-es/Promise.js.map +1 -1
  44. package/dist-es/PublicHelpers.d.ts +1 -1
  45. package/dist-es/PublicHelpers.js +75 -168
  46. package/dist-es/PublicHelpers.js.map +1 -1
  47. package/dist-es/SocketBase.d.ts +2 -2
  48. package/dist-es/SocketBase.js +76 -92
  49. package/dist-es/SocketBase.js.map +1 -1
  50. package/dist-es/SocketLogger.d.ts +2 -2
  51. package/dist-es/SocketLogger.js +31 -41
  52. package/dist-es/SocketLogger.js.map +1 -1
  53. package/dist-es/SocketRequestHandler.d.ts +6 -6
  54. package/dist-es/SocketRequestHandler.js +51 -65
  55. package/dist-es/SocketRequestHandler.js.map +1 -1
  56. package/dist-es/SocketSubscriptionHandler.d.ts +5 -5
  57. package/dist-es/SocketSubscriptionHandler.js +52 -67
  58. package/dist-es/SocketSubscriptionHandler.js.map +1 -1
  59. package/dist-es/types/api.d.ts +3 -3
  60. package/dist-es/types/api_internal.d.ts +2 -2
  61. package/dist-es/types/index.d.ts +7 -7
  62. package/dist-es/types/index.js +7 -7
  63. package/dist-es/types/index.js.map +1 -1
  64. package/dist-es/types/options.d.ts +3 -3
  65. package/dist-es/types/public_helpers.d.ts +1 -1
  66. package/dist-es/types/public_helpers_internal.d.ts +2 -2
  67. package/dist-es/types/requests.d.ts +1 -1
  68. package/dist-es/types/socket.d.ts +7 -7
  69. package/dist-es/types/socket.js +0 -1
  70. package/dist-es/types/socket.js.map +1 -1
  71. package/dist-es/types/subscriptions.d.ts +9 -9
  72. package/dist-es/utils.d.ts +2 -2
  73. package/dist-es/utils.js +1 -1
  74. package/dist-es/utils.js.map +1 -1
  75. package/jest.config.js +18 -3
  76. package/package.json +15 -13
  77. package/src/NodeSocket.ts +3 -3
  78. package/src/PublicHelpers.ts +2 -2
  79. package/src/SocketBase.ts +9 -9
  80. package/src/SocketLogger.ts +5 -5
  81. package/src/SocketRequestHandler.ts +8 -8
  82. package/src/SocketSubscriptionHandler.ts +10 -10
  83. package/src/tests/Socket.test.ts +30 -22
  84. package/src/tests/helpers.ts +7 -6
  85. package/src/tests/public_helpers.test.ts +9 -8
  86. package/src/types/api_internal.ts +1 -1
  87. package/src/types/index.ts +7 -7
  88. package/src/types/public_helpers_internal.ts +1 -1
  89. package/src/types/requests.ts +1 -1
  90. package/src/types/socket.ts +4 -20
  91. package/src/types/subscriptions.ts +1 -1
  92. package/src/utils.ts +1 -1
  93. package/tsconfig.json +4 -8
  94. package/dist/tests/Socket.test.d.ts +0 -1
  95. package/dist/tests/Socket.test.js +0 -758
  96. package/dist/tests/Socket.test.js.map +0 -1
  97. package/dist/tests/helpers.d.ts +0 -57
  98. package/dist/tests/helpers.js +0 -178
  99. package/dist/tests/helpers.js.map +0 -1
  100. package/dist/tests/public_helpers.test.d.ts +0 -1
  101. package/dist/tests/public_helpers.test.js +0 -241
  102. package/dist/tests/public_helpers.test.js.map +0 -1
  103. package/dist-es/tests/Socket.test.d.ts +0 -1
  104. package/dist-es/tests/Socket.test.js +0 -734
  105. package/dist-es/tests/Socket.test.js.map +0 -1
  106. package/dist-es/tests/helpers.d.ts +0 -57
  107. package/dist-es/tests/helpers.js +0 -168
  108. package/dist-es/tests/helpers.js.map +0 -1
  109. package/dist-es/tests/public_helpers.test.d.ts +0 -1
  110. package/dist-es/tests/public_helpers.test.js +0 -236
  111. package/dist-es/tests/public_helpers.test.js.map +0 -1
@@ -1,758 +0,0 @@
1
- "use strict";
2
- var __assign = (this && this.__assign) || function () {
3
- __assign = Object.assign || function(t) {
4
- for (var s, i = 1, n = arguments.length; i < n; i++) {
5
- s = arguments[i];
6
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
- t[p] = s[p];
8
- }
9
- return t;
10
- };
11
- return __assign.apply(this, arguments);
12
- };
13
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
16
- }) : (function(o, m, k, k2) {
17
- if (k2 === undefined) k2 = k;
18
- o[k2] = m[k];
19
- }));
20
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
- Object.defineProperty(o, "default", { enumerable: true, value: v });
22
- }) : function(o, v) {
23
- o["default"] = v;
24
- });
25
- var __importStar = (this && this.__importStar) || function (mod) {
26
- if (mod && mod.__esModule) return mod;
27
- var result = {};
28
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
29
- __setModuleDefault(result, mod);
30
- return result;
31
- };
32
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
33
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34
- return new (P || (P = Promise))(function (resolve, reject) {
35
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
36
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
37
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38
- step((generator = generator.apply(thisArg, _arguments || [])).next());
39
- });
40
- };
41
- var __generator = (this && this.__generator) || function (thisArg, body) {
42
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
43
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
44
- function verb(n) { return function (v) { return step([n, v]); }; }
45
- function step(op) {
46
- if (f) throw new TypeError("Generator is already executing.");
47
- while (_) try {
48
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
49
- if (y = 0, t) op = [op[0] & 2, t.value];
50
- switch (op[0]) {
51
- case 0: case 1: t = op; break;
52
- case 4: _.label++; return { value: op[1], done: false };
53
- case 5: _.label++; y = op[1]; op = [0]; continue;
54
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
55
- default:
56
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
57
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
58
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
59
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
60
- if (t[2]) _.ops.pop();
61
- _.trys.pop(); continue;
62
- }
63
- op = body.call(thisArg, _);
64
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
65
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
66
- }
67
- };
68
- var __importDefault = (this && this.__importDefault) || function (mod) {
69
- return (mod && mod.__esModule) ? mod : { "default": mod };
70
- };
71
- Object.defineProperty(exports, "__esModule", { value: true });
72
- var helpers_1 = require("./helpers");
73
- var ApiConstants_1 = __importDefault(require("../ApiConstants"));
74
- var MockDate = __importStar(require("mockdate"));
75
- var wait_for_expect_1 = __importDefault(require("wait-for-expect"));
76
- var server;
77
- var EXCEPT_TIMEOUT = 1000;
78
- var waitForExpect = function (func) { return (0, wait_for_expect_1.default)(func, EXCEPT_TIMEOUT); };
79
- // tslint:disable:no-empty
80
- describe('socket', function () {
81
- beforeEach(function () {
82
- server = (0, helpers_1.getMockServer)();
83
- });
84
- afterEach(function () {
85
- server.stop();
86
- jest.useRealTimers();
87
- MockDate.reset();
88
- });
89
- describe('auth', function () {
90
- test('should handle valid credentials', function () { return __awaiter(void 0, void 0, void 0, function () {
91
- var connectedCallback, _a, socket, mockConsole, response;
92
- return __generator(this, function (_b) {
93
- switch (_b.label) {
94
- case 0:
95
- server.addDataHandler('POST', ApiConstants_1.default.LOGIN_URL, helpers_1.AUTH_RESPONSE);
96
- connectedCallback = jest.fn();
97
- _a = (0, helpers_1.getSocket)(), socket = _a.socket, mockConsole = _a.mockConsole;
98
- socket.onConnected = connectedCallback;
99
- return [4 /*yield*/, socket.connect()];
100
- case 1:
101
- response = _b.sent();
102
- expect(connectedCallback).toHaveBeenCalledWith(helpers_1.AUTH_RESPONSE);
103
- expect(response).toEqual(helpers_1.AUTH_RESPONSE);
104
- expect(socket.isConnected()).toEqual(true);
105
- expect(mockConsole.warn.mock.calls.length).toBe(0);
106
- expect(socket.getPendingRequestCount()).toBe(0);
107
- socket.disconnect();
108
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
109
- case 2:
110
- _b.sent();
111
- return [2 /*return*/];
112
- }
113
- });
114
- }); });
115
- test('should handle valid refresh token', function () { return __awaiter(void 0, void 0, void 0, function () {
116
- var connectedCallback, _a, socket, mockConsole, response;
117
- return __generator(this, function (_b) {
118
- switch (_b.label) {
119
- case 0:
120
- server.addDataHandler('POST', ApiConstants_1.default.LOGIN_URL, helpers_1.AUTH_RESPONSE);
121
- connectedCallback = jest.fn();
122
- _a = (0, helpers_1.getSocket)(), socket = _a.socket, mockConsole = _a.mockConsole;
123
- socket.onConnected = connectedCallback;
124
- return [4 /*yield*/, socket.connectRefreshToken('refresh token')];
125
- case 1:
126
- response = _b.sent();
127
- expect(connectedCallback).toHaveBeenCalledWith(helpers_1.AUTH_RESPONSE);
128
- expect(response).toEqual(helpers_1.AUTH_RESPONSE);
129
- expect(socket.isConnected()).toEqual(true);
130
- expect(mockConsole.warn.mock.calls.length).toBe(0);
131
- expect(socket.getPendingRequestCount()).toBe(0);
132
- socket.disconnect();
133
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
134
- case 2:
135
- _b.sent();
136
- return [2 /*return*/];
137
- }
138
- });
139
- }); });
140
- test('should handle invalid credentials', function () { return __awaiter(void 0, void 0, void 0, function () {
141
- var _a, socket, mockConsole, error, e_1;
142
- return __generator(this, function (_b) {
143
- switch (_b.label) {
144
- case 0:
145
- server.addErrorHandler('POST', ApiConstants_1.default.LOGIN_URL, 'Invalid username or password', 401);
146
- _a = (0, helpers_1.getSocket)(), socket = _a.socket, mockConsole = _a.mockConsole;
147
- _b.label = 1;
148
- case 1:
149
- _b.trys.push([1, 3, , 4]);
150
- return [4 /*yield*/, socket.connect()];
151
- case 2:
152
- _b.sent();
153
- return [3 /*break*/, 4];
154
- case 3:
155
- e_1 = _b.sent();
156
- error = e_1;
157
- return [3 /*break*/, 4];
158
- case 4:
159
- expect(error.code).toEqual(401);
160
- expect(error.message).toEqual('Invalid username or password');
161
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
162
- case 5:
163
- _b.sent();
164
- expect(mockConsole.warn.mock.calls.length).toBe(1);
165
- expect(socket.getPendingRequestCount()).toBe(0);
166
- return [2 /*return*/];
167
- }
168
- });
169
- }); });
170
- test('should handle connect with custom credentials', function () { return __awaiter(void 0, void 0, void 0, function () {
171
- var socket, error, e_2;
172
- return __generator(this, function (_a) {
173
- switch (_a.label) {
174
- case 0:
175
- server.stop();
176
- socket = (0, helpers_1.getSocket)({
177
- username: 'dummy',
178
- password: 'dummy',
179
- }).socket;
180
- _a.label = 1;
181
- case 1:
182
- _a.trys.push([1, 3, , 4]);
183
- return [4 /*yield*/, socket.connect(helpers_1.CONNECT_PARAMS.username, helpers_1.CONNECT_PARAMS.password, false)];
184
- case 2:
185
- _a.sent();
186
- return [3 /*break*/, 4];
187
- case 3:
188
- e_2 = _a.sent();
189
- error = e_2;
190
- return [3 /*break*/, 4];
191
- case 4:
192
- expect(error).toEqual('Cannot connect to the server');
193
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
194
- case 5:
195
- _a.sent();
196
- // Valid connect attempt
197
- server = (0, helpers_1.getMockServer)();
198
- server.addDataHandler('POST', ApiConstants_1.default.LOGIN_URL, helpers_1.AUTH_RESPONSE);
199
- return [4 /*yield*/, socket.connect(helpers_1.CONNECT_PARAMS.username, helpers_1.CONNECT_PARAMS.password, false)];
200
- case 6:
201
- _a.sent();
202
- expect(socket.isConnected()).toEqual(true);
203
- socket.disconnect();
204
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
205
- case 7:
206
- _a.sent();
207
- return [2 /*return*/];
208
- }
209
- });
210
- }); });
211
- test('should handle logout', function () { return __awaiter(void 0, void 0, void 0, function () {
212
- var sessionResetCallback, disconnectedCallback, _a, socket, mockConsole;
213
- return __generator(this, function (_b) {
214
- switch (_b.label) {
215
- case 0:
216
- sessionResetCallback = jest.fn();
217
- disconnectedCallback = jest.fn();
218
- return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
219
- case 1:
220
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
221
- socket.onSessionReset = sessionResetCallback;
222
- socket.onDisconnected = disconnectedCallback;
223
- // Dummy listener
224
- server.addDataHandler('POST', 'hubs/listeners/hub_updated', undefined);
225
- return [4 /*yield*/, socket.addListener('hubs', 'hub_updated', function (_) { })];
226
- case 2:
227
- _b.sent();
228
- // Dummy pending request
229
- socket.delete('dummyLogoutDelete').catch(function (error) {
230
- // TODO: fix, too unreliable at the moment (depends on the timings)
231
- //expect(error.message).toEqual('Socket disconnected');
232
- });
233
- // Logout
234
- server.addDataHandler('DELETE', ApiConstants_1.default.LOGOUT_URL);
235
- return [4 /*yield*/, socket.logout()];
236
- case 3:
237
- _b.sent();
238
- expect(sessionResetCallback.mock.calls.length).toBe(1);
239
- return [4 /*yield*/, waitForExpect(function () { return expect(disconnectedCallback.mock.calls.length).toBe(1); })];
240
- case 4:
241
- _b.sent();
242
- expect(socket.isActive()).toEqual(false);
243
- expect(socket.hasListeners()).toEqual(false);
244
- expect(socket.getPendingRequestCount()).toEqual(0);
245
- expect(mockConsole.warn.mock.calls.length).toBe(0);
246
- expect(socket.getPendingRequestCount()).toBe(0);
247
- return [2 /*return*/];
248
- }
249
- });
250
- }); });
251
- });
252
- describe('disconnect', function () {
253
- test('should handle disconnect', function () { return __awaiter(void 0, void 0, void 0, function () {
254
- var _a, socket, mockConsole;
255
- return __generator(this, function (_b) {
256
- switch (_b.label) {
257
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
258
- case 1:
259
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
260
- socket.disconnect();
261
- return [4 /*yield*/, socket.waitDisconnected()];
262
- case 2:
263
- _b.sent();
264
- expect(mockConsole.error.mock.calls.length).toBe(0);
265
- expect(mockConsole.warn.mock.calls.length).toBe(0);
266
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
267
- case 3:
268
- _b.sent();
269
- return [2 /*return*/];
270
- }
271
- });
272
- }); });
273
- test('should handle wait disconnected timeout', function () { return __awaiter(void 0, void 0, void 0, function () {
274
- var _a, socket, mockConsole, error, e_3;
275
- return __generator(this, function (_b) {
276
- switch (_b.label) {
277
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
278
- case 1:
279
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
280
- _b.label = 2;
281
- case 2:
282
- _b.trys.push([2, 4, , 5]);
283
- return [4 /*yield*/, socket.waitDisconnected(50)];
284
- case 3:
285
- _b.sent();
286
- return [3 /*break*/, 5];
287
- case 4:
288
- e_3 = _b.sent();
289
- error = e_3;
290
- return [3 /*break*/, 5];
291
- case 5:
292
- expect(error).toEqual('Socket disconnect timed out');
293
- expect(mockConsole.error.mock.calls.length).toBe(1);
294
- expect(mockConsole.warn.mock.calls.length).toBe(0);
295
- socket.disconnect();
296
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
297
- case 6:
298
- _b.sent();
299
- return [2 /*return*/];
300
- }
301
- });
302
- }); });
303
- });
304
- describe('reconnect', function () {
305
- test('should handle auto reconnect', function () { return __awaiter(void 0, void 0, void 0, function () {
306
- var _a, socket, mockConsole, waitForExpectTask;
307
- return __generator(this, function (_b) {
308
- switch (_b.label) {
309
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
310
- case 1:
311
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
312
- jest.useFakeTimers();
313
- socket.disconnect(true);
314
- jest.runOnlyPendingTimers();
315
- // TODO: fix
316
- /*{
317
- const waitForExpectTask = await waitForExpect(() => expect(socket.isActive()).toEqual(false));
318
- jest.advanceTimersByTime(1000);
319
- await waitForExpectTask;
320
- }*/
321
- // Let it fail once
322
- server.stop();
323
- jest.runOnlyPendingTimers();
324
- jest.runOnlyPendingTimers();
325
- expect(mockConsole.error.mock.calls.length).toBe(1);
326
- server = (0, helpers_1.getMockServer)();
327
- server.addDataHandler('POST', ApiConstants_1.default.CONNECT_URL, undefined);
328
- jest.runOnlyPendingTimers();
329
- jest.runOnlyPendingTimers();
330
- jest.runOnlyPendingTimers();
331
- expect(socket.isConnected()).toEqual(true);
332
- expect(mockConsole.warn.mock.calls.length).toBe(0);
333
- expect(socket.getPendingRequestCount()).toBe(0);
334
- socket.disconnect();
335
- jest.runOnlyPendingTimers();
336
- waitForExpectTask = waitForExpect(function () { return expect(socket.isActive()).toEqual(false); });
337
- jest.advanceTimersByTime(1000);
338
- return [4 /*yield*/, waitForExpectTask];
339
- case 2:
340
- _b.sent();
341
- return [2 /*return*/];
342
- }
343
- });
344
- }); });
345
- test('should cancel auto reconnect', function () { return __awaiter(void 0, void 0, void 0, function () {
346
- var _a, socket, mockConsole, waitForExpectTask;
347
- return __generator(this, function (_b) {
348
- switch (_b.label) {
349
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
350
- case 1:
351
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
352
- jest.useFakeTimers();
353
- // Disconnect with auto reconnect
354
- socket.disconnect(true);
355
- jest.runOnlyPendingTimers();
356
- expect(socket.isActive()).toEqual(false);
357
- server.stop();
358
- // Cancel autoreconnect
359
- socket.disconnect();
360
- // Ensure that nothing happens
361
- jest.runOnlyPendingTimers();
362
- jest.runOnlyPendingTimers();
363
- expect(mockConsole.error.mock.calls.length).toBe(0);
364
- waitForExpectTask = waitForExpect(function () { return expect(socket.isActive()).toEqual(false); });
365
- jest.advanceTimersByTime(1000);
366
- return [4 /*yield*/, waitForExpectTask];
367
- case 2:
368
- _b.sent();
369
- return [2 /*return*/];
370
- }
371
- });
372
- }); });
373
- test('should handle manual reconnect', function () { return __awaiter(void 0, void 0, void 0, function () {
374
- var _a, socket, mockConsole;
375
- return __generator(this, function (_b) {
376
- switch (_b.label) {
377
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
378
- case 1:
379
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
380
- socket.disconnect();
381
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
382
- case 2:
383
- _b.sent();
384
- server.addDataHandler('POST', ApiConstants_1.default.CONNECT_URL, undefined);
385
- return [4 /*yield*/, socket.reconnect()];
386
- case 3:
387
- _b.sent();
388
- expect(socket.isConnected()).toEqual(true);
389
- expect(mockConsole.warn.mock.calls.length).toBe(0);
390
- expect(socket.getPendingRequestCount()).toBe(0);
391
- socket.disconnect();
392
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
393
- case 4:
394
- _b.sent();
395
- return [2 /*return*/];
396
- }
397
- });
398
- }); });
399
- // TODO: fix
400
- test.skip('should re-authenticate on lost session', function () { return __awaiter(void 0, void 0, void 0, function () {
401
- var ErrorResponse, _a, socket, mockConsole, authCallback, waitForExpectTask, loggedWarningIndex, waitForExpectTask;
402
- return __generator(this, function (_b) {
403
- switch (_b.label) {
404
- case 0:
405
- ErrorResponse = 'Invalid session token';
406
- return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
407
- case 1:
408
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
409
- jest.useFakeTimers();
410
- socket.disconnect();
411
- jest.runOnlyPendingTimers();
412
- expect(socket.isActive()).toEqual(false);
413
- // Fail the initial reconnect attempt with 'Invalid session token'
414
- // and connect with credentials afterwards
415
- server.addErrorHandler('POST', ApiConstants_1.default.CONNECT_URL, ErrorResponse, 400);
416
- authCallback = jest.fn();
417
- server.addDataHandler('POST', ApiConstants_1.default.LOGIN_URL, helpers_1.AUTH_RESPONSE, authCallback);
418
- jest.runOnlyPendingTimers();
419
- socket.reconnect();
420
- waitForExpectTask = (0, wait_for_expect_1.default)(function () {
421
- jest.runOnlyPendingTimers();
422
- expect(authCallback.mock.calls.length).toBe(1);
423
- });
424
- jest.advanceTimersByTime(1000);
425
- return [4 /*yield*/, waitForExpectTask];
426
- case 2:
427
- _b.sent();
428
- expect(socket.isConnected()).toEqual(true);
429
- expect(mockConsole.error.mock.calls.length).toBe(0);
430
- expect(mockConsole.warn.mock.calls.length).toBe(1);
431
- expect(socket.getPendingRequestCount()).toBe(0);
432
- // Ensure that we received the "invalid token" error
433
- expect(mockConsole.warn.mock.calls.length).toBe(1);
434
- loggedWarningIndex = mockConsole.warn.mock.calls[0].find(function (str) { return str.indexOf(ErrorResponse) !== -1; });
435
- expect(loggedWarningIndex).toBeDefined();
436
- socket.disconnect();
437
- jest.runOnlyPendingTimers();
438
- waitForExpectTask = waitForExpect(function () { return expect(socket.isActive()).toEqual(false); });
439
- jest.advanceTimersByTime(1000);
440
- return [4 /*yield*/, waitForExpectTask];
441
- case 3:
442
- _b.sent();
443
- return [2 /*return*/];
444
- }
445
- });
446
- }); });
447
- });
448
- describe('requests', function () {
449
- test('should report request timeouts', function () { return __awaiter(void 0, void 0, void 0, function () {
450
- var _a, socket, mockConsole, waitForExpectTask;
451
- return __generator(this, function (_b) {
452
- switch (_b.label) {
453
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
454
- case 1:
455
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
456
- jest.useFakeTimers();
457
- socket.addListener('hubs', 'hub_updated', function (_) { })
458
- .catch(function () { });
459
- socket.addListener('hubs', 'hub_added', function (_) { })
460
- .catch(function () { });
461
- jest.advanceTimersByTime(35000);
462
- MockDate.set(Date.now() + 35000);
463
- socket.reportRequestTimeouts();
464
- expect(mockConsole.warn.mock.calls.length).toBe(2);
465
- expect(socket.getPendingRequestCount()).toBe(2);
466
- socket.disconnect();
467
- jest.runOnlyPendingTimers();
468
- expect(socket.getPendingRequestCount()).toBe(0);
469
- waitForExpectTask = waitForExpect(function () { return expect(socket.isActive()).toEqual(false); });
470
- jest.advanceTimersByTime(1000);
471
- return [4 /*yield*/, waitForExpectTask];
472
- case 2:
473
- _b.sent();
474
- return [2 /*return*/];
475
- }
476
- });
477
- }); });
478
- test('should handle missing error messages', function () { return __awaiter(void 0, void 0, void 0, function () {
479
- var socket, error, e_4;
480
- return __generator(this, function (_a) {
481
- switch (_a.label) {
482
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
483
- case 1:
484
- socket = (_a.sent()).socket;
485
- server.addErrorHandler('POST', 'test/test', null, 401);
486
- _a.label = 2;
487
- case 2:
488
- _a.trys.push([2, 4, , 5]);
489
- return [4 /*yield*/, socket.post('test/test', { test: 'test' })];
490
- case 3:
491
- _a.sent();
492
- return [3 /*break*/, 5];
493
- case 4:
494
- e_4 = _a.sent();
495
- error = e_4;
496
- return [3 /*break*/, 5];
497
- case 5:
498
- expect(error.code).toEqual(401);
499
- expect(error.message).toEqual('(no error description)');
500
- socket.disconnect();
501
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
502
- case 6:
503
- _a.sent();
504
- return [2 /*return*/];
505
- }
506
- });
507
- }); });
508
- });
509
- describe('subscriptions', function () {
510
- var commonData = {
511
- event: 'hub_updated',
512
- data: {
513
- total_messages: 63,
514
- },
515
- };
516
- var entityId = 1;
517
- var entityData = __assign(__assign({}, commonData), { id: entityId });
518
- test('should handle listener messages', function () { return __awaiter(void 0, void 0, void 0, function () {
519
- var _a, socket, mockConsole, commonSubscriptionCallback, entitySubscriptionCallback;
520
- return __generator(this, function (_b) {
521
- switch (_b.label) {
522
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
523
- case 1:
524
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
525
- server.addDataHandler('POST', 'hubs/listeners/hub_updated', undefined);
526
- server.addDataHandler('POST', "hubs/" + entityId + "/listeners/hub_updated", undefined);
527
- commonSubscriptionCallback = jest.fn();
528
- entitySubscriptionCallback = jest.fn();
529
- return [4 /*yield*/, socket.addListener('hubs', 'hub_updated', commonSubscriptionCallback, undefined)];
530
- case 2:
531
- _b.sent();
532
- return [4 /*yield*/, socket.addListener('hubs', 'hub_updated', entitySubscriptionCallback, entityId)];
533
- case 3:
534
- _b.sent();
535
- server.send(commonData);
536
- server.send(entityData);
537
- expect(commonSubscriptionCallback).toHaveBeenCalledWith(commonData.data, undefined);
538
- expect(entitySubscriptionCallback).toHaveBeenCalledWith(commonData.data, entityId);
539
- expect(commonSubscriptionCallback.mock.calls.length).toBe(2);
540
- expect(entitySubscriptionCallback.mock.calls.length).toBe(1);
541
- expect(mockConsole.warn.mock.calls.length).toBe(0);
542
- socket.disconnect();
543
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
544
- case 4:
545
- _b.sent();
546
- return [2 /*return*/];
547
- }
548
- });
549
- }); });
550
- test('should handle listener removal', function () { return __awaiter(void 0, void 0, void 0, function () {
551
- var _a, socket, mockConsole, subscribeCallback, p1, p2, removeListener1, removeListener2, deleteCallback;
552
- return __generator(this, function (_b) {
553
- switch (_b.label) {
554
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
555
- case 1:
556
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
557
- subscribeCallback = jest.fn();
558
- server.addDataHandler('POST', 'hubs/listeners/hub_updated', undefined, subscribeCallback);
559
- p1 = socket.addListener('hubs', 'hub_updated', function (_) { });
560
- p2 = socket.addListener('hubs', 'hub_updated', function (_) { });
561
- expect(socket.hasListeners()).toBe(false);
562
- expect(socket.getPendingSubscriptionCount()).toBe(1);
563
- return [4 /*yield*/, p1];
564
- case 2:
565
- removeListener1 = _b.sent();
566
- return [4 /*yield*/, p2];
567
- case 3:
568
- removeListener2 = _b.sent();
569
- expect(subscribeCallback.mock.calls.length).toBe(1);
570
- expect(socket.getPendingSubscriptionCount()).toBe(0);
571
- deleteCallback = jest.fn();
572
- server.addDataHandler('DELETE', 'hubs/listeners/hub_updated', undefined, deleteCallback);
573
- removeListener1();
574
- expect(deleteCallback.mock.calls.length).toBe(0); // Shouldn't call API yet, still one left
575
- removeListener2();
576
- return [4 /*yield*/, waitForExpect(function () { return expect(deleteCallback.mock.calls.length).toBe(1); })];
577
- case 4:
578
- _b.sent();
579
- expect(socket.hasListeners()).toBe(false);
580
- expect(mockConsole.warn.mock.calls.length).toBe(0);
581
- socket.disconnect();
582
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
583
- case 5:
584
- _b.sent();
585
- return [2 /*return*/];
586
- }
587
- });
588
- }); });
589
- test('should handle view updates', function () { return __awaiter(void 0, void 0, void 0, function () {
590
- var _a, socket, mockConsole, viewUpdateCallback, removeListener;
591
- return __generator(this, function (_b) {
592
- switch (_b.label) {
593
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
594
- case 1:
595
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
596
- viewUpdateCallback = jest.fn();
597
- removeListener = socket.addViewUpdateListener('hub_user_view', viewUpdateCallback, entityId);
598
- server.send({});
599
- removeListener();
600
- expect(socket.hasListeners()).toBe(false);
601
- expect(mockConsole.warn.mock.calls.length).toBe(0);
602
- socket.disconnect();
603
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
604
- case 2:
605
- _b.sent();
606
- return [2 /*return*/];
607
- }
608
- });
609
- }); });
610
- });
611
- describe('hooks', function () {
612
- var hookEventData = {
613
- event: 'queue_bundle_finished_hook',
614
- data: {},
615
- completion_id: 1,
616
- };
617
- var hookSubscriberInfo = {
618
- id: 'sfv_checker',
619
- name: 'SFV checker'
620
- };
621
- var rejectCallback = function (data, accept, reject) {
622
- reject('crc_failed', 'CRC mismatch');
623
- };
624
- test('should handle hook actions', function () { return __awaiter(void 0, void 0, void 0, function () {
625
- var _a, socket, mockConsole, removeListener, hookAddCallback, hookEventCallback_1;
626
- return __generator(this, function (_b) {
627
- switch (_b.label) {
628
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server)];
629
- case 1:
630
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
631
- removeListener = null;
632
- hookAddCallback = jest.fn();
633
- server.addDataHandler('POST', 'queue/hooks/queue_bundle_finished_hook', undefined, hookAddCallback);
634
- return [4 /*yield*/, socket.addHook('queue', 'queue_bundle_finished_hook', rejectCallback, hookSubscriberInfo)];
635
- case 2:
636
- removeListener = _b.sent();
637
- expect(hookAddCallback.mock.calls[0][0].data).toEqual(hookSubscriberInfo);
638
- expect(hookAddCallback.mock.calls.length).toBe(1);
639
- hookEventCallback_1 = jest.fn();
640
- server.addDataHandler('POST', 'queue/hooks/queue_bundle_finished_hook/1/reject', undefined, hookEventCallback_1);
641
- server.send(hookEventData);
642
- return [4 /*yield*/, waitForExpect(function () { return expect(hookEventCallback_1.mock.calls.length).toBe(1); })];
643
- case 3:
644
- _b.sent();
645
- // Clean up
646
- {
647
- removeListener();
648
- expect(socket.hasListeners()).toBe(false);
649
- }
650
- expect(mockConsole.warn.mock.calls.length).toBe(0);
651
- socket.disconnect();
652
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
653
- case 4:
654
- _b.sent();
655
- return [2 /*return*/];
656
- }
657
- });
658
- }); });
659
- });
660
- describe('logging', function () {
661
- var connect = function (logLevel) { return __awaiter(void 0, void 0, void 0, function () {
662
- var _a, socket, mockConsole;
663
- return __generator(this, function (_b) {
664
- switch (_b.label) {
665
- case 0: return [4 /*yield*/, (0, helpers_1.getConnectedSocket)(server, {
666
- logLevel: logLevel,
667
- })];
668
- case 1:
669
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
670
- socket.disconnect(true);
671
- return [4 /*yield*/, socket.delete('dummyLogDeleteWarning').catch(function (error) {
672
- //...
673
- })];
674
- case 2:
675
- _b.sent();
676
- return [2 /*return*/, { socket: socket, mockConsole: mockConsole }];
677
- }
678
- });
679
- }); };
680
- test('should respect error log level', function () { return __awaiter(void 0, void 0, void 0, function () {
681
- var _a, socket, mockConsole;
682
- return __generator(this, function (_b) {
683
- switch (_b.label) {
684
- case 0: return [4 /*yield*/, connect('error')];
685
- case 1:
686
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
687
- expect(mockConsole.error.mock.calls.length).toBe(0);
688
- expect(mockConsole.warn.mock.calls.length).toBe(0);
689
- expect(mockConsole.info.mock.calls.length).toBe(0);
690
- expect(mockConsole.log.mock.calls.length).toBe(0);
691
- socket.disconnect();
692
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
693
- case 2:
694
- _b.sent();
695
- return [2 /*return*/];
696
- }
697
- });
698
- }); });
699
- test('should respect warn log level', function () { return __awaiter(void 0, void 0, void 0, function () {
700
- var _a, socket, mockConsole;
701
- return __generator(this, function (_b) {
702
- switch (_b.label) {
703
- case 0: return [4 /*yield*/, connect('warn')];
704
- case 1:
705
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
706
- expect(mockConsole.error.mock.calls.length).toBe(0);
707
- expect(mockConsole.warn.mock.calls.length).toBe(1);
708
- expect(mockConsole.info.mock.calls.length).toBe(0);
709
- expect(mockConsole.log.mock.calls.length).toBe(0);
710
- socket.disconnect();
711
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
712
- case 2:
713
- _b.sent();
714
- return [2 /*return*/];
715
- }
716
- });
717
- }); });
718
- test('should respect info log level', function () { return __awaiter(void 0, void 0, void 0, function () {
719
- var _a, socket, mockConsole;
720
- return __generator(this, function (_b) {
721
- switch (_b.label) {
722
- case 0: return [4 /*yield*/, connect('info')];
723
- case 1:
724
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
725
- expect(mockConsole.error.mock.calls.length).toBe(0);
726
- expect(mockConsole.warn.mock.calls.length).toBe(1);
727
- expect(mockConsole.info.mock.calls.length).toBe(4);
728
- expect(mockConsole.log.mock.calls.length).toBe(0);
729
- socket.disconnect();
730
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
731
- case 2:
732
- _b.sent();
733
- return [2 /*return*/];
734
- }
735
- });
736
- }); });
737
- test('should respect verbose log level', function () { return __awaiter(void 0, void 0, void 0, function () {
738
- var _a, socket, mockConsole;
739
- return __generator(this, function (_b) {
740
- switch (_b.label) {
741
- case 0: return [4 /*yield*/, connect('verbose')];
742
- case 1:
743
- _a = _b.sent(), socket = _a.socket, mockConsole = _a.mockConsole;
744
- expect(mockConsole.error.mock.calls.length).toBe(0);
745
- expect(mockConsole.warn.mock.calls.length).toBe(1);
746
- expect(mockConsole.info.mock.calls.length).toBe(4);
747
- expect(mockConsole.log.mock.calls.length).toBe(2);
748
- socket.disconnect();
749
- return [4 /*yield*/, waitForExpect(function () { return expect(socket.isActive()).toEqual(false); })];
750
- case 2:
751
- _b.sent();
752
- return [2 /*return*/];
753
- }
754
- });
755
- }); });
756
- });
757
- });
758
- //# sourceMappingURL=Socket.test.js.map