@dxos/network-manager 0.10.0 → 0.11.1

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 (56) hide show
  1. package/dist/lib/chunk-wire-protocol.mjs +3554 -0
  2. package/dist/lib/chunk-wire-protocol.mjs.map +1 -0
  3. package/dist/lib/index.mjs +294 -0
  4. package/dist/lib/index.mjs.map +1 -0
  5. package/dist/lib/testing.mjs +237 -0
  6. package/dist/lib/testing.mjs.map +1 -0
  7. package/dist/lib/transport/tcp/tcp-transport.browser.mjs +34 -0
  8. package/dist/lib/transport/tcp/tcp-transport.browser.mjs.map +1 -0
  9. package/dist/lib/transport/tcp/tcp-transport.mjs +140 -0
  10. package/dist/lib/transport/tcp/tcp-transport.mjs.map +1 -0
  11. package/dist/lib/transport/tcp.mjs +1 -0
  12. package/dist/types/src/network-manager.d.ts +9 -0
  13. package/dist/types/src/network-manager.d.ts.map +1 -1
  14. package/dist/types/src/signal/swarm-messenger.d.ts +2 -7
  15. package/dist/types/src/signal/swarm-messenger.d.ts.map +1 -1
  16. package/dist/types/src/testing/test-builder.d.ts +2 -6
  17. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  18. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts.map +1 -1
  19. package/dist/types/tsconfig.tsbuildinfo +1 -1
  20. package/package.json +28 -31
  21. package/src/network-manager.ts +17 -4
  22. package/src/signal/integration.node.test.ts +7 -11
  23. package/src/signal/swarm-messenger.node.test.ts +7 -29
  24. package/src/signal/swarm-messenger.ts +3 -13
  25. package/src/swarm/swarm.test.ts +2 -2
  26. package/src/testing/test-builder.ts +48 -75
  27. package/src/tests/webrtc-transport.test.ts +4 -15
  28. package/src/transport/webrtc/rtc-peer-connection.ts +0 -3
  29. package/src/transport/webrtc/rtc-transport-proxy.test.ts +2 -1
  30. package/src/transport/webrtc/rtc-transport.test.ts +2 -1
  31. package/dist/lib/browser/chunk-ERB3AQAF.mjs +0 -3095
  32. package/dist/lib/browser/chunk-ERB3AQAF.mjs.map +0 -7
  33. package/dist/lib/browser/index.mjs +0 -244
  34. package/dist/lib/browser/index.mjs.map +0 -7
  35. package/dist/lib/browser/meta.json +0 -1
  36. package/dist/lib/browser/testing/index.mjs +0 -280
  37. package/dist/lib/browser/testing/index.mjs.map +0 -7
  38. package/dist/lib/browser/transport/tcp/index.mjs +0 -5
  39. package/dist/lib/browser/transport/tcp/index.mjs.map +0 -7
  40. package/dist/lib/browser/transport/tcp/tcp-transport.browser.mjs +0 -36
  41. package/dist/lib/browser/transport/tcp/tcp-transport.browser.mjs.map +0 -7
  42. package/dist/lib/browser/transport/tcp/tcp-transport.mjs +0 -125
  43. package/dist/lib/browser/transport/tcp/tcp-transport.mjs.map +0 -7
  44. package/dist/lib/node-esm/chunk-KYLPLEZQ.mjs +0 -3095
  45. package/dist/lib/node-esm/chunk-KYLPLEZQ.mjs.map +0 -7
  46. package/dist/lib/node-esm/index.mjs +0 -244
  47. package/dist/lib/node-esm/index.mjs.map +0 -7
  48. package/dist/lib/node-esm/meta.json +0 -1
  49. package/dist/lib/node-esm/testing/index.mjs +0 -280
  50. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  51. package/dist/lib/node-esm/transport/tcp/index.mjs +0 -5
  52. package/dist/lib/node-esm/transport/tcp/index.mjs.map +0 -7
  53. package/dist/lib/node-esm/transport/tcp/tcp-transport.browser.mjs +0 -36
  54. package/dist/lib/node-esm/transport/tcp/tcp-transport.browser.mjs.map +0 -7
  55. package/dist/lib/node-esm/transport/tcp/tcp-transport.mjs +0 -125
  56. package/dist/lib/node-esm/transport/tcp/tcp-transport.mjs.map +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/network-manager",
