@dxos/network-manager 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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 (105) hide show
  1. package/dist/lib/browser/{chunk-HQNQOWFA.mjs → chunk-Y2FDDNGM.mjs} +687 -916
  2. package/dist/lib/browser/chunk-Y2FDDNGM.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +342 -4
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/testing/index.mjs +78 -49
  7. package/dist/lib/browser/testing/index.mjs.map +3 -3
  8. package/dist/lib/browser/transport/tcp/index.mjs +2 -35
  9. package/dist/lib/browser/transport/tcp/index.mjs.map +4 -4
  10. package/dist/lib/browser/transport/tcp/tcp-transport.browser.mjs +36 -0
  11. package/dist/lib/browser/transport/tcp/tcp-transport.browser.mjs.map +7 -0
  12. package/dist/lib/browser/transport/tcp/tcp-transport.mjs +160 -0
  13. package/dist/lib/browser/transport/tcp/tcp-transport.mjs.map +7 -0
  14. package/dist/lib/node-esm/{chunk-JPPMRZTH.mjs → chunk-OU3FYVBA.mjs} +687 -916
  15. package/dist/lib/node-esm/chunk-OU3FYVBA.mjs.map +7 -0
  16. package/dist/lib/node-esm/index.mjs +342 -4
  17. package/dist/lib/node-esm/index.mjs.map +4 -4
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/testing/index.mjs +78 -49
  20. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  21. package/dist/lib/node-esm/transport/tcp/index.mjs +2 -156
  22. package/dist/lib/node-esm/transport/tcp/index.mjs.map +4 -4
  23. package/dist/lib/node-esm/transport/tcp/tcp-transport.browser.mjs +36 -0
  24. package/dist/lib/node-esm/transport/tcp/tcp-transport.browser.mjs.map +7 -0
  25. package/dist/lib/node-esm/transport/tcp/tcp-transport.mjs +160 -0
  26. package/dist/lib/node-esm/transport/tcp/tcp-transport.mjs.map +7 -0
  27. package/dist/types/src/connection-log.d.ts.map +1 -1
  28. package/dist/types/src/index.d.ts +1 -1
  29. package/dist/types/src/index.d.ts.map +1 -1
  30. package/dist/types/src/network-manager.d.ts +5 -4
  31. package/dist/types/src/network-manager.d.ts.map +1 -1
  32. package/dist/types/src/signal/index.d.ts +2 -2
  33. package/dist/types/src/signal/index.d.ts.map +1 -1
  34. package/dist/types/src/signal/signal-connection.d.ts +3 -2
  35. package/dist/types/src/signal/signal-connection.d.ts.map +1 -1
  36. package/dist/types/src/signal/signal-messenger.d.ts +3 -2
  37. package/dist/types/src/signal/signal-messenger.d.ts.map +1 -1
  38. package/dist/types/src/signal/swarm-messenger.d.ts +8 -8
  39. package/dist/types/src/signal/swarm-messenger.d.ts.map +1 -1
  40. package/dist/types/src/swarm/connection.d.ts +2 -1
  41. package/dist/types/src/swarm/connection.d.ts.map +1 -1
  42. package/dist/types/src/swarm/peer.d.ts +6 -5
  43. package/dist/types/src/swarm/peer.d.ts.map +1 -1
  44. package/dist/types/src/swarm/swarm.d.ts +6 -5
  45. package/dist/types/src/swarm/swarm.d.ts.map +1 -1
  46. package/dist/types/src/testing/test-builder.d.ts +1 -1
  47. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  48. package/dist/types/src/testing/test-wire-protocol.d.ts +1 -1
  49. package/dist/types/src/testing/test-wire-protocol.d.ts.map +1 -1
  50. package/dist/types/src/tests/basic-test-suite.d.ts.map +1 -1
  51. package/dist/types/src/tests/property-test-suite.d.ts.map +1 -1
  52. package/dist/types/src/topology/index.d.ts +1 -1
  53. package/dist/types/src/topology/index.d.ts.map +1 -1
  54. package/dist/types/src/transport/tcp/index.d.ts +1 -1
  55. package/dist/types/src/transport/tcp/index.d.ts.map +1 -1
  56. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts +2 -2
  57. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts.map +1 -1
  58. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts +1 -1
  59. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts.map +1 -1
  60. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts.map +1 -1
  61. package/dist/types/src/transport/webrtc/rtc-transport-proxy.d.ts.map +1 -1
  62. package/dist/types/src/transport/webrtc/rtc-transport-service.d.ts +1 -1
  63. package/dist/types/src/transport/webrtc/rtc-transport-service.d.ts.map +1 -1
  64. package/dist/types/src/wire-protocol.d.ts +5 -5
  65. package/dist/types/src/wire-protocol.d.ts.map +1 -1
  66. package/dist/types/tsconfig.tsbuildinfo +1 -1
  67. package/package.json +37 -33
  68. package/src/connection-log.ts +1 -1
  69. package/src/index.ts +1 -1
  70. package/src/network-manager.ts +20 -16
  71. package/src/signal/ice.test.ts +1 -1
  72. package/src/signal/index.ts +2 -2
  73. package/src/signal/integration.node.test.ts +13 -12
  74. package/src/signal/signal-connection.ts +3 -2
  75. package/src/signal/signal-messenger.ts +3 -2
  76. package/src/signal/swarm-messenger.node.test.ts +26 -25
  77. package/src/signal/swarm-messenger.ts +66 -56
  78. package/src/swarm/connection.test.ts +9 -8
  79. package/src/swarm/connection.ts +16 -14
  80. package/src/swarm/peer.ts +9 -8
  81. package/src/swarm/swarm-mapper.ts +1 -1
  82. package/src/swarm/swarm.test.ts +8 -7
  83. package/src/swarm/swarm.ts +13 -13
  84. package/src/testing/test-builder.ts +15 -7
  85. package/src/testing/test-wire-protocol.ts +2 -2
  86. package/src/tests/basic-test-suite.ts +2 -2
  87. package/src/tests/memory-transport.test.ts +2 -2
  88. package/src/tests/property-test-suite.ts +4 -3
  89. package/src/tests/tcp-transport.node.test.ts +2 -2
  90. package/src/tests/webrtc-transport.test.ts +5 -3
  91. package/src/topology/index.ts +1 -1
  92. package/src/transport/tcp/index.ts +1 -1
  93. package/src/transport/tcp/tcp-transport.ts +1 -1
  94. package/src/transport/webrtc/rtc-connection-factory.ts +1 -1
  95. package/src/transport/webrtc/rtc-peer-connection.ts +4 -4
  96. package/src/transport/webrtc/rtc-transport-channel.test.ts +1 -1
  97. package/src/transport/webrtc/rtc-transport-channel.ts +2 -2
  98. package/src/transport/webrtc/rtc-transport-factory.ts +2 -2
  99. package/src/transport/webrtc/rtc-transport-proxy.test.ts +5 -4
  100. package/src/transport/webrtc/rtc-transport-proxy.ts +6 -4
  101. package/src/transport/webrtc/rtc-transport-service.ts +5 -5
  102. package/src/transport/webrtc/rtc-transport.test.ts +5 -4
  103. package/src/wire-protocol.ts +6 -6
  104. package/dist/lib/browser/chunk-HQNQOWFA.mjs.map +0 -7
  105. package/dist/lib/node-esm/chunk-JPPMRZTH.mjs.map +0 -7
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@dxos/network-manager",
3
- "version": "0.8.4-main.f9ba587",
3
+ "version": "0.8.4-main.fcfe5033a5",
4
4
  "description": "Network Manager",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/dxos/dxos"
