@weave-js/core 0.11.0 → 0.12.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 (118) hide show
  1. package/.eslintrc.js +1 -1
  2. package/jest.config.js +1 -1
  3. package/lib/ExtendableError.js +7 -7
  4. package/lib/broker/context.js +49 -49
  5. package/lib/broker/defaultOptions.js +9 -9
  6. package/lib/broker/index.js +161 -165
  7. package/lib/buildRuntime.js +34 -34
  8. package/lib/cache/adapters/base.js +119 -0
  9. package/lib/cache/adapters/inMemory.js +154 -0
  10. package/lib/cache/adapters/inMemoryLru.js +140 -0
  11. package/lib/cache/adapters/index.js +10 -0
  12. package/lib/cache/getCacheKeyByObject.js +31 -0
  13. package/lib/cache/getPropertyFromDataOrMetadata.js +20 -0
  14. package/lib/cache/lock.js +30 -24
  15. package/lib/constants.js +5 -5
  16. package/lib/errorHandler.js +8 -8
  17. package/lib/errors.js +35 -35
  18. package/lib/helper/defineAction.js +2 -2
  19. package/lib/helper/defineBrokerOptions.js +2 -2
  20. package/lib/helper/defineService.js +2 -2
  21. package/lib/index.js +21 -22
  22. package/lib/logger/base.js +38 -29
  23. package/lib/logger/format/asHumanReadable.js +15 -15
  24. package/lib/logger/format/asJson.js +10 -10
  25. package/lib/logger/format/index.js +3 -3
  26. package/lib/logger/index.js +24 -24
  27. package/lib/logger/levels.js +21 -21
  28. package/lib/logger/tools.js +15 -15
  29. package/lib/logger/utils/colorize.js +23 -23
  30. package/lib/logger/utils/format.js +75 -65
  31. package/lib/metrics/common.js +47 -47
  32. package/lib/metrics/constants.js +44 -44
  33. package/lib/metrics/exporter/base.js +8 -8
  34. package/lib/metrics/exporter/event.js +20 -20
  35. package/lib/metrics/exporter/index.js +15 -15
  36. package/lib/metrics/index.js +2 -2
  37. package/lib/metrics/types/base.js +20 -20
  38. package/lib/metrics/types/counter.js +6 -6
  39. package/lib/metrics/types/gauge.js +24 -24
  40. package/lib/metrics/types/histogram.js +26 -26
  41. package/lib/metrics/types/index.js +6 -6
  42. package/lib/metrics/types/info.js +17 -17
  43. package/lib/middlewares/action-hooks/index.js +38 -38
  44. package/lib/middlewares/bulkhead/index.js +34 -34
  45. package/lib/middlewares/cache/index.js +63 -37
  46. package/lib/middlewares/circuit-breaker/index.js +62 -62
  47. package/lib/middlewares/context-tracker/index.js +39 -39
  48. package/lib/middlewares/error-handler/index.js +47 -15
  49. package/lib/middlewares/index.js +2 -2
  50. package/lib/middlewares/metrics/getMiddlewareWrapper.js +17 -17
  51. package/lib/middlewares/metrics/index.js +29 -29
  52. package/lib/middlewares/retry/index.js +15 -15
  53. package/lib/middlewares/timeout/index.js +16 -16
  54. package/lib/middlewares/tracing/index.js +37 -37
  55. package/lib/middlewares/tracing/tags.js +6 -6
  56. package/lib/middlewares/validator/index.js +31 -31
  57. package/lib/registry/actionEndpoint.js +8 -8
  58. package/lib/registry/collections/actionCollection.js +39 -35
  59. package/lib/registry/collections/endpointCollection.js +63 -63
  60. package/lib/registry/collections/eventCollection.js +62 -62
  61. package/lib/registry/collections/nodeCollection.js +45 -45
  62. package/lib/registry/collections/serviceCollection.js +61 -55
  63. package/lib/registry/eventEndpoint.js +14 -14
  64. package/lib/registry/load-balancer/base.js +3 -3
  65. package/lib/registry/load-balancer/index.js +7 -7
  66. package/lib/registry/node.js +27 -27
  67. package/lib/registry/registry.js +145 -148
  68. package/lib/registry/service/parseAction.js +16 -16
  69. package/lib/registry/service/parseEvent.js +18 -18
  70. package/lib/registry/service/reduceMixins.js +10 -10
  71. package/lib/registry/service/service.js +72 -72
  72. package/lib/registry/serviceItem.js +21 -21
  73. package/lib/runtime/initActionInvoker.js +21 -21
  74. package/lib/runtime/initCache.js +14 -5
  75. package/lib/runtime/initContextFactory.js +22 -22
  76. package/lib/runtime/initEventbus.js +49 -49
  77. package/lib/runtime/initLogger.js +11 -11
  78. package/lib/runtime/initMetrics.js +54 -54
  79. package/lib/runtime/initMiddlewareManager.js +21 -21
  80. package/lib/runtime/initRegistry.js +6 -6
  81. package/lib/runtime/initServiceManager.js +85 -68
  82. package/lib/runtime/initTracing.js +23 -23
  83. package/lib/runtime/initTransport.js +5 -5
  84. package/lib/runtime/initUuidFactory.js +4 -4
  85. package/lib/runtime/initValidator.js +5 -5
  86. package/lib/tracing/collectors/base.js +22 -22
  87. package/lib/tracing/collectors/event.js +33 -33
  88. package/lib/tracing/collectors/index.js +15 -15
  89. package/lib/tracing/span.js +26 -26
  90. package/lib/tracing/time.js +8 -8
  91. package/lib/transport/InboundTransformStream.js +26 -26
  92. package/lib/transport/adapters/adapteBase.js +30 -30
  93. package/lib/transport/adapters/adapters.js +4 -4
  94. package/lib/transport/adapters/dummy/index.js +18 -18
  95. package/lib/transport/adapters/fromURI.js +13 -13
  96. package/lib/transport/adapters/getAdapterByName.js +5 -5
  97. package/lib/transport/adapters/index.js +12 -12
  98. package/lib/transport/adapters/tcp/discovery/codec.js +4 -4
  99. package/lib/transport/adapters/tcp/discovery/index.js +62 -62
  100. package/lib/transport/adapters/tcp/index.js +169 -171
  101. package/lib/transport/adapters/tcp/tcp-messagetypes.js +7 -7
  102. package/lib/transport/adapters/tcp/tcpReader.js +39 -39
  103. package/lib/transport/adapters/tcp/tcpWriteStream.js +26 -26
  104. package/lib/transport/adapters/tcp/tcpWriter.js +57 -57
  105. package/lib/transport/adapters/tcp/utils.js +12 -12
  106. package/lib/transport/createMessage.js +4 -4
  107. package/lib/transport/createTransport.js +254 -254
  108. package/lib/transport/errorPayloadFactory.js +14 -17
  109. package/lib/transport/messageHandlers.js +200 -200
  110. package/lib/transport/messageTypes.js +19 -19
  111. package/lib/types.js +49 -25
  112. package/lib/utils/index.js +2 -2
  113. package/lib/utils/options.js +44 -44
  114. package/lib/utils/restoreError.js +4 -4
  115. package/package.json +4 -4
  116. package/lib/cache/base.js +0 -147
  117. package/lib/cache/inMemory.js +0 -140
  118. package/lib/cache/index.js +0 -48
