@dxos/network-manager 0.1.46 → 0.1.47
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-UTCOIPSK.mjs → chunk-CVPTBFWI.mjs} +42 -38
- package/dist/lib/browser/chunk-CVPTBFWI.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/node/index.cjs +42 -38
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +40 -36
- package/dist/lib/node/testing/index.cjs.map +4 -4
- package/dist/types/src/signal/index.d.ts +1 -1
- package/dist/types/src/signal/index.d.ts.map +1 -1
- package/dist/types/src/signal/{message-router.d.ts → swarm-messenger.d.ts} +6 -7
- package/dist/types/src/signal/swarm-messenger.d.ts.map +1 -0
- package/dist/types/src/signal/swarm-messenger.test.d.ts +2 -0
- package/dist/types/src/signal/swarm-messenger.test.d.ts.map +1 -0
- package/dist/types/src/swarm/swarm.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/signal/index.ts +1 -1
- package/src/signal/integration.test.ts +2 -2
- package/src/signal/{message-router.test.ts → swarm-messenger.test.ts} +3 -3
- package/src/signal/{message-router.ts → swarm-messenger.ts} +14 -25
- package/src/swarm/peer.ts +1 -1
- package/src/swarm/swarm.ts +4 -4
- package/src/transport/webrtc-transport-proxy.test.ts +15 -24
- package/src/transport/webrtc-transport.test.ts +2 -11
- package/dist/lib/browser/chunk-UTCOIPSK.mjs.map +0 -7
- package/dist/types/src/signal/message-router.d.ts.map +0 -1
- package/dist/types/src/signal/message-router.test.d.ts +0 -2
- package/dist/types/src/signal/message-router.test.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/signal/index.ts"],"names":[],"mappings":"AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/signal/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { Any } from '@dxos/codec-protobuf';
|
|
|
2
2
|
import { PublicKey } from '@dxos/keys';
|
|
3
3
|
import { Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
4
4
|
import { OfferMessage, SignalMessage, SignalMessenger } from './signal-messenger';
|
|
5
|
-
|
|
5
|
+
export type SwarmMessengerOptions = {
|
|
6
6
|
sendMessage: (params: {
|
|
7
7
|
author: PublicKey;
|
|
8
8
|
recipient: PublicKey;
|
|
@@ -11,17 +11,18 @@ interface MessageRouterOptions {
|
|
|
11
11
|
onOffer: (message: OfferMessage) => Promise<Answer>;
|
|
12
12
|
onSignal: (message: SignalMessage) => Promise<void>;
|
|
13
13
|
topic: PublicKey;
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
15
|
/**
|
|
16
16
|
* Adds offer/answer and signal interfaces.
|
|
17
17
|
*/
|
|
18
|
-
export declare class
|
|
18
|
+
export declare class SwarmMessenger implements SignalMessenger {
|
|
19
|
+
private readonly _ctx;
|
|
19
20
|
private readonly _onSignal;
|
|
20
21
|
private readonly _sendMessage;
|
|
21
22
|
private readonly _onOffer;
|
|
22
23
|
private readonly _topic;
|
|
23
24
|
private readonly _offerRecords;
|
|
24
|
-
constructor({ sendMessage, onSignal, onOffer, topic }:
|
|
25
|
+
constructor({ sendMessage, onSignal, onOffer, topic }: SwarmMessengerOptions);
|
|
25
26
|
receiveMessage({ author, recipient, payload, }: {
|
|
26
27
|
author: PublicKey;
|
|
27
28
|
recipient: PublicKey;
|
|
@@ -30,10 +31,8 @@ export declare class MessageRouter implements SignalMessenger {
|
|
|
30
31
|
signal(message: SignalMessage): Promise<void>;
|
|
31
32
|
offer(message: OfferMessage): Promise<Answer>;
|
|
32
33
|
private _sendReliableMessage;
|
|
33
|
-
private _encodeAndSend;
|
|
34
34
|
private _resolveAnswers;
|
|
35
35
|
private _handleOffer;
|
|
36
36
|
private _handleSignal;
|
|
37
37
|
}
|
|
38
|
-
|
|
39
|
-
//# sourceMappingURL=message-router.d.ts.map
|
|
38
|
+
//# sourceMappingURL=swarm-messenger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-messenger.d.ts","sourceRoot":"","sources":["../../../../src/signal/swarm-messenger.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,MAAM,EAAgB,MAAM,uCAAuC,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMlF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoF;IAEjH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4E;gBAE9F,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,qBAAqB;IAOtE,cAAc,CAAC,EACnB,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE;QACD,MAAM,EAAE,SAAS,CAAC;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBX,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;YAerC,oBAAoB;YA0BpB,eAAe;YAWf,YAAY;YA6BZ,aAAa;CAoB5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarm-messenger.test.d.ts","sourceRoot":"","sources":["../../../../src/signal/swarm-messenger.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../../../src/swarm/swarm.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,
|
|
1
|
+
{"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../../../src/swarm/swarm.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAkB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAmB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAQ3D;;;;GAIG;AACH,qBAAa,KAAK;IAwCd,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAxCzB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO,CAAC,IAAI,CAAiB;IAE7B;;OAEG;IAEH,QAAQ,CAAC,WAAW,SAA8B;IAoBlD,QAAQ,CAAC,MAAM,cAAqB;gBAMjB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,EAC9B,SAAS,EAAE,QAAQ,EACV,iBAAiB,EAAE,oBAAoB,EACvC,UAAU,EAAE,SAAS,EACrB,iBAAiB,EAAE,gBAAgB,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS;IA2B7C,IAAI,WAAW,iBAId;IAED,IACI,SAAS,cAEZ;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IACI,KAAK,IAAI,KAAK,CAEjB;IAGK,OAAO;IAQP,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAiBpC,YAAY,CAAC,UAAU,EAAE,UAAU;IA8B7B,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB/C,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C,SAAS;IAOT,QAAQ;IAId,OAAO,CAAC,gBAAgB;YAiDV,YAAY;IAM1B,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;YACW,mBAAmB;YA0BnB,gBAAgB;CAQ/B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/network-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.47",
|
|
4
4
|
"description": "Network Manager",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -25,20 +25,20 @@
|
|
|
25
25
|
"simple-peer": "9.11.0",
|
|
26
26
|
"ws": "^7.4.4",
|
|
27
27
|
"xor-distance": "^2.0.0",
|
|
28
|
-
"@dxos/async": "0.1.
|
|
29
|
-
"@dxos/codec-protobuf": "0.1.
|
|
30
|
-
"@dxos/context": "0.1.
|
|
31
|
-
"@dxos/credentials": "0.1.
|
|
32
|
-
"@dxos/crypto": "0.1.
|
|
33
|
-
"@dxos/debug": "0.1.
|
|
34
|
-
"@dxos/keys": "0.1.
|
|
35
|
-
"@dxos/log": "0.1.
|
|
36
|
-
"@dxos/messaging": "0.1.
|
|
37
|
-
"@dxos/node-std": "0.1.
|
|
38
|
-
"@dxos/protocols": "0.1.
|
|
39
|
-
"@dxos/rpc": "0.1.
|
|
40
|
-
"@dxos/teleport": "0.1.
|
|
41
|
-
"@dxos/util": "0.1.
|
|
28
|
+
"@dxos/async": "0.1.47",
|
|
29
|
+
"@dxos/codec-protobuf": "0.1.47",
|
|
30
|
+
"@dxos/context": "0.1.47",
|
|
31
|
+
"@dxos/credentials": "0.1.47",
|
|
32
|
+
"@dxos/crypto": "0.1.47",
|
|
33
|
+
"@dxos/debug": "0.1.47",
|
|
34
|
+
"@dxos/keys": "0.1.47",
|
|
35
|
+
"@dxos/log": "0.1.47",
|
|
36
|
+
"@dxos/messaging": "0.1.47",
|
|
37
|
+
"@dxos/node-std": "0.1.47",
|
|
38
|
+
"@dxos/protocols": "0.1.47",
|
|
39
|
+
"@dxos/rpc": "0.1.47",
|
|
40
|
+
"@dxos/teleport": "0.1.47",
|
|
41
|
+
"@dxos/util": "0.1.47"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@swc-node/register": "1.5.4",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"earljs": "~0.1.10",
|
|
49
49
|
"fast-check": "~3.3.0",
|
|
50
50
|
"typescript": "^5.0.4",
|
|
51
|
-
"@dxos/signal": "0.1.
|
|
51
|
+
"@dxos/signal": "0.1.47"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
package/src/signal/index.ts
CHANGED
|
@@ -12,8 +12,8 @@ import { Messenger, WebsocketSignalManager } from '@dxos/messaging';
|
|
|
12
12
|
import { runTestSignalServer, SignalServerRunner } from '@dxos/signal';
|
|
13
13
|
import { afterAll, afterTest, beforeAll, describe, test } from '@dxos/test';
|
|
14
14
|
|
|
15
|
-
import { MessageRouter } from './message-router';
|
|
16
15
|
import { SignalMessage } from './signal-messenger';
|
|
16
|
+
import { SwarmMessenger } from './swarm-messenger';
|
|
17
17
|
|
|
18
18
|
describe('Signal Integration Test', () => {
|
|
19
19
|
let broker: SignalServerRunner;
|
|
@@ -45,7 +45,7 @@ describe('Signal Integration Test', () => {
|
|
|
45
45
|
const signalMock = async (msg: SignalMessage) => {
|
|
46
46
|
receivedSignals.push(msg);
|
|
47
47
|
};
|
|
48
|
-
const messageRouter = new
|
|
48
|
+
const messageRouter = new SwarmMessenger({
|
|
49
49
|
sendMessage: messenger.sendMessage.bind(messenger),
|
|
50
50
|
onSignal: signalMock,
|
|
51
51
|
onOffer: async () => ({ accept: true }),
|
|
@@ -14,10 +14,10 @@ import { Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
|
14
14
|
import { runTestSignalServer } from '@dxos/signal';
|
|
15
15
|
import { afterAll, beforeAll, describe, test, afterTest } from '@dxos/test';
|
|
16
16
|
|
|
17
|
-
import { MessageRouter } from './message-router';
|
|
18
17
|
import { OfferMessage, SignalMessage } from './signal-messenger';
|
|
18
|
+
import { SwarmMessenger } from './swarm-messenger';
|
|
19
19
|
|
|
20
|
-
describe('
|
|
20
|
+
describe('SwarmMessenger', () => {
|
|
21
21
|
let topic: PublicKey;
|
|
22
22
|
|
|
23
23
|
let broker1: Awaited<ReturnType<typeof runTestSignalServer>>;
|
|
@@ -57,7 +57,7 @@ describe('MessageRouter', () => {
|
|
|
57
57
|
onMessage: async (message) => await router.receiveMessage(message),
|
|
58
58
|
});
|
|
59
59
|
|
|
60
|
-
const router:
|
|
60
|
+
const router: SwarmMessenger = new SwarmMessenger({
|
|
61
61
|
// todo(mykola): added catch to avoid not finished request.
|
|
62
62
|
sendMessage: async (message) => await messenger.sendMessage(message),
|
|
63
63
|
onSignal,
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
import assert from 'node:assert';
|
|
6
6
|
|
|
7
7
|
import { Any } from '@dxos/codec-protobuf';
|
|
8
|
+
import { Context } from '@dxos/context';
|
|
8
9
|
import { PublicKey } from '@dxos/keys';
|
|
9
10
|
import { log } from '@dxos/log';
|
|
10
11
|
import { schema } from '@dxos/protocols';
|
|
@@ -15,20 +16,20 @@ import { OfferMessage, SignalMessage, SignalMessenger } from './signal-messenger
|
|
|
15
16
|
|
|
16
17
|
interface OfferRecord {
|
|
17
18
|
resolve: (answer: Answer) => void;
|
|
18
|
-
reject: (error?: Error) => void;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
export type SwarmMessengerOptions = {
|
|
22
22
|
sendMessage: (params: { author: PublicKey; recipient: PublicKey; payload: Any }) => Promise<void>;
|
|
23
23
|
onOffer: (message: OfferMessage) => Promise<Answer>;
|
|
24
24
|
onSignal: (message: SignalMessage) => Promise<void>;
|
|
25
25
|
topic: PublicKey;
|
|
26
|
-
}
|
|
26
|
+
};
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
* Adds offer/answer and signal interfaces.
|
|
30
30
|
*/
|
|
31
|
-
export class
|
|
31
|
+
export class SwarmMessenger implements SignalMessenger {
|
|
32
|
+
private readonly _ctx = new Context();
|
|
32
33
|
private readonly _onSignal: (message: SignalMessage) => Promise<void>;
|
|
33
34
|
private readonly _sendMessage: (msg: { author: PublicKey; recipient: PublicKey; payload: Any }) => Promise<void>;
|
|
34
35
|
|
|
@@ -37,7 +38,7 @@ export class MessageRouter implements SignalMessenger {
|
|
|
37
38
|
|
|
38
39
|
private readonly _offerRecords: ComplexMap<PublicKey, OfferRecord> = new ComplexMap((key) => key.toHex());
|
|
39
40
|
|
|
40
|
-
constructor({ sendMessage, onSignal, onOffer, topic }:
|
|
41
|
+
constructor({ sendMessage, onSignal, onOffer, topic }: SwarmMessengerOptions) {
|
|
41
42
|
this._sendMessage = sendMessage;
|
|
42
43
|
this._onSignal = onSignal;
|
|
43
44
|
this._onOffer = onOffer;
|
|
@@ -77,11 +78,11 @@ export class MessageRouter implements SignalMessenger {
|
|
|
77
78
|
|
|
78
79
|
async signal(message: SignalMessage): Promise<void> {
|
|
79
80
|
assert(message.data?.signal);
|
|
80
|
-
|
|
81
|
+
return this._sendReliableMessage({
|
|
81
82
|
author: message.author,
|
|
82
83
|
recipient: message.recipient,
|
|
83
84
|
message,
|
|
84
|
-
});
|
|
85
|
+
}).catch((err) => log.catch(err));
|
|
85
86
|
}
|
|
86
87
|
|
|
87
88
|
async offer(message: OfferMessage): Promise<Answer> {
|
|
@@ -90,12 +91,12 @@ export class MessageRouter implements SignalMessenger {
|
|
|
90
91
|
messageId: PublicKey.random(),
|
|
91
92
|
};
|
|
92
93
|
return new Promise<Answer>((resolve, reject) => {
|
|
93
|
-
this._offerRecords.set(networkMessage.messageId!, { resolve
|
|
94
|
-
|
|
94
|
+
this._offerRecords.set(networkMessage.messageId!, { resolve });
|
|
95
|
+
this._sendReliableMessage({
|
|
95
96
|
author: message.author,
|
|
96
97
|
recipient: message.recipient,
|
|
97
98
|
message: networkMessage,
|
|
98
|
-
});
|
|
99
|
+
}).catch((err) => reject(err));
|
|
99
100
|
});
|
|
100
101
|
}
|
|
101
102
|
|
|
@@ -115,24 +116,12 @@ export class MessageRouter implements SignalMessenger {
|
|
|
115
116
|
};
|
|
116
117
|
|
|
117
118
|
log('sending', { from: author, to: recipient, msg: networkMessage });
|
|
118
|
-
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
private async _encodeAndSend({
|
|
122
|
-
author,
|
|
123
|
-
recipient,
|
|
124
|
-
message,
|
|
125
|
-
}: {
|
|
126
|
-
author: PublicKey;
|
|
127
|
-
recipient: PublicKey;
|
|
128
|
-
message: SwarmMessage;
|
|
129
|
-
}) {
|
|
130
|
-
await this._sendMessage({
|
|
119
|
+
return this._sendMessage({
|
|
131
120
|
author,
|
|
132
121
|
recipient,
|
|
133
122
|
payload: {
|
|
134
123
|
type_url: 'dxos.mesh.swarm.SwarmMessage',
|
|
135
|
-
value: schema.getCodecForType('dxos.mesh.swarm.SwarmMessage').encode(
|
|
124
|
+
value: schema.getCodecForType('dxos.mesh.swarm.SwarmMessage').encode(networkMessage),
|
|
136
125
|
},
|
|
137
126
|
});
|
|
138
127
|
}
|
|
@@ -174,7 +163,7 @@ export class MessageRouter implements SignalMessenger {
|
|
|
174
163
|
sessionId: message.sessionId,
|
|
175
164
|
data: { answer },
|
|
176
165
|
},
|
|
177
|
-
});
|
|
166
|
+
}).catch((err) => log.catch(err));
|
|
178
167
|
}
|
|
179
168
|
|
|
180
169
|
private async _handleSignal({
|
package/src/swarm/peer.ts
CHANGED
|
@@ -169,7 +169,7 @@ export class Peer {
|
|
|
169
169
|
connection.openConnection();
|
|
170
170
|
this._callbacks.onAccepted();
|
|
171
171
|
} catch (err: any) {
|
|
172
|
-
log
|
|
172
|
+
log('initiation error', { err, topic: this.topic, peerId: this.localPeerId, remoteId: this.id });
|
|
173
173
|
// Calls `onStateChange` with CLOSED state.
|
|
174
174
|
await this.closeConnection();
|
|
175
175
|
throw err;
|
package/src/swarm/swarm.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { SwarmEvent } from '@dxos/protocols/proto/dxos/mesh/signal';
|
|
|
15
15
|
import { Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
16
16
|
import { ComplexMap, isNotNullOrUndefined } from '@dxos/util';
|
|
17
17
|
|
|
18
|
-
import {
|
|
18
|
+
import { SwarmMessenger, OfferMessage, SignalMessage } from '../signal';
|
|
19
19
|
import { SwarmController, Topology } from '../topology';
|
|
20
20
|
import { TransportFactory } from '../transport';
|
|
21
21
|
import { Topic } from '../types';
|
|
@@ -39,7 +39,7 @@ export class Swarm {
|
|
|
39
39
|
*/
|
|
40
40
|
readonly _peers = new ComplexMap<PublicKey, Peer>(PublicKey.hash);
|
|
41
41
|
|
|
42
|
-
private readonly _swarmMessenger:
|
|
42
|
+
private readonly _swarmMessenger: SwarmMessenger;
|
|
43
43
|
|
|
44
44
|
private _ctx = new Context();
|
|
45
45
|
|
|
@@ -88,7 +88,7 @@ export class Swarm {
|
|
|
88
88
|
log('creating swarm', { peerId: _ownPeerId });
|
|
89
89
|
_topology.init(this._getSwarmController());
|
|
90
90
|
|
|
91
|
-
this._swarmMessenger = new
|
|
91
|
+
this._swarmMessenger = new SwarmMessenger({
|
|
92
92
|
sendMessage: async (msg) => await this._messenger.sendMessage(msg),
|
|
93
93
|
onSignal: async (msg) => await this.onSignal(msg),
|
|
94
94
|
onOffer: async (msg) => await this.onOffer(msg),
|
|
@@ -316,7 +316,7 @@ export class Swarm {
|
|
|
316
316
|
try {
|
|
317
317
|
await this._initiateConnection(peer);
|
|
318
318
|
} catch (err: any) {
|
|
319
|
-
log
|
|
319
|
+
log('initiation error', err);
|
|
320
320
|
}
|
|
321
321
|
});
|
|
322
322
|
},
|
|
@@ -4,9 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
// @dxos/test platform=nodejs
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
|
|
9
|
-
import { sleep, TestStream } from '@dxos/async';
|
|
7
|
+
import { TestStream } from '@dxos/async';
|
|
10
8
|
import { schema } from '@dxos/protocols';
|
|
11
9
|
import { BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
|
|
12
10
|
import { Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
@@ -76,18 +74,9 @@ describe('WebRTCTransportProxy', () => {
|
|
|
76
74
|
test('open and close', async () => {
|
|
77
75
|
const { webRTCTransportProxy: connection } = await setupProxy();
|
|
78
76
|
|
|
79
|
-
|
|
80
|
-
const closedCb = () => {
|
|
81
|
-
callsCounter++;
|
|
82
|
-
};
|
|
83
|
-
connection.closed.once(closedCb);
|
|
84
|
-
|
|
85
|
-
await sleep(10); // Let simple-peer process events.
|
|
77
|
+
const wait = connection.closed.waitForCount(1);
|
|
86
78
|
await connection.destroy();
|
|
87
|
-
|
|
88
|
-
await sleep(1); // Process events.
|
|
89
|
-
|
|
90
|
-
expect(callsCounter).toEqual(1);
|
|
79
|
+
await wait;
|
|
91
80
|
}).timeout(1_000);
|
|
92
81
|
|
|
93
82
|
test('establish connection and send data through with protocol', async () => {
|
|
@@ -96,8 +85,7 @@ describe('WebRTCTransportProxy', () => {
|
|
|
96
85
|
initiator: true,
|
|
97
86
|
stream: stream1,
|
|
98
87
|
sendSignal: async (signal) => {
|
|
99
|
-
|
|
100
|
-
await connection2.signal(signal);
|
|
88
|
+
connection2.signal(signal);
|
|
101
89
|
},
|
|
102
90
|
});
|
|
103
91
|
afterTest(() => connection1.errors.assertNoUnhandledErrors());
|
|
@@ -107,8 +95,7 @@ describe('WebRTCTransportProxy', () => {
|
|
|
107
95
|
initiator: false,
|
|
108
96
|
stream: stream2,
|
|
109
97
|
sendSignal: async (signal) => {
|
|
110
|
-
|
|
111
|
-
await connection1.signal(signal);
|
|
98
|
+
connection1.signal(signal);
|
|
112
99
|
},
|
|
113
100
|
});
|
|
114
101
|
afterTest(() => connection2.errors.assertNoUnhandledErrors());
|
|
@@ -160,24 +147,28 @@ describe('WebRTCTransportProxy', () => {
|
|
|
160
147
|
initiator: true,
|
|
161
148
|
stream: stream1,
|
|
162
149
|
sendSignal: async (signal) => {
|
|
163
|
-
|
|
164
|
-
await proxy2.signal(signal);
|
|
150
|
+
proxy2.signal(signal);
|
|
165
151
|
},
|
|
166
152
|
bridgeService: rpcClient.rpc.BridgeService,
|
|
167
153
|
});
|
|
168
|
-
afterTest(() =>
|
|
154
|
+
afterTest(async () => {
|
|
155
|
+
proxy1.errors.assertNoUnhandledErrors();
|
|
156
|
+
await proxy1.destroy();
|
|
157
|
+
});
|
|
169
158
|
|
|
170
159
|
const stream2 = new TestStream();
|
|
171
160
|
const proxy2 = new WebRTCTransportProxy({
|
|
172
161
|
initiator: false,
|
|
173
162
|
stream: stream2,
|
|
174
163
|
sendSignal: async (signal) => {
|
|
175
|
-
|
|
176
|
-
await proxy1.signal(signal);
|
|
164
|
+
proxy1.signal(signal);
|
|
177
165
|
},
|
|
178
166
|
bridgeService: rpcClient.rpc.BridgeService,
|
|
179
167
|
});
|
|
180
|
-
afterTest(() =>
|
|
168
|
+
afterTest(async () => {
|
|
169
|
+
proxy2.errors.assertNoUnhandledErrors();
|
|
170
|
+
await proxy2.destroy();
|
|
171
|
+
});
|
|
181
172
|
|
|
182
173
|
await TestStream.assertConnectivity(stream1, stream2);
|
|
183
174
|
}).timeout(3_000);
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// Copyright 2020 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import expect from 'expect';
|
|
6
5
|
import { Duplex } from 'stream';
|
|
7
6
|
|
|
8
7
|
import { sleep, TestStream } from '@dxos/async';
|
|
@@ -19,17 +18,9 @@ describe('WebRTCTransport', () => {
|
|
|
19
18
|
sendSignal: async () => {},
|
|
20
19
|
});
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
const closedCb = () => {
|
|
24
|
-
callsCounter++;
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
connection.closed.once(closedCb);
|
|
28
|
-
await sleep(10); // Let simple-peer process events.
|
|
21
|
+
const wait = connection.closed.waitForCount(1);
|
|
29
22
|
await connection.destroy();
|
|
30
|
-
|
|
31
|
-
await sleep(10); // Process events.
|
|
32
|
-
expect(callsCounter).toEqual(1);
|
|
23
|
+
await wait;
|
|
33
24
|
})
|
|
34
25
|
.timeout(1_000)
|
|
35
26
|
.retries(3);
|