@dxos/network-manager 2.33.9-dev.7d11f506 → 2.33.9-dev.9bbef4e2

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 (158) hide show
  1. package/dist/src/network-manager.blueprint-test.d.ts +3 -1
  2. package/dist/src/network-manager.blueprint-test.d.ts.map +1 -1
  3. package/dist/src/network-manager.blueprint-test.js +46 -17
  4. package/dist/src/network-manager.blueprint-test.js.map +1 -1
  5. package/dist/src/network-manager.browser-test.js +1 -1
  6. package/dist/src/network-manager.browser-test.js.map +1 -1
  7. package/dist/src/network-manager.d.ts.map +1 -1
  8. package/dist/src/network-manager.js +13 -12
  9. package/dist/src/network-manager.js.map +1 -1
  10. package/dist/src/network-manager.test.js +5 -4
  11. package/dist/src/network-manager.test.js.map +1 -1
  12. package/dist/src/proto/gen/dxos/credentials.d.ts +39 -0
  13. package/dist/src/proto/gen/dxos/credentials.d.ts.map +1 -1
  14. package/dist/src/proto/gen/dxos/halo/keys.d.ts +44 -2
  15. package/dist/src/proto/gen/dxos/halo/keys.d.ts.map +1 -1
  16. package/dist/src/proto/gen/dxos/halo/keys.js +4 -0
  17. package/dist/src/proto/gen/dxos/halo/keys.js.map +1 -1
  18. package/dist/src/proto/gen/dxos/mesh/signal.d.ts +74 -16
  19. package/dist/src/proto/gen/dxos/mesh/signal.d.ts.map +1 -1
  20. package/dist/src/proto/gen/dxos/mesh/signalMessage.d.ts +79 -0
  21. package/dist/src/proto/gen/dxos/mesh/signalMessage.d.ts.map +1 -0
  22. package/dist/src/proto/gen/dxos/mesh/signalMessage.js +3 -0
  23. package/dist/src/proto/gen/dxos/mesh/signalMessage.js.map +1 -0
  24. package/dist/src/proto/gen/google/protobuf.d.ts +8 -2
  25. package/dist/src/proto/gen/google/protobuf.d.ts.map +1 -1
  26. package/dist/src/proto/gen/index.d.ts +17 -4
  27. package/dist/src/proto/gen/index.d.ts.map +1 -1
  28. package/dist/src/proto/gen/index.js +1 -1
  29. package/dist/src/proto/gen/index.js.map +1 -1
  30. package/dist/src/proto/substitutions.d.ts +4 -0
  31. package/dist/src/proto/substitutions.d.ts.map +1 -1
  32. package/dist/src/proto/substitutions.js +3 -1
  33. package/dist/src/proto/substitutions.js.map +1 -1
  34. package/dist/src/protocol-factory.js +3 -3
  35. package/dist/src/protocol-factory.js.map +1 -1
  36. package/dist/src/signal/in-memory-signal-manager.d.ts +7 -7
  37. package/dist/src/signal/in-memory-signal-manager.d.ts.map +1 -1
  38. package/dist/src/signal/in-memory-signal-manager.js +34 -13
  39. package/dist/src/signal/in-memory-signal-manager.js.map +1 -1
  40. package/dist/src/signal/index.d.ts +1 -2
  41. package/dist/src/signal/index.d.ts.map +1 -1
  42. package/dist/src/signal/index.js +1 -2
  43. package/dist/src/signal/index.js.map +1 -1
  44. package/dist/src/signal/integration.test.d.ts +2 -0
  45. package/dist/src/signal/integration.test.d.ts.map +1 -0
  46. package/dist/src/signal/integration.test.js +102 -0
  47. package/dist/src/signal/integration.test.js.map +1 -0
  48. package/dist/src/signal/message-router.d.ts +20 -8
  49. package/dist/src/signal/message-router.d.ts.map +1 -1
  50. package/dist/src/signal/message-router.js +96 -17
  51. package/dist/src/signal/message-router.js.map +1 -1
  52. package/dist/src/signal/message-router.test.js +125 -22
  53. package/dist/src/signal/message-router.test.js.map +1 -1
  54. package/dist/src/signal/signal-client.d.ts +33 -17
  55. package/dist/src/signal/signal-client.d.ts.map +1 -1
  56. package/dist/src/signal/signal-client.js +102 -82
  57. package/dist/src/signal/signal-client.js.map +1 -1
  58. package/dist/src/signal/signal-client.test.js +60 -75
  59. package/dist/src/signal/signal-client.test.js.map +1 -1
  60. package/dist/src/signal/{websocket-signal-manager.d.ts → signal-manager-impl.d.ts} +13 -11
  61. package/dist/src/signal/signal-manager-impl.d.ts.map +1 -0
  62. package/dist/src/signal/signal-manager-impl.js +151 -0
  63. package/dist/src/signal/signal-manager-impl.js.map +1 -0
  64. package/dist/src/signal/signal-manager.d.ts +12 -11
  65. package/dist/src/signal/signal-manager.d.ts.map +1 -1
  66. package/dist/src/signal/signal-rpc-client.d.ts +19 -0
  67. package/dist/src/signal/signal-rpc-client.d.ts.map +1 -0
  68. package/dist/src/signal/signal-rpc-client.js +108 -0
  69. package/dist/src/signal/signal-rpc-client.js.map +1 -0
  70. package/dist/src/signal/signal-rpc-client.test.d.ts +2 -0
  71. package/dist/src/signal/signal-rpc-client.test.d.ts.map +1 -0
  72. package/dist/src/signal/signal-rpc-client.test.js +74 -0
  73. package/dist/src/signal/signal-rpc-client.test.js.map +1 -0
  74. package/dist/src/swarm/connection.d.ts +3 -3
  75. package/dist/src/swarm/connection.d.ts.map +1 -1
  76. package/dist/src/swarm/connection.js +8 -11
  77. package/dist/src/swarm/connection.js.map +1 -1
  78. package/dist/src/swarm/swarm.d.ts +6 -7
  79. package/dist/src/swarm/swarm.d.ts.map +1 -1
  80. package/dist/src/swarm/swarm.js +29 -25
  81. package/dist/src/swarm/swarm.js.map +1 -1
  82. package/dist/src/swarm/swarm.test.js +156 -115
  83. package/dist/src/swarm/swarm.test.js.map +1 -1
  84. package/dist/src/testing/test-protocol.d.ts.map +1 -1
  85. package/dist/src/testing/test-protocol.js +3 -3
  86. package/dist/src/testing/test-protocol.js.map +1 -1
  87. package/dist/src/topology/fully-connected-topology.d.ts +0 -1
  88. package/dist/src/topology/fully-connected-topology.d.ts.map +1 -1
  89. package/dist/src/topology/fully-connected-topology.js +4 -9
  90. package/dist/src/topology/fully-connected-topology.js.map +1 -1
  91. package/dist/src/topology/mmst-topology.d.ts +0 -1
  92. package/dist/src/topology/mmst-topology.d.ts.map +1 -1
  93. package/dist/src/topology/mmst-topology.js +6 -11
  94. package/dist/src/topology/mmst-topology.js.map +1 -1
  95. package/dist/src/topology/star-topology.d.ts +0 -1
  96. package/dist/src/topology/star-topology.d.ts.map +1 -1
  97. package/dist/src/topology/star-topology.js +5 -10
  98. package/dist/src/topology/star-topology.js.map +1 -1
  99. package/dist/src/topology/topology.d.ts +0 -6
  100. package/dist/src/topology/topology.d.ts.map +1 -1
  101. package/dist/src/transport/in-memory-transport.d.ts +2 -2
  102. package/dist/src/transport/in-memory-transport.d.ts.map +1 -1
  103. package/dist/src/transport/in-memory-transport.js +2 -2
  104. package/dist/src/transport/in-memory-transport.js.map +1 -1
  105. package/dist/src/transport/transport.d.ts +3 -3
  106. package/dist/src/transport/transport.d.ts.map +1 -1
  107. package/dist/src/transport/webrtc-transport.d.ts +3 -3
  108. package/dist/src/transport/webrtc-transport.d.ts.map +1 -1
  109. package/dist/src/transport/webrtc-transport.js +3 -3
  110. package/dist/src/transport/webrtc-transport.js.map +1 -1
  111. package/dist/tests-setup.js +1 -1
  112. package/dist/tsconfig.tsbuildinfo +1 -1
  113. package/package.json +17 -12
  114. package/src/network-manager.blueprint-test.ts +57 -22
  115. package/src/network-manager.browser-test.ts +1 -1
  116. package/src/network-manager.test.ts +8 -7
  117. package/src/network-manager.ts +10 -10
  118. package/src/proto/defs/dxos/mesh/signal.proto +54 -23
  119. package/src/proto/defs/dxos/mesh/signalMessage.proto +51 -0
  120. package/src/proto/gen/dxos/credentials.ts +40 -0
  121. package/src/proto/gen/dxos/halo/keys.ts +45 -2
  122. package/src/proto/gen/dxos/mesh/signal.ts +73 -16
  123. package/src/proto/gen/dxos/mesh/signalMessage.ts +83 -0
  124. package/src/proto/gen/google/protobuf.ts +9 -2
  125. package/src/proto/gen/index.ts +18 -5
  126. package/src/proto/substitutions.ts +3 -1
  127. package/src/protocol-factory.ts +1 -1
  128. package/src/signal/in-memory-signal-manager.ts +38 -13
  129. package/src/signal/index.ts +1 -2
  130. package/src/signal/integration.test.ts +117 -0
  131. package/src/signal/message-router.test.ts +169 -58
  132. package/src/signal/message-router.ts +120 -27
  133. package/src/signal/signal-client.test.ts +70 -90
  134. package/src/signal/signal-client.ts +120 -87
  135. package/src/signal/signal-manager-impl.ts +166 -0
  136. package/src/signal/signal-manager.ts +12 -12
  137. package/src/signal/signal-rpc-client.test.ts +86 -0
  138. package/src/signal/signal-rpc-client.ts +121 -0
  139. package/src/swarm/connection.ts +6 -9
  140. package/src/swarm/swarm.test.ts +208 -167
  141. package/src/swarm/swarm.ts +26 -22
  142. package/src/testing/test-protocol.ts +1 -1
  143. package/src/topology/fully-connected-topology.ts +2 -10
  144. package/src/topology/mmst-topology.ts +2 -10
  145. package/src/topology/star-topology.ts +2 -8
  146. package/src/topology/topology.ts +0 -7
  147. package/src/transport/in-memory-transport.ts +3 -3
  148. package/src/transport/transport.ts +3 -3
  149. package/src/transport/webrtc-transport.ts +4 -4
  150. package/dist/src/signal/websocket-rpc.d.ts +0 -30
  151. package/dist/src/signal/websocket-rpc.d.ts.map +0 -1
  152. package/dist/src/signal/websocket-rpc.js +0 -203
  153. package/dist/src/signal/websocket-rpc.js.map +0 -1
  154. package/dist/src/signal/websocket-signal-manager.d.ts.map +0 -1
  155. package/dist/src/signal/websocket-signal-manager.js +0 -134
  156. package/dist/src/signal/websocket-signal-manager.js.map +0 -1
  157. package/src/signal/websocket-rpc.ts +0 -208
  158. package/src/signal/websocket-signal-manager.ts +0 -158