@@ -1,69 +1,69 @@
1
- const net = require('net')
2
- const { EventEmitter } = require('events')
3
- const TCPWriteStream = require('./tcpWriteStream')
1
+ const net = require('net');
2
+ const { EventEmitter } = require('events');
3
+ const TCPWriteStream = require('./tcpWriteStream');
4
4
 
5
5
  module.exports = (adapter, options) => {
6
- const self = Object.assign({}, EventEmitter.prototype)
7
- let sockets = []
8
- let server
6
+ const self = Object.assign({}, EventEmitter.prototype);
7
+ let sockets = [];
8
+ let server;
9
9
 
10
- self.isConnected = false
10
+ self.isConnected = false;
11
11
 
12
12
  self.listen = () => {
13
13
  return new Promise((resolve, reject) => {
14
- server = net.createServer(socket => onTCPClientConnected(socket))
14
+ server = net.createServer(socket => onTCPClientConnected(socket));
15
15
 
16
16
  server.on('error', error => {
17
- adapter.log.error('TCP server error', error)
18
- reject(error)
19
- })
17
+ adapter.log.error('TCP server error', error);
18
+ reject(error);
19
+ });
20
20
 
21
21
  server.listen(options, () => {
22
- const port = server.address().port
23
- self.isConnected = true
24
- adapter.log.info(`TCP server is listening on port ${port}`)
25
- resolve(port)
26
- })
27
- })
28
- }
22
+ const port = server.address().port;
23
+ self.isConnected = true;
24
+ adapter.log.info(`TCP server is listening on port ${port}`);
25
+ resolve(port);
26
+ });
27
+ });
28
+ };
29
29
 