10
+ },
7
11
  "license": "MIT",
8
12
  "author": "DXOS.org",
9
- "sideEffects": true,
13
+ "sideEffects": false,
10
14
  "type": "module",
11
15
  "imports": {
12
16
  "#node-datachannel": {
@@ -20,33 +24,43 @@
20
24
  "default": "node-datachannel/*"
21
25
  },
22
26
  "#tcp-transport": {
27
+ "source": "./src/transport/tcp/index.ts",
23
28
  "types": "./dist/types/src/transport/tcp/index.d.ts",
24
29
  "browser": "./dist/lib/browser/transport/tcp/index.mjs",
25
30
  "node": "./dist/lib/node-esm/transport/tcp/index.mjs",
26
31
  "import": "./dist/lib/browser/transport/tcp/index.mjs",
27
32
  "require": "./dist/lib/node-esm/transport/tcp/index.mjs"
33
+ },
34
+ "#tcp-transport-impl": {
35
+ "source": {
36
+ "browser": "./src/transport/tcp/tcp-transport.browser.ts",
37
+ "default": "./src/transport/tcp/tcp-transport.ts"
38
+ },
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"
28
42
  }
29
43
  },
30
44
  "exports": {
31
45
  ".": {
46
+ "source": "./src/index.ts",
32
47
  "types": "./dist/types/src/index.d.ts",
33
48
  "browser": "./dist/lib/browser/index.mjs",
34
49
  "node": "./dist/lib/node-esm/index.mjs"
35
50
  },
36
51
  "./testing": {
52
+ "source": "./src/testing/index.ts",
37
53
  "types": "./dist/types/src/testing/index.d.ts",
38
54
  "browser": "./dist/lib/browser/testing/index.mjs",
39
55
  "node": "./dist/lib/node-esm/testing/index.mjs"
40
56
  },
41
57
  "./transport/tcp": {
58
+ "source": "./src/transport/tcp/index.ts",
42
59
  "types": "./dist/types/src/transport/tcp/index.d.ts",
43
60
  "browser": "./dist/lib/browser/transport/tcp/index.mjs",
44
61
  "node": "./dist/lib/node-esm/transport/tcp/index.mjs"
45
62
  }
46
63
  },
