@dxos/network-manager 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6

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 (45) hide show
  1. package/dist/lib/browser/{chunk-AQSYW43M.mjs → chunk-WMCWASCJ.mjs} +76 -81
  2. package/dist/lib/browser/chunk-WMCWASCJ.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +17 -7
  6. package/dist/lib/browser/testing/index.mjs.map +3 -3
  7. package/dist/lib/node-esm/{chunk-SCX3PZRE.mjs → chunk-AL2EW6AJ.mjs} +76 -81
  8. package/dist/lib/node-esm/chunk-AL2EW6AJ.mjs.map +7 -0
  9. package/dist/lib/node-esm/index.mjs +1 -1
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/testing/index.mjs +17 -7
  12. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  13. package/dist/types/src/network-manager.d.ts +5 -4
  14. package/dist/types/src/network-manager.d.ts.map +1 -1
  15. package/dist/types/src/signal/signal-connection.d.ts +3 -2
  16. package/dist/types/src/signal/signal-connection.d.ts.map +1 -1
  17. package/dist/types/src/signal/signal-messenger.d.ts +3 -2
  18. package/dist/types/src/signal/signal-messenger.d.ts.map +1 -1
  19. package/dist/types/src/signal/swarm-messenger.d.ts +7 -7
  20. package/dist/types/src/signal/swarm-messenger.d.ts.map +1 -1
  21. package/dist/types/src/swarm/connection.d.ts +2 -1
  22. package/dist/types/src/swarm/connection.d.ts.map +1 -1
  23. package/dist/types/src/swarm/peer.d.ts +4 -3
  24. package/dist/types/src/swarm/peer.d.ts.map +1 -1
  25. package/dist/types/src/swarm/swarm.d.ts +3 -2
  26. package/dist/types/src/swarm/swarm.d.ts.map +1 -1
  27. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  28. package/dist/types/src/tests/property-test-suite.d.ts.map +1 -1
  29. package/dist/types/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +18 -18
  31. package/src/network-manager.ts +19 -15
  32. package/src/signal/integration.node.test.ts +11 -10
  33. package/src/signal/signal-connection.ts +3 -2
  34. package/src/signal/signal-messenger.ts +3 -2
  35. package/src/signal/swarm-messenger.node.test.ts +25 -24
  36. package/src/signal/swarm-messenger.ts +65 -55
  37. package/src/swarm/connection.test.ts +6 -6
  38. package/src/swarm/connection.ts +5 -5
  39. package/src/swarm/peer.ts +5 -5
  40. package/src/swarm/swarm.test.ts +2 -2
  41. package/src/swarm/swarm.ts +9 -9
  42. package/src/testing/test-builder.ts +4 -3
  43. package/src/tests/property-test-suite.ts +4 -3
  44. package/dist/lib/browser/chunk-AQSYW43M.mjs.map +0 -7
  45. package/dist/lib/node-esm/chunk-SCX3PZRE.mjs.map +0 -7