30
30
  self.close = () => {
31
31
  if (server && self.isConnected) {
32
- server.close()
33
- sockets.forEach(socket => socket.destroy())
34
- sockets = []
32
+ server.close();
33
+ sockets.forEach(socket => socket.destroy());
34
+ sockets = [];
35
35
  }
36
- }
36
+ };
37
37
 
38
38
  function onTCPClientConnected (socket) {
39
- sockets.push(socket)
39
+ sockets.push(socket);
40
40
 
41
- const parser = new TCPWriteStream(adapter, socket, options.maxPacketSize)
42
- socket.pipe(parser)
41
+ const parser = new TCPWriteStream(adapter, socket, options.maxPacketSize);
42
+ socket.pipe(parser);
43
43
 
44
44
  parser.on('error', error => {
45
- adapter.log.warn('Packet parser error!', error)
46
- closeSocket(socket)
47
- })
45
+ adapter.log.warn('Packet parser error!', error);
46
+ closeSocket(socket);
47
+ });
48
48
 
49
49
  parser.on('data', (type, message) => {
50
- self.emit('message', type, message)
51
- })
50
+ self.emit('message', type, message);
51
+ });
52
52
 
53
53
  socket.on('error', error => {
54
- adapter.log.warn('TCP connection error!', error)
55
- closeSocket(socket)
56
- })
54
+ adapter.log.warn('TCP connection error!', error);
55
+ closeSocket(socket);
56
+ });
57
57
 
58
58
  socket.on('close', (isError) => {
59
- closeSocket(socket)
60
- })
59
+ closeSocket(socket);
60
+ });
61
61
  }
62
62
 
63
63
  function closeSocket (socket) {
64
- socket.destroy()
65
- sockets.splice(sockets.indexOf(socket), 1)
64
+ socket.destroy();
65
+ sockets.splice(sockets.indexOf(socket), 1);
66
66
  }
67
67
 
68
- return self
69
- }
68
+ return self;
69
+ };
@@ -1,54 +1,54 @@
1
1
 
2
- const { Writable } = require('stream')
3
- const MessageTypes = require('../../messageTypes')
4
- const TCPMessageTypeHelper = require('./tcp-messagetypes')
2
+ const { Writable } = require('stream');
3
+ const MessageTypes = require('../../messageTypes');
4
+ const TCPMessageTypeHelper = require('./tcp-messagetypes');
5
5
 
6
6
  module.exports = class TCPWriteStream extends Writable {
7
7
  constructor (adapter, socket, maxPacketSize) {
8
- super()
9
- this.buffer = null
10
- this.adapter = adapter
11
- this.socket = socket
12
- this.messageTypeHelper = TCPMessageTypeHelper(MessageTypes)
13
- this.maxPacketSize = maxPacketSize
8
+ super();
9
+ this.buffer = null;
10
+ this.adapter = adapter;
11
+ this.socket = socket;
12
+ this.messageTypeHelper = TCPMessageTypeHelper(MessageTypes);
13
+ this.maxPacketSize = maxPacketSize;
14
14
  }
15
15
 
16
16
  _write (chunk, encoding, callback) {
17
- let packet = chunk
17
+ let packet = chunk;
18
18
 
19
19
  if (this.buffer && this.buffer.length > 0) {
20
- packet = Buffer.concat([this.buffer, chunk])
21
- this.buffer = null
20
+ packet = Buffer.concat([this.buffer, chunk]);
21
+ this.buffer = null;
22
22
  }
23
23
 
24
24
  while (packet.length > 0) {
25
25
  if (packet.length < 6) {
26
- this.buffer = Buffer.from(packet)
27
- return callback()
26
+ this.buffer = Buffer.from(packet);
27
+ return callback();
28
28
  }
29
29
 
30
30
  if (packet.length > this.maxPacketSize) {
31
- return callback(new Error(`Incoming packet is larger than the 'maxPacketSize' limit (${packet.length} > ${this.maxPacketSize})!`))
31
+ return callback(new Error(`Incoming packet is larger than the 'maxPacketSize' limit (${packet.length} > ${this.maxPacketSize})!`));
32
32
  }
33
33
 
34
- const crc = packet[1] ^ packet[2] ^ packet[3] ^ packet[4] ^ packet[5]
34
+ const crc = packet[1] ^ packet[2] ^ packet[3] ^ packet[4] ^ packet[5];
35
35
 
36
36
  if (crc !== packet[0]) {
37
- return callback(new Error('Invalid cyclic redundancy check.'))
37
+ return callback(new Error('Invalid cyclic redundancy check.'));
38
38
  }
39
39
 
40
- const length = packet.readInt32BE(1)
40
+ const length = packet.readInt32BE(1);
41
41
  if (packet.length >= length) {
42
- const message = packet.slice(6, length)
43
- const type = this.messageTypeHelper.getTypeByIndex(packet[5]) // resolveMessageType(packet[5])
42
+ const message = packet.slice(6, length);
43
+ const type = this.messageTypeHelper.getTypeByIndex(packet[5]); // resolveMessageType(packet[5])
44
44
 
45
- this.emit('data', type, message, this.socket)
46
- packet = packet.slice(length)
45
+ this.emit('data', type, message, this.socket);
46
+ packet = packet.slice(length);
47
47
  } else {
48
- this.buffer = Buffer.from(packet)
49
- return callback()
48
+ this.buffer = Buffer.from(packet);
49
+ return callback();
50
50
  }
51
51
  }
52
- callback()
52
+ callback();
53
53
  }
54
- }
54
+ };
@@ -1,119 +1,119 @@
1
- const net = require('net')
2
- const { EventEmitter } = require('events')
3
- const MessageTypes = require('../../messageTypes')
4
- const TCPMessageTypeHelper = require('./tcp-messagetypes')
1
+ const net = require('net');
2
+ const { EventEmitter } = require('events');
3
+ const MessageTypes = require('../../messageTypes');
4
+ const TCPMessageTypeHelper = require('./tcp-messagetypes');
5
5
 