47
- "browser": {
48
- "./src/transport/tcp/tcp-transport.ts": "./src/transport/tcp/tcp-transport.browser.ts"
49
- },
50
64
  "types": "dist/types/src/index.d.ts",
51
65
  "typesVersions": {
52
66
  "*": {
@@ -66,37 +80,27 @@
66
80
  "src"
67
81
  ],
68
82
  "dependencies": {
69
- "isomorphic-ws": "^5.0.0",
70
- "nanomessage-rpc": "^3.0.0",
71
- "node-datachannel": "^0.9.2",
72
- "p-defer": "^3.0.0",
73
- "stream": "^0.0.3",
74
- "tiny-invariant": "^1.3.1",
75
- "ws": "^8.14.2",
76
- "xor-distance": "^2.0.0",
77
- "@dxos/async": "0.8.4-main.f9ba587",
78
- "@dxos/debug": "0.8.4-main.f9ba587",
79
- "@dxos/context": "0.8.4-main.f9ba587",
80
- "@dxos/invariant": "0.8.4-main.f9ba587",
81
- "@dxos/keys": "0.8.4-main.f9ba587",
82
- "@dxos/codec-protobuf": "0.8.4-main.f9ba587",
83
- "@dxos/log": "0.8.4-main.f9ba587",
84
- "@dxos/messaging": "0.8.4-main.f9ba587",
85
- "@dxos/node-std": "0.8.4-main.f9ba587",
86
- "@dxos/protocols": "0.8.4-main.f9ba587",
87
- "@dxos/rpc": "0.8.4-main.f9ba587",
88
- "@dxos/teleport": "0.8.4-main.f9ba587",
89
- "@dxos/tracing": "0.8.4-main.f9ba587",
90
- "@dxos/util": "0.8.4-main.f9ba587"
83
+ "node-datachannel": "^0.30.0",
84
+ "@dxos/codec-protobuf": "0.8.4-main.fcfe5033a5",
85
+ "@dxos/context": "0.8.4-main.fcfe5033a5",
86
+ "@dxos/async": "0.8.4-main.fcfe5033a5",
87
+ "@dxos/invariant": "0.8.4-main.fcfe5033a5",
88
+ "@dxos/debug": "0.8.4-main.fcfe5033a5",
89
+ "@dxos/keys": "0.8.4-main.fcfe5033a5",
90
+ "@dxos/messaging": "0.8.4-main.fcfe5033a5",
91
+ "@dxos/log": "0.8.4-main.fcfe5033a5",
92
+ "@dxos/node-std": "0.8.4-main.fcfe5033a5",
93
+ "@dxos/rpc": "0.8.4-main.fcfe5033a5",
94
+ "@dxos/protocols": "0.8.4-main.fcfe5033a5",
95
+ "@dxos/teleport": "0.8.4-main.fcfe5033a5",
96
+ "@dxos/util": "0.8.4-main.fcfe5033a5",
97
+ "@dxos/tracing": "0.8.4-main.fcfe5033a5"
91
98
  },
92
99
  "devDependencies": {
93
- "@swc-node/register": "1.9.1",
94
- "@types/ws": "^7.4.0",
95
- "fast-check": "^3.19.0",
96
100
  "fetch-mock": "^11.0.0",
97
- "@dxos/edge-client": "0.8.4-main.f9ba587",
98
- "@dxos/keyring": "0.8.4-main.f9ba587",
99
- "@dxos/signal": "0.8.4-main.f9ba587"
101
+ "@dxos/edge-client": "0.8.4-main.fcfe5033a5",
102
+ "@dxos/keyring": "0.8.4-main.fcfe5033a5",
103
+ "@dxos/signal": "0.8.4-main.fcfe5033a5"
100
104
  },
101
105
  "publishConfig": {
102
106
  "access": "public"
@@ -5,7 +5,7 @@
5
5
  import { Event } from '@dxos/async';
6
6
  import { raise } from '@dxos/debug';
7
7
  import { PublicKey } from '@dxos/keys';
8
- import { type SwarmInfo, type ConnectionInfo } from '@dxos/protocols/proto/dxos/devtools/swarm';
8
+ import { type ConnectionInfo, type SwarmInfo } from '@dxos/protocols/proto/dxos/devtools/swarm';
9
9
  import { type MuxerStats } from '@dxos/teleport';
10
10
  import { ComplexMap } from '@dxos/util';
11
11
 
package/src/index.ts CHANGED
@@ -8,5 +8,5 @@ export * from './signal';
8
8
  export * from './swarm';
9
9
  export * from './topology';
10
10
  export * from './transport';
11
- export * from './types';
11
+ export type * from './types';
12
12
  export * from './wire-protocol';
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  import { Event, synchronized } from '@dxos/async';
6
+ import { Context } from '@dxos/context';
6
7
  import { invariant } from '@dxos/invariant';
7
8
  import { PublicKey } from '@dxos/keys';
8
9
  import { log } from '@dxos/log';
@@ -13,7 +14,7 @@ import { ComplexMap } from '@dxos/util';
13
14
 
14
15
  import { ConnectionLog } from './connection-log';
15
16
  import { type SignalConnection } from './signal';
16
- import { Swarm, SwarmMapper, ConnectionLimiter } from './swarm';
17
+ import { ConnectionLimiter, Swarm, SwarmMapper } from './swarm';
17
18
  import { type Topology } from './topology';
18
19
  import { type TransportFactory } from './transport';
19
20
  import { type WireProtocolProvider } from './wire-protocol';
@@ -21,7 +22,7 @@ import { type WireProtocolProvider } from './wire-protocol';
21
22
  * Represents a single connection to a remote peer.
22
23
  */
23
24
  export type SwarmConnection = {
24
- close(): Promise<void>;
25
+ close(ctx: Context): Promise<void>;
25
26
  };
26
27
 
27
28
  // TODO(burdon): Add timeout.
@@ -91,8 +92,8 @@ export class SwarmNetworkManager {
91
92
  this._signalManager.swarmEvent.on((event) => this._swarms.get(event.topic)?.onSwarmEvent(event));
92
93
  this._messenger = new Messenger({ signalManager: this._signalManager });
93
94
  this._signalConnection = {
94
- join: (opts) => this._signalManager.join(opts),
95
- leave: (opts) => this._signalManager.leave(opts),
95
+ join: (ctx, opts) => this._signalManager.join(ctx, opts),
96
+ leave: (ctx, opts) => this._signalManager.leave(ctx, opts),
96
97
  };
97
98
  this._peerInfo = peerInfo;
98
99
 
@@ -136,9 +137,9 @@ export class SwarmNetworkManager {
136
137
  log.trace('dxos.mesh.network-manager.open', trace.end({ id: this._instanceId }));
137
138
  }
138
139
 
139
- async close(): Promise<void> {
140
+ async close(ctx: Context): Promise<void> {
140
141
  for (const topic of this._swarms.keys()) {
141
- await this.leaveSwarm(topic).catch((err) => {
142
+ await this.leaveSwarm(ctx, topic).catch((err) => {
142
143
  log(err);
143
144
  });
144
145
  }
@@ -151,12 +152,15 @@ export class SwarmNetworkManager {
151
152
  * Join the swarm.
152
153
  */
153
154
  @synchronized
154
- async joinSwarm({
155
- topic, //
156
- topology,
157
- protocolProvider: protocol,
158
- label,
159
- }: SwarmOptions): Promise<SwarmConnection> {
155
+ async joinSwarm(
156
+ ctx: Context,
157
+ {
158
+ topic, //
159
+ topology,
160
+ protocolProvider: protocol,
161
+ label,
162
+ }: SwarmOptions,
163
+ ): Promise<SwarmConnection> {
160
164
  invariant(PublicKey.isPublicKey(topic));
161
165
  invariant(topology);
162
166
  invariant(this._peerInfo);
@@ -187,14 +191,14 @@ export class SwarmNetworkManager {
187
191
  // Open before joining.
188
192
  await swarm.open();
189
193
 
190
- this._signalConnection.join({ topic, peer: this._peerInfo }).catch((error) => log.catch(error));
194
+ this._signalConnection.join(ctx, { topic, peer: this._peerInfo }).catch((error) => log.catch(error));
191
195
 
192
196
  this.topicsUpdated.emit();
193
197
  this._connectionLog?.joinedSwarm(swarm);
194
198
  log('joined', { topic: PublicKey.from(topic), count: this._swarms.size });
195
199
 
196
200
  return {
197
- close: () => this.leaveSwarm(topic),
201
+ close: (ctx: Context) => this.leaveSwarm(ctx, topic),
198
202
  };
199
203
  }
200
204
 
@@ -202,7 +206,7 @@ export class SwarmNetworkManager {
202
206
  * Close the connection.
203
207
  */
204
208
  @synchronized
205
- async leaveSwarm(topic: PublicKey): Promise<void> {
209
+ async leaveSwarm(ctx: Context, topic: PublicKey): Promise<void> {
206
210
  if (!this._swarms.has(topic)) {
207
211
  // log.warn('swarm not open', { topic: PublicKey.from(topic).truncate() });
208
212
  return;
@@ -210,7 +214,7 @@ export class SwarmNetworkManager {
210
214
 
211
215
  log('leaving', { topic: PublicKey.from(topic) });
212
216
  const swarm = this._swarms.get(topic)!;
213
- await this._signalConnection.leave({ topic, peer: swarm.ownPeer });
217
+ await this._signalConnection.leave(ctx, { topic, peer: swarm.ownPeer });
214
218
 
215
219
  const map = this._mappers.get(topic)!;
216
220
  map.destroy();
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import fetchMock from 'fetch-mock';
6
- import { afterEach, test, expect, describe } from 'vitest';
6
+ import { afterEach, describe, expect, test } from 'vitest';
7
7
 
8
8
  import { createIceProvider } from './ice';
9
9
 
@@ -4,5 +4,5 @@
4
4
 
5
5
  export * from './ice';
6
6
  export * from './swarm-messenger';
7
- export * from './signal-connection';
8
- export * from './signal-messenger';
7
+ export type * from './signal-connection';
8
+ export type * from './signal-messenger';
@@ -2,11 +2,12 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { afterAll, onTestFinished, beforeAll, describe, expect, test } from 'vitest';
5
+ import { afterAll, beforeAll, describe, expect, onTestFinished, test } from 'vitest';
6
6
 
7
+ import { Context } from '@dxos/context';
7
8
  import { PublicKey } from '@dxos/keys';
8
9
  import { Messenger, type PeerInfo, WebsocketSignalManager } from '@dxos/messaging';
9
- import { runTestSignalServer, type SignalServerRunner } from '@dxos/signal';
10
+ import { type SignalServerRunner, runTestSignalServer } from '@dxos/signal';
10
11
 
11
12
  import { type SignalMessage } from './signal-messenger';
12
13
  import { SwarmMessenger } from './swarm-messenger';
@@ -42,17 +43,17 @@ describe('Signal Integration Test', () => {
42
43
  onTestFinished(() => messenger.close());
43
44
  await messenger.listen({
44
45
  peer,
45
- onMessage: async (message) => await messageRouter.receiveMessage(message),
46
+ onMessage: async (message) => await messageRouter.receiveMessage(Context.default(), message),
46
47
  });
47
48
 
48
49
  const receivedSignals: SignalMessage[] = [];
49
- const signalMock = async (msg: SignalMessage) => {
50
+ const signalMock = async (_ctx: Context, msg: SignalMessage) => {
50
51
  receivedSignals.push(msg);
51
52
  };
52
53
  const messageRouter = new SwarmMessenger({
53
- sendMessage: messenger.sendMessage.bind(messenger),
54
+ sendMessage: (ctx, message) => messenger.sendMessage(ctx, message),
54
55
  onSignal: signalMock,
55
- onOffer: async () => ({ accept: true }),
56
+ onOffer: async (_ctx) => ({ accept: true }),
56
57
  topic,
57
58
  });
58
59
 
@@ -78,14 +79,14 @@ describe('Signal Integration Test', () => {
78
79
  ({ peerAvailable }) => !!peerAvailable && peerNetworking1.peer.peerKey === peerAvailable.peer.peerKey,
79
80
  );
80
81
 
81
- await peerNetworking1.signalManager.join({ topic, peer: peerNetworking1.peer });
82
- await peerNetworking2.signalManager.join({ topic, peer: peerNetworking2.peer });
82
+ await peerNetworking1.signalManager.join(Context.default(), { topic, peer: peerNetworking1.peer });
83
+ await peerNetworking2.signalManager.join(Context.default(), { topic, peer: peerNetworking2.peer });
83
84
 
84
85
  await promise1;
85
86
  await promise2;
86
87
 
87
88
  expect(
88
- await peerNetworking1.messageRouter.offer({
89
+ await peerNetworking1.messageRouter.offer(Context.default(), {
89
90
  topic,
90
91
  author: peerNetworking1.peer,
91
92
  recipient: peerNetworking2.peer,
@@ -97,7 +98,7 @@ describe('Signal Integration Test', () => {
97
98
  ).toEqual(expect.objectContaining({ accept: true }));
98
99
 
99
100
  expect(
100
- await peerNetworking2.messageRouter.offer({
101
+ await peerNetworking2.messageRouter.offer(Context.default(), {
101
102
  topic,
102
103
  author: peerNetworking2.peer,
103
104
  recipient: peerNetworking1.peer,
@@ -119,7 +120,7 @@ describe('Signal Integration Test', () => {
119
120
  signalBatch: undefined,
120
121
  },
121
122
  };
122
- await peerNetworking1.messageRouter.signal(message);
123
+ await peerNetworking1.messageRouter.signal(Context.default(), message);
123
124
 
124
125
  await expect.poll(() => peerNetworking2.receivedSignals[0]).toEqual(expect.objectContaining(message));
125
126
  }
@@ -135,7 +136,7 @@ describe('Signal Integration Test', () => {
135
136
  signalBatch: undefined,
136
137
  },
137
138
  };
138
- await peerNetworking2.messageRouter.signal(message);
139
+ await peerNetworking2.messageRouter.signal(Context.default(), message);
139
140
 
140
141
  await expect.poll(() => peerNetworking1.receivedSignals[0]).toEqual(expect.objectContaining(message));
141
142
  }
@@ -2,6 +2,7 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
+ import { type Context } from '@dxos/context';
5
6
  import { type PublicKey } from '@dxos/keys';
6
7
  import { type PeerInfo } from '@dxos/messaging';
7
8
 
@@ -12,10 +13,10 @@ export interface SignalConnection {
12
13
  /**
13
14
  * Join topic on signal network, to be discoverable by other peers.
14
15
  */
15
- join(params: { topic: PublicKey; peer: PeerInfo }): Promise<void>;
16
+ join(ctx: Context, params: { topic: PublicKey; peer: PeerInfo }): Promise<void>;
16
17
 
17
18
  /**
18
19
  * Leave topic on signal network, to stop being discoverable by other peers.
19
20
  */
20
- leave(params: { topic: PublicKey; peer: PeerInfo }): Promise<void>;
21
+ leave(ctx: Context, params: { topic: PublicKey; peer: PeerInfo }): Promise<void>;
21
22
  }
@@ -2,6 +2,7 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
+ import { Context } from '@dxos/context';
5
6
  import { type PublicKey } from '@dxos/keys';
6
7
  import { type PeerInfo } from '@dxos/messaging';
7
8
  import { type Answer, type Offer, type Signal, type SignalBatch } from '@dxos/protocols/proto/dxos/mesh/swarm';
@@ -29,10 +30,10 @@ export interface SignalMessenger {
29
30
  /**
30
31
  * Offer/answer RPC.
31
32
  */
32
- offer(msg: OfferMessage): Promise<Answer>;
33
+ offer(ctx: Context, msg: OfferMessage): Promise<Answer>;
33
34
 
34
35
  /**
35
36
  * Reliably send a signal to a peer.
36
37
  */
37
- signal(msg: SignalMessage): Promise<void>;
38
+ signal(ctx: Context, msg: SignalMessage): Promise<void>;
38
39
  }
@@ -2,9 +2,10 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { afterAll, beforeAll, beforeEach, describe, expect, test, onTestFinished } from 'vitest';
5
+ import { afterAll, beforeAll, beforeEach, describe, expect, onTestFinished, test } from 'vitest';
6
6
 
7
7
  import { type Awaited } from '@dxos/async';
8
+ import { Context } from '@dxos/context';
8
9
  import { PublicKey } from '@dxos/keys';
9
10
  import { Messenger, WebsocketSignalManager } from '@dxos/messaging';
10
11
  import { type Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
@@ -37,8 +38,8 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
37
38
  topic,
38
39
  }: {
39
40
  signalApiUrl: string;
40
- onSignal?: (msg: SignalMessage) => Promise<void>;
41
- onOffer?: (msg: OfferMessage) => Promise<Answer>;
41
+ onSignal?: (ctx: Context, msg: SignalMessage) => Promise<void>;
42
+ onOffer?: (ctx: Context, msg: OfferMessage) => Promise<Answer>;
42
43
  topic: PublicKey;
43
44
  }) => {
44
45
  const peer = { peerKey: PublicKey.random().toHex() };
@@ -52,12 +53,12 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
52
53
  await messenger.listen({
53
54
  peer,
54
55
  payloadType: 'dxos.mesh.swarm.SwarmMessage',
55
- onMessage: async (message) => await router.receiveMessage(message),
56
+ onMessage: async (message) => await router.receiveMessage(Context.default(), message),
56
57
  });
57
58
 
58
59
  const router: SwarmMessenger = new SwarmMessenger({
59
60
  // todo(mykola): added catch to avoid not finished request.
60
- sendMessage: async (message) => await messenger.sendMessage(message),
61
+ sendMessage: async (ctx, message) => await messenger.sendMessage(ctx, message),
61
62
  onSignal,
62
63
  onOffer,
63
64
  topic,
@@ -72,7 +73,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
72
73
 
73
74
  test('signaling between 2 clients', async () => {
74
75
  const received: SignalMessage[] = [];
75
- const signalMock1 = async (msg: SignalMessage) => {
76
+ const signalMock1 = async (_ctx: Context, msg: SignalMessage) => {
76
77
  received.push(msg);
77
78
  };
78
79
  const { signalManager: signalManager1, peer: peer1 } = await createSignalClientAndMessageRouter({
@@ -89,8 +90,8 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
89
90
  topic,
90
91
  });
91
92
 
92
- await signalManager1.join({ topic, peer: peer1 });
93
- await signalManager2.join({ topic, peer: peer2 });
93
+ await signalManager1.join(Context.default(), { topic, peer: peer1 });
94
+ await signalManager2.join(Context.default(), { topic, peer: peer2 });
94
95
 
95
96
  const msg: SignalMessage = {
96
97
  author: peer2,
@@ -102,7 +103,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
102
103
  signalBatch: undefined,
103
104
  },
104
105
  };
105
- await router2.signal(msg);
106
+ await router2.signal(Context.default(), msg);
106
107
 
107
108
  await expect.poll(() => received[0]).toEqual(expect.objectContaining(msg));
108
109
  });
@@ -125,9 +126,9 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
125
126
  topic,
126
127
  });
127
128
 
128
- await signalManager1.join({ topic, peer: peer1 });
129
- await signalManager2.join({ topic, peer: peer2 });
130
- const answer = await router1.offer({
129
+ await signalManager1.join(Context.default(), { topic, peer: peer1 });
130
+ await signalManager2.join(Context.default(), { topic, peer: peer2 });
131
+ const answer = await router1.offer(Context.default(), {
131
132
  author: peer1,
132
133
  recipient: peer2,
133
134
  sessionId: PublicKey.random(),
@@ -139,7 +140,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
139
140
 
140
141
  test('signaling between 3 clients', async () => {
141
142
  const received1: SignalMessage[] = [];
142
- const signalMock1 = async (msg: SignalMessage) => {
143
+ const signalMock1 = async (_ctx: Context, msg: SignalMessage) => {
143
144
  received1.push(msg);
144
145
  };
145
146
  const {
@@ -153,7 +154,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
153
154
  topic,
154
155
  });
155
156
  const received2: SignalMessage[] = [];
156
- const signalMock2 = async (msg: SignalMessage) => {
157
+ const signalMock2 = async (_ctx: Context, msg: SignalMessage) => {
157
158
  received2.push(msg);
158
159
  };
159
160
  const {
@@ -167,7 +168,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
167
168
  topic,
168
169
  });
169
170
  const received3: SignalMessage[] = [];
170
- const signalMock3 = async (msg: SignalMessage) => {
171
+ const signalMock3 = async (_ctx: Context, msg: SignalMessage) => {
171
172
  received3.push(msg);
172
173
  };
173
174
  const {
@@ -181,9 +182,9 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
181
182
  topic,
182
183
  });
183
184
 
184
- await signalManager1.join({ topic, peer: peer1 });
185
- await signalManager2.join({ topic, peer: peer2 });
186
- await signalManager3.join({ topic, peer: peer3 });
185
+ await signalManager1.join(Context.default(), { topic, peer: peer1 });
186
+ await signalManager2.join(Context.default(), { topic, peer: peer2 });
187
+ await signalManager3.join(Context.default(), { topic, peer: peer3 });
187
188
 
188
189
  // sending signal from peer1 to peer3.
189
190
  const msg1to3: SignalMessage = {
@@ -193,7 +194,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
193
194
  topic,
194
195
  data: { signal: { payload: { msg: '1to3' } }, signalBatch: undefined },
195
196
  };
196
- await router1.signal(msg1to3);
197
+ await router1.signal(Context.default(), msg1to3);
197
198
  await expect.poll(() => received3[0]).toEqual(expect.objectContaining(msg1to3));
198
199
 
199
200
  // sending signal from peer2 to peer3.
@@ -204,7 +205,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
204
205
  topic,
205
206
  data: { signal: { payload: { msg: '2to3' } }, signalBatch: undefined },
206
207
  };
207
- await router2.signal(msg2to3);
208
+ await router2.signal(Context.default(), msg2to3);
208
209
  await expect.poll(() => received3[1]).toEqual(expect.objectContaining(msg2to3));
209
210
 
210
211
  // sending signal from peer3 to peer1.
@@ -215,7 +216,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
215
216
  topic,
216
217
  data: { signal: { payload: { msg: '3to1' } }, signalBatch: undefined },
217
218
  };
218
- await router3.signal(msg3to1);
219
+ await router3.signal(Context.default(), msg3to1);
219
220
  await expect.poll(() => received1[0]).toEqual(expect.objectContaining(msg3to1));
220
221
  });
221
222
 
@@ -241,11 +242,11 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
241
242
  topic,
242
243
  });
243
244
 
244
- await signalManager1.join({ topic, peer: peer1 });
245
- await signalManager2.join({ topic, peer: peer2 });
245
+ await signalManager1.join(Context.default(), { topic, peer: peer1 });
246
+ await signalManager2.join(Context.default(), { topic, peer: peer2 });
246
247
 
247
248
  // sending offer from peer1 to peer2.
248
- const answer1 = await router1.offer({
249
+ const answer1 = await router1.offer(Context.default(), {
249
250
  author: peer1,
250
251
  recipient: peer2,
251
252
  sessionId: PublicKey.random(),
@@ -255,7 +256,7 @@ describe('SwarmMessenger', { timeout: 7000 }, () => {
255
256
  expect(answer1.accept).toEqual(true);
256
257
 
257
258
  // sending offer from peer2 to peer1.
258
- const answer2 = await router2.offer({
259
+ const answer2 = await router2.offer(Context.default(), {
259
260
  author: peer2,
260
261
  recipient: peer1,
261
262
  sessionId: PublicKey.random(),