@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,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":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;AAEF,kEAAgC;AAChC,mCAAsC;AACtC,wEAAsC;AACtC,0DAAmE;AACnE,0FAAiD;AACjD,oDAA4B;AAE5B,+CAA4C;AAE5C,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,cAAc,GAAG,CAAC,CAAC;AAEzB,MAAM,WAAW,GAAG;IAClB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,gBAAM,CAAC,cAAc,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzF,gBAAM,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,gBAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,gBAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAM,CAAC,MAAM,CAAC,KAAK,EAAE,gBAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QAC3E,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,gBAAM,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;QACrD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,MAAM,IAAK,SAAQ,qBAAY;IAC7B,YAAa,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;QAChD,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAChC,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;IACxC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,0BAAM,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACjG,CAAC;IAED,kCAAkC;IAClC,IAAI,EAAE;QACJ,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,SAAS,CAAE,GAAG;QACZ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,iBAAiB,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,CAAE,GAAG;QACP,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;YAC1B,OAAO;SACR;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED,mBAAmB,CAAE,KAAK,EAAE,OAAO;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5B,IAAI,CAAC,SAAS,GAAG,IAAI,mCAAQ,CAAC,IAAI,CAAC,UAAU,EAAE;YAC7C,OAAO;YACP,IAAI,CAAE,IAAI;gBACR,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YACD,OAAO;gBACL,IAAI,MAAM,CAAC,SAAS,EAAE;oBACpB,OAAO;iBACR;gBACD,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YACD,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC;SAC9D,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEvD,IAAA,uBAAG,EAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,SAAU,SAAQ,6BAAmB;IACzC,YAAa,KAAK,EAAE,OAAO;QACzB,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAS,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;YAClD,EAAE,EAAE,IAAI,CAAC,SAAS;YAClB,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,OAAO,EAAE,MAAM,CAAC,gBAAgB;SACjC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAE,MAAM,EAAE,IAAI;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC;YACpB,SAAS,EAAE,IAAI,CAAC,MAAM;YACtB,MAAM;YACN,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,OAAO,EAAE,IAAI,CAAC,QAAQ;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;YACxB,IAAI,MAAM,CAAC,SAAS,EAAE;gBACpB,OAAO;aACR;YACD,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE;gBAC1D,OAAO;aACR;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACvG,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAEhC,IAAA,uBAAG,EAAC,MAAM,EAAE,GAAG,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACjC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACzG,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAE,OAAO,EAAE,OAAO;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,IAAI,CAAE,EAAE,EAAE,OAAO;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAE5E,IAAI,CAAC,IAAI,EAAE;YACT,OAAO,KAAK,CAAC;SACd;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QAE7B,IAAI,CAAC,mBAAmB,GAAG,WAAW,CAAC,GAAG,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC/B,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QAC9B,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW;QACT,OAAO;YACL,sBAAsB;YACtB,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YACpD,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;gBACpB,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE;oBAChC,IAAI;wBACF,IAAI,EAAE,KAAK,iBAAiB,EAAE;4BAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;4BACjC,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE;gCAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;6BACzD;yBACF;6BAAM;4BACL,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;yBACnD;qBACF;oBAAC,OAAO,GAAG,EAAE,GAAE;gBAClB,CAAC,CAAC;gBAEF,IAAI,CAAC,EAAE,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBACnC,OAAO,GAAG,EAAE;oBACV,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;gBACtC,CAAC,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF;AAED,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC"}
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
- };