6
6
  module.exports = (adapter) => {
7
- const self = Object.assign({}, EventEmitter.prototype)
8
- const sockets = new Map()
9
- const messageTypeHelper = TCPMessageTypeHelper(MessageTypes)
10
- const headerSize = 6
7
+ const self = Object.assign({}, EventEmitter.prototype);
8
+ const sockets = new Map();
9
+ const messageTypeHelper = TCPMessageTypeHelper(MessageTypes);
10
+ const headerSize = 6;
11
11
 
12
12
  const connect = nodeId => {
13
- const node = adapter.broker.registry.nodeCollection.get(nodeId)
13
+ const node = adapter.broker.registry.nodeCollection.get(nodeId);
14
14
  if (!node) {
15
- return Promise.reject(new Error(`Missing node info for '${nodeId}'!`))
15
+ return Promise.reject(new Error(`Missing node info for '${nodeId}'!`));
16
16
  }
17
17
 
18
- const host = node.IPList[0]
19
- const port = node.port
18
+ const host = node.IPList[0];
19
+ const port = node.port;
20
20
 
21
21
  return new Promise((resolve, reject) => {
22
22
  try {
23
23
  const socket = net.connect({ host, port }, () => {
24
24
  // send hello
25
- socket.setNoDelay(true)
26
- socket.nodeId = nodeId
27
- socket.lastUsage = Date.now()
25
+ socket.setNoDelay(true);
26
+ socket.nodeId = nodeId;
27
+ socket.lastUsage = Date.now();
28
28
 
29
- addSocket(nodeId, socket, true)
29
+ addSocket(nodeId, socket, true);
30
30
 
31
31
  adapter.sendHello(nodeId)
32
32
  .then(() => resolve(socket))
33
- .catch(error => reject(error))
34
- })
33
+ .catch(error => reject(error));
34
+ });
35
35
 
36
36
  socket.on('error', error => {
37
- removeSocket(nodeId)
37
+ removeSocket(nodeId);
38
38
 
39
- self.emit('error', error, nodeId)
39
+ self.emit('error', error, nodeId);
40
40
 
41
41
  if (error) {
42
- reject(error)
42
+ reject(error);
43
43
  }
44
- })
44
+ });
45
45
 
46
- socket.unref()
46
+ socket.unref();
47
47
  } catch (error) {
48
48
  if (error) {
49
- reject(error)
49
+ reject(error);
50
50
  }
51
51
  }
52
- })
53
- }
52
+ });
53
+ };
54
54
 
55
55
  const addSocket = (nodeId, socket, force) => {
56
- const s = sockets.get(nodeId)
56
+ const s = sockets.get(nodeId);
57
57
 
58
58
  if (!force && s && !s.destroyed) {
59
- return
59
+ return;
60
60
  }
61
61
 
62
- sockets.set(nodeId, socket)
63
- }
62
+ sockets.set(nodeId, socket);
63
+ };
64
64
 
