airdcpp-apisocket 2.4.4 → 2.5.0-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 (137) hide show
  1. package/GUIDE.md +7 -7
  2. package/README.md +3 -2
  3. package/babel.config.cjs +6 -0
  4. package/dist/ApiConstants.d.ts +6 -6
  5. package/dist/ApiConstants.js +7 -7
  6. package/dist/NodeSocket.d.ts +4 -4
  7. package/dist/NodeSocket.js +24 -20
  8. package/dist/NodeSocket.js.map +1 -1
  9. package/dist/Promise.d.ts +8 -8
  10. package/dist/Promise.js +26 -26
  11. package/dist/Promise.js.map +1 -1
  12. package/dist/PublicHelpers.d.ts +2 -2
  13. package/dist/PublicHelpers.js +94 -192
  14. package/dist/PublicHelpers.js.map +1 -1
  15. package/dist/SocketBase.d.ts +4 -4
  16. package/dist/SocketBase.js +351 -359
  17. package/dist/SocketBase.js.map +1 -1
  18. package/dist/SocketLogger.d.ts +9 -9
  19. package/dist/SocketLogger.js +74 -84
  20. package/dist/SocketLogger.js.map +1 -1
  21. package/dist/SocketRequestHandler.d.ts +14 -14
  22. package/dist/SocketRequestHandler.js +168 -176
  23. package/dist/SocketRequestHandler.js.map +1 -1
  24. package/dist/SocketSubscriptionHandler.d.ts +11 -11
  25. package/dist/SocketSubscriptionHandler.js +161 -173
  26. package/dist/SocketSubscriptionHandler.js.map +1 -1
  27. package/dist/types/api.d.ts +30 -30
  28. package/dist/types/api.js +3 -3
  29. package/dist/types/api_internal.d.ts +24 -24
  30. package/dist/types/api_internal.js +2 -2
  31. package/dist/types/index.d.ts +7 -7
  32. package/dist/types/index.js +23 -19
  33. package/dist/types/index.js.map +1 -1
  34. package/dist/types/logger.d.ts +6 -6
  35. package/dist/types/logger.js +2 -2
  36. package/dist/types/options.d.ts +31 -31
  37. package/dist/types/options.js +3 -3
  38. package/dist/types/public_helpers.d.ts +19 -14
  39. package/dist/types/public_helpers.js +2 -2
  40. package/dist/types/public_helpers_internal.d.ts +27 -25
  41. package/dist/types/public_helpers_internal.js +2 -2
  42. package/dist/types/requests.d.ts +14 -14
  43. package/dist/types/requests.js +2 -2
  44. package/dist/types/socket.d.ts +23 -23
  45. package/dist/types/socket.js +2 -3
  46. package/dist/types/socket.js.map +1 -1
  47. package/dist/types/subscriptions.d.ts +20 -20
  48. package/dist/types/subscriptions.js +2 -2
  49. package/dist/utils.d.ts +2 -2
  50. package/dist/utils.js +15 -15
  51. package/dist/utils.js.map +1 -1
  52. package/dist-es/ApiConstants.d.ts +6 -6
  53. package/dist-es/ApiConstants.js +5 -5
  54. package/dist-es/NodeSocket.d.ts +4 -4
  55. package/dist-es/NodeSocket.js +4 -4
  56. package/dist-es/NodeSocket.js.map +1 -1
  57. package/dist-es/Promise.d.ts +8 -8
  58. package/dist-es/Promise.js +24 -24
  59. package/dist-es/Promise.js.map +1 -1
  60. package/dist-es/PublicHelpers.d.ts +2 -2
  61. package/dist-es/PublicHelpers.js +90 -188
  62. package/dist-es/PublicHelpers.js.map +1 -1
  63. package/dist-es/SocketBase.d.ts +4 -4
  64. package/dist-es/SocketBase.js +346 -354
  65. package/dist-es/SocketBase.js.map +1 -1
  66. package/dist-es/SocketLogger.d.ts +9 -9
  67. package/dist-es/SocketLogger.js +68 -78
  68. package/dist-es/SocketLogger.js.map +1 -1
  69. package/dist-es/SocketRequestHandler.d.ts +14 -14
  70. package/dist-es/SocketRequestHandler.js +163 -171
  71. package/dist-es/SocketRequestHandler.js.map +1 -1
  72. package/dist-es/SocketSubscriptionHandler.d.ts +11 -11
  73. package/dist-es/SocketSubscriptionHandler.js +156 -168
  74. package/dist-es/SocketSubscriptionHandler.js.map +1 -1
  75. package/dist-es/types/api.d.ts +30 -30
  76. package/dist-es/types/api.js +2 -2
  77. package/dist-es/types/api_internal.d.ts +24 -24
  78. package/dist-es/types/api_internal.js +1 -1
  79. package/dist-es/types/index.d.ts +7 -7
  80. package/dist-es/types/index.js +7 -7
  81. package/dist-es/types/index.js.map +1 -1
  82. package/dist-es/types/logger.d.ts +6 -6
  83. package/dist-es/types/logger.js +1 -1
  84. package/dist-es/types/options.d.ts +31 -31
  85. package/dist-es/types/options.js +2 -2
  86. package/dist-es/types/public_helpers.d.ts +19 -14
  87. package/dist-es/types/public_helpers.js +1 -1
  88. package/dist-es/types/public_helpers_internal.d.ts +27 -25
  89. package/dist-es/types/public_helpers_internal.js +1 -1
  90. package/dist-es/types/requests.d.ts +14 -14
  91. package/dist-es/types/requests.js +1 -1
  92. package/dist-es/types/socket.d.ts +23 -23
  93. package/dist-es/types/socket.js +1 -2
  94. package/dist-es/types/socket.js.map +1 -1
  95. package/dist-es/types/subscriptions.d.ts +20 -20
  96. package/dist-es/types/subscriptions.js +1 -1
  97. package/dist-es/utils.d.ts +2 -2
  98. package/dist-es/utils.js +11 -11
  99. package/dist-es/utils.js.map +1 -1
  100. package/jest.config.js +15 -3
  101. package/package.json +15 -13
  102. package/src/NodeSocket.ts +3 -3
  103. package/src/PublicHelpers.ts +11 -10
  104. package/src/SocketBase.ts +9 -9
  105. package/src/SocketLogger.ts +6 -6
  106. package/src/SocketRequestHandler.ts +10 -10
  107. package/src/SocketSubscriptionHandler.ts +10 -10
  108. package/src/tests/Socket.test.ts +29 -26
  109. package/src/tests/helpers.ts +14 -8
  110. package/src/tests/public_helpers.test.ts +7 -6
  111. package/src/types/api_internal.ts +1 -1
  112. package/src/types/index.ts +7 -7
  113. package/src/types/public_helpers.ts +7 -1
  114. package/src/types/public_helpers_internal.ts +3 -1
  115. package/src/types/requests.ts +1 -1
  116. package/src/types/socket.ts +4 -20
  117. package/src/types/subscriptions.ts +1 -1
  118. package/src/utils.ts +1 -1
  119. package/tsconfig.json +5 -10
  120. package/dist/tests/Socket.test.d.ts +0 -1
  121. package/dist/tests/Socket.test.js +0 -758
  122. package/dist/tests/Socket.test.js.map +0 -1
  123. package/dist/tests/helpers.d.ts +0 -57
  124. package/dist/tests/helpers.js +0 -178
  125. package/dist/tests/helpers.js.map +0 -1
  126. package/dist/tests/public_helpers.test.d.ts +0 -1
  127. package/dist/tests/public_helpers.test.js +0 -241
  128. package/dist/tests/public_helpers.test.js.map +0 -1
  129. package/dist-es/tests/Socket.test.d.ts +0 -1
  130. package/dist-es/tests/Socket.test.js +0 -734
  131. package/dist-es/tests/Socket.test.js.map +0 -1
  132. package/dist-es/tests/helpers.d.ts +0 -57
  133. package/dist-es/tests/helpers.js +0 -168
  134. package/dist-es/tests/helpers.js.map +0 -1
  135. package/dist-es/tests/public_helpers.test.d.ts +0 -1
  136. package/dist-es/tests/public_helpers.test.js +0 -236
  137. 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