@dxos/signal 2.33.9-dev.d0ae5f95 → 2.33.9-dev.d0dce35f

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. package/.eslintrc.js +6 -0
  2. package/.rush/temp/package-deps_build.json +17 -0
  3. package/.rush/temp/package-deps_build_test.json +17 -0
  4. package/.rush/temp/shrinkwrap-deps.json +296 -0
  5. package/bin/signal-test-darwin-amd64 +0 -0
  6. package/bin/signal-test-darwin-arm64 +0 -0
  7. package/bin/signal-test-linux-amd64 +0 -0
  8. package/bin/signal-test-linux-arm64 +0 -0
  9. package/bin/signal.js +0 -0
  10. package/dist/src/index.d.ts +1 -3
  11. package/dist/src/index.d.ts.map +1 -1
  12. package/dist/src/index.js +2 -4
  13. package/dist/src/index.js.map +1 -1
  14. package/dist/src/test-broker.d.ts +19 -0
  15. package/dist/src/test-broker.d.ts.map +1 -0
  16. package/dist/src/test-broker.js +104 -0
  17. package/dist/src/test-broker.js.map +1 -0
  18. package/dist/tsconfig.tsbuildinfo +1 -1
  19. package/package.json +11 -57
  20. package/signal.build.log +0 -0
  21. package/src/index.ts +2 -4
  22. package/src/test-broker.ts +94 -0
  23. package/tsconfig.json +20 -0
  24. package/dist/package.json +0 -94
  25. package/dist/src/bin.d.ts +0 -3
  26. package/dist/src/bin.d.ts.map +0 -1
  27. package/dist/src/bin.js +0 -79
  28. package/dist/src/bin.js.map +0 -1
  29. package/dist/src/broker.d.ts +0 -30
  30. package/dist/src/broker.d.ts.map +0 -1
  31. package/dist/src/broker.js +0 -99
  32. package/dist/src/broker.js.map +0 -1
  33. package/dist/src/broker.test.d.ts +0 -2
  34. package/dist/src/broker.test.d.ts.map +0 -1
  35. package/dist/src/broker.test.js +0 -30
  36. package/dist/src/broker.test.js.map +0 -1
  37. package/dist/src/presence.test.d.ts +0 -2
  38. package/dist/src/presence.test.d.ts.map +0 -1
  39. package/dist/src/presence.test.js +0 -54
  40. package/dist/src/presence.test.js.map +0 -1
  41. package/dist/src/serializer.d.ts +0 -7
  42. package/dist/src/serializer.d.ts.map +0 -1
  43. package/dist/src/serializer.js +0 -21
  44. package/dist/src/serializer.js.map +0 -1
  45. package/dist/src/services/discovery.d.ts +0 -21
  46. package/dist/src/services/discovery.d.ts.map +0 -1
  47. package/dist/src/services/discovery.js +0 -93
  48. package/dist/src/services/discovery.js.map +0 -1
  49. package/dist/src/services/index.d.ts +0 -6
  50. package/dist/src/services/index.d.ts.map +0 -1
  51. package/dist/src/services/index.js +0 -25
  52. package/dist/src/services/index.js.map +0 -1
  53. package/dist/src/services/network.d.ts +0 -24
  54. package/dist/src/services/network.d.ts.map +0 -1
  55. package/dist/src/services/network.js +0 -105
  56. package/dist/src/services/network.js.map +0 -1
  57. package/dist/src/services/presence.d.ts +0 -17
  58. package/dist/src/services/presence.d.ts.map +0 -1
  59. package/dist/src/services/presence.js +0 -74
  60. package/dist/src/services/presence.js.map +0 -1
  61. package/dist/src/services/status.d.ts +0 -46
  62. package/dist/src/services/status.d.ts.map +0 -1
  63. package/dist/src/services/status.js +0 -248
  64. package/dist/src/services/status.js.map +0 -1
  65. package/dist/src/services/web.d.ts +0 -8
  66. package/dist/src/services/web.d.ts.map +0 -1
  67. package/dist/src/services/web.js +0 -28
  68. package/dist/src/services/web.js.map +0 -1
  69. package/dist/src/signal/index.d.ts +0 -3
  70. package/dist/src/signal/index.d.ts.map +0 -1
  71. package/dist/src/signal/index.js +0 -22
  72. package/dist/src/signal/index.js.map +0 -1
  73. package/dist/src/signal/peer-map.d.ts +0 -63
  74. package/dist/src/signal/peer-map.d.ts.map +0 -1
  75. package/dist/src/signal/peer-map.js +0 -135
  76. package/dist/src/signal/peer-map.js.map +0 -1
  77. package/dist/src/signal/peer-map.test.d.ts +0 -2
  78. package/dist/src/signal/peer-map.test.d.ts.map +0 -1
  79. package/dist/src/signal/peer-map.test.js +0 -44
  80. package/dist/src/signal/peer-map.test.js.map +0 -1
  81. package/dist/src/signal/signal-server.d.ts +0 -17
  82. package/dist/src/signal/signal-server.d.ts.map +0 -1
  83. package/dist/src/signal/signal-server.js +0 -92
  84. package/dist/src/signal/signal-server.js.map +0 -1
  85. package/dist/src/signal.test.d.ts +0 -2
  86. package/dist/src/signal.test.d.ts.map +0 -1
  87. package/dist/src/signal.test.js +0 -67
  88. package/dist/src/signal.test.js.map +0 -1
  89. package/dist/src/system-information.d.ts +0 -5
  90. package/dist/src/system-information.d.ts.map +0 -1
  91. package/dist/src/system-information.js +0 -96
  92. package/dist/src/system-information.js.map +0 -1
  93. package/dist/src/testing.d.ts +0 -9
  94. package/dist/src/testing.d.ts.map +0 -1
  95. package/dist/src/testing.js +0 -25
  96. package/dist/src/testing.js.map +0 -1
  97. package/dist/src/transporter/bootstrap-node.d.ts +0 -2
  98. package/dist/src/transporter/bootstrap-node.d.ts.map +0 -1
  99. package/dist/src/transporter/bootstrap-node.js +0 -95
  100. package/dist/src/transporter/bootstrap-node.js.map +0 -1
  101. package/dist/src/transporter/index.d.ts +0 -38
  102. package/dist/src/transporter/index.d.ts.map +0 -1
  103. package/dist/src/transporter/index.js +0 -151
  104. package/dist/src/transporter/index.js.map +0 -1
  105. package/dist/src/transporter/messenger.d.ts +0 -2
  106. package/dist/src/transporter/messenger.d.ts.map +0 -1
  107. package/dist/src/transporter/messenger.js +0 -193
  108. package/dist/src/transporter/messenger.js.map +0 -1
  109. package/src/bin.ts +0 -81
  110. package/src/broker.test.js +0 -35
  111. package/src/broker.ts +0 -134
  112. package/src/presence.test.js +0 -67
  113. package/src/serializer.js +0 -17
  114. package/src/services/discovery.js +0 -101
  115. package/src/services/index.ts +0 -9
  116. package/src/services/network.ts +0 -129
  117. package/src/services/presence.js +0 -77
  118. package/src/services/status.js +0 -259
  119. package/src/services/web.ts +0 -24
  120. package/src/shims.d.ts +0 -6
  121. package/src/signal/index.ts +0 -6
  122. package/src/signal/peer-map.test.js +0 -58
  123. package/src/signal/peer-map.ts +0 -174
  124. package/src/signal/signal-server.js +0 -106
  125. package/src/signal.test.js +0 -78
  126. package/src/system-information.ts +0 -110
  127. package/src/testing.ts +0 -27
  128. package/src/transporter/bootstrap-node.js +0 -112
  129. package/src/transporter/index.js +0 -179
  130. package/src/transporter/messenger.js +0 -223
