@dxos/signal 2.33.9-dev.002e8917 → 2.33.9-dev.227ba79d

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 +297 -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,151 +0,0 @@
1
- "use strict";
2
- //
3
- // Copyright 2021 DXOS.org
4
- //
5
- var __importDefault = (this && this.__importDefault) || function (mod) {
6
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ProtocolTransporter = void 0;
10
- const events_1 = require("events");
11
- const hypercore_crypto_1 = require("hypercore-crypto");
12
- const hyperswarm_1 = __importDefault(require("hyperswarm"));
13
- const node_assert_1 = __importDefault(require("node:assert"));
14
- const p_event_1 = __importDefault(require("p-event"));
15
- const simple_hypercore_protocol_1 = __importDefault(require("simple-hypercore-protocol"));
16
- const bootstrap_node_1 = require("./bootstrap-node");
17
- const messenger_1 = require("./messenger");
18
- const { Transporters: { Base: BaseTransporter } } = require('moleculer'); // eslint-disable-line @typescript-eslint/no-var-requires
19
- class ProtocolTransporter extends BaseTransporter {
20
- static keyPair() {
21
- return simple_hypercore_protocol_1.default.keyPair();
22
- }
23
- constructor(opts) {
24
- const { topic, keyPair, hyperswarm = {}, asBootstrap = false, bootstrapPort } = opts;
25
- (0, node_assert_1.default)(Buffer.isBuffer(topic), 'topic is required and must be a buffer of 32 bytes');
26
- (0, node_assert_1.default)(keyPair && Buffer.isBuffer(keyPair.publicKey) && Buffer.isBuffer(keyPair.secretKey), 'keyPair is required and must be an object of { publicKey: Buffer<32>, secretKey: Buffer<32> }');
27
- super(opts);
28
- this._topic = topic;
29
- this._keyPair = keyPair;
30
- this._discoveryKey = (0, hypercore_crypto_1.discoveryKey)(topic);
31
- this._hyperswarmOptions = hyperswarm;
32
- this._messenger = new messenger_1.Messenger(this._topic, this._keyPair);
33
- this._ee = new events_1.EventEmitter();
34
- this._nanomessage = null;
35
- this._swarm = null;
36
- this._bootstrapNode = null;
37
- if (asBootstrap) {
38
- this._bootstrapNode = new bootstrap_node_1.BootstrapNode({ port: bootstrapPort });
39
- }
40
- this.onPeerConnection = this.onPeerConnection.bind(this);
41
- this._messenger.on('message', message => this._ee.emit(message.topic, message.data));
42
- this._messenger.on('peer-added', (peer) => this._ee.emit('peer-added', peer));
43
- this._messenger.on('peer-deleted', (peer) => this._ee.emit('peer-deleted', peer));
44
- }
45
- get dht() {
46
- return this._swarm && this._swarm.network.discovery && this._swarm.network.discovery.dht;
47
- }
48
- get onlyLocal() {
49
- return this._messenger.peers.length === 0;
50
- }
51
- get peers() {
52
- return this._messenger ? this._messenger.peers : [];
53
- }
54
- on(event, handler) {
55
- this._ee.on(event, handler);
56
- }
57
- off(event, handler) {
58
- this._ee.off(event, handler);
59
- }
60
- waitForConnected() {
61
- if (this.connected) {
62
- return;
63
- }
64
- return (0, p_event_1.default)(this, 'connected');
65
- }
66
- async connect() {
67
- const opts = {
68
- ...this._hyperswarmOptions
69
- };
70
- if (this._bootstrapNode) {
71
- await this._bootstrapNode.start(this.broker);
72
- if (!opts.bootstrap) {
73
- opts.bootstrap = [];
74
- }
75
- const address = await this._bootstrapNode.getAddress();
76
- opts.bootstrap.push(`${address.address}:${address.port}`);
77
- }
78
- if (opts.bootstrap) {
79
- opts.bootstrap = [...new Set(opts.bootstrap)];
80
- }
81
- this.logger.info('Bootstrap nodes', opts.bootstrap ? opts.bootstrap : 'default');
82
- this._swarm = (0, hyperswarm_1.default)(opts);
83
- this._swarm.on('connection', this.onPeerConnection);
84
- this._swarm.once('close', () => {
85
- if (this.connected) {
86
- this.connected = false;
87
- }
88
- this._swarm.removeListener('connection', this.onPeerConnection);
89
- this.logger.warn('ProtocolTransporter disconnected');
90
- });
91
- await this._messenger.open();
92
- return new Promise((resolve, reject) => {
93
- const onError = (err) => {
94
- this.logger.error('ProtocolTransporter error', err.message);
95
- reject(err);
96
- };
97
- this._swarm.once('error', onError);
98
- this._swarm.join(this._discoveryKey, {
99
- lookup: true,
100
- announce: true
101
- }, () => {
102
- this.logger.info('ProtocolTransporter connected');
103
- this._swarm.removeListener('error', onError);
104
- this._ee.emit('connected');
105
- void this.onConnected().then(resolve);
106
- });
107
- });
108
- }
109
- async disconnect() {
110
- if (this._bootstrapNode) {
111
- await this._bootstrapNode.stop();
112
- }
113
- if (this._swarm) {
114
- await new Promise(resolve => this._swarm.destroy(() => resolve()));
115
- await this._messenger.close();
116
- }
117
- }
118
- subscribe(cmd, nodeID) {
119
- const t = this.getTopicName(cmd, nodeID);
120
- this._ee.on(t, msg => this.receive(cmd, msg));
121
- return Promise.resolve();
122
- }
123
- /**
124
- * Send data buffer.
125
- *
126
- * @param {String} topic
127
- * @param {Buffer} data
128
- * @param {Object} meta
129
- *
130
- * @returns {Promise}
131
- */
132
- send(topic, data, { packet }) {
133
- if (!this._swarm || this._messenger.closed || this._messenger.closing || this._messenger.peers.length === 0) {
134
- return Promise.resolve();
135
- }
136
- const sended = this._messenger.send(packet.target, { topic, data });
137
- if (!sended) {
138
- return this._messenger.broadcast({ topic, data });
139
- }
140
- }
141
- async onPeerConnection(socket, info) {
142
- try {
143
- await this._messenger.addPeer(socket, info);
144
- }
145
- catch (err) {
146
- this.logger.error('Peer error', err);
147
- }
148
- }
149
- }
150
- exports.ProtocolTransporter = ProtocolTransporter;
151
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transporter/index.js"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=messenger.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messenger.d.ts","sourceRoot":"","sources":["../../../src/transporter/messenger.js"],"names":[],"mappings":""}
@@ -1,193 +0,0 @@
1
- "use strict";
2
- //
3
- // Copyright 2021 DXOS.org
4
- //
5
- var __importDefault = (this && this.__importDefault) || function (mod) {
6
- return (mod && mod.__esModule) ? mod : { "default": mod };
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const end_of_stream_1 = __importDefault(require("end-of-stream"));
10
- const events_1 = require("events");
11
- const hypercore_crypto_1 = __importDefault(require("hypercore-crypto"));
12
- const emitter_1 = require("nanoresource-promise/emitter");
13
- const simple_hypercore_protocol_1 = __importDefault(require("simple-hypercore-protocol"));
14
- const varint_1 = __importDefault(require("varint"));
15
- const broadcast_1 = require("@dxos/broadcast");
16
- const BROADCAST_CHANNEL = 0;
17
- const DIRECT_CHANNEL = 1;
18
- const packetCodec = {
19
- encode: (obj) => {
20
- const length = Buffer.byteLength(obj.topic, 'utf8');
21
- const buf = Buffer.allocUnsafe(varint_1.default.encodingLength(length) + length + obj.data.length);
22
- varint_1.default.encode(length, buf);
23
- buf.write(obj.topic, varint_1.default.encode.bytes, length, 'utf8');
24
- obj.data.copy(buf, varint_1.default.encode.bytes + length);
25
- return buf;
26
- },
27
- decode: (buf) => {
28
- const length = varint_1.default.decode(buf);
29
- const topic = buf.slice(varint_1.default.decode.bytes, varint_1.default.decode.bytes + length);
30
- const data = buf.slice(varint_1.default.decode.bytes + length);
31
- return { topic: topic.toString(), data };
32
- }
33
- };
34
- class Peer extends events_1.EventEmitter {
35
- constructor({ initiator, socket, topic, keyPair }) {
36
- super();
37
- this._initiator = initiator;
38
- this._socket = socket;
39
- this._initializeProtocol(topic, keyPair);
40
- }
41
- get destroyed() {
42
- return this._socket.destroyed;
43
- }
44
- get initiator() {
45
- return this._initiator;
46
- }
47
- get publicKey() {
48
- return this._protocol.publicKey;
49
- }
50
- get remotePublicKey() {
51
- return this._protocol.remotePublicKey;
52
- }
53
- get sessionKey() {
54
- return this._protocol.handshakeHash ? hypercore_crypto_1.default.discoveryKey(this._protocol.handshakeHash) : null;
55
- }
56
- // The broadcast use an `id` prop.
57
- get id() {
58
- return this.remotePublicKey;
59
- }
60
- broadcast(buf) {
61
- if (this._socket.destroyed) {
62
- return;
63
- }
64
- this._protocol.extension(BROADCAST_CHANNEL, 0, buf);
65
- }
66
- send(buf) {
67
- if (this._socket.destroyed) {
68
- return;
69
- }
70
- this._protocol.extension(DIRECT_CHANNEL, 0, buf);
71
- }
72
- destroy() {
73
- if (this._socket.destroyed) {
74
- return;
75
- }
76
- return this._socket.destroy();
77
- }
78
- _initializeProtocol(topic, keyPair) {
79
- const socket = this._socket;
80
- this._protocol = new simple_hypercore_protocol_1.default(this._initiator, {
81
- keyPair,
82
- send(data) {
83
- socket.write(data);
84
- },
85
- onclose() {
86
- if (socket.destroyed) {
87
- return;
88
- }
89
- socket.destroy();
90
- },
91
- onhandshake: () => this.emit('handshake'),
92
- onextension: (ch, id, data) => this.emit('message', ch, data)
93
- });
94
- socket.on('data', (data) => this._protocol.recv(data));
95
- (0, end_of_stream_1.default)(socket, () => this._protocol.destroy());
96
- }
97
- }
98
- class Messenger extends emitter_1.NanoresourcePromise {
99
- constructor(topic, keyPair) {
100
- super();
101
- this._topic = topic;
102
- this._keyPair = keyPair;
103
- this._maxAge = 30 * 1000;
104
- this._broadcast = new broadcast_1.Broadcast(this._middleware(), {
105
- id: this.publicKey,
106
- maxAge: this._maxAge,
107
- maxSize: Number.MAX_SAFE_INTEGER
108
- });
109
- this._peers = new Set();
110
- }
111
- get publicKey() {
112
- return this._keyPair.publicKey;
113
- }
114
- get peers() {
115
- return Array.from(this._peers.values());
116
- }
117
- addPeer(socket, info) {
118
- const peer = new Peer({
119
- initiator: info.client,
120
- socket,
121
- topic: this._topic,
122
- keyPair: this._keyPair
123
- });
124
- peer.on('handshake', () => {
125
- if (socket.destroyed) {
126
- return;
127
- }
128
- if (info.deduplicate(peer.remotePublicKey, peer.publicKey)) {
129
- return;
130
- }
131
- this._peers.add(peer);
132
- this._broadcast.updatePeers(this.peers);
133
- this.emit('peer-added', { initiator: peer.initiator, sessionKey: peer.sessionKey, peerId: peer.id });
134
- });
135
- const onBroadcast = (ch, message) => this.emit('peer-message', ch, message);
136
- peer.on('message', onBroadcast);
137
- (0, end_of_stream_1.default)(socket, () => {
138
- this._peers.delete(peer);
139
- this._broadcast.updatePeers(this.peers);
140
- peer.off('message', onBroadcast);
141
- this.emit('peer-deleted', { initiator: peer.initiator, sessionKey: peer.sessionKey, peerId: peer.id });
142
- });
143
- return peer;
144
- }
145
- broadcast(message, options) {
146
- return this._broadcast.publish(packetCodec.encode(message), options);
147
- }
148
- send(id, message) {
149
- const peer = this.peers.find(p => p.remotePublicKey.toString('hex') === id);
150
- if (!peer) {
151
- return false;
152
- }
153
- return peer.send(packetCodec.encode(message));
154
- }
155
- async _open() {
156
- await this._broadcast.open();
157
- this._pruneCacheInterval = setInterval(() => {
158
- this._broadcast.pruneCache();
159
- }, this._maxAge);
160
- }
161
- async _close() {
162
- await this._broadcast.close();
163
- clearInterval(this._pruneCacheInterval);
164
- }
165
- _middleware() {
166
- return {
167
- // Send must be async.
168
- send: async (packet, node) => node.broadcast(packet),
169
- subscribe: (onData) => {
170
- const onMessage = (ch, message) => {
171
- try {
172
- if (ch === BROADCAST_CHANNEL) {
173
- const response = onData(message);
174
- if (response && response.data) {
175
- this.emit('message', packetCodec.decode(response.data));
176
- }
177
- }
178
- else {
179
- this.emit('message', packetCodec.decode(message));
180
- }
181
- }
182
- catch (err) { }
183
- };
184
- this.on('peer-message', onMessage);
185
- return () => {
186
- this.off('peer-message', onMessage);
187
- };
188
- }
189
- };
190
- }
191
- }
192
- exports.Messenger = Messenger;
193
- //# sourceMappingURL=messenger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"messenger.js","sourceRoot":"","sources":["../../../src/transporter/messenger.js"],"names":[],"mappings":"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"}
package/src/bin.ts DELETED
@@ -1,81 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- //
4
- // Copyright 2021 DXOS.org
5
- //
6
-
7
- // TODO(burdon): Refactor and rename (main) so that this is imported from `bin/signal.js`.
8
-
9
- import crypto from 'crypto';
10
- import yargs from 'yargs';
11
-
12
- import { createBroker, LogFormat, LogLevel } from './broker';
13
-
14
- const LOG_LEVELS: LogLevel[] = ['debug', 'info', 'warn', 'error'];
15
- const DEFAULT_LOG_LEVEL: LogLevel = 'info';
16
-
17
- const LOG_FORMATS: LogFormat[] = ['full', 'short', 'simple', 'json'];
18
- const DEFAULT_LOG_FORMAT: LogFormat = 'full';
19
-
20
- yargs
21
- .command('$0', 'start a signal server', {
22
- topic: {
23
- describe: 'topic to find other signal servers',
24
- default: '#dxos',
25
- type: 'string'
26
- },
27
- port: {
28
- alias: 'p',
29
- describe: 'defines a port to listening',
30
- default: 4000
31
- },
32
- bootstrap: {
33
- alias: 'b',
34
- describe: 'defines a list of bootstrap nodes',
35
- type: 'string'
36
- },
37
- asBootstrap: {
38
- describe: 'enable the signal as a bootstrap node',
39
- type: 'boolean',
40
- default: false
41
- },
42
- repl: {
43
- alias: 'r',
44
- describe: 'start a repl console with your signal',
45
- type: 'boolean'
46
- },
47
- logLevel: {
48
- alias: 'l',
49
- describe: 'defines the log level',
50
- default: DEFAULT_LOG_LEVEL,
51
- choices: LOG_LEVELS
52
- },
53
- logFormat: {
54
- describe: 'defines the log format',
55
- default: DEFAULT_LOG_FORMAT,
56
- choices: LOG_FORMATS
57
- },
58
- logDir: {
59
- describe: 'defines a log directory',
60
- type: 'string'
61
- }
62
- }, (argv) => {
63
- const topic = crypto.createHash('sha256')
64
- .update(argv.topic)
65
- .digest();
66
-
67
- void createBroker(topic, {
68
- port: argv.port,
69
- hyperswarm: {
70
- bootstrap: argv.bootstrap ? argv.bootstrap.split(',') : undefined,
71
- maxPeers: 5
72
- },
73
- asBootstrap: argv.asBootstrap,
74
- repl: argv.repl,
75
- logLevel: argv.logLevel,
76
- logFormat: argv.logFormat,
77
- logDir: argv.logDir
78
- }).start();
79
- })
80
- .help()
81
- .parse();
@@ -1,35 +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:broker');
12
-
13
- jest.setTimeout(100 * 1000);
14
-
15
- const MAX_BROKERS = 10;
16
-
17
- test(`${MAX_BROKERS} brokers connectivity`, async () => {
18
- const topic = crypto.randomBytes(32);
19
-
20
- const brokers = [...Array(MAX_BROKERS).keys()].map(i => createBroker(topic, { port: 4000 + i, logger: false, hyperswarm: { bootstrap: false } }));
21
-
22
- const waitForConnected = Promise.all(brokers.map(broker => {
23
- const nodes = brokers.filter(b => b.nodeID !== broker.nodeID).map(b => b.nodeID);
24
- return Promise.all(nodes.map(nodeID => pEvent(broker.localBus, '$node.connected', ({ node }) => node.id === nodeID)));
25
- }));
26
-
27
- log('> starting brokers');
28
- await Promise.all(brokers.map(b => b.start()));
29
-
30
- log('> waiting for the nodes to be connected');
31
- await waitForConnected;
32
-
33
- log('> stopping brokers');
34
- return Promise.all(brokers.map(b => b.stop()));
35
- });
package/src/broker.ts DELETED
@@ -1,134 +0,0 @@
1
- //
2
- // Copyright 2021 DXOS.org
3
- //
4
-
5
- import crypto from 'crypto';
6
- import { ServiceBroker } from 'moleculer';
7
- import assert from 'node:assert';
8
-
9
- import packageJSON from '../package.json';
10
- import { Serializer } from './serializer';
11
- import { DiscoveryService, PresenceService, StatusService, WebService } from './services';
12
- import { PeerMap } from './signal';
13
- import { ProtocolTransporter } from './transporter';
14
-
15
- export const SIGNAL_PROTOCOL_VERSION = 4;
16
-
17
- export type LogLevel = 'fatal' | 'error' | 'warn' | 'info' | 'debug' | 'trace'
18
- export type LogFormat = 'full' | 'short' | 'simple' | 'json'
19
-
20
- export interface CreateBrokerOpts {
21
- port?: string | number,
22
- keyPair?: { publicKey: Buffer, secretKey: Buffer },
23
- hyperswarm?: { bootstrap?: boolean | string[], maxPeers?: number },
24
- asBootstrap?: boolean,
25
- repl?: boolean,
26
- logger?: boolean,
27
- logLevel?: LogLevel,
28
- logFormat?: LogFormat,
29
- logDir?: string,
30
- discoveryService?: boolean,
31
- presenceService?: boolean,
32
- statusService?: boolean,
33
- }
34
-
35
- /**
36
- * Create a ServiceBroker
37
- */
38
- export const createBroker = (topic: Buffer, opts: CreateBrokerOpts = {}) => {
39
- assert(Buffer.isBuffer(topic) && topic.length === 32, 'topic is required and must be a buffer of 32 bytes');
40
-
41
- // TODO(burdon): Lint error (void function used).
42
- topic = crypto.createHash('sha256')
43
- .update(topic.toString('hex') + SIGNAL_PROTOCOL_VERSION)
44
- .digest();
45
-
46
- const {
47
- port = process.env.PORT ?? 4000,
48
- keyPair = ProtocolTransporter.keyPair(),
49
- hyperswarm,
50
- asBootstrap = false,
51
- repl = false,
52
- logger: loggerEnabled = true,
53
- logLevel,
54
- logFormat = 'full',
55
- logDir,
56
- discoveryService = true,
57
- presenceService = true,
58
- statusService = true
59
- } = opts;
60
-
61
- const logger: {type: string, options: any} | false = loggerEnabled
62
- ? {
63
- type: 'Console',
64
- options: {
65
- formatter: logFormat
66
- }
67
- }
68
- : false;
69
-
70
- if (logger && logDir) {
71
- logger.type = 'File';
72
- logger.options = {
73
- folder: logDir,
74
- filename: 'dxos-signal-{nodeID}-{date}.log',
75
- formatter: logFormat
76
- };
77
- }
78
-
79
- const broker = new ServiceBroker({
80
- nodeID: keyPair.publicKey.toString('hex'),
81
- logger,
82
- logLevel,
83
- // code repl,
84
- transporter: new ProtocolTransporter({
85
- topic,
86
- keyPair,
87
- hyperswarm,
88
- asBootstrap,
89
- bootstrapPort: port
90
- }),
91
- serializer: new Serializer(),
92
- metadata: {
93
- port,
94
- version: packageJSON.version
95
- },
96
- created: (broker) => {
97
- broker.shared = {
98
- keyPair,
99
- peerMap: new PeerMap(keyPair.publicKey)
100
- };
101
- },
102
- started: (broker) => {
103
- broker.logger.info('SIGNAL_PROTOCOL_VERSION:', SIGNAL_PROTOCOL_VERSION);
104
- broker.logger.info('SIGNAL_PROTOCOL_TOPIC:', topic.toString('hex'));
105
-
106
- if (repl) {
107
- return broker.repl();
108
- }
109
- },
110
- errorHandler (err: any, info) {
111
- // Handle the error.
112
- if (err.code) {
113
- // Ignore webrtc peer errors.
114
- (this.logger as any).debug('GLOBAL_ERROR:', err);
115
- return;
116
- }
117
- (this.logger as any).warn('GLOBAL_ERROR:', err);
118
- }
119
- });
120
-
121
- broker.createService(WebService);
122
-
123
- if (discoveryService) {
124
- broker.createService(DiscoveryService);
125
- }
126
- if (presenceService) {
127
- broker.createService(PresenceService);
128
- }
129
- if (statusService) {
130
- broker.createService(StatusService);
131
- }
132
-
133
- return broker;
134
- };