@dxos/network-manager 0.1.35 → 0.1.36
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-4W77MFHZ.mjs → chunk-A2UJX3UX.mjs} +77 -39
- package/dist/lib/browser/chunk-A2UJX3UX.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 +2 -1
- package/dist/lib/browser/testing/index.mjs.map +2 -2
- package/dist/lib/node/index.cjs +72 -34
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/testing/index.cjs +73 -34
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/types/src/network-manager.d.ts +1 -0
- package/dist/types/src/network-manager.d.ts.map +1 -1
- package/dist/types/src/swarm/peer.d.ts +12 -0
- package/dist/types/src/swarm/peer.d.ts.map +1 -1
- package/dist/types/src/swarm/swarm.d.ts.map +1 -1
- package/dist/types/src/testing/test-builder.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/network-manager.ts +3 -1
- package/src/signal/integration.test.ts +6 -4
- package/src/signal/message-router.test.ts +1 -0
- package/src/swarm/peer.ts +60 -1
- package/src/swarm/swarm.ts +4 -1
- package/src/testing/test-builder.ts +1 -0
- package/dist/lib/browser/chunk-4W77MFHZ.mjs.map +0 -7
|
@@ -56,6 +56,7 @@ export declare class NetworkManager {
|
|
|
56
56
|
private readonly _connectionLog?;
|
|
57
57
|
readonly topicsUpdated: Event<void>;
|
|
58
58
|
private readonly _instanceId;
|
|
59
|
+
_traceParent?: string;
|
|
59
60
|
constructor({ transportFactory, signalManager, log }: NetworkManagerOptions);
|
|
60
61
|
get connectionLog(): ConnectionLog | undefined;
|
|
61
62
|
get signalManager(): SignalManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network-manager.d.ts","sourceRoot":"","sources":["../../../src/network-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAa,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAG7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;GAEG;AACH,oBAAY,eAAe,GAAG;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAGF,oBAAY,YAAY,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,gBAAgB,EAAE,oBAAoB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;GAEG;AAEH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAErD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,SAAgB,sBAAsB,yBAAgC;IAEtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAgB;IAEhD,SAAgB,aAAa,cAAqB;IAElD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;
|
|
1
|
+
{"version":3,"file":"network-manager.d.ts","sourceRoot":"","sources":["../../../src/network-manager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAa,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAG7E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;GAEG;AACH,oBAAY,eAAe,GAAG;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAGF,oBAAY,YAAY,GAAG;IACzB;;OAEG;IACH,KAAK,EAAE,SAAS,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,SAAS,CAAC;IAElB;;OAEG;IACH,gBAAgB,EAAE,oBAAoB,CAAC;IAEvC;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAEpB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,oBAAY,qBAAqB,GAAG;IAClC,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AAEF;;GAEG;AAEH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IAEnF,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IAErD,OAAO,CAAC,gBAAgB,CAA0B;IAClD,SAAgB,sBAAsB,yBAAgC;IAEtE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAgB;IAEhD,SAAgB,aAAa,cAAqB;IAElD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;gBAEjB,EAAE,gBAAgB,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,qBAAqB;IAqB3E,IAAI,aAAa,8BAEhB;IAGD,IAAI,aAAa,kBAEhB;IAED,IAAI,eAAe,oBAElB;IAGD,IAAI,MAAM,gBAET;IAED,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAItD,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS;IAIvC,IAAI;IAMJ,KAAK;IAYX;;OAEG;IACG,SAAS,CAAC,EACd,KAAK,EACL,MAAM,EACN,QAAQ,EACR,gBAAgB,EAAE,QAAQ,EAC1B,KAAK,EACN,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;IA4B1C;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,SAAS;IAuB3B,kBAAkB,CAAC,KAAK,EAAE,eAAe;CA0BhD"}
|
|
@@ -29,6 +29,10 @@ interface PeerCallbacks {
|
|
|
29
29
|
* Returns true if the remote peer's offer should be accepted.
|
|
30
30
|
*/
|
|
31
31
|
onOffer: (remoteId: PublicKey) => Promise<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Peer is available to connect.
|
|
34
|
+
*/
|
|
35
|
+
onPeerAvailable: () => void;
|
|
32
36
|
}
|
|
33
37
|
/**
|
|
34
38
|
* State of remote peer during the lifetime of a swarm connection.
|
|
@@ -42,6 +46,14 @@ export declare class Peer {
|
|
|
42
46
|
private readonly _protocolProvider;
|
|
43
47
|
private readonly _transportFactory;
|
|
44
48
|
private readonly _callbacks;
|
|
49
|
+
/**
|
|
50
|
+
* Will be available to connect after this time.
|
|
51
|
+
*/
|
|
52
|
+
private _availableAfter;
|
|
53
|
+
availableToConnect: boolean;
|
|
54
|
+
private _lastConnectionTime?;
|
|
55
|
+
private readonly _ctx;
|
|
56
|
+
private _connectionCtx?;
|
|
45
57
|
connection?: Connection;
|
|
46
58
|
/**
|
|
47
59
|
* Whether the peer is currently advertizing itself on the signal-network.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../../../src/swarm/peer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../../../src/swarm/peer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAE3D,UAAU,aAAa;IACrB;;OAEG;IACH,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAE9C;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC;IAE3B;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;OAEG;IACH,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAOD;;;GAGG;AACH,qBAAa,IAAI;aAuBG,EAAE,EAAE,SAAS;aACb,KAAK,EAAE,SAAS;aAChB,WAAW,EAAE,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IA5B7B;;OAEG;IACH,OAAO,CAAC,eAAe,CAAK;IACrB,kBAAkB,UAAQ;IACjC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAU;IAE1B,UAAU,CAAC,EAAE,UAAU,CAAC;IAE/B;;OAEG;IACI,WAAW,UAAS;IAEpB,UAAU,UAAS;IAEnB,YAAY,CAAC,EAAE,MAAM,CAAC;gBAGX,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,SAAS,EACrB,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,oBAAoB,EACvC,iBAAiB,EAAE,gBAAgB,EACnC,UAAU,EAAE,aAAa;IAG5C;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IA2CrD;;OAEG;IACG,kBAAkB;IAsCxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IA4EnB,eAAe;IAcf,QAAQ,CAAC,OAAO,EAAE,aAAa;IAS/B,OAAO;CAOd"}
|
|
@@ -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,EAAiB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvE,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,CAAgB;IAEhD,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;IA0B7C,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;IASP,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;
|
|
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,EAAiB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvE,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,CAAgB;IAEhD,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;IA0B7C,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;IASP,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;YAkDV,YAAY;IAM1B,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;YACW,mBAAmB;YA0BnB,gBAAgB;CAQ/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAA8B,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAM1G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,eAAO,MAAM,eAAe,8CAA8C,CAAC;AAE3E,oBAAY,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;aAGM,OAAO,EAAE,kBAAkB;IAFvD,OAAO,CAAC,cAAc,CAAoC;gBAE9B,OAAO,GAAE,kBAAuB;IAE5D,mBAAmB;IAQnB,UAAU;CAGX;AAED;;GAEG;AACH,qBAAa,QAAQ;IAaP,OAAO,CAAC,QAAQ,CAAC,WAAW;IAZxC,QAAQ,CAAC,MAAM,YAAsB;IAErC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;IAO1F,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;gBAER,WAAW,EAAE,WAAW;IAKrD,oBAAoB;IA6Cd,IAAI;
|
|
1
|
+
{"version":3,"file":"test-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAA8B,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAM1G,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,eAAO,MAAM,eAAe,8CAA8C,CAAC;AAE3E,oBAAY,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;aAGM,OAAO,EAAE,kBAAkB;IAFvD,OAAO,CAAC,cAAc,CAAoC;gBAE9B,OAAO,GAAE,kBAAuB;IAE5D,mBAAmB;IAQnB,UAAU;CAGX;AAED;;GAEG;AACH,qBAAa,QAAQ;IAaP,OAAO,CAAC,QAAQ,CAAC,WAAW;IAZxC,QAAQ,CAAC,MAAM,YAAsB;IAErC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;IAO1F,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;gBAER,WAAW,EAAE,WAAW;IAKrD,oBAAoB;IA6Cd,IAAI;IAMJ,KAAK;IASX,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB;IAS/C,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB;IAW5C,SAAS;IAIT,QAAQ;CAGf;AAGD,qBAAa,mBAAmB;IAGlB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS;IAF9D,QAAQ,EAAE,gBAAgB,CAAC;gBAEN,IAAI,EAAE,QAAQ,EAAW,KAAK,EAAE,SAAS;IAQxD,IAAI,CAAC,QAAQ,yBAA+B;IAW5C,KAAK;CAIZ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/network-manager",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.36",
|
|
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.36",
|
|
29
|
+
"@dxos/codec-protobuf": "0.1.36",
|
|
30
|
+
"@dxos/context": "0.1.36",
|
|
31
|
+
"@dxos/credentials": "0.1.36",
|
|
32
|
+
"@dxos/crypto": "0.1.36",
|
|
33
|
+
"@dxos/debug": "0.1.36",
|
|
34
|
+
"@dxos/keys": "0.1.36",
|
|
35
|
+
"@dxos/log": "0.1.36",
|
|
36
|
+
"@dxos/messaging": "0.1.36",
|
|
37
|
+
"@dxos/node-std": "0.1.36",
|
|
38
|
+
"@dxos/protocols": "0.1.36",
|
|
39
|
+
"@dxos/rpc": "0.1.36",
|
|
40
|
+
"@dxos/teleport": "0.1.36",
|
|
41
|
+
"@dxos/util": "0.1.36"
|
|
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": "^4.8.4",
|
|
51
|
-
"@dxos/signal": "0.1.
|
|
51
|
+
"@dxos/signal": "0.1.36"
|
|
52
52
|
},
|
|
53
53
|
"publishConfig": {
|
|
54
54
|
"access": "public"
|
package/src/network-manager.ts
CHANGED
|
@@ -82,8 +82,10 @@ export class NetworkManager {
|
|
|
82
82
|
public readonly topicsUpdated = new Event<void>();
|
|
83
83
|
|
|
84
84
|
private readonly _instanceId = PublicKey.random().toHex();
|
|
85
|
+
public _traceParent?: string;
|
|
85
86
|
|
|
86
87
|
constructor({ transportFactory, signalManager, log }: NetworkManagerOptions) {
|
|
88
|
+
(signalManager as any)._traceParent = this._instanceId;
|
|
87
89
|
this._transportFactory = transportFactory;
|
|
88
90
|
|
|
89
91
|
// Listen for signal manager events.
|
|
@@ -130,7 +132,7 @@ export class NetworkManager {
|
|
|
130
132
|
}
|
|
131
133
|
|
|
132
134
|
async open() {
|
|
133
|
-
log.trace('dxos.mesh.network-manager', trace.begin({ id: this._instanceId }));
|
|
135
|
+
log.trace('dxos.mesh.network-manager', trace.begin({ id: this._instanceId, parentId: this._traceParent }));
|
|
134
136
|
await this._messenger.open();
|
|
135
137
|
await this._signalManager.open();
|
|
136
138
|
}
|
|
@@ -10,7 +10,7 @@ import waitForExpect from 'wait-for-expect';
|
|
|
10
10
|
import { PublicKey } from '@dxos/keys';
|
|
11
11
|
import { WebsocketSignalManager } from '@dxos/messaging';
|
|
12
12
|
import { createTestBroker, TestBroker } from '@dxos/signal';
|
|
13
|
-
import { afterAll, beforeAll, describe, test } from '@dxos/test';
|
|
13
|
+
import { afterAll, afterTest, beforeAll, describe, test } from '@dxos/test';
|
|
14
14
|
|
|
15
15
|
import { MessageRouter } from './message-router';
|
|
16
16
|
import { SignalMessage } from './signal-messenger';
|
|
@@ -26,8 +26,10 @@ describe('Signal Integration Test', () => {
|
|
|
26
26
|
broker.stop();
|
|
27
27
|
});
|
|
28
28
|
|
|
29
|
-
const setupPeer = ({ topic = PublicKey.random() }: { topic?: PublicKey } = {}) => {
|
|
29
|
+
const setupPeer = async ({ topic = PublicKey.random() }: { topic?: PublicKey } = {}) => {
|
|
30
30
|
const signalManager = new WebsocketSignalManager([broker.url()]);
|
|
31
|
+
await signalManager.open();
|
|
32
|
+
afterTest(() => signalManager.close());
|
|
31
33
|
signalManager.onMessage.on((message) => messageRouter.receiveMessage(message));
|
|
32
34
|
|
|
33
35
|
const receivedSignals: SignalMessage[] = [];
|
|
@@ -53,8 +55,8 @@ describe('Signal Integration Test', () => {
|
|
|
53
55
|
const peer2 = PublicKey.random();
|
|
54
56
|
const topic = PublicKey.random();
|
|
55
57
|
|
|
56
|
-
const peerNetworking1 = setupPeer({ topic });
|
|
57
|
-
const peerNetworking2 = setupPeer({ topic });
|
|
58
|
+
const peerNetworking1 = await setupPeer({ topic });
|
|
59
|
+
const peerNetworking2 = await setupPeer({ topic });
|
|
58
60
|
|
|
59
61
|
const promise1 = peerNetworking1.signalManager.swarmEvent.waitFor(
|
|
60
62
|
({ swarmEvent }) => !!swarmEvent.peerAvailable && peer2.equals(swarmEvent.peerAvailable.peer)
|
|
@@ -47,6 +47,7 @@ describe('MessageRouter', () => {
|
|
|
47
47
|
}) => {
|
|
48
48
|
const peerId = PublicKey.random();
|
|
49
49
|
const signalManager = new WebsocketSignalManager([signalApiUrl]);
|
|
50
|
+
await signalManager.open();
|
|
50
51
|
afterTest(() => signalManager.close());
|
|
51
52
|
|
|
52
53
|
const messenger = new Messenger({ signalManager });
|
package/src/swarm/peer.ts
CHANGED
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import assert from 'node:assert';
|
|
6
6
|
|
|
7
|
-
import { synchronized } from '@dxos/async';
|
|
7
|
+
import { scheduleTask, synchronized } from '@dxos/async';
|
|
8
|
+
import { Context } from '@dxos/context';
|
|
8
9
|
import { PublicKey } from '@dxos/keys';
|
|
9
10
|
import { log } from '@dxos/log';
|
|
10
11
|
import { Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
|
|
@@ -44,13 +45,33 @@ interface PeerCallbacks {
|
|
|
44
45
|
* Returns true if the remote peer's offer should be accepted.
|
|
45
46
|
*/
|
|
46
47
|
onOffer: (remoteId: PublicKey) => Promise<boolean>;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Peer is available to connect.
|
|
51
|
+
*/
|
|
52
|
+
onPeerAvailable: () => void;
|
|
47
53
|
}
|
|
48
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Minimum time the connection needs to be open to not incur a cool-down timer for this peer after the connection closes.
|
|
57
|
+
*/
|
|
58
|
+
const CONNECTION_COUNTS_STABLE_AFTER = 5_000;
|
|
59
|
+
|
|
49
60
|
/**
|
|
50
61
|
* State of remote peer during the lifetime of a swarm connection.
|
|
51
62
|
* Can open and close multiple connections to the remote peer.
|
|
52
63
|
*/
|
|
53
64
|
export class Peer {
|
|
65
|
+
/**
|
|
66
|
+
* Will be available to connect after this time.
|
|
67
|
+
*/
|
|
68
|
+
private _availableAfter = 0;
|
|
69
|
+
public availableToConnect = true;
|
|
70
|
+
private _lastConnectionTime?: number;
|
|
71
|
+
|
|
72
|
+
private readonly _ctx = new Context();
|
|
73
|
+
private _connectionCtx?: Context;
|
|
74
|
+
|
|
54
75
|
public connection?: Connection;
|
|
55
76
|
|
|
56
77
|
/**
|
|
@@ -186,9 +207,15 @@ export class Peer {
|
|
|
186
207
|
);
|
|
187
208
|
connection._traceParent = this._traceParent;
|
|
188
209
|
this._callbacks.onInitiated(connection);
|
|
210
|
+
|
|
211
|
+
void this._connectionCtx?.dispose();
|
|
212
|
+
this._connectionCtx = this._ctx.derive();
|
|
213
|
+
|
|
189
214
|
connection.stateChanged.on((state) => {
|
|
190
215
|
switch (state) {
|
|
191
216
|
case ConnectionState.CONNECTED: {
|
|
217
|
+
this.availableToConnect = true;
|
|
218
|
+
this._lastConnectionTime = Date.now();
|
|
192
219
|
this._callbacks.onConnected();
|
|
193
220
|
break;
|
|
194
221
|
}
|
|
@@ -197,8 +224,26 @@ export class Peer {
|
|
|
197
224
|
log('connection closed', { topic: this.topic, peerId: this.localPeerId, remoteId: this.id, initiator });
|
|
198
225
|
assert(this.connection === connection, 'Connection mismatch (race condition).');
|
|
199
226
|
|
|
227
|
+
if (this._lastConnectionTime && this._lastConnectionTime + CONNECTION_COUNTS_STABLE_AFTER < Date.now()) {
|
|
228
|
+
// If we're closing the connection, and it has been connected for a while, reset the backoff.
|
|
229
|
+
this._availableAfter = 0;
|
|
230
|
+
} else {
|
|
231
|
+
this.availableToConnect = false;
|
|
232
|
+
this._availableAfter = increaseInterval(this._availableAfter);
|
|
233
|
+
}
|
|
234
|
+
|
|
200
235
|
this.connection = undefined;
|
|
201
236
|
this._callbacks.onDisconnected();
|
|
237
|
+
|
|
238
|
+
scheduleTask(
|
|
239
|
+
this._connectionCtx!,
|
|
240
|
+
() => {
|
|
241
|
+
this.availableToConnect = true;
|
|
242
|
+
this._callbacks.onPeerAvailable();
|
|
243
|
+
},
|
|
244
|
+
this._availableAfter
|
|
245
|
+
);
|
|
246
|
+
|
|
202
247
|
break;
|
|
203
248
|
}
|
|
204
249
|
}
|
|
@@ -239,9 +284,23 @@ export class Peer {
|
|
|
239
284
|
|
|
240
285
|
@synchronized
|
|
241
286
|
async destroy() {
|
|
287
|
+
await this._ctx.dispose();
|
|
242
288
|
log('Destroying peer', { peerId: this.id, topic: this.topic });
|
|
243
289
|
|
|
244
290
|
// Won't throw.
|
|
245
291
|
await this?.connection?.close();
|
|
246
292
|
}
|
|
247
293
|
}
|
|
294
|
+
|
|
295
|
+
const increaseInterval = (interval: number) => {
|
|
296
|
+
if (interval === 0) {
|
|
297
|
+
return 50;
|
|
298
|
+
} else if (interval < 500) {
|
|
299
|
+
return 500;
|
|
300
|
+
} else if (interval < 1000) {
|
|
301
|
+
return 1000;
|
|
302
|
+
} else if (interval < 5_000) {
|
|
303
|
+
return 5_000;
|
|
304
|
+
}
|
|
305
|
+
return 10_000;
|
|
306
|
+
};
|
package/src/swarm/swarm.ts
CHANGED
|
@@ -277,6 +277,9 @@ export class Swarm {
|
|
|
277
277
|
},
|
|
278
278
|
onOffer: (remoteId) => {
|
|
279
279
|
return this._topology.onOffer(remoteId);
|
|
280
|
+
},
|
|
281
|
+
onPeerAvailable: () => {
|
|
282
|
+
this._topology.update();
|
|
280
283
|
}
|
|
281
284
|
}
|
|
282
285
|
);
|
|
@@ -301,7 +304,7 @@ export class Swarm {
|
|
|
301
304
|
.filter((peer) => peer.connection)
|
|
302
305
|
.map((peer) => peer.id),
|
|
303
306
|
candidates: Array.from(this._peers.values())
|
|
304
|
-
.filter((peer) => !peer.connection && peer.advertizing)
|
|
307
|
+
.filter((peer) => !peer.connection && peer.advertizing && peer.availableToConnect)
|
|
305
308
|
.map((peer) => peer.id)
|
|
306
309
|
}),
|
|
307
310
|
connect: (peer) => {
|