@@ -1,67 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import crypto from 'crypto';
6
- import debug from 'debug';
7
- import pEvent from 'p-event';
8
-
9
- import { createBroker } from './broker';
10
-
11
- const log = debug('dxos:test:presence');
12
-
13
- // TODO(burdon): A worker process has failed to exit gracefully and has been force exited.
14
- jest.setTimeout(100 * 1000);
15
-
16
- const complete = (nodeID, graph, max) => {
17
- if (graph.nodes().length !== max) {
18
- return false;
19
- }
20
-
21
- const nodes = graph.nodes().filter(id => id !== nodeID);
22
-
23
- const edges = [];
24
- for (const edge of graph.edgeEntries(nodeID)) {
25
- const source = edge[2];
26
- const target = edge[3];
27
- edges.push(source === nodeID ? target : source);
28
- }
29
-
30
- if (edges.length < (max - 1)) {
31
- return false;
32
- }
33
-
34
- for (const id of nodes) {
35
- if (!edges.includes(id)) {
36
- return false;
37
- }
38
- }
39
-
40
- return true;
41
- };
42
-
43
- test('5 brokers full network connected', async () => {
44
- const MAX_BROKERS = 5;
45
-
46
- const topic = crypto.randomBytes(32);
47
-
48
- const brokers = [...Array(MAX_BROKERS).keys()].map(i => createBroker(topic, { port: 6000 + i, logger: false, hyperswarm: { bootstrap: false } }));
49
-
50
- const waitForPresenceGraph = Promise.all(brokers.map(async (broker) => pEvent(broker.localBus, '$broker.presence-update', (graph) => complete(broker.nodeID, graph, MAX_BROKERS))));
51
-
52
- const waitForConnected = Promise.all(brokers.map(broker => {
53
- const nodes = brokers.filter(b => b.nodeID !== broker.nodeID).map(b => b.nodeID);
54
- return Promise.all(nodes.map(nodeID => pEvent(broker.localBus, '$node.connected', ({ node }) => node.id === nodeID)));
55
- }));
56
-
57
- log('Starting brokers...');
58
- await Promise.all(brokers.map(b => b.start()));
59
-
60
- await waitForConnected;
61
-
62
- log('Waiting for the nodes to be fully connected...');
63
- await waitForPresenceGraph;
64
-
65
- log('Stopping brokers...');
66
- return Promise.all(brokers.map(b => b.stop()));
67
- });
package/src/serializer.js DELETED
@@ -1,17 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import jsonCodec from 'buffer-json-encoding';
6
-
7
- const { Serializers: { Base: BaseSerializer } } = require('moleculer'); // eslint-disable-line @typescript-eslint/no-var-requires
8
-
9
- export class Serializer extends BaseSerializer {
10
- serialize (obj) {
11
- return jsonCodec.encode(obj);
12
- }
13
-
14
- deserialize (buf) {
15
- return jsonCodec.decode(buf);
16
- }
17
- }
@@ -1,101 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import debounce from 'lodash.debounce';
6
- import pLimit from 'p-limit';
7
-
8
- export const DiscoveryService = {
9
- name: 'discovery',
10
- events: {
11
- '$node.disconnected' (ctx) {
12
- const { peerMap } = this.broker.shared;
13
-
14
- peerMap.deletePeersByOwner(Buffer.from(ctx.params.node.id, 'hex'));
15
- },
16
- '$node.connected' () {
17
- const { peerMap } = this.broker.shared;
18
- const owner = Buffer.from(this.broker.nodeID, 'hex');
19
- const peers = peerMap
20
- .peers
21
- .filter(p => p.owner.equals(owner))
22
- .map(peerMap.encode);
23
-
24
- if (peers.length === 0) {
25
- return;
26
- }
27
- return this.broker.broadcast('discovery.update', { peers }).catch(() => {});
28
- },
29
- 'discovery.update' (ctx) {
30
- const { peerMap } = this.broker.shared;
31
- const { peers } = ctx.params;
32
-
33
- if (ctx.nodeID === this.broker.nodeID) {
34
- this._discoveryUpdate();
35
- return;
36
- }
37
-
38
- peerMap.updatePeersByOwner(Buffer.from(ctx.nodeID, 'hex'), peers.map(peerMap.decode));
39
- this._discoveryUpdate();
40
- }
41
- },
42
- actions: {
43
- offer (ctx) {
44
- this.logger.debug('offer', ctx.params);
45
-
46
- const { peerMap } = this.broker.shared;
47
- const { remoteId } = ctx.params;
48
-
49
- const peer = peerMap.peers.find(p => p.id.equals(remoteId) && p.rpc);
50
- if (!peer) {
51
- throw new Error('rpc not found');
52
- }
53
-
54
- return peer.rpc.call('offer', ctx.params);
55
- },
56
- signal (ctx) {
57
- this.logger.debug('signal', ctx.params);
58
-
59
- const { peerMap } = this.broker.shared;
60
- const { remoteId } = ctx.params;
61
-
62
- const peer = peerMap.peers.find(p => p.id.equals(remoteId) && p.rpc);
63
- if (!peer) {
64
- throw new Error('rpc not found');
65
- }
66
-
67
- return peer.rpc.emit('signal', ctx.params);
68
- }
69
- },
70
- created () {
71
- const { peerMap } = this.broker.shared;
72
- const owner = Buffer.from(this.broker.nodeID, 'hex');
73
-
74
- this._limit = pLimit(1);
75
-
76
- this._updatePeers = debounce(() => {
77
- this._limit(() => {
78
- this._limit.clearQueue();
79
- const peers = peerMap
80
- .peers
81
- .filter(p => p.owner.equals(owner))
82
- .map(peerMap.encode);
83
- return this.broker.broadcast('discovery.update', { peers }).catch(() => {});
84
- }).catch(() => {});
85
- }, 1000);
86
-
87
- this._discoveryUpdate = debounce(() => {
88
- this.broker.broadcastLocal('$broker.discovery-update');
89
- }, 1000);
90
- },
91
- async started () {
92
- const { peerMap } = this.broker.shared;
93
- peerMap.on('peer-added', this._updatePeers);
94
- peerMap.on('peer-deleted', this._updatePeers);
95
- },
96
- async stopped () {
97
- const { peerMap } = this.broker.shared;
98
- peerMap.off('peer-added', this._updatePeers);
99
- peerMap.off('peer-deleted', this._updatePeers);
100
- }
101
- };
@@ -1,9 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- export * from './discovery';
6
- export * from './network';
7
- export * from './presence';
8
- export * from './status';
9
- export * from './web';
@@ -1,129 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import { EventEmitter } from 'events';
6
- import Graph from 'graphology';
7
- import debounce from 'lodash.debounce';
8
- import timestamp from 'monotonic-timestamp';
9
- import pLimit from 'p-limit';
10
- import lru, { Lru } from 'tiny-lru';
11
-
12
- const MAX_WAIT = 2 * 1000;
13
-
14
- export interface Connection {
15
- key: string,
16
- target: string
17
- }
18
-
19
- export class Network extends EventEmitter {
20
- private readonly _owner: string
21
- private readonly _graph: Graph;
22
- private readonly _limit: pLimit.Limit;
23
- private readonly _lastUpdate: Lru;
24
- readonly publish: ReturnType<typeof debounce>;
25
-
26
- constructor (owner: string, publish: ReturnType<typeof debounce>) {
27
- super();
28
-
29
- this._owner = owner;
30
- this._graph = new Graph({ multi: true, type: 'undirected' });
31
- this._graph.addNode(owner);
32
- this._limit = pLimit(1);
33
- this._lastUpdate = lru(1000);
34
-
35
- this.publish = debounce(() => {
36
- void this._limit(() => {
37
- this._limit.clearQueue();
38
- return publish({ timestamp: timestamp(), connections: this.getConnections() });
39
- });
40
- }, MAX_WAIT);
41
-
42
- const onChange = debounce(() => this.emit('change', this._graph), MAX_WAIT);
43
- ['nodeAdded', 'edgeAdded', 'nodeDropped', 'edgeDropped'].forEach(ev => this._graph.on(ev, onChange));
44
- }
45
-
46
- get graph () {
47
- return this._graph;
48
- }
49
-
50
- getConnections (id = this._owner) {
51
- const connections: Connection[] = [];
52
- if (!this._graph.hasNode(id)) {
53
- return [];
54
- }
55
-
56
- this._graph.forEachEdge(id, (key, attr, source, target) => {
57
- if (source === id) {
58
- connections.push({ key, target });
59
- }
60
- });
61
-
62
- return connections;
63
- }
64
-
65
- update (id: string, timestamp: number, connections: Connection[] = []) {
66
- // ignore old messages
67
- const lastTimestamp = this._lastUpdate.get(id) || 0;
68
- if (lastTimestamp > timestamp) {
69
- return;
70
- }
71
- this._lastUpdate.set(id, timestamp);
72
-
73
- if (!this._graph.hasNode(id)) {
74
- this._graph.addNode(id);
75
- }
76
-
77
- this._graph.forEachEdge(id, (key, attr, source) => {
78
- if (source === id) {
79
- this._graph.dropEdge(key);
80
- }
81
- });
82
-
83
- this._graph.import({
84
- edges: connections.map(conn => ({
85
- key: conn.key,
86
- source: id,
87
- target: conn.target,
88
- undirected: true
89
- })),
90
- nodes: Array.from(new Set(
91
- connections.reduce((acc, { key, target }) => [...acc, key, target], [] as string[])).values()
92
- ).map(key => ({ key }))
93
- });
94
- }
95
-
96
- addPeer (id: string) {
97
- if (!this._graph.hasNode(id)) {
98
- this._graph.addNode(id);
99
- }
100
- }
101
-
102
- deletePeer (id: string) {
103
- if (this._graph.hasNode(id)) {
104
- this._graph.dropNode(id);
105
- }
106
- }
107
-
108
- addConnection (initiator: any, sessionKey: string, peerId: string) {
109
- if (!this._graph.hasNode(peerId)) {
110
- this._graph.addNode(peerId);
111
- }
112
-
113
- if (initiator) {
114
- this._graph.addEdgeWithKey(sessionKey, this._owner, peerId);
115
- } else {
116
- this._graph.addEdgeWithKey(sessionKey, peerId, this._owner);
117
- }
118
-
119
- this.publish();
120
- }
121
-
122
- deleteConnection (peer1: string, peer2: string) {
123
- if (!this._graph.hasEdge(peer1, peer2)) {
124
- return;
125
- }
126
- this._graph.dropEdge(peer1, peer2);
127
- this.publish();
128
- }
129
- }
@@ -1,77 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import { Network } from './network';
6
-
7
- export const PresenceService = {
8
- name: 'presence',
9
- events: {
10
- '$node.disconnected' (ctx) {
11
- const { node } = ctx.params;
12
- this._network.deletePeer(node.id);
13
- },
14
- '$node.connected' (ctx) {
15
- const { node } = ctx.params;
16
- this._network.addPeer(node.id);
17
- this._network.publish();
18
- },
19
- 'presence.update' (ctx) {
20
- if (ctx.nodeID === this.broker.nodeID) {
21
- return;
22
- }
23
-
24
- const { timestamp, connections } = ctx.params;
25
- return this._network.update(ctx.nodeID, timestamp, connections);
26
- }
27
- },
28
- actions: {
29
- network () {
30
- return this._network.graph.export();
31
- }
32
- },
33
- created () {
34
- const { transporter } = this.broker.options;
35
-
36
- this._network = new Network(this.broker.nodeID, data => {
37
- return this.broker.broadcast('presence.update', data);
38
- });
39
-
40
- this.broker.shared.network = this._network;
41
-
42
- this._network.on('change', (graph) => {
43
- this.broker.broadcastLocal('$broker.presence-update', graph);
44
- });
45
-
46
- transporter.peers.forEach(peer => {
47
- try {
48
- this._network.addConnection(peer.initiator, peer.sessionKey.toString('hex'), peer.id.toString('hex'));
49
- } catch (err) {
50
- this.logger.error(err);
51
- }
52
- });
53
-
54
- transporter.on('peer-added', ({ initiator, sessionKey, peerId }) => {
55
- try {
56
- this._network.addConnection(initiator, sessionKey.toString('hex'), peerId.toString('hex'));
57
- } catch (err) {
58
- this.logger.error(err);
59
- }
60
- });
61
-
62
- transporter.on('peer-deleted', ({ sessionKey }) => {
63
- if (!sessionKey) {
64
- return;
65
- }
66
-
67
- try {
68
- this._network.deleteConnection(sessionKey.toString('hex'));
69
- } catch (err) {
70
- this.logger.error(err);
71
- }
72
- });
73
- },
74
- async started () {
75
- this._network.publish();
76
- }
77
- };
@@ -1,259 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import { AbortController } from '@azure/abort-controller';
6
- import moment from 'moment';
7
-
8
- import { getSystemInfo, getServiceInfo } from '../system-information';
9
-
10
- const delay = (ms, signal) => new Promise((resolve, reject) => {
11
- const timer = setTimeout(() => {
12
- signal.removeEventListener('abort', onAbort);
13
- resolve();
14
- }, ms);
15
-
16
- const onAbort = () => {
17
- signal.removeEventListener('abort', onAbort);
18
- clearTimeout(timer);
19
- reject(new Error('aborted'));
20
- };
21
- signal.addEventListener('abort', onAbort);
22
- });
23
-
24
- export const StatusService = {
25
- name: 'status',
26
- settings: {
27
- graphql: {
28
- type: `
29
- type Status {
30
- id: String!
31
- updatedAt: Timestamp!
32
- version: String!
33
- nodes: [Node]!
34
- }
35
-
36
- type Node {
37
- id: String!
38
- kubeStatus: KubeStatus!
39
- connections: [Connection]!
40
- signal: Signal
41
- }
42
-
43
- type Connection {
44
- id: String!
45
- target: String!
46
- }
47
-
48
- type Signal {
49
- topics: [Topic]!
50
- }
51
-
52
- type Topic {
53
- id: String!
54
- peers: [String]!
55
- }
56
-
57
- type KubeStatus {
58
- system: KubeSystemInfo
59
- services: [KubeService!]
60
- }
61
-
62
- type KubeSystemInfo {
63
- version: String
64
- cpu: CPUInfo,
65
- memory: MemoryInfo,
66
- device: DeviceInfo,
67
- network: NetworkInfo
68
- os: OSInfo
69
- time: TimeInfo
70
- nodejs: NodeJSInfo
71
- }
72
-
73
- type KubeService {
74
- name: String!
75
- status: String!
76
- cpu: Int!
77
- memory: Int!
78
- }
79
-
80
- type CPUInfo {
81
- brand: String!
82
- cores: Int!
83
- manufacturer: String!
84
- vendor: String!
85
- speed: String!
86
- }
87
-
88
- type MemoryInfo {
89
- total: String!
90
- free: String!
91
- used: String!
92
- swaptotal: String!
93
- }
94
-
95
- type DeviceInfo {
96
- model: String!
97
- serial: String!
98
- version: String!
99
- }
100
-
101
- type NetworkInfo {
102
- hostname: String
103
- addresses: [String]!
104
- }
105
-
106
- type OSInfo {
107
- arch: String!
108
- platform: String!
109
- version: String
110
- }
111
-
112
- type TimeInfo {
113
- now: Timestamp!
114
- up: Timestamp!
115
- }
116
-
117
- type NodeJSInfo {
118
- version: String!
119
- }
120
- `
121
- }
122
- },
123
- actions: {
124
- status: {
125
- graphql: {
126
- query: 'status: Status'
127
- },
128
- handler (ctx) {
129
- const status = this.getStatus();
130
-
131
- return {
132
- updatedAt: status.updatedAt,
133
- id: ctx.nodeID,
134
- nodes: Array.from(status.nodes.values()),
135
- version: this.broker.metadata.version
136
- };
137
- }
138
- }
139
- },
140
- events: {
141
- '$node.connected' (ctx) {
142
- this._status.toUpdate = true;
143
- },
144
- '$node.disconnected' (ctx) {
145
- const { node } = ctx.params;
146
- this._status.nodes.delete(node.id);
147
- this._status.toUpdate = true;
148
- },
149
- '$broker.presence-update' (ctx) {
150
- this._status.toUpdate = true;
151
- },
152
- '$broker.discovery-update' (ctx) {
153
- this._status.toUpdate = true;
154
- },
155
- 'status.kube-status' (ctx) {
156
- this.updateKubeStatus(ctx.nodeID, ctx.params);
157
- }
158
- },
159
- methods: {
160
- getStatus () {
161
- const { network } = this.broker.shared;
162
-
163
- const nodes = this.broker.registry.getNodeList({ onlyAvailable: true, withServices: true });
164
-
165
- if (!this._status.toUpdate) {
166
- return this._status;
167
- }
168
-
169
- nodes.forEach(node => {
170
- const oldNode = this._status.nodes.get(node.id) || {};
171
-
172
- this._status.nodes.set(node.id, {
173
- id: node.id,
174
- kubeStatus: oldNode.kubeStatus || { services: [] },
175
- connections: network.getConnections(node.id).map(conn => ({
176
- id: conn.key,
177
- target: conn.target
178
- })),
179
- signal: {
180
- topics: this.getSignalPeers(node.id)
181
- }
182
- });
183
- });
184
-
185
- this._status.toUpdate = false;
186
- this._status.updatedAt = moment();
187
-
188
- return this._status;
189
- },
190
- updateKubeStatus (nodeID, { system, services }) {
191
- if (!this._status.nodes.has(nodeID)) {
192
- return;
193
- }
194
-
195
- const node = this._status.nodes.get(nodeID);
196
- node.kubeStatus = { system, services: services || [] };
197
-
198
- this._status.updatedAt = moment();
199
- },
200
- getSignalPeers (peerId) {
201
- const { peerMap } = this.broker.shared;
202
- const peerIdBuf = Buffer.from(peerId, 'hex');
203
- const peersByTopic = new Map();
204
-
205
- peerMap.topics.forEach(topic => {
206
- const topicStr = topic.toString('hex');
207
- peerMap.getPeersByTopic(topic)
208
- .filter(peer => peer.owner.equals(peerIdBuf))
209
- .map(peerMap.encode)
210
- .forEach(peer => {
211
- let value;
212
- if (peersByTopic.has(topicStr)) {
213
- value = peersByTopic.get(topicStr);
214
- } else {
215
- value = { id: topicStr, peers: [] };
216
- peersByTopic.set(topicStr, value);
217
- }
218
-
219
- if (value.peers.includes(peer.id)) {
220
- return;
221
- }
222
- value.peers.push(peer.id);
223
- });
224
- });
225
-
226
- return Array.from(peersByTopic.values());
227
- }
228
- },
229
- created () {
230
- this._status = {
231
- updatedAt: moment(),
232
- toUpdate: true,
233
- nodes: new Map()
234
- };
235
- },
236
- async started () {
237
- this.getStatus();
238
-
239
- this._controller = new AbortController();
240
- const signal = this._controller.signal;
241
-
242
- (async () => {
243
- while (!signal.aborted) {
244
- // TODO(unknown): This could be an option (pollInterval).
245
- await delay(10 * 1000, signal);
246
- const system = await getSystemInfo().catch(() => {});
247
- const services = await getServiceInfo().catch(() => {});
248
- if (system || services) {
249
- this.broker.broadcast('status.kube-status', { system, services });
250
- }
251
- }
252
- })().catch(() => {});
253
- },
254
- async stopped () {
255
- if (this._controller) {
256
- this._controller.abort();
257
- }
258
- }
259
- };
@@ -1,24 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import MoleculerWebService from 'moleculer-web';
6
-
7
- import { SignalServer } from '../signal';
8
-
9
- export const WebService = {
10
- name: 'web',
11
- mixins: [
12
- MoleculerWebService as any
13
- ],
14
- created (this: any) {
15
- this.settings.port = this.broker.metadata.port || 4000;
16
- this._signal = new SignalServer(this.server, this.broker);
17
- },
18
- async started (this: any) {
19
- return this._signal.open();
20
- },
21
- async stopped (this: any) {
22
- return this._signal.close();
23
- }
24
- };
package/src/shims.d.ts DELETED
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- declare module '@koush/wrtc'
6
- declare module 'monotonic-timestamp';
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- export * from './peer-map';
6
- export * from './signal-server';