@@ -118,7 +118,7 @@ export class Connection {
118
118
  public readonly transportStats = new Event<TransportStats>();
119
119
 
120
120
  private readonly _signalSendTask = new DeferredTask(this._ctx, async () => {
121
- await this._flushSignalBuffer();
121
+ await this._flushSignalBuffer(this._ctx);
122
122
  });
123
123
 
124
124
  private _signallingDelay = STARTING_SIGNALLING_DELAY;
@@ -366,21 +366,21 @@ export class Connection {
366
366
  this._signalSendTask.schedule();
367
367
  }
368
368
 
369
- private async _flushSignalBuffer(): Promise<void> {
369
+ private async _flushSignalBuffer(ctx: Context): Promise<void> {
370
370
  if (this._outgoingSignalBuffer.length === 0) {
371
371
  return;
372
372
  }
373
373
 
374
374
  try {
375
375
  if (process.env.NODE_ENV !== 'test') {
376
- await cancelWithContext(this._ctx, sleep(this._signallingDelay));
376
+ await cancelWithContext(ctx, sleep(this._signallingDelay));
377
377
  this._signallingDelay = Math.min(this._signallingDelay * 2, MAX_SIGNALLING_DELAY);
378
378
  }
379
379
 
380
380
  const signals = [...this._outgoingSignalBuffer];
381
381
  this._outgoingSignalBuffer.length = 0;
382
382
 
383
- await this._signalMessaging.signal({
383
+ await this._signalMessaging.signal(ctx, {
384
384
  author: this.localInfo,
385
385
  recipient: this.remoteInfo,
386
386
  sessionId: this.sessionId,
@@ -406,7 +406,7 @@ export class Connection {
406
406
  /**
407
407
  * Receive a signal from the remote peer.
408
408
  */
409
- async signal(msg: SignalMessage): Promise<void> {
409
+ async signal(_ctx: Context, msg: SignalMessage): Promise<void> {
410
410
  invariant(msg.sessionId);
411
411
  if (!msg.sessionId.equals(this.sessionId)) {
412
412
  log('dropping signal for incorrect session id');
package/src/swarm/peer.ts CHANGED
@@ -106,7 +106,7 @@ export class Peer {
106
106
  /**
107
107
  * Respond to remote offer.
108
108
  */
109
- async onOffer(message: OfferMessage): Promise<Answer> {
109
+ async onOffer(_ctx: Context, message: OfferMessage): Promise<Answer> {
110
110
  const remote = message.author;
111
111
 
112
112
  if (
@@ -169,7 +169,7 @@ export class Peer {
169
169
  /**
170
170
  * Initiate a connection to the remote peer.
171
171
  */
172
- async initiateConnection(): Promise<void> {
172
+ async initiateConnection(ctx: Context): Promise<void> {
173
173
  invariant(!this.initiating, 'Initiation in progress.');
174
174
  invariant(!this.connection, 'Already connected.');
175
175
  const sessionId = PublicKey.random();
@@ -183,7 +183,7 @@ export class Peer {
183
183
  await this._connectionLimiter.connecting(sessionId);
184
184
  connection.initiate();
185
185
 
186
- answer = await this._signalMessaging.offer({
186
+ answer = await this._signalMessaging.offer(ctx, {
187
187
  author: this.localInfo,
188
188
  recipient: this.remoteInfo,
189
189
  sessionId,
@@ -378,13 +378,13 @@ export class Peer {
378
378
  log('closed', { peerId: this.remoteInfo, sessionId: connection.sessionId });
379
379
  }
380
380
 
381
- async onSignal(message: SignalMessage): Promise<void> {
381
+ async onSignal(ctx: Context, message: SignalMessage): Promise<void> {
382
382
  if (!this.connection) {
383
383
  log('dropping signal message for non-existent connection', { message });
384
384
  return;
385
385
  }
386
386
 
387
- await this.connection.signal(message);
387
+ await this.connection.signal(ctx, message);
388
388
  }
389
389
 
390
390
  @synchronized
@@ -159,9 +159,9 @@ describe.skip('Swarm', () => {
159
159
  const messages = new ComplexSet<{ author: PeerInfo; recipient: PeerInfo }>(
160
160
  ({ author, recipient }) => author.peerKey + recipient.peerKey,
161
161
  );
162
- signalManager.sendMessage = async (message) => {
162
+ signalManager.sendMessage = async (ctx, message) => {
163
163
  messages.add({ author: message.author, recipient: message.recipient });
164
- return sendOriginal(message);
164
+ return sendOriginal(ctx, message);
165
165
  };
166
166
  // Stop signaling to stop connection in initiation state.
167
167
  signalManager.freeze();
@@ -94,9 +94,9 @@ export class Swarm {
94
94
  _topology.init(this._getSwarmController());
95
95
 
96
96
  this._swarmMessenger = new SwarmMessenger({
97
- sendMessage: async (msg) => await this._messenger.sendMessage(msg),
98
- onSignal: async (msg) => await this.onSignal(msg),
99
- onOffer: async (msg) => await this.onOffer(msg),
97
+ sendMessage: async (ctx, msg) => await this._messenger.sendMessage(ctx, msg),
98
+ onSignal: async (ctx, msg) => await this.onSignal(ctx, msg),
99
+ onOffer: async (ctx, msg) => await this.onOffer(ctx, msg),
100
100
  topic: this._topic,
101
101
  });
102
102
  log.trace('dxos.mesh.swarm.constructor', trace.end({ id: this._instanceId }));
@@ -136,7 +136,7 @@ export class Swarm {
136
136
  payloadType: 'dxos.mesh.swarm.SwarmMessage',
137
137
  onMessage: async (message) => {
138
138
  await this._swarmMessenger
139
- .receiveMessage(message)
139
+ .receiveMessage(this._ctx, message)
140
140
  // TODO(nf): discriminate between errors
141
141
  .catch((err) => log.info('Error while receiving message', { err }));
142
142
  },
@@ -205,7 +205,7 @@ export class Swarm {
205
205
  }
206
206
 
207
207
  @synchronized
208
- async onOffer(message: OfferMessage): Promise<Answer> {
208
+ async onOffer(ctx: Context, message: OfferMessage): Promise<Answer> {
209
209
  log('offer', { message });
210
210
  if (this._ctx.disposed) {
211
211
  log('ignored for disposed swarm');
@@ -224,7 +224,7 @@ export class Swarm {
224
224
  }
225
225
 
226
226
  const peer = this._getOfferSenderPeer(message.author);
227
- const answer = await peer.onOffer(message);
227
+ const answer = await peer.onOffer(ctx, message);
228
228
  this._topology.update();
229
229
  return answer;
230
230
  }
@@ -243,7 +243,7 @@ export class Swarm {
243
243
  return peer;
244
244
  }
245
245
 
246
- async onSignal(message: SignalMessage): Promise<void> {
246
+ async onSignal(ctx: Context, message: SignalMessage): Promise<void> {
247
247
  log('signal', { message });
248
248
  if (this._ctx.disposed) {
249
249
  log.info('ignored for offline swarm');
@@ -257,7 +257,7 @@ export class Swarm {
257
257
  invariant(message.author);
258
258
 
259
259
  const peer = this._getOrCreatePeer(message.author);
260
- await peer.onSignal(message);
260
+ await peer.onSignal(ctx, message);
261
261
  }
262
262
 
263
263
  // For debug purposes
@@ -404,7 +404,7 @@ export class Swarm {
404
404
  }
405
405
 
406
406
  log('initiating connection...', { remotePeer });
407
- await peer.initiateConnection();
407
+ await peer.initiateConnection(ctx);
408
408
  this._topology.update();
409
409
  log('initiated', { remotePeer });
410
410
  }
@@ -4,6 +4,7 @@
4
4
 
5
5
  import { PublicKey } from '@dxos/keys';
6
6
  import { log } from '@dxos/log';
7
+ import { Context } from '@dxos/context';
7
8
  import {
8
9
  MemorySignalManager,
9
10
  MemorySignalManagerContext,
@@ -169,7 +170,7 @@ export class TestPeer {
169
170
 
170
171
  await this._proxy?.close();
171
172
  await this._service?.close();
172
- await this._networkManager.close();
173
+ await this._networkManager.close(Context.default());
173
174
  }
174
175
 
175
176
  getSwarm(topic: PublicKey): TestSwarmConnection {
@@ -218,7 +219,7 @@ export class TestSwarmConnection {
218
219
  // TODO(burdon): Need to create new plugin instance per swarm?
219
220
  // If so, then perhaps joinSwarm should return swarm object with access to plugins.
220
221
  async join(topology = new FullyConnectedTopology()): Promise<this> {
221
- await this.peer._networkManager.joinSwarm({
222
+ await this.peer._networkManager.joinSwarm(Context.default(), {
222
223
  topic: this.topic,
223
224
  peerInfo: { peerKey: this.peer.peerId.toHex(), identityKey: this.peer.peerId.toHex() },
224
225
  protocolProvider: this.protocol.factory,
@@ -229,7 +230,7 @@ export class TestSwarmConnection {
229
230
  }
230
231
 
231
232
  async leave(): Promise<this> {
232
- await this.peer._networkManager.leaveSwarm(this.topic);
233
+ await this.peer._networkManager.leaveSwarm(Context.default(), this.topic);
233
234
  return this;
234
235
  }
235
236
  }
@@ -6,6 +6,7 @@ import * as fc from 'fast-check';
6
6
  import { type ModelRunSetup } from 'fast-check';
7
7
  import { test } from 'vitest';
8
8
 
9
+ import { Context } from '@dxos/context';
9
10
  import { todo } from '@dxos/debug';
10
11
  import { PublicKey } from '@dxos/keys';
11
12
  import { ComplexMap, ComplexSet, range } from '@dxos/util';
@@ -97,7 +98,7 @@ export const propertyTestSuite = () => {
97
98
  model.joinedPeers.delete(this.peerId);
98
99
 
99
100
  const peer = real.peers.get(this.peerId);
100
- await peer!.networkManager.close();
101
+ await peer!.networkManager.close(Context.default());
101
102
  real.peers.delete(this.peerId);
102
103
 
103
104
  await assertState(model, real);
@@ -119,7 +120,7 @@ export const propertyTestSuite = () => {
119
120
  // afterTest(() => presence.stop());
120
121
  // const protocol = createProtocolFactory(model.topic, this.peerId, [presence]);
121
122
 
122
- await peer.networkManager.joinSwarm({
123
+ await peer.networkManager.joinSwarm(Context.default(), {
123
124
  peerInfo: {
124
125
  peerKey: this.peerId.toHex(),
125
126
  identityKey: this.peerId.toHex(),
@@ -146,7 +147,7 @@ export const propertyTestSuite = () => {
146
147
  model.joinedPeers.delete(this.peerId);
147
148
 
148
149
  const peer = real.peers.get(this.peerId)!;
149
- await peer.networkManager.leaveSwarm(model.topic);
150
+ await peer.networkManager.leaveSwarm(Context.default(), model.topic);
150
151
  peer.presence = undefined;
151
152
 
152
153
  await assertState(model, real);