@dxos/signal 2.33.9-dev.9dc01397 → 2.33.9-dev.a2586ac4

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 (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 +13 -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';