@@ -1,158 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- import assert from 'assert';
6
- import debug from 'debug';
7
-
8
- import { Event, synchronized } from '@dxos/async';
9
- import { PublicKey } from '@dxos/protocols';
10
- import { ComplexMap } from '@dxos/util';
11
-
12
- import { Answer, Message } from '../proto/gen/dxos/mesh/signal';
13
- import { SignalApi } from './signal-api';
14
- import { SignalClient } from './signal-client';
15
- import { SignalManager } from './signal-manager';
16
-
17
- const log = debug('dxos:network-manager:websocket-signal-manager');
18
-
19
- export class WebsocketSignalManager implements SignalManager {
20
- private readonly _servers = new Map<string, SignalClient>();
21
-
22
- /** Topics joined: topic => peerId */
23
- private readonly _topicsJoined = new ComplexMap<PublicKey, PublicKey>(topic => topic.toHex());
24
- private readonly _topicsJoinedPerSignal = new Map<string, ComplexMap<PublicKey, PublicKey>>();
25
-
26
- private _reconcileTimeoutId?: NodeJS.Timeout;
27
-
28
- readonly statusChanged = new Event<SignalApi.Status[]>();
29
- readonly commandTrace = new Event<SignalApi.CommandTrace>();
30
- readonly peerCandidatesChanged = new Event<[topic: PublicKey, candidates: PublicKey[]]>()
31
- readonly onSignal = new Event<Message>();
32
-
33
- constructor (
34
- private readonly _hosts: string[],
35
- private readonly _onOffer: (message: Message) => Promise<Answer>
36
- ) {
37
- log(`Created WebsocketSignalManager with signal servers: ${_hosts}`);
38
- assert(_hosts.length === 1, 'Only a single signaling server connection is supported');
39
- for (const host of this._hosts) {
40
- const server = new SignalClient(
41
- host,
42
- async msg => this._onOffer(msg),
43
- async msg => this.onSignal.emit(msg)
44
- );
45
-
46
- this._servers.set(host, server);
47
- server.statusChanged.on(() => this.statusChanged.emit(this.getStatus()));
48
- server.commandTrace.on(trace => this.commandTrace.emit(trace));
49
- this._topicsJoinedPerSignal.set(host, new ComplexMap(x => x.toHex()));
50
- }
51
- }
52
-
53
- getStatus (): SignalApi.Status[] {
54
- return Array.from(this._servers.values()).map(server => server.getStatus());
55
- }
56
-
57
- join (topic: PublicKey, peerId: PublicKey) {
58
- log(`Join ${topic} ${peerId}`);
59
- this._topicsJoined.set(topic, peerId);
60
- void this._reconcileJoinedTopics();
61
- }
62
-
63
- leave (topic: PublicKey, peerId: PublicKey) {
64
- log(`Leave ${topic} ${peerId}`);
65
- this._topicsJoined.delete(topic);
66
- void this._reconcileJoinedTopics();
67
- }
68
-
69
- @synchronized
70
- private async _reconcileJoinedTopics () {
71
- log('Reconciling joined topics');
72
- const promises: Promise<void>[] = [];
73
- for (const [host, server] of this._servers.entries()) {
74
- for (const [topic, peerId] of this._topicsJoined.entries()) {
75
- if (!this._topicsJoinedPerSignal.get(host)!.has(topic)) {
76
- log(`Join ${topic} as ${peerId} on ${host}`);
77
- promises.push(server.join(topic, peerId).then(
78
- peers => {
79
- log(`Joined successfully ${host}`);
80
- this._topicsJoinedPerSignal.get(host)!.set(topic, peerId);
81
-
82
- log(`Peer candidates changed ${topic} ${peers}`);
83
- // TODO(marik-d): Deduplicate peers.
84
- this.peerCandidatesChanged.emit([topic, peers]);
85
- },
86
- err => {
87
- log(`Join error ${host} ${err.message}`);
88
- this._topicsJoinedPerSignal.get(host)!.delete(topic);
89
- this._reconcile();
90
- }
91
- ));
92
- }
93
-
94
- for (const [topic, peerId] of this._topicsJoinedPerSignal.get(host)!.entries()) {
95
- if (!this._topicsJoined.has(topic)) {
96
- log(`Leave ${topic} as ${peerId} on ${host}`);
97
- promises.push(server.leave(topic, peerId).then(
98
- () => {
99
- log(`Left successfully ${host}`);
100
- this._topicsJoinedPerSignal.get(host)!.delete(topic);
101
- },
102
- err => {
103
- log(`Leave error ${host} ${err.message}`);
104
- this._reconcile();
105
- }
106
- ));
107
- }
108
- }
109
- }
110
- }
111
- await Promise.all(promises);
112
- }
113
-
114
- private _reconcile () {
115
- if (this._reconcileTimeoutId !== undefined) {
116
- return;
117
- }
118
- log('Will reconcile in 3 seconds');
119
- this._reconcileTimeoutId = setTimeout(async () => {
120
- this._reconcileTimeoutId = undefined;
121
- await this._reconcileJoinedTopics();
122
- }, 3_000);
123
- }
124
-
125
- lookup (topic: PublicKey) {
126
- log(`Lookup ${topic}`);
127
- for (const server of this._servers.values()) {
128
- server.lookup(topic).then(
129
- peers => {
130
- log(`Peer candidates changed ${topic} ${peers}`);
131
- // TODO(marik-d): Deduplicate peers.
132
- this.peerCandidatesChanged.emit([topic, peers]);
133
- },
134
- () => {
135
- // Error will already be reported in devtools. No need to do anything here.
136
- }
137
- );
138
- }
139
- }
140
-
141
- offer (msg: Message) {
142
- log(`Offer ${msg.remoteId}`);
143
- // TODO(marik-d): Broadcast to all signal servers.
144
- return Array.from(this._servers.values())[0].offer(msg);
145
- }
146
-
147
- async signal (msg: Message) {
148
- log(`Signal ${msg.remoteId}`);
149
- for (const server of this._servers.values()) {
150
- void server.signal(msg);
151
- // TODO(marik-d): Error handling.
152
- }
153
- }
154
-
155
- async destroy () {
156
- await Promise.all(Array.from(this._servers.values()).map(server => server.close()));
157
- }
158
- }