@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.
- package/dist/lib/browser/{chunk-AQSYW43M.mjs → chunk-WMCWASCJ.mjs} +76 -81
- package/dist/lib/browser/chunk-WMCWASCJ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +17 -7
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/{chunk-SCX3PZRE.mjs → chunk-AL2EW6AJ.mjs} +76 -81
- package/dist/lib/node-esm/chunk-AL2EW6AJ.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1 -1
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +17 -7
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/types/src/network-manager.d.ts +5 -4
- package/dist/types/src/network-manager.d.ts.map +1 -1
- package/dist/types/src/signal/signal-connection.d.ts +3 -2
- package/dist/types/src/signal/signal-connection.d.ts.map +1 -1
- package/dist/types/src/signal/signal-messenger.d.ts +3 -2
- package/dist/types/src/signal/signal-messenger.d.ts.map +1 -1
- package/dist/types/src/signal/swarm-messenger.d.ts +7 -7
- package/dist/types/src/signal/swarm-messenger.d.ts.map +1 -1
- package/dist/types/src/swarm/connection.d.ts +2 -1
- package/dist/types/src/swarm/connection.d.ts.map +1 -1
- package/dist/types/src/swarm/peer.d.ts +4 -3
- package/dist/types/src/swarm/peer.d.ts.map +1 -1
- package/dist/types/src/swarm/swarm.d.ts +3 -2
- package/dist/types/src/swarm/swarm.d.ts.map +1 -1
- package/dist/types/src/testing/test-builder.d.ts.map +1 -1
- package/dist/types/src/tests/property-test-suite.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +18 -18
- package/src/network-manager.ts +19 -15
- package/src/signal/integration.node.test.ts +11 -10
- package/src/signal/signal-connection.ts +3 -2
- package/src/signal/signal-messenger.ts +3 -2
- package/src/signal/swarm-messenger.node.test.ts +25 -24
- package/src/signal/swarm-messenger.ts +65 -55
- package/src/swarm/connection.test.ts +6 -6
- package/src/swarm/connection.ts +5 -5
- package/src/swarm/peer.ts +5 -5
- package/src/swarm/swarm.test.ts +2 -2
- package/src/swarm/swarm.ts +9 -9
- package/src/testing/test-builder.ts +4 -3
- package/src/tests/property-test-suite.ts +4 -3
- package/dist/lib/browser/chunk-AQSYW43M.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SCX3PZRE.mjs.map +0 -7
package/src/swarm/connection.ts
CHANGED
|
@@ -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(
|
|
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
|
package/src/swarm/swarm.test.ts
CHANGED
|
@@ -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();
|
package/src/swarm/swarm.ts
CHANGED
|
@@ -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);
|