3
- "version": "0.10.0",
3
+ "version": "0.11.1",
4
4
  "description": "Network Manager",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -26,10 +26,10 @@
26
26
  "#tcp-transport": {
27
27
  "source": "./src/transport/tcp/index.ts",
28
28
  "types": "./dist/types/src/transport/tcp/index.d.ts",
29
- "browser": "./dist/lib/browser/transport/tcp/index.mjs",
30
- "node": "./dist/lib/node-esm/transport/tcp/index.mjs",
31
- "import": "./dist/lib/browser/transport/tcp/index.mjs",
32
- "require": "./dist/lib/node-esm/transport/tcp/index.mjs"
29
+ "browser": "./dist/lib/transport/tcp.mjs",
30
+ "node": "./dist/lib/transport/tcp.mjs",
31
+ "import": "./dist/lib/transport/tcp.mjs",
32
+ "require": "./dist/lib/transport/tcp.mjs"
33
33
  },
34
34
  "#tcp-transport-impl": {
35
35
  "source": {
@@ -37,28 +37,25 @@
37
37
  "default": "./src/transport/tcp/tcp-transport.ts"
38
38
  },
39
39
  "types": "./dist/types/src/transport/tcp/tcp-transport.d.ts",
40
- "browser": "./dist/lib/browser/transport/tcp/tcp-transport.browser.mjs",
41
- "default": "./dist/lib/node-esm/transport/tcp/tcp-transport.mjs"
40
+ "browser": "./dist/lib/transport/tcp/tcp-transport.browser.mjs",
41
+ "default": "./dist/lib/transport/tcp/tcp-transport.mjs"
42
42
  }
43
43
  },
44
44
  "exports": {
45
45
  ".": {
46
46
  "source": "./src/index.ts",
47
47
  "types": "./dist/types/src/index.d.ts",
48
- "browser": "./dist/lib/browser/index.mjs",
49
- "node": "./dist/lib/node-esm/index.mjs"
48
+ "import": "./dist/lib/index.mjs"
50
49
  },
51
50
  "./testing": {
52
51
  "source": "./src/testing/index.ts",
53
52
  "types": "./dist/types/src/testing/index.d.ts",
54
- "browser": "./dist/lib/browser/testing/index.mjs",
55
- "node": "./dist/lib/node-esm/testing/index.mjs"
53
+ "import": "./dist/lib/testing.mjs"
56
54
  },
57
55
  "./transport/tcp": {
58
56
  "source": "./src/transport/tcp/index.ts",
59
57
  "types": "./dist/types/src/transport/tcp/index.d.ts",
60
- "browser": "./dist/lib/browser/transport/tcp/index.mjs",
61
- "node": "./dist/lib/node-esm/transport/tcp/index.mjs"
58
+ "import": "./dist/lib/transport/tcp.mjs"
62
59
  }
63
60
  },
64
61
  "types": "dist/types/src/index.d.ts",
@@ -70,27 +67,27 @@
70
67
  "src"
71
68
  ],
