@arcblock/ws 1.18.72 → 1.18.74

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 (2) hide show
  1. package/lib/server/index.js +59 -21
  2. package/package.json +4 -4
@@ -13,9 +13,9 @@ const sleep = (timeout) =>
13
13
  setTimeout(resolve, timeout);
14
14
  });
15
15
 
16
- const reply = (socket, topic, event, response, status = 'ok') => {
17
- if (socket.readyState === WebSocket.OPEN) {
18
- const res = JSON.stringify([socket.joinRef, socket.ref, topic, event, { status, response }]);
16
+ const reply = ({ socket, topic, event, data, status = 'ok', ref = '', joinRef = '' }) => {
17
+ if (socket.readyState === WebSocket.OPEN && socket.channel[topic]) {
18
+ const res = JSON.stringify([joinRef, ref, topic, event, { status, response: data }]);
19
19
  socket.send(res);
20
20
  }
21
21
  };
@@ -36,7 +36,7 @@ const refreshHeartbeat = (socket) => {
36
36
  socket.heartbeatAt = Date.now();
37
37
  };
38
38
 
39
- const HEARTBEAT_TIMEOUT = 60 * 1000;
39
+ const HEARTBEAT_TIMEOUT = 5 * 60 * 1000;
40
40
 
41
41
  /**
42
42
  * Create a websocket server
@@ -199,7 +199,7 @@ class WsServer extends EventEmitter {
199
199
  if (enableLog) {
200
200
  this.logger.info('broadcast message to', { topic, event, id: socket.id });
201
201
  }
202
- reply(socket, topic, event, data);
202
+ reply({ socket, topic, event, data });
203
203
  });
204
204
  }
205
205
 
@@ -253,7 +253,7 @@ class WsServer extends EventEmitter {
253
253
  this.logger.info('send message to', { topic, event, id: socket.id });
254
254
  }
255
255
 
256
- reply(socket, topic, event, data);
256
+ reply({ socket, topic, event, data });
257
257
 
258
258
  try {
259
259
  await this.hooks.postSend({ topic, event, data, options });
@@ -269,13 +269,13 @@ class WsServer extends EventEmitter {
269
269
  */
270
270
  async onWssConnection(socket) {
271
271
  socket.id = nanoid();
272
- socket.channel = {};
272
+ socket.channel = {}; // This should be renamed to channels
273
273
 
274
274
  refreshHeartbeat(socket);
275
275
  this.logger.debug('socket connected', { id: socket.id });
276
276
 
277
277
  socket.on('message', async (msg) => {
278
- this.logger.debug('socket onmessage', { msg });
278
+ this.logger.debug('socket onmessage', msg.toString());
279
279
  let joinRef;
280
280
  let ref;
281
281
  let topic;
@@ -293,12 +293,9 @@ class WsServer extends EventEmitter {
293
293
  return;
294
294
  }
295
295
 
296
- socket.joinRef = joinRef;
297
- socket.ref = ref;
298
-
299
296
  if (topic === 'phoenix' && event === 'heartbeat') {
300
297
  // heartbeat
301
- reply(socket, topic, event);
298
+ reply({ socket, topic, event, ref });
302
299
  refreshHeartbeat(socket);
303
300
  return;
304
301
  }
@@ -308,14 +305,20 @@ class WsServer extends EventEmitter {
308
305
  try {
309
306
  const authInfo = await this.hooks.authenticateJoinChannel({ socket, joinRef, ref, topic, event, payload });
310
307
  await this.hooks.preJoinChannel({ socket, joinRef, ref, topic, event, payload });
311
-
312
- socket.channel[topic] = {};
313
- socket.channel[topic].authInfo = authInfo;
308
+ socket.channel[topic] = { authInfo };
314
309
  } catch (error) {
315
310
  if (!this.skipLogOnHookError) {
316
311
  this.logger.error('preJoinChannel error', { error });
317
312
  }
318
- reply(socket, topic, `chan_reply_${ref}`, { message: error.message }, 'error');
313
+ reply({
314
+ socket,
315
+ topic,
316
+ event: `chan_reply_${ref}`,
317
+ data: { message: error.message },
318
+ status: 'error',
319
+ ref,
320
+ joinRef,
321
+ });
319
322
  return;
320
323
  }
321
324
 
@@ -325,7 +328,13 @@ class WsServer extends EventEmitter {
325
328
  }
326
329
  this.topics[topic].add(socket);
327
330
 
328
- reply(socket, topic, `chan_reply_${ref}`);
331
+ reply({
332
+ socket,
333
+ topic,
334
+ event: `chan_reply_${ref}`,
335
+ ref,
336
+ joinRef,
337
+ });
329
338
  this.emit('channel.join', { socket, topic, event, payload });
330
339
 
331
340
  // post hook
@@ -348,13 +357,27 @@ class WsServer extends EventEmitter {
348
357
  if (!this.skipLogOnHookError) {
349
358
  this.logger.error('preLeaveChannel error', { error });
350
359
  }
351
- reply(socket, topic, `chan_reply_${ref}`, { message: error.message }, 'error');
360
+ reply({
361
+ socket,
362
+ topic,
363
+ event: `chan_reply_${ref}`,
364
+ data: { message: error.message },
365
+ status: 'error',
366
+ ref,
367
+ joinRef,
368
+ });
352
369
  return;
353
370
  }
354
371
 
355
372
  // leave
356
373
  this._leaveChannel(socket, topic);
357
- reply(socket, topic, `chan_reply_${ref}`);
374
+ reply({
375
+ socket,
376
+ topic,
377
+ event: `chan_reply_${ref}`,
378
+ ref,
379
+ joinRef,
380
+ });
358
381
 
359
382
  // post hook
360
383
  try {
@@ -375,11 +398,26 @@ class WsServer extends EventEmitter {
375
398
  if (!this.skipLogOnHookError) {
376
399
  this.logger.error('receiveMessage error', { error });
377
400
  }
378
- reply(socket, topic, `chan_reply_${ref}`, { message: error.message }, 'error');
401
+ reply({
402
+ socket,
403
+ topic,
404
+ event: `chan_reply_${ref}`,
405
+ data: { message: error.message },
406
+ status: 'error',
407
+ ref,
408
+ joinRef,
409
+ });
379
410
  return;
380
411
  }
381
412
 
382
- reply(socket, topic, `chan_reply_${ref}`, {});
413
+ reply({
414
+ socket,
415
+ topic,
416
+ event: `chan_reply_${ref}`,
417
+ data: {},
418
+ ref,
419
+ joinRef,
420
+ });
383
421
  });
384
422
 
385
423
  socket.on('close', () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/ws",
3
- "version": "1.18.72",
3
+ "version": "1.18.74",
4
4
  "description": "OCAP Chain websocket server and client",
5
5
  "keywords": [
6
6
  "websocket"
@@ -34,16 +34,16 @@
34
34
  "url": "https://github.com/ArcBlock/asset-chain/issues"
35
35
  },
36
36
  "dependencies": {
37
- "@arcblock/event-hub": "1.18.72",
37
+ "@arcblock/event-hub": "1.18.74",
38
38
  "debug": "^4.3.4",
39
39
  "eventemitter3": "^4.0.7",
40
40
  "lodash": "^4.17.21",
41
41
  "nanoid": "~3.3.4",
42
- "phoenix": "1.5.12",
42
+ "phoenix": "1.7.2",
43
43
  "ws": "^8.9.0"
44
44
  },
45
45
  "devDependencies": {
46
46
  "get-port": "^5.1.1"
47
47
  },
48
- "gitHead": "2fb6b97b4324b303960d468a10e849dbc5eae149"
48
+ "gitHead": "87ab9471b0de6669100b56138193ec1705a97fb2"
49
49
  }