@dxos/network-manager 0.1.9 → 0.1.11

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 (155) hide show
  1. package/dist/src/index.d.ts +2 -2
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +2 -2
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/network-manager.d.ts +10 -14
  6. package/dist/src/network-manager.d.ts.map +1 -1
  7. package/dist/src/network-manager.js +28 -33
  8. package/dist/src/network-manager.js.map +1 -1
  9. package/dist/src/protocol-factory.d.ts.map +1 -1
  10. package/dist/src/protocol-factory.js +8 -6
  11. package/dist/src/protocol-factory.js.map +1 -1
  12. package/dist/src/signal/index.d.ts +2 -2
  13. package/dist/src/signal/index.d.ts.map +1 -1
  14. package/dist/src/signal/index.js +2 -2
  15. package/dist/src/signal/index.js.map +1 -1
  16. package/dist/src/signal/message-router.d.ts +2 -2
  17. package/dist/src/signal/message-router.js +3 -3
  18. package/dist/src/signal/message-router.js.map +1 -1
  19. package/dist/src/signal/{signal-messaging.d.ts → signal-messenger.d.ts} +2 -2
  20. package/dist/src/signal/{signal-messaging.d.ts.map → signal-messenger.d.ts.map} +1 -1
  21. package/dist/src/signal/{signal-messaging.js → signal-messenger.js} +1 -1
  22. package/dist/src/signal/signal-messenger.js.map +1 -0
  23. package/dist/src/swarm/connection.d.ts +6 -3
  24. package/dist/src/swarm/connection.d.ts.map +1 -1
  25. package/dist/src/swarm/connection.js +28 -15
  26. package/dist/src/swarm/connection.js.map +1 -1
  27. package/dist/src/swarm/peer.d.ts +45 -0
  28. package/dist/src/swarm/peer.d.ts.map +1 -0
  29. package/dist/src/swarm/peer.js +113 -0
  30. package/dist/src/swarm/peer.js.map +1 -0
  31. package/dist/src/swarm/swarm-mapper.d.ts +2 -2
  32. package/dist/src/swarm/swarm-mapper.d.ts.map +1 -1
  33. package/dist/src/swarm/swarm-mapper.js +12 -10
  34. package/dist/src/swarm/swarm-mapper.js.map +1 -1
  35. package/dist/src/swarm/swarm.d.ts +13 -18
  36. package/dist/src/swarm/swarm.d.ts.map +1 -1
  37. package/dist/src/swarm/swarm.js +126 -97
  38. package/dist/src/swarm/swarm.js.map +1 -1
  39. package/dist/src/swarm/swarm.test.js +2 -2
  40. package/dist/src/swarm/swarm.test.js.map +1 -1
  41. package/dist/src/testing/test-builder.d.ts +31 -18
  42. package/dist/src/testing/test-builder.d.ts.map +1 -1
  43. package/dist/src/testing/test-builder.js +120 -48
  44. package/dist/src/testing/test-builder.js.map +1 -1
  45. package/dist/src/testing/test-protocol.d.ts +5 -5
  46. package/dist/src/testing/test-protocol.d.ts.map +1 -1
  47. package/dist/src/testing/test-protocol.js +28 -24
  48. package/dist/src/testing/test-protocol.js.map +1 -1
  49. package/dist/src/tests/basic-test-suite.d.ts +6 -0
  50. package/dist/src/tests/basic-test-suite.d.ts.map +1 -0
  51. package/dist/src/tests/basic-test-suite.js +142 -0
  52. package/dist/src/tests/basic-test-suite.js.map +1 -0
  53. package/dist/src/tests/memory-transport.test.d.ts +2 -0
  54. package/dist/src/tests/memory-transport.test.d.ts.map +1 -0
  55. package/dist/src/tests/memory-transport.test.js +12 -0
  56. package/dist/src/tests/memory-transport.test.js.map +1 -0
  57. package/dist/src/{presence.test.d.ts → tests/presence.test.d.ts} +0 -0
  58. package/dist/src/tests/presence.test.d.ts.map +1 -0
  59. package/dist/src/{presence.test.js → tests/presence.test.js} +21 -20
  60. package/dist/src/tests/presence.test.js.map +1 -0
  61. package/dist/src/tests/property-test-suite.d.ts +5 -0
  62. package/dist/src/tests/property-test-suite.d.ts.map +1 -0
  63. package/dist/src/tests/property-test-suite.js +203 -0
  64. package/dist/src/tests/property-test-suite.js.map +1 -0
  65. package/dist/src/tests/utils.d.ts +21 -0
  66. package/dist/src/tests/utils.d.ts.map +1 -0
  67. package/dist/src/tests/utils.js +76 -0
  68. package/dist/src/tests/utils.js.map +1 -0
  69. package/dist/src/tests/webrtc-transport.test.d.ts +2 -0
  70. package/dist/src/tests/webrtc-transport.test.d.ts.map +1 -0
  71. package/dist/src/tests/webrtc-transport.test.js +16 -0
  72. package/dist/src/tests/webrtc-transport.test.js.map +1 -0
  73. package/dist/src/topology/fully-connected-topology.d.ts +1 -1
  74. package/dist/src/topology/fully-connected-topology.d.ts.map +1 -1
  75. package/dist/src/topology/fully-connected-topology.js +4 -3
  76. package/dist/src/topology/fully-connected-topology.js.map +1 -1
  77. package/dist/src/topology/mmst-topology.js +4 -4
  78. package/dist/src/topology/mmst-topology.js.map +1 -1
  79. package/dist/src/topology/star-topology.js +4 -4
  80. package/dist/src/topology/star-topology.js.map +1 -1
  81. package/dist/src/topology/topology.d.ts +0 -5
  82. package/dist/src/topology/topology.d.ts.map +1 -1
  83. package/dist/src/transport/memory-transport.d.ts +8 -7
  84. package/dist/src/transport/memory-transport.d.ts.map +1 -1
  85. package/dist/src/transport/memory-transport.js +79 -45
  86. package/dist/src/transport/memory-transport.js.map +1 -1
  87. package/dist/src/transport/memory-transport.test.js +3 -2
  88. package/dist/src/transport/memory-transport.test.js.map +1 -1
  89. package/dist/src/transport/transport.d.ts +8 -4
  90. package/dist/src/transport/transport.d.ts.map +1 -1
  91. package/dist/src/transport/webrtc-simple-peer.test.d.ts +2 -0
  92. package/dist/src/transport/webrtc-simple-peer.test.d.ts.map +1 -0
  93. package/dist/src/transport/{wrtc-simple-peer.test.js → webrtc-simple-peer.test.js} +2 -2
  94. package/dist/src/transport/webrtc-simple-peer.test.js.map +1 -0
  95. package/dist/src/transport/webrtc-transport-proxy.d.ts +4 -4
  96. package/dist/src/transport/webrtc-transport-proxy.d.ts.map +1 -1
  97. package/dist/src/transport/webrtc-transport-proxy.js +15 -10
  98. package/dist/src/transport/webrtc-transport-proxy.js.map +1 -1
  99. package/dist/src/transport/webrtc-transport-proxy.test.js +2 -2
  100. package/dist/src/transport/webrtc-transport-proxy.test.js.map +1 -1
  101. package/dist/src/transport/webrtc-transport-service.js +2 -2
  102. package/dist/src/transport/webrtc-transport-service.js.map +1 -1
  103. package/dist/src/transport/webrtc-transport.d.ts +3 -3
  104. package/dist/src/transport/webrtc-transport.d.ts.map +1 -1
  105. package/dist/src/transport/webrtc-transport.js +10 -10
  106. package/dist/src/transport/webrtc-transport.js.map +1 -1
  107. package/dist/src/transport/webrtc-transport.test.js +3 -3
  108. package/dist/src/transport/webrtc-transport.test.js.map +1 -1
  109. package/dist/src/types.d.ts +1 -1
  110. package/dist/src/types.d.ts.map +1 -1
  111. package/package.json +27 -22
  112. package/src/index.ts +2 -2
  113. package/src/network-manager.ts +31 -46
  114. package/src/protocol-factory.ts +5 -3
  115. package/src/signal/index.ts +2 -2
  116. package/src/signal/integration.test.ts +1 -1
  117. package/src/signal/message-router.test.ts +1 -1
  118. package/src/signal/message-router.ts +2 -2
  119. package/src/signal/{signal-messaging.ts → signal-messenger.ts} +2 -2
  120. package/src/swarm/connection.ts +23 -12
  121. package/src/swarm/peer.ts +156 -0
  122. package/src/swarm/swarm-mapper.ts +21 -10
  123. package/src/swarm/swarm.ts +142 -111
  124. package/src/testing/test-builder.ts +143 -63
  125. package/src/testing/test-protocol.ts +31 -23
  126. package/src/tests/basic-test-suite.ts +168 -0
  127. package/src/tests/memory-transport.test.ts +11 -0
  128. package/src/{presence.test.ts → tests/presence.test.ts} +24 -23
  129. package/src/tests/property-test-suite.ts +221 -0
  130. package/src/tests/utils.ts +85 -0
  131. package/src/tests/webrtc-transport.test.ts +16 -0
  132. package/src/topology/fully-connected-topology.ts +5 -4
  133. package/src/topology/topology.ts +0 -5
  134. package/src/transport/memory-transport.test.ts +3 -2
  135. package/src/transport/memory-transport.ts +79 -49
  136. package/src/transport/transport.ts +9 -3
  137. package/src/transport/{wrtc-simple-peer.test.ts → webrtc-simple-peer.test.ts} +1 -1
  138. package/src/transport/webrtc-transport-proxy.test.ts +2 -2
  139. package/src/transport/webrtc-transport-proxy.ts +17 -8
  140. package/src/transport/webrtc-transport-service.ts +1 -1
  141. package/src/transport/webrtc-transport.test.ts +4 -6
  142. package/src/transport/webrtc-transport.ts +4 -4
  143. package/testing.d.ts +11 -0
  144. package/testing.js +5 -0
  145. package/dist/src/network-manager.test.d.ts +0 -2
  146. package/dist/src/network-manager.test.d.ts.map +0 -1
  147. package/dist/src/network-manager.test.js +0 -596
  148. package/dist/src/network-manager.test.js.map +0 -1
  149. package/dist/src/presence.test.d.ts.map +0 -1
  150. package/dist/src/presence.test.js.map +0 -1
  151. package/dist/src/signal/signal-messaging.js.map +0 -1
  152. package/dist/src/transport/wrtc-simple-peer.test.d.ts +0 -2
  153. package/dist/src/transport/wrtc-simple-peer.test.d.ts.map +0 -1
  154. package/dist/src/transport/wrtc-simple-peer.test.js.map +0 -1
  155. package/src/network-manager.test.ts +0 -707