65
65
  const removeSocket = nodeId => {
66
- const socket = sockets.get(nodeId)
66
+ const socket = sockets.get(nodeId);
67
67
  if (socket && !socket.destroyed) {
68
- socket.destroy()
68
+ socket.destroy();
69
69
  }
70
70
 
71
- sockets.delete(nodeId)
72
- }
71
+ sockets.delete(nodeId);
72
+ };
73
73
 
74
74
  self.send = (nodeId, type, data) => {
75
75
  return Promise.resolve()
76
76
  .then(() => {
77
- const socket = sockets.get(nodeId)
77
+ const socket = sockets.get(nodeId);
78
78
 
79
79
  if (socket && !socket.destroyed) {
80
- return socket
80
+ return socket;
81
81
  }
82
- return connect(nodeId)
82
+ return connect(nodeId);
83
83
  })
84
84
  .then(socket => {
85
85
  return new Promise((resolve, reject) => {
86
- const header = Buffer.alloc(headerSize)
86
+ const header = Buffer.alloc(headerSize);
87
87
 
88
- header.writeInt32BE(data.length + headerSize, 1)
89
- header.writeInt8(messageTypeHelper.getIndexByType(type), 5)
88
+ header.writeInt32BE(data.length + headerSize, 1);
89
+ header.writeInt8(messageTypeHelper.getIndexByType(type), 5);
90
90
 
91
- const crc = header[1] ^ header[2] ^ header[3] ^ header[4] ^ header[5]
92
- header[0] = crc
91
+ const crc = header[1] ^ header[2] ^ header[3] ^ header[4] ^ header[5];
92
+ header[0] = crc;
93
93
 
94
- const payload = Buffer.concat([header, data])
94
+ const payload = Buffer.concat([header, data]);
95
95
 
96
96
  try {
97
97
  socket.write(payload, () => {
98
- resolve()
99
- })
98
+ resolve();
99
+ });
100
100
  } catch (error) {
101
- removeSocket(nodeId)
102
- reject(error)
101
+ removeSocket(nodeId);
102
+ reject(error);
103
103
  }
104
- })
105
- })
106
- }
104
+ });
105
+ });
106
+ };
107
107
 
108
108
  self.close = () => {
109
109
  sockets.forEach(socket => {
110
110
  if (!socket.destroyed) {
111
- socket.destroy()
111
+ socket.destroy();
112
112
  }
113
- socket.end()
114
- })
115
- sockets.clear()
116
- }
113
+ socket.end();
114
+ });
115
+ sockets.clear();
116
+ };
117
117
 
118
- return self
119
- }
118
+ return self;
119
+ };
@@ -1,27 +1,27 @@
1
- const os = require('os')
1
+ const os = require('os');
2
2
 
3
3
  function getBroadcastAddress ({ address, netmask }) {
4
- const addressBytes = address.split('.').map(Number)
5
- const netmaskBytes = netmask.split('.').map(Number)
4
+ const addressBytes = address.split('.').map(Number);
5
+ const netmaskBytes = netmask.split('.').map(Number);
6
6
  const subnetBytes = netmaskBytes.map(
7
7
  (_, index) => addressBytes[index] & netmaskBytes[index]
8
- )
8
+ );
9
9
  const broadcastBytes = netmaskBytes.map(
10
10
  (_, index) => subnetBytes[index] | (~netmaskBytes[index] + 256)
11
- )
12
- return broadcastBytes.map(String).join('.')
11
+ );
12
+ return broadcastBytes.map(String).join('.');
13
13
  }
14
14
 
15
15
  exports.getBroadcastAddresses = () => {
16
- const list = []
17
- const interfaces = os.networkInterfaces()
16
+ const list = [];
17
+ const interfaces = os.networkInterfaces();
18
18
  for (const iface in interfaces) {
19
19
  for (const i in interfaces[iface]) {
20
- const f = interfaces[iface][i]
20
+ const f = interfaces[iface][i];
21
21
  if (f.family === 'IPv4') {
22
- list.push(getBroadcastAddress(f))
22
+ list.push(getBroadcastAddress(f));
23
23
  }
24
24
  }
25
25
  }
26
- return list
27
- }
26
+ return list;
27
+ };
@@ -1,11 +1,11 @@
1
- const MessageTypes = require('./messageTypes')
1
+ const MessageTypes = require('./messageTypes');
2
2
 
3
3
  const createMessage = (type, targetNodeId, payload) => {
4
4
  return {
5
5
  type: type || MessageTypes.MESSAGE_UNKNOWN,
6
6
  targetNodeId,
7
7
  payload: payload || {}
8
- }
9
- }
8
+ };
9
+ };
10
10
 
11
- module.exports = { createMessage }
11
+ module.exports = { createMessage };