72
69
  "dependencies": {
73
- "node-datachannel": "^0.30.0",
74
- "@dxos/debug": "0.10.0",
75
- "@dxos/async": "0.10.0",
76
- "@dxos/codec-protobuf": "0.10.0",
77
- "@dxos/context": "0.10.0",
78
- "@dxos/invariant": "0.10.0",
79
- "@dxos/log": "0.10.0",
80
- "@dxos/keys": "0.10.0",
81
- "@dxos/messaging": "0.10.0",
82
- "@dxos/node-std": "0.10.0",
83
- "@dxos/rpc": "0.10.0",
84
- "@dxos/protocols": "0.10.0",
85
- "@dxos/teleport": "0.10.0",
86
- "@dxos/tracing": "0.10.0",
87
- "@dxos/util": "0.10.0"
70
+ "effect": "3.21.4",
71
+ "node-datachannel": "^0.32.3",
72
+ "@dxos/async": "0.11.1",
73
+ "@dxos/debug": "0.11.1",
74
+ "@dxos/context": "0.11.1",
75
+ "@dxos/codec-protobuf": "0.11.1",
76
+ "@dxos/invariant": "0.11.1",
77
+ "@dxos/keys": "0.11.1",
78
+ "@dxos/log": "0.11.1",
79
+ "@dxos/messaging": "0.11.1",
80
+ "@dxos/protocols": "0.11.1",
81
+ "@dxos/node-std": "0.11.1",
82
+ "@dxos/rpc": "0.11.1",
83
+ "@dxos/tracing": "0.11.1",
84
+ "@dxos/teleport": "0.11.1",
85
+ "@dxos/util": "0.11.1"
88
86
  },
89
87
  "devDependencies": {
90
88
  "fetch-mock": "^11.0.0",
91
- "@dxos/edge-client": "0.10.0",
92
- "@dxos/signal": "0.10.0",
93
- "@dxos/keyring": "0.10.0"
89
+ "@dxos/edge-client": "0.11.1",
90
+ "@dxos/keyring": "0.11.1"
94
91
  },
95
92
  "publishConfig": {
96
93
  "access": "public"
@@ -2,6 +2,8 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
+ import * as EffectContext from 'effect/Context';
6
+
5
7
  import { Event, synchronized } from '@dxos/async';
6
8
  import { Context } from '@dxos/context';
7
9
  import { assertArgument, invariant } from '@dxos/invariant';
@@ -60,6 +62,14 @@ export type SwarmNetworkManagerOptions = {
60
62
  peerInfo?: PeerInfo;
61
63
  };
62
64
 
65
+ /**
66
+ * Effect service tag for {@link SwarmNetworkManager}.
67
+ */
68
+ export class SwarmNetworkManagerService extends EffectContext.Tag('@dxos/network-manager/SwarmNetworkManager')<
69
+ SwarmNetworkManagerService,
70
+ SwarmNetworkManager
71
+ >() {}
72
+
63
73
  /**
64
74
  * Manages p2p connection to the swarm.
65
75
  */
@@ -128,6 +138,10 @@ export class SwarmNetworkManager {
128
138
  this._peerInfo = peerInfo;
129
139
  }
130
140
 
141
+ getPeerInfo(): PeerInfo | undefined {
142
+ return this._peerInfo;
143
+ }
144
+
131
145
  async open(): Promise<void> {
132
146
  log('opening network manager');
133
147
  await this._messenger.open();
@@ -235,16 +249,15 @@ export class SwarmNetworkManager {
235
249
  switch (state) {
236
250
  case ConnectionState.OFFLINE: {
237
251
  this._connectionState = state;
238
- // go offline
252
+ // Only signaling toggles across an offline/online cycle. The messenger stays open so its
253
+ // subscriptions survive — the swarm does not re-`listen` on reconnect — and its subscriptions
254
+ // are torn down only on a real `close`.
239
255
  await Promise.all([...this._swarms.values()].map((swarm) => swarm.goOffline()));
240
- await this._messenger.close();
241
256
  await this._signalManager.close();
242
257
  break;
243
258
  }
244
259
  case ConnectionState.ONLINE: {
245
260
  this._connectionState = state;
246
- // go online
247
- this._messenger.open();
248
261
  await Promise.all([...this._swarms.values()].map((swarm) => swarm.goOnline()));
249
262
  await this._signalManager.open();
250
263
  break;
@@ -2,25 +2,21 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { afterAll, beforeAll, describe, expect, onTestFinished, test } from 'vitest';
5
+ import { beforeEach, describe, expect, onTestFinished, test } from 'vitest';
6
6
 
7
7
  import { Context } from '@dxos/context';
8
8
  import { PublicKey } from '@dxos/keys';
9
- import { Messenger, type PeerInfo, WebsocketSignalManager } from '@dxos/messaging';
10
- import { type SignalServerRunner, runTestSignalServer } from '@dxos/signal';
9
+ import { MemorySignalManager, MemorySignalManagerContext, Messenger, type PeerInfo } from '@dxos/messaging';
11
10
 
12
11
  import { type SignalMessage } from './signal-messenger';
13
12
  import { SwarmMessenger } from './swarm-messenger';
14
13
 
15
14
  describe('Signal Integration Test', () => {
16
- let broker: SignalServerRunner;
15
+ // In-memory signaling context connecting the peers in each test (replaces the KUBE server).
16
+ let context: MemorySignalManagerContext;
17
17
 
18
- beforeAll(async () => {
19
- broker = await runTestSignalServer();
20
- });
21
-
22
- afterAll(() => {
23
- void broker.stop();
18
+ beforeEach(() => {
19
+ context = new MemorySignalManagerContext();
24
20
  });
25
21
 
26
22
  const setupPeer = async ({
@@ -30,7 +26,7 @@ describe('Signal Integration Test', () => {
30
26
  peer?: PeerInfo;
31
27
  topic?: PublicKey;
32
28
  }) => {
33
- const signalManager = new WebsocketSignalManager([{ server: broker.url() }]);
29
+ const signalManager = new MemorySignalManager(context);
34
30
  await signalManager.open();
35
31
  onTestFinished(async () => {
36
32
  await signalManager.close();
@@ -2,48 +2,37 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { afterAll, beforeAll, beforeEach, describe, expect, onTestFinished, test } from 'vitest';
5
+ import { beforeEach, describe, expect, onTestFinished, test } from 'vitest';
6
6
 
7
- import { type Awaited } from '@dxos/async';
8
7
  import { Context } from '@dxos/context';
9
8
  import { PublicKey } from '@dxos/keys';
10
- import { Messenger, WebsocketSignalManager } from '@dxos/messaging';
9
+ import { MemorySignalManager, MemorySignalManagerContext, Messenger } from '@dxos/messaging';
11
10
  import { type Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
12
- import { runTestSignalServer } from '@dxos/signal';
13
11
 
14
12
  import { type OfferMessage, type SignalMessage } from './signal-messenger';
15
13
  import { SwarmMessenger } from './swarm-messenger';
16
14
 
17
15
  describe('SwarmMessenger', { timeout: 7000 }, () => {
18
16
  let topic: PublicKey;
19
-
20
- let broker1: Awaited<ReturnType<typeof runTestSignalServer>>;
21
-
22
- beforeAll(async () => {
23
- broker1 = await runTestSignalServer();
24
- });
17
+ // Shared in-memory signaling context connecting the peers in each test (replaces the KUBE server).
18
+ let context: MemorySignalManagerContext;
25
19
 
26
20
  beforeEach(() => {
27
21
  topic = PublicKey.random();
28
- });
29
-
30
- afterAll(() => {
31
- void broker1.stop();
22
+ context = new MemorySignalManagerContext();
32
23
  });
33
24
 
34
25
  const createSignalClientAndMessageRouter = async ({
35
- signalApiUrl,
36
26
  onSignal = (async () => {}) as any,
37
27
  onOffer = async () => ({ accept: true }),
38
28
  topic,
39
29
  }: {
40
- signalApiUrl: string;
41
30
  onSignal?: (ctx: Context, msg: SignalMessage) => Promise<void>;
42
31
  onOffer?: (ctx: Context, msg: OfferMessage) => Promise<Answer>;
43
32
  topic: PublicKey;
44
33
  }) => {
45
34
  const peer = { peerKey: PublicKey.random().toHex() };
46
- const signalManager = new WebsocketSignalManager([{ server: signalApiUrl }]);
35
+ const signalManager = new MemorySignalManager(context);
47
36
  await signalManager.open();
48
37
  onTestFinished(async () => {
49
38
  await signalManager.close();
@@ -77,7 +66,6 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
77
66
  received.push(msg);
78
67
  };
79
68
  const { signalManager: signalManager1, peer: peer1 } = await createSignalClientAndMessageRouter({
80
- signalApiUrl: broker1.url(),
81
69
  onSignal: signalMock1,
82
70
  topic,
83
71
  });
@@ -85,10 +73,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
85
73
  signalManager: signalManager2,
86
74
  router: router2,
87
75
  peer: peer2,
88
- } = await createSignalClientAndMessageRouter({
89
- signalApiUrl: broker1.url(),
90
- topic,
91
- });
76
+ } = await createSignalClientAndMessageRouter({ topic });
92
77
 
93
78
  await signalManager1.join(Context.default(), { topic, peer: peer1 });
94
79
  await signalManager2.join(Context.default(), { topic, peer: peer2 });
@@ -114,13 +99,11 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
114
99
  router: router1,
115
100
  peer: peer1,
116
101
  } = await createSignalClientAndMessageRouter({
117
- signalApiUrl: broker1.url(),
118
102
  onSignal: (async () => {}) as any,
119
103
  onOffer: async () => ({ accept: true }),
120
104
  topic,
121
105
  });
122
106
  const { signalManager: signalManager2, peer: peer2 } = await createSignalClientAndMessageRouter({
123
- signalApiUrl: broker1.url(),
124
107
  onSignal: (async () => {}) as any,
125
108
  onOffer: async () => ({ accept: true }),
126
109
  topic,
@@ -148,7 +131,6 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
148
131
  router: router1,
149
132
  peer: peer1,
150
133
  } = await createSignalClientAndMessageRouter({
151
- signalApiUrl: broker1.url(),
152
134
  onSignal: signalMock1,
153
135
  onOffer: async () => ({ accept: true }),
154
136
  topic,
@@ -162,7 +144,6 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
162
144
  router: router2,
163
145
  peer: peer2,
164
146
  } = await createSignalClientAndMessageRouter({
165
- signalApiUrl: broker1.url(),
166
147
  onSignal: signalMock2,
167
148
  onOffer: async () => ({ accept: true }),
168
149
  topic,
@@ -176,7 +157,6 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
176
157
  router: router3,
177
158
  peer: peer3,
178
159
  } = await createSignalClientAndMessageRouter({
179
- signalApiUrl: broker1.url(),
180
160
  onSignal: signalMock3,
181
161
  onOffer: async () => ({ accept: true }),
182
162
  topic,
@@ -226,7 +206,6 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
226
206
  router: router1,
227
207
  peer: peer1,
228
208
  } = await createSignalClientAndMessageRouter({
229
- signalApiUrl: broker1.url(),
230
209
  onSignal: (async () => {}) as any,
231
210
  onOffer: async () => ({ accept: true }),
232
211
  topic,
@@ -236,7 +215,6 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
236
215
  router: router2,
237
216
  peer: peer2,
238
217
  } = await createSignalClientAndMessageRouter({
239
- signalApiUrl: broker1.url(),
240
218
  onSignal: (async () => {}) as any,
241
219
  onOffer: async () => ({ accept: true }),
242
220
  topic,
@@ -2,7 +2,6 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- import { type Any } from '@dxos/codec-protobuf';
6
5
  import { Context } from '@dxos/context';
7
6
  import { invariant } from '@dxos/invariant';
8
7
  import { PublicKey } from '@dxos/keys';
@@ -46,22 +45,13 @@ export class SwarmMessenger implements SignalMessenger {
46
45
  this._topic = topic;
47
46
  }
48
47
 
49
- async receiveMessage(
50
- ctx: Context,
51
- {
52
- author,
53
- recipient,
54
- payload,
55
- }: {
56
- author: PeerInfo;
57
- recipient: PeerInfo;
58
- payload: Any;
59
- },
60
- ): Promise<void> {
48
+ async receiveMessage(ctx: Context, { author, recipient, payload }: Message): Promise<void> {
61
49
  if (payload.type_url !== 'dxos.mesh.swarm.SwarmMessage') {
62
50
  // Ignore not swarm messages.
63
51
  return;
64
52
  }
53
+ // Swarm signaling is point-to-point; a broadcast (DX-1125) never carries a SwarmMessage payload.
54
+ invariant(recipient, 'Recipient is required');
65
55
  const message: SwarmMessage = SwarmMessage.decode(payload.value);
66
56
 
67
57
  if (!this._topic.equals(message.topic)) {
@@ -155,8 +155,8 @@ describe.skip('Swarm', () => {
155
155
 
156
156
  const signalManager = new MemorySignalManager(context);
157
157
  const sendOriginal = signalManager.sendMessage.bind(signalManager);
158
- const messages = new ComplexSet<{ author: PeerInfo; recipient: PeerInfo }>(
159
- ({ author, recipient }) => author.peerKey + recipient.peerKey,
158
+ const messages = new ComplexSet<{ author: PeerInfo; recipient?: PeerInfo }>(
159
+ ({ author, recipient }) => author.peerKey + recipient?.peerKey,
160
160
  );
161
161
  signalManager.sendMessage = async (ctx, message) => {
162
162
  messages.add({ author: message.author, recipient: message.recipient });
@@ -4,16 +4,9 @@
4
4
 
5
5
  import { Context } from '@dxos/context';
6
6
  import { PublicKey } from '@dxos/keys';
7
- import { log } from '@dxos/log';
8
- import {
9
- MemorySignalManager,
10
- MemorySignalManagerContext,
11
- type SignalManager,
12
- WebsocketSignalManager,
13
- } from '@dxos/messaging';
7
+ import { MemorySignalManager, MemorySignalManagerContext, type SignalManager } from '@dxos/messaging';
14
8
  import { schema } from '@dxos/protocols/proto';
15
9
  import { ConnectionState } from '@dxos/protocols/proto/dxos/client/services';
16
- import { type Runtime } from '@dxos/protocols/proto/dxos/config';
17
10
  import { type ProtoRpcPeer, createLinkedPorts, createProtoRpcPeer } from '@dxos/rpc';
18
11
  import { ComplexMap } from '@dxos/util';
19
12
 
@@ -31,15 +24,7 @@ import {
31
24
  } from '../transport';
32
25
  import { type TestTeleportExtensionFactory, TestWireProtocol } from './test-wire-protocol';
33
26
 
34
- // Signal server will be started by the setup script.
35
- const port = process.env.SIGNAL_PORT ?? 4000;
36
- export const TEST_SIGNAL_HOSTS: Runtime.Services.Signal[] = [
37
- { server: `ws://localhost:${port}/.well-known/dx/signal` },
38
- ];
39
-
40
27
  export type TestBuilderOptions = {
41
- signalHosts?: Runtime.Services.Signal[];
42
- bridge?: boolean;
43
28
  transport?: TransportKind;
44
29
  };
45
30
 
@@ -51,11 +36,9 @@ export class TestBuilder {
51
36
 
52
37
  constructor(public readonly options: TestBuilderOptions = {}) {}
53
38
 
54
- createSignalManager(): WebsocketSignalManager | MemorySignalManager {
55
- if (this.options.signalHosts) {
56
- return new WebsocketSignalManager(this.options.signalHosts);
57
- }
58
-
39
+ createSignalManager(): MemorySignalManager {
40
+ // KUBE `WebsocketSignalManager` was removed; signaling is always in-memory (the shared context
41
+ // connects peers in-process). The transport is chosen independently via `options.transport`.
59
42
  return new MemorySignalManager(this._signalContext);
60
43
  }
61
44
 
@@ -86,9 +69,7 @@ export class TestPeer {
86
69
  constructor(
87
70
  private readonly testBuilder: TestBuilder,
88
71
  public readonly peerId: PublicKey,
89
- public readonly transport: TransportKind = testBuilder.options.signalHosts
90
- ? TransportKind.WEB_RTC
91
- : TransportKind.MEMORY,
72
+ public readonly transport: TransportKind = TransportKind.MEMORY,
92
73
  ) {
93
74
  this._signalManager = this.testBuilder.createSignalManager();
94
75
  this._networkManager = this.createNetworkManager(this.transport);
@@ -98,57 +79,49 @@ export class TestPeer {
98
79
  // TODO(burdon): Move to TestBuilder.
99
80
  createNetworkManager(transport: TransportKind): SwarmNetworkManager {
100
81
  let transportFactory: TransportFactory;
101
- if (this.testBuilder.options.signalHosts) {
102
- log.info(`using ${transport} transport with signal server.`);
103
- switch (transport) {
104
- case TransportKind.MEMORY:
105
- throw new Error('Memory transport not supported with signal server.');
106
- case TransportKind.TCP:
107
- transportFactory = TcpTransportFactory;
108
- break;
109
- case TransportKind.WEB_RTC:
110
- transportFactory = createRtcTransportFactory();
111
- break;
112
- case TransportKind.WEB_RTC_PROXY:
113
- {
114
- // Simulates bridge to shared worker.
115
- const [proxyPort, servicePort] = createLinkedPorts();
116
-
117
- this._proxy = createProtoRpcPeer({
118
- port: proxyPort,
119
- requested: {
120
- BridgeService: schema.getService('dxos.mesh.bridge.BridgeService'),
121
- },
122
- noHandshake: true,
123
- encodingOptions: {
124
- preserveAny: true,
125
- },
126
- });
127
-
128
- this._service = createProtoRpcPeer({
129
- port: servicePort,
130
- exposed: {
131
- BridgeService: schema.getService('dxos.mesh.bridge.BridgeService'),
132
- },
133
- handlers: { BridgeService: new RtcTransportService() },
134
- noHandshake: true,
135
- encodingOptions: {
136
- preserveAny: true,
137
- },
138
- });
139
-
140
- transportFactory = new RtcTransportProxyFactory().setBridgeService(this._proxy.rpc.BridgeService);
141
- }
142
- break;
143
- default:
144
- throw new Error(`Unsupported transport: ${transport}`);
145
- }
146
- } else {
147
- if (transport !== TransportKind.MEMORY && transport !== TransportKind.TCP) {
148
- log.warn(`specified transport ${transport} but no signalling configured, using memory transport instead`);
149
- }
150
- log.info(`using ${transport} transport without signal server.`);
151
- transportFactory = MemoryTransportFactory;
82
+ switch (transport) {
83
+ case TransportKind.MEMORY:
84
+ transportFactory = MemoryTransportFactory;
85
+ break;
86
+ case TransportKind.TCP:
87
+ transportFactory = TcpTransportFactory;
88
+ break;
89
+ case TransportKind.WEB_RTC:
90
+ transportFactory = createRtcTransportFactory();
91
+ break;
92
+ case TransportKind.WEB_RTC_PROXY:
93
+ {
94
+ // Simulates bridge to shared worker.
95
+ const [proxyPort, servicePort] = createLinkedPorts();
96
+
97
+ this._proxy = createProtoRpcPeer({
98
+ port: proxyPort,
99
+ requested: {
100
+ BridgeService: schema.getService('dxos.mesh.bridge.BridgeService'),
101
+ },
102
+ noHandshake: true,
103
+ encodingOptions: {
104
+ preserveAny: true,
105
+ },
106
+ });
107
+
108
+ this._service = createProtoRpcPeer({
109
+ port: servicePort,
110
+ exposed: {
111
+ BridgeService: schema.getService('dxos.mesh.bridge.BridgeService'),
112
+ },
113
+ handlers: { BridgeService: new RtcTransportService() },
114
+ noHandshake: true,
115
+ encodingOptions: {
116
+ preserveAny: true,
117
+ },
118
+ });
119
+
120
+ transportFactory = new RtcTransportProxyFactory().setBridgeService(this._proxy.rpc.BridgeService);
121
+ }
122
+ break;
123
+ default:
124
+ throw new Error(`Unsupported transport: ${transport}`);
152
125
  }
153
126
 
154
127
  return new SwarmNetworkManager({
@@ -4,29 +4,18 @@
4
4
 
5
5
  import { describe } from 'vitest';
6
6
 
7
- import { TEST_SIGNAL_HOSTS, TestBuilder } from '../testing';
7
+ import { TestBuilder } from '../testing';
8
+ import { TransportKind } from '../transport';
8
9
  import { basicTestSuite } from './basic-test-suite';
9
10
 
10
11
  // Segfault in node-datachannel.
11
12
  describe.skip('WebRTC transport', { timeout: 10_000 }, () => {
12
- const testBuilder = new TestBuilder();
13
+ const testBuilder = new TestBuilder({ transport: TransportKind.WEB_RTC });
13
14
  basicTestSuite(testBuilder);
14
15
  });
15
16
 
16
17
  // Segfault in node-datachannel.
17
18
  describe.skip('WebRTC transport proxy', { timeout: 10_000 }, () => {
18
- const testBuilder = new TestBuilder({ bridge: true });
19
+ const testBuilder = new TestBuilder({ transport: TransportKind.WEB_RTC_PROXY });
19
20
  basicTestSuite(testBuilder);
20
21
  });
21
-
22
- describe.skip('test with signal server', () => {
23
- describe('WebRTC transport', { timeout: 10_000 }, () => {
24
- const testBuilder = new TestBuilder({ signalHosts: TEST_SIGNAL_HOSTS });
25
- basicTestSuite(testBuilder);
26
- });
27
-
28
- describe('WebRTC transport proxy', { timeout: 10_000 }, () => {
29
- const testBuilder = new TestBuilder({ signalHosts: TEST_SIGNAL_HOSTS, bridge: true });
30
- basicTestSuite(testBuilder);
31
- });
32
- });
@@ -7,7 +7,6 @@ import { invariant } from '@dxos/invariant';
7
7
  import { log, logInfo } from '@dxos/log';
8
8
  import { ConnectivityError } from '@dxos/protocols';
9
9
  import { type Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
10
- import { trace } from '@dxos/tracing';
11
10
 
12
11
  import type { IceProvider } from '../../signal';
13
12
  import { type TransportOptions } from '../transport';
@@ -38,7 +37,6 @@ export type RtcPeerChannelFactoryOptions = {
38
37
  * Contains WebRTC connection establishment logic.
39
38
  * When the first Transport is opened a connection is established and kept until all the transports are closed.
40
39
  */
41
- @trace.resource()
42
40
  export class RtcPeerConnection {
43
41
  // A peer who is not the initiator waits for another party to open a channel.
44
42
  private readonly _channelCreatedCallbacks = new Map<string, ChannelCreatedCallback>();
@@ -427,7 +425,6 @@ export class RtcPeerConnection {
427
425
  await this._options.sendSignal({ payload: { data } });
428
426
  }
429
427
 
430
- @trace.info()
431
428
  protected get _connectionInfo() {
432
429
  const connectionInfo = this._connection && {
433
430
  connectionState: this._connection.connectionState,
@@ -5,7 +5,8 @@
5
5
  import { Duplex } from 'stream';
6
6
  import { describe, expect, onTestFinished, test } from 'vitest';
7
7
 
8
- import { Event as AsyncEvent, TestStream, Trigger, sleep } from '@dxos/async';
8
+ import { Event as AsyncEvent, Trigger, sleep } from '@dxos/async';
9
+ import { TestStream } from '@dxos/async/testing';
9
10
  import { ErrorStream } from '@dxos/debug';
10
11
  import { PublicKey } from '@dxos/keys';
11
12
  import { schema } from '@dxos/protocols/proto';
@@ -4,7 +4,8 @@
4
4
 
5
5
  import { describe, expect, onTestFinished, test } from 'vitest';
6
6
 
7
- import { TestStream, sleep } from '@dxos/async';
7
+ import { sleep } from '@dxos/async';
8
+ import { TestStream } from '@dxos/async/testing';
8
9
  import { PublicKey } from '@dxos/keys';
9
10
 
10
11
  import { type TransportOptions } from '../transport';