@@ -6,27 +6,28 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
6
6
  return (mod && mod.__esModule) ? mod : { "default": mod };
7
7
  };
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
- const expect_1 = __importDefault(require("expect"));
9
+ const chai_1 = require("chai");
10
10
  const wait_for_expect_1 = __importDefault(require("wait-for-expect"));
11
11
  const keys_1 = require("@dxos/keys");
12
12
  const messaging_1 = require("@dxos/messaging");
13
13
  const protocol_plugin_presence_1 = require("@dxos/protocol-plugin-presence");
14
14
  const testutils_1 = require("@dxos/testutils");
15
- const network_manager_1 = require("./network-manager");
16
- const protocol_factory_1 = require("./protocol-factory");
17
- const topology_1 = require("./topology");
18
- const transport_1 = require("./transport");
15
+ const network_manager_1 = require("../network-manager");
16
+ const protocol_factory_1 = require("../protocol-factory");
17
+ const topology_1 = require("../topology");
18
+ const transport_1 = require("../transport");
19
19
  const signalContext = new messaging_1.MemorySignalManagerContext();
20
+ // TODO(burdon): Move to TestBuilder (configure plugins).
20
21
  const createPeer = async (topic) => {
21
22
  const peerId = keys_1.PublicKey.random();
22
23
  const networkManager = new network_manager_1.NetworkManager({
23
24
  signalManager: new messaging_1.MemorySignalManager(signalContext),
24
25
  transportFactory: transport_1.MemoryTransportFactory
25
26
  });
26
- (0, testutils_1.afterTest)(() => networkManager.destroy());
27
+ (0, testutils_1.afterTest)(() => networkManager.close());
27
28
  const presencePlugin = new protocol_plugin_presence_1.PresencePlugin(peerId.asBuffer());
28
29
  (0, testutils_1.afterTest)(() => presencePlugin.stop());
29
- await networkManager.openSwarmConnection({
30
+ await networkManager.joinSwarm({
30
31
  peerId,
31
32
  protocol: (0, protocol_factory_1.createProtocolFactory)(topic, peerId, [presencePlugin]),
32
33
  topic,
@@ -35,25 +36,25 @@ const createPeer = async (topic) => {
35
36
  return { peerId, presence: presencePlugin, networkManager };
36
37
  };
37
38
  describe('Presence', function () {
38
- it('sees connected peers', async function () {
39
+ it('detects connected peers', async function () {
40
+ // TODO(burdon): Configure plugins.
41
+ // const testBuilder = new TestBuilder();
42
+ // const peer1 = testBuilder.createPeer();
43
+ // const peer2 = testBuilder.createPeer();
39
44
  const topic = keys_1.PublicKey.random();
40
45
  const peer1 = await createPeer(topic);
41
46
  const peer2 = await createPeer(topic);
47
+ // await peer1.joinSwarm(topic);
48
+ // await peer2.joinSwarm(topic);
49
+ // TODO(burdon): Use triggers instead of waitForExpect.
42
50
  await (0, wait_for_expect_1.default)(() => {
43
- (0, expect_1.default)(peer1.presence.peers.map((key) => key.toString('hex')).sort()).toEqual([peer1, peer2].map((key) => key.peerId.toHex()).sort());
44
- (0, expect_1.default)(peer2.presence.peers.map((key) => key.toString('hex')).sort()).toEqual([peer1, peer2].map((key) => key.peerId.toHex()).sort());
51
+ (0, chai_1.expect)(peer1.presence.peers.map((key) => key.toString('hex')).sort()).to.deep.eq([peer1, peer2].map((key) => key.peerId.toHex()).sort());
52
+ (0, chai_1.expect)(peer2.presence.peers.map((key) => key.toString('hex')).sort()).to.deep.eq([peer1, peer2].map((key) => key.peerId.toHex()).sort());
45
53
  });
46
- });
47
- it('removes disconnected peers', async function () {
48
- const topic = keys_1.PublicKey.random();
49
- const peer1 = await createPeer(topic);
50
- const peer2 = await createPeer(topic);
51
- await (0, wait_for_expect_1.default)(() => {
52
- (0, expect_1.default)(peer1.presence.peers.map((key) => key.toString('hex')).sort()).toEqual([peer1, peer2].map((key) => key.peerId.toHex()).sort());
53
- });
54
- await peer2.networkManager.closeSwarmConnection(topic);
54
+ await peer2.networkManager.leaveSwarm(topic);
55
55
  await (0, wait_for_expect_1.default)(() => {
56
- (0, expect_1.default)(peer1.presence.peers.map((key) => key.toString('hex')).sort()).toEqual([peer1].map((x) => x.peerId.toHex()).sort());
56
+ (0, chai_1.expect)(peer1.presence.peers.map((key) => key.toString('hex')).sort()).to.deep.eq([peer1].map((key) => key.peerId.toHex()).sort());
57
+ (0, chai_1.expect)(peer2.presence.peers.map((key) => key.toString('hex')).sort()).to.deep.eq([peer2].map((key) => key.peerId.toHex()).sort());
57
58
  });
58
59
  });
59
60
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence.test.js","sourceRoot":"","sources":["../../../src/tests/presence.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Performs random actions in the real system and compares its state with a simplified model.
3
+ */
4
+ export declare const propertyTestSuite: () => void;
5
+ //# sourceMappingURL=property-test-suite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-test-suite.d.ts","sourceRoot":"","sources":["../../../src/tests/property-test-suite.ts"],"names":[],"mappings":"AAiBA;;GAEG;AAEH,eAAO,MAAM,iBAAiB,YAuM7B,CAAC"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2021 DXOS.org
4
+ //
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || function (mod) {
22
+ if (mod && mod.__esModule) return mod;
23
+ var result = {};
24
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
25
+ __setModuleDefault(result, mod);
26
+ return result;
27
+ };
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
31
+ Object.defineProperty(exports, "__esModule", { value: true });
32
+ exports.propertyTestSuite = void 0;
33
+ const fc = __importStar(require("fast-check"));
34
+ const wait_for_expect_1 = __importDefault(require("wait-for-expect"));
35
+ const keys_1 = require("@dxos/keys");
36
+ const protocol_plugin_presence_1 = require("@dxos/protocol-plugin-presence");
37
+ const testutils_1 = require("@dxos/testutils");
38
+ const util_1 = require("@dxos/util");
39
+ const protocol_factory_1 = require("../protocol-factory");
40
+ const topology_1 = require("../topology");
41
+ /**
42
+ * Performs random actions in the real system and compares its state with a simplified model.
43
+ */
44
+ // TODO(dmaretskyi): Run this with actual webrtc and signal servers.
45
+ const propertyTestSuite = () => {
46
+ it.skip('property-based tests', async function () {
47
+ const assertState = async (model, real) => {
48
+ await (0, wait_for_expect_1.default)(() => {
49
+ for (const peer of real.peers.values()) {
50
+ if (peer.presence) {
51
+ for (const expectedPeerId of model.joinedPeers) {
52
+ if (expectedPeerId.equals(peer.presence.peerId)) {
53
+ continue;
54
+ }
55
+ const actuallyConnectedPeers = peer.presence.peers;
56
+ if (!actuallyConnectedPeers.some((peer) => keys_1.PublicKey.equals(expectedPeerId, peer))) {
57
+ // TODO(burdon): More concise error.
58
+ const context = {
59
+ peerId: peer.presence.peerId,
60
+ expectedPeerId: expectedPeerId.truncate(),
61
+ connectedPeerIds: actuallyConnectedPeers.map((key) => key.toString('hex'))
62
+ };
63
+ throw new Error(`Expected peer to be in the list of joined peers: ${context}`);
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }, 5000);
69
+ real.peers.forEach((peer) => peer.networkManager.topics.forEach((topic) => {
70
+ peer.networkManager.getSwarm(topic).errors.assertNoUnhandledErrors();
71
+ }));
72
+ };
73
+ class CreatePeerCommand {
74
+ constructor(peerId) {
75
+ this.peerId = peerId;
76
+ this.check = (model) => !model.peers.has(this.peerId);
77
+ this.toString = () => `CreatePeer(${this.peerId})`;
78
+ }
79
+ async run(model, real) {
80
+ // TODO(burdon): ???
81
+ throw new Error('Not implemented.');
82
+ // model.peers.add(this.peerId);
83
+ // const networkManager = testBuilder.createNetworkManager();
84
+ // afterTest(() => networkManager.close());
85
+ // real.peers.set(this.peerId, {
86
+ // networkManager
87
+ // });
88
+ // await assertState(model, real);
89
+ }
90
+ }
91
+ class RemovePeerCommand {
92
+ constructor(peerId) {
93
+ this.peerId = peerId;
94
+ this.check = (model) => model.peers.has(this.peerId);
95
+ this.toString = () => `RemovePeer(${this.peerId})`;
96
+ }
97
+ async run(model, real) {
98
+ model.peers.delete(this.peerId);
99
+ model.joinedPeers.delete(this.peerId);
100
+ const peer = real.peers.get(this.peerId);
101
+ await peer.networkManager.close();
102
+ real.peers.delete(this.peerId);
103
+ await assertState(model, real);
104
+ }
105
+ }
106
+ class JoinTopicCommand {
107
+ constructor(peerId) {
108
+ this.peerId = peerId;
109
+ this.check = (model) => model.peers.has(this.peerId) && !model.joinedPeers.has(this.peerId);
110
+ this.toString = () => `JoinTopic(peerId=${this.peerId})`;
111
+ }
112
+ async run(model, real) {
113
+ model.joinedPeers.add(this.peerId);
114
+ const peer = real.peers.get(this.peerId);
115
+ const presence = new protocol_plugin_presence_1.PresencePlugin(this.peerId.asBuffer());
116
+ (0, testutils_1.afterTest)(() => presence.stop());
117
+ const protocol = (0, protocol_factory_1.createProtocolFactory)(model.topic, this.peerId, [presence]);
118
+ await peer.networkManager.joinSwarm({
119
+ peerId: this.peerId,
120
+ topic: model.topic,
121
+ protocol,
122
+ topology: new topology_1.FullyConnectedTopology(),
123
+ presence
124
+ });
125
+ peer.presence = presence;
126
+ await assertState(model, real);
127
+ }
128
+ }
129
+ class LeaveTopicCommand {
130
+ constructor(peerId) {
131
+ this.peerId = peerId;
132
+ this.check = (model) => model.peers.has(this.peerId) && model.joinedPeers.has(this.peerId);
133
+ this.toString = () => `LeaveTopic(peerId=${this.peerId})`;
134
+ }
135
+ async run(model, real) {
136
+ model.joinedPeers.delete(this.peerId);
137
+ const peer = real.peers.get(this.peerId);
138
+ await peer.networkManager.leaveSwarm(model.topic);
139
+ peer.presence = undefined;
140
+ await assertState(model, real);
141
+ }
142
+ }
143
+ const peerIds = (0, util_1.range)(10).map(() => keys_1.PublicKey.random());
144
+ const peerId1 = fc.constantFrom(...peerIds);
145
+ const allCommands = [
146
+ peerId1.map((x) => new CreatePeerCommand(x)),
147
+ peerId1.map((x) => new RemovePeerCommand(x)),
148
+ peerId1.map((p) => new JoinTopicCommand(p)),
149
+ peerId1.map((p) => new LeaveTopicCommand(p))
150
+ ];
151
+ await fc.assert(fc.asyncProperty(fc.commands(allCommands, { maxCommands: 30 }), async (cmds) => {
152
+ const setup = () => ({
153
+ model: {
154
+ topic: keys_1.PublicKey.random(),
155
+ peers: new util_1.ComplexSet(keys_1.PublicKey.hash),
156
+ joinedPeers: new util_1.ComplexSet(keys_1.PublicKey.hash)
157
+ },
158
+ real: {
159
+ peers: new util_1.ComplexMap(keys_1.PublicKey.hash)
160
+ }
161
+ });
162
+ await fc.asyncModelRun(setup, cmds);
163
+ }), {
164
+ examples: [
165
+ [
166
+ [
167
+ new CreatePeerCommand(peerIds[0]),
168
+ new CreatePeerCommand(peerIds[1]),
169
+ new JoinTopicCommand(peerIds[0]),
170
+ new JoinTopicCommand(peerIds[1]),
171
+ new LeaveTopicCommand(peerIds[0]),
172
+ new LeaveTopicCommand(peerIds[1]),
173
+ new RemovePeerCommand(peerIds[0]),
174
+ new RemovePeerCommand(peerIds[1])
175
+ ]
176
+ ],
177
+ [
178
+ [
179
+ new CreatePeerCommand(peerIds[0]),
180
+ new JoinTopicCommand(peerIds[0]),
181
+ new CreatePeerCommand(peerIds[1]),
182
+ new RemovePeerCommand(peerIds[0]),
183
+ new JoinTopicCommand(peerIds[1]),
184
+ new RemovePeerCommand(peerIds[1])
185
+ ]
186
+ ],
187
+ [
188
+ [
189
+ new CreatePeerCommand(peerIds[0]),
190
+ new JoinTopicCommand(peerIds[0]),
191
+ new RemovePeerCommand(peerIds[0]),
192
+ new CreatePeerCommand(peerIds[1]),
193
+ new JoinTopicCommand(peerIds[1]),
194
+ new CreatePeerCommand(peerIds[2]),
195
+ new JoinTopicCommand(peerIds[2])
196
+ ]
197
+ ]
198
+ ]
199
+ });
200
+ });
201
+ };
202
+ exports.propertyTestSuite = propertyTestSuite;
203
+ //# sourceMappingURL=property-test-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-test-suite.js","sourceRoot":"","sources":["../../../src/tests/property-test-suite.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { PublicKey } from '@dxos/keys';
2
+ import { Provider } from '@dxos/util';
3
+ import { TestPeer, TestSwarmConnection } from '../testing';
4
+ import { Topology } from '../topology';
5
+ /**
6
+ * Open peers and close after tests complete.
7
+ */
8
+ export declare const openAndCloseAfterTest: (peers: TestPeer[]) => Promise<void>;
9
+ /**
10
+ * Join and cleanly leave swarm.
11
+ */
12
+ export declare const joinSwarm: (peers: TestPeer[], topic: PublicKey, topology?: Provider<Topology>) => Promise<TestSwarmConnection[]>;
13
+ /**
14
+ * Cleanly leave swarm.
15
+ */
16
+ export declare const leaveSwarm: (peers: TestPeer[], topic: PublicKey) => Promise<TestSwarmConnection[]>;
17
+ /**
18
+ * Exchange messages between peers.
19
+ */
20
+ export declare const exchangeMessages: (swarm1: TestSwarmConnection, swarm2: TestSwarmConnection) => Promise<void>;
21
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/tests/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMvC;;GAEG;AACH,eAAO,MAAM,qBAAqB,UAAiB,QAAQ,EAAE,kBAK5D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,UAAiB,QAAQ,EAAE,SAAS,SAAS,aAAa,SAAS,QAAQ,CAAC,mCAWjG,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,UAAU,UAAiB,QAAQ,EAAE,SAAS,SAAS,mCAWnE,CAAC;AAEF;;GAEG;AAGH,eAAO,MAAM,gBAAgB,WAAkB,mBAAmB,UAAU,mBAAmB,kBAmB9F,CAAC"}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.exchangeMessages = exports.leaveSwarm = exports.joinSwarm = exports.openAndCloseAfterTest = void 0;
7
+ const chai_1 = require("chai");
8
+ const async_1 = require("@dxos/async");
9
+ const testutils_1 = require("@dxos/testutils");
10
+ //
11
+ // NOTE: Don't move to testing directory since not exportable outside of package.
12
+ //
13
+ /**
14
+ * Open peers and close after tests complete.
15
+ */
16
+ const openAndCloseAfterTest = async (peers) => {
17
+ await Promise.all(peers.map((peer) => peer.open()));
18
+ (0, testutils_1.afterTest)(async () => {
19
+ await Promise.all(peers.map((peer) => peer.close()));
20
+ });
21
+ };
22
+ exports.openAndCloseAfterTest = openAndCloseAfterTest;
23
+ /**
24
+ * Join and cleanly leave swarm.
25
+ */
26
+ const joinSwarm = async (peers, topic, topology) => {
27
+ const [connected, connect] = (0, async_1.latch)({ count: peers.length });
28
+ const swarms = peers.map((peer) => {
29
+ const swarm = peer.createSwarm(topic);
30
+ swarm.plugin.once('connect', connect);
31
+ return swarm;
32
+ });
33
+ await Promise.all(swarms.map((swarm) => swarm.join(topology === null || topology === void 0 ? void 0 : topology())));
34
+ await connected();
35
+ return swarms;
36
+ };
37
+ exports.joinSwarm = joinSwarm;
38
+ /**
39
+ * Cleanly leave swarm.
40
+ */
41
+ const leaveSwarm = async (peers, topic) => {
42
+ const [disconnected, disconnect] = (0, async_1.latch)({ count: peers.length });
43
+ const swarms = peers.map((peer) => {
44
+ const swarm = peer.getSwarm(topic);
45
+ swarm.plugin.once('disconnect', disconnect);
46
+ return swarm;
47
+ });
48
+ await Promise.all(swarms.map((swarm) => swarm.leave()));
49
+ await disconnected();
50
+ return swarms;
51
+ };
52
+ exports.leaveSwarm = leaveSwarm;
53
+ /**
54
+ * Exchange messages between peers.
55
+ */
56
+ // TODO(burdon): Based on plugin instance.
57
+ // TODO(burdon): Configure to send more messages.
58
+ const exchangeMessages = async (swarm1, swarm2) => {
59
+ {
60
+ const peer2Received = new async_1.Trigger();
61
+ swarm2.plugin.on('receive', (peer, message) => peer2Received.wake(message));
62
+ // TODO(burdon): Message encoding?
63
+ await swarm1.plugin.send(swarm2.peer.peerId.asBuffer(), JSON.stringify({ message: 'ping' }));
64
+ const { message } = JSON.parse(await peer2Received.wait());
65
+ (0, chai_1.expect)(message).to.eq('ping');
66
+ }
67
+ {
68
+ const peer1Received = new async_1.Trigger();
69
+ swarm1.plugin.on('receive', (peer, message) => peer1Received.wake(message));
70
+ await swarm2.plugin.send(swarm1.peer.peerId.asBuffer(), JSON.stringify({ message: 'pong' }));
71
+ const { message } = JSON.parse(await peer1Received.wait());
72
+ (0, chai_1.expect)(message).to.eq('pong');
73
+ }
74
+ };
75
+ exports.exchangeMessages = exchangeMessages;
76
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/tests/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=webrtc-transport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc-transport.test.d.ts","sourceRoot":"","sources":["../../../src/tests/webrtc-transport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2021 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const testing_1 = require("../testing");
7
+ const basic_test_suite_1 = require("./basic-test-suite");
8
+ describe('WebRTC transport', function () {
9
+ const testBuilder = new testing_1.TestBuilder({ signalHosts: [testing_1.TEST_SIGNAL_URL] });
10
+ (0, basic_test_suite_1.basicTestSuite)(testBuilder);
11
+ }).timeout(10000);
12
+ describe('WebRTC transport proxy', function () {
13
+ const testBuilder = new testing_1.TestBuilder({ signalHosts: [testing_1.TEST_SIGNAL_URL], bridge: true });
14
+ (0, basic_test_suite_1.basicTestSuite)(testBuilder);
15
+ }).timeout(10000);
16
+ //# sourceMappingURL=webrtc-transport.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc-transport.test.js","sourceRoot":"","sources":["../../../src/tests/webrtc-transport.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;AAEF,wCAA0D;AAC1D,yDAAoD;AAEpD,QAAQ,CAAC,kBAAkB,EAAE;IAC3B,MAAM,WAAW,GAAG,IAAI,qBAAW,CAAC,EAAE,WAAW,EAAE,CAAC,yBAAe,CAAC,EAAE,CAAC,CAAC;IACxE,IAAA,iCAAc,EAAC,WAAW,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC;AAEnB,QAAQ,CAAC,wBAAwB,EAAE;IACjC,MAAM,WAAW,GAAG,IAAI,qBAAW,CAAC,EAAE,WAAW,EAAE,CAAC,yBAAe,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACtF,IAAA,iCAAc,EAAC,WAAW,CAAC,CAAC;AAC9B,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC,CAAC"}
@@ -2,10 +2,10 @@ import { PublicKey } from '@dxos/keys';
2
2
  import { SwarmController, Topology } from './topology';
3
3
  export declare class FullyConnectedTopology implements Topology {
4
4
  private _controller?;
5
+ toString(): string;
5
6
  init(controller: SwarmController): void;
6
7
  update(): void;
7
8
  onOffer(peer: PublicKey): Promise<boolean>;
8
9
  destroy(): Promise<void>;
9
- toString(): string;
10
10
  }
11
11
  //# sourceMappingURL=fully-connected-topology.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fully-connected-topology.d.ts","sourceRoot":"","sources":["../../../src/topology/fully-connected-topology.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvD,qBAAa,sBAAuB,YAAW,QAAQ;IACrD,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAKvC,MAAM,IAAI,IAAI;IAQR,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,QAAQ;CAGT"}
1
+ {"version":3,"file":"fully-connected-topology.d.ts","sourceRoot":"","sources":["../../../src/topology/fully-connected-topology.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvD,qBAAa,sBAAuB,YAAW,QAAQ;IACrD,OAAO,CAAC,WAAW,CAAC,CAAkB;IAEtC,QAAQ;IAIR,IAAI,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI;IAKvC,MAAM,IAAI,IAAI;IASR,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -9,6 +9,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.FullyConnectedTopology = void 0;
10
10
  const node_assert_1 = __importDefault(require("node:assert"));
11
11
  class FullyConnectedTopology {
12
+ toString() {
13
+ return 'FullyConnectedTopology';
14
+ }
12
15
  init(controller) {
13
16
  (0, node_assert_1.default)(!this._controller, 'Already initialized');
14
17
  this._controller = controller;
@@ -17,6 +20,7 @@ class FullyConnectedTopology {
17
20
  (0, node_assert_1.default)(this._controller, 'Not initialized');
18
21
  const { candidates: discovered } = this._controller.getState();
19
22
  for (const peer of discovered) {
23
+ // TODO(burdon): Back-off.
20
24
  this._controller.connect(peer);
21
25
  }
22
26
  }
@@ -26,9 +30,6 @@ class FullyConnectedTopology {
26
30
  async destroy() {
27
31
  // Nothing to do.
28
32
  }
29
- toString() {
30
- return 'FullyConnectedTopology';
31
- }
32
33
  }
33
34
  exports.FullyConnectedTopology = FullyConnectedTopology;
34
35
  //# sourceMappingURL=fully-connected-topology.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fully-connected-topology.js","sourceRoot":"","sources":["../../../src/topology/fully-connected-topology.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,8DAAiC;AAMjC,MAAa,sBAAsB;IAGjC,IAAI,CAAC,UAA2B;QAC9B,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC5C,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC/D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC7B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,iBAAiB;IACnB,CAAC;IAED,QAAQ;QACN,OAAO,wBAAwB,CAAC;IAClC,CAAC;CACF;AA3BD,wDA2BC"}
1
+ {"version":3,"file":"fully-connected-topology.js","sourceRoot":"","sources":["../../../src/topology/fully-connected-topology.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,8DAAiC;AAMjC,MAAa,sBAAsB;IAGjC,QAAQ;QACN,OAAO,wBAAwB,CAAC;IAClC,CAAC;IAED,IAAI,CAAC,UAA2B;QAC9B,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,WAAW,EAAE,qBAAqB,CAAC,CAAC;QACjD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAC5C,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC/D,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC7B,0BAA0B;YAC1B,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAChC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,OAAO;QACX,iBAAiB;IACnB,CAAC;CACF;AA5BD,wDA4BC"}
@@ -26,7 +26,7 @@ class MMSTTopology {
26
26
  const { connected, candidates } = this._controller.getState();
27
27
  // Run the algorithms if we have first candidates, ran it before, or have more connections than needed.
28
28
  if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {
29
- (0, log_1.log)('Running the algorithm.', {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 55 });
29
+ (0, log_1.log)('Running the algorithm.', {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 55, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
30
30
  this._sampleCollected = true;
31
31
  this._runAlgorithm();
32
32
  }
@@ -35,7 +35,7 @@ class MMSTTopology {
35
35
  (0, node_assert_1.default)(this._controller, 'Not initialized');
36
36
  const { connected } = this._controller.getState();
37
37
  const accept = connected.length < this._maxPeers;
38
- (0, log_1.log)(`Offer ${peer} accept=${accept}`, {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 65 });
38
+ (0, log_1.log)(`Offer ${peer} accept=${accept}`, {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 65, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
39
39
  return accept;
40
40
  }
41
41
  async destroy() {
@@ -50,7 +50,7 @@ class MMSTTopology {
50
50
  .reverse()
51
51
  .slice(0, this._maxPeers - connected.length);
52
52
  for (const peer of sorted) {
53
- (0, log_1.log)(`Disconnect ${peer}.`, {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 83 });
53
+ (0, log_1.log)(`Disconnect ${peer}.`, {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 83, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
54
54
  this._controller.disconnect(peer);
55
55
  }
56
56
  }
@@ -59,7 +59,7 @@ class MMSTTopology {
59
59
  const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);
60
60
  const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);
61
61
  for (const peer of sorted) {
62
- (0, log_1.log)(`Connect ${peer}.`, {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 91 });
62
+ (0, log_1.log)(`Connect ${peer}.`, {}, { file: "packages/core/mesh/network-manager/src/topology/mmst-topology.ts", line: 91, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
63
63
  this._controller.connect(peer);
64
64
  }
65
65
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mmst-topology.js","sourceRoot":"","sources":["../../../src/topology/mmst-topology.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mmst-topology.js","sourceRoot":"","sources":["../../../src/topology/mmst-topology.ts"],"names":[],"mappings":"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"}
@@ -25,11 +25,11 @@ class StarTopology {
25
25
  (0, node_assert_1.default)(this._controller, 'Not initialized.');
26
26
  const { candidates, connected, ownPeerId } = this._controller.getState();
27
27
  if (!ownPeerId.equals(this._centralPeer)) {
28
- (0, log_1.log)('leaf peer dropping all connections apart from central peer.', {}, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 33 });
28
+ (0, log_1.log)('leaf peer dropping all connections apart from central peer.', {}, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 33, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
29
29
  // Drop all connections other than central peer.
30
30
  for (const peer of connected) {
31
31
  if (!peer.equals(this._centralPeer)) {
32
- (0, log_1.log)('dropping connection', { peer }, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 38 });
32
+ (0, log_1.log)('dropping connection', { peer }, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 38, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
33
33
  this._controller.disconnect(peer);
34
34
  }
35
35
  }
@@ -37,7 +37,7 @@ class StarTopology {
37
37
  for (const peer of candidates) {
38
38
  // Connect to central peer.
39
39
  if (peer.equals(this._centralPeer) || ownPeerId.equals(this._centralPeer)) {
40
- (0, log_1.log)('connecting to peer', { peer }, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 47 });
40
+ (0, log_1.log)('connecting to peer', { peer }, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 47, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
41
41
  this._controller.connect(peer);
42
42
  }
43
43
  }
@@ -49,7 +49,7 @@ class StarTopology {
49
49
  peer,
50
50
  isCentral: peer.equals(this._centralPeer),
51
51
  isSelfCentral: ownPeerId.equals(this._centralPeer)
52
- }, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 56 });
52
+ }, { file: "packages/core/mesh/network-manager/src/topology/star-topology.ts", line: 56, scope: this, bugcheck: "If you see this message then it means that the source code preprocessor for @dxos/log is broken. It probably has misinterpreted an unrelated call for a logger invocation.", callSite: (fn, args) => fn(...args) });
53
53
  return ownPeerId.equals(this._centralPeer) || peer.equals(this._centralPeer);
54
54
  }
55
55
  async destroy() {
@@ -1 +1 @@
1
- {"version":3,"file":"star-topology.js","sourceRoot":"","sources":["../../../src/topology/star-topology.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,8DAAiC;AAGjC,mCAAgC;AAIhC,MAAa,YAAY;IAGvB,kBAAkB;IAClB,YACmB,YAAuB;QAAvB,iBAAY,GAAZ,YAAY,CAAW;IACvC,CAAC;IAEJ,QAAQ;QACN,OAAO,gBAAgB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,UAA2B;QAC9B,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC7C,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACxC,IAAA,SAAG,EAAC,6DAA6D,6FAAC,CAAC;YAEnE,gDAAgD;YAChD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACnC,IAAA,SAAG,EAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,yFAAC,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACnC;aACF;SACF;QAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC7B,2BAA2B;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACzE,IAAA,SAAG,EAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,yFAAC,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAChC;SACF;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAClD,IAAA,SAAG,EAAC,OAAO,EAAE;YACX,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;SACnD,yFAAC,CAAC;QACH,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,OAAO;QACX,iBAAiB;IACnB,CAAC;CACF;AAvDD,oCAuDC"}
1
+ {"version":3,"file":"star-topology.js","sourceRoot":"","sources":["../../../src/topology/star-topology.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,8DAAiC;AAGjC,mCAAgC;AAIhC,MAAa,YAAY;IAGvB,kBAAkB;IAClB,YACmB,YAAuB;QAAvB,iBAAY,GAAZ,YAAY,CAAW;IACvC,CAAC;IAEJ,QAAQ;QACN,OAAO,gBAAgB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC;IACzD,CAAC;IAED,IAAI,CAAC,UAA2B;QAC9B,IAAA,qBAAM,EAAC,CAAC,IAAI,CAAC,WAAW,EAAE,sBAAsB,CAAC,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,MAAM;QACJ,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC7C,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACzE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YACxC,IAAA,SAAG,EAAC,6DAA6D,uUAAC,CAAC;YAEnE,gDAAgD;YAChD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;oBACnC,IAAA,SAAG,EAAC,qBAAqB,EAAE,EAAE,IAAI,EAAE,mUAAC,CAAC;oBACrC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACnC;aACF;SACF;QAED,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE;YAC7B,2BAA2B;YAC3B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;gBACzE,IAAA,SAAG,EAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,mUAAC,CAAC;gBACpC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;aAChC;SACF;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAe;QAC3B,IAAA,qBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QAC7C,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QAClD,IAAA,SAAG,EAAC,OAAO,EAAE;YACX,IAAI;YACJ,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YACzC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;SACnD,mUAAC,CAAC;QACH,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,OAAO;QACX,iBAAiB;IACnB,CAAC;CACF;AAvDD,oCAuDC"}
@@ -30,10 +30,7 @@ export interface SwarmState {
30
30
  export interface Topology {
31
31
  /**
32
32
  * Called when swarm is created.
33
- *
34
33
  * May be used to bind the swarm controller and initialize any asynchronous actions.
35
- *
36
- * @param controller
37
34
  */
38
35
  init(controller: SwarmController): void;
39
36
  /**
@@ -42,13 +39,11 @@ export interface Topology {
42
39
  update(): void;
43
40
  /**
44
41
  * Called when remote peer offers a connection.
45
- *
46
42
  * @returns true - to accept the connection, false - to reject.
47
43
  */
48
44
  onOffer(peer: PublicKey): Promise<boolean>;
49
45
  /**
50
46
  * Called when swarm is destroyed or topology is changed.
51
- *
52
47
  * Any error thrown here will be a critical error for the swarm.
53
48
  */
54
49
  destroy(): Promise<void>;