@dxos/network-manager 0.6.13 → 0.6.14-main.2b6a0f3

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 (164) hide show
  1. package/dist/lib/browser/chunk-GW3YM55A.mjs +14 -0
  2. package/dist/lib/browser/chunk-GW3YM55A.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-XYSYUN63.mjs → chunk-V3IRGRVX.mjs} +1501 -1655
  4. package/dist/lib/browser/chunk-V3IRGRVX.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +347 -22
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +22 -32
  9. package/dist/lib/browser/testing/index.mjs.map +3 -3
  10. package/dist/lib/browser/transport/tcp/index.mjs +39 -0
  11. package/dist/lib/browser/transport/tcp/index.mjs.map +7 -0
  12. package/dist/lib/node/{chunk-4YAYC7WN.cjs → chunk-4TTFBX3M.cjs} +1504 -1782
  13. package/dist/lib/node/chunk-4TTFBX3M.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +356 -37
  15. package/dist/lib/node/index.cjs.map +4 -4
  16. package/dist/lib/node/meta.json +1 -1
  17. package/dist/lib/node/testing/index.cjs +24 -34
  18. package/dist/lib/node/testing/index.cjs.map +3 -3
  19. package/dist/lib/node/transport/tcp/index.cjs +191 -0
  20. package/dist/lib/node/transport/tcp/index.cjs.map +7 -0
  21. package/dist/lib/node-esm/chunk-6MN5JVRP.mjs +4035 -0
  22. package/dist/lib/node-esm/chunk-6MN5JVRP.mjs.map +7 -0
  23. package/dist/lib/node-esm/index.mjs +382 -0
  24. package/dist/lib/node-esm/index.mjs.map +7 -0
  25. package/dist/lib/node-esm/meta.json +1 -0
  26. package/dist/lib/node-esm/testing/index.mjs +279 -0
  27. package/dist/lib/node-esm/testing/index.mjs.map +7 -0
  28. package/dist/lib/node-esm/transport/tcp/index.mjs +159 -0
  29. package/dist/lib/node-esm/transport/tcp/index.mjs.map +7 -0
  30. package/dist/types/src/network-manager.d.ts +2 -1
  31. package/dist/types/src/network-manager.d.ts.map +1 -1
  32. package/dist/types/src/signal/ice.d.ts.map +1 -1
  33. package/dist/types/src/signal/integration.node.test.d.ts +2 -0
  34. package/dist/types/src/signal/integration.node.test.d.ts.map +1 -0
  35. package/dist/types/src/signal/swarm-messenger.node.test.d.ts +2 -0
  36. package/dist/types/src/signal/swarm-messenger.node.test.d.ts.map +1 -0
  37. package/dist/types/src/swarm/connection.d.ts.map +1 -1
  38. package/dist/types/src/swarm/swarm.d.ts +1 -1
  39. package/dist/types/src/testing/test-builder.d.ts +2 -2
  40. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  41. package/dist/types/src/testing/test-wire-protocol.d.ts +1 -2
  42. package/dist/types/src/testing/test-wire-protocol.d.ts.map +1 -1
  43. package/dist/types/src/tests/basic-test-suite.d.ts.map +1 -1
  44. package/dist/types/src/tests/property-test-suite.d.ts.map +1 -1
  45. package/dist/types/src/tests/tcp-transport.node.test.d.ts +2 -0
  46. package/dist/types/src/tests/tcp-transport.node.test.d.ts.map +1 -0
  47. package/dist/types/src/tests/utils.d.ts.map +1 -1
  48. package/dist/types/src/transport/index.d.ts +1 -5
  49. package/dist/types/src/transport/index.d.ts.map +1 -1
  50. package/dist/types/src/transport/memory-transport.d.ts +2 -2
  51. package/dist/types/src/transport/memory-transport.d.ts.map +1 -1
  52. package/dist/types/src/transport/tcp/index.d.ts +2 -0
  53. package/dist/types/src/transport/tcp/index.d.ts.map +1 -0
  54. package/dist/types/src/transport/{tcp-transport.browser.d.ts → tcp/tcp-transport.browser.d.ts} +3 -3
  55. package/dist/types/src/transport/tcp/tcp-transport.browser.d.ts.map +1 -0
  56. package/dist/types/src/transport/{tcp-transport.d.ts → tcp/tcp-transport.d.ts} +3 -3
  57. package/dist/types/src/transport/tcp/tcp-transport.d.ts.map +1 -0
  58. package/dist/types/src/transport/transport.d.ts +7 -6
  59. package/dist/types/src/transport/transport.d.ts.map +1 -1
  60. package/dist/types/src/transport/webrtc/index.d.ts +4 -0
  61. package/dist/types/src/transport/webrtc/index.d.ts.map +1 -0
  62. package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts +14 -0
  63. package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts.map +1 -0
  64. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts +68 -0
  65. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts.map +1 -0
  66. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts +33 -0
  67. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts.map +1 -0
  68. package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts +2 -0
  69. package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts.map +1 -0
  70. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts +4 -0
  71. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts.map +1 -0
  72. package/dist/types/src/transport/{simplepeer-transport-proxy.d.ts → webrtc/rtc-transport-proxy.d.ts} +10 -12
  73. package/dist/types/src/transport/webrtc/rtc-transport-proxy.d.ts.map +1 -0
  74. package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts +2 -0
  75. package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts.map +1 -0
  76. package/dist/types/src/transport/{simplepeer-transport-service.d.ts → webrtc/rtc-transport-service.d.ts} +9 -7
  77. package/dist/types/src/transport/webrtc/rtc-transport-service.d.ts.map +1 -0
  78. package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts +4 -0
  79. package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts.map +1 -0
  80. package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts +2 -0
  81. package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts.map +1 -0
  82. package/dist/types/src/transport/webrtc/test-utils.d.ts +5 -0
  83. package/dist/types/src/transport/webrtc/test-utils.d.ts.map +1 -0
  84. package/dist/types/src/transport/webrtc/utils.d.ts +3 -0
  85. package/dist/types/src/transport/webrtc/utils.d.ts.map +1 -0
  86. package/package.json +56 -30
  87. package/src/network-manager.ts +5 -13
  88. package/src/signal/ice.test.ts +1 -3
  89. package/src/signal/ice.ts +6 -1
  90. package/src/signal/{integration.test.ts → integration.node.test.ts} +9 -15
  91. package/src/signal/{swarm-messenger.test.ts → swarm-messenger.node.test.ts} +13 -23
  92. package/src/swarm/connection-limiter.test.ts +3 -6
  93. package/src/swarm/connection.test.ts +63 -38
  94. package/src/swarm/connection.ts +5 -5
  95. package/src/swarm/swarm.test.ts +10 -12
  96. package/src/swarm/swarm.ts +1 -1
  97. package/src/testing/test-builder.ts +13 -29
  98. package/src/testing/test-wire-protocol.ts +1 -4
  99. package/src/tests/basic-test-suite.ts +34 -33
  100. package/src/tests/memory-transport.test.ts +40 -42
  101. package/src/tests/property-test-suite.ts +21 -22
  102. package/src/tests/tcp-transport.node.test.ts +65 -0
  103. package/src/tests/utils.ts +3 -2
  104. package/src/tests/webrtc-transport.test.ts +9 -9
  105. package/src/transport/index.ts +1 -5
  106. package/src/transport/memory-transport.ts +2 -0
  107. package/src/transport/tcp/index.ts +5 -0
  108. package/src/transport/{tcp-transport.browser.ts → tcp/tcp-transport.browser.ts} +7 -3
  109. package/src/transport/{tcp-transport.ts → tcp/tcp-transport.ts} +3 -1
  110. package/src/transport/transport.ts +8 -7
  111. package/src/transport/webrtc/index.ts +7 -0
  112. package/src/transport/webrtc/rtc-connection-factory.ts +82 -0
  113. package/src/transport/webrtc/rtc-peer-connection.ts +472 -0
  114. package/src/transport/webrtc/rtc-transport-channel.test.ts +176 -0
  115. package/src/transport/webrtc/rtc-transport-channel.ts +195 -0
  116. package/src/transport/webrtc/rtc-transport-factory.ts +28 -0
  117. package/src/transport/webrtc/rtc-transport-proxy.test.ts +413 -0
  118. package/src/transport/webrtc/rtc-transport-proxy.ts +264 -0
  119. package/src/transport/webrtc/rtc-transport-service.ts +192 -0
  120. package/src/transport/webrtc/rtc-transport-stats.ts +67 -0
  121. package/src/transport/webrtc/rtc-transport.test.ts +198 -0
  122. package/src/transport/webrtc/test-utils.ts +22 -0
  123. package/src/transport/webrtc/utils.ts +36 -0
  124. package/src/typings.d.ts +8 -2
  125. package/dist/lib/browser/chunk-XYSYUN63.mjs.map +0 -7
  126. package/dist/lib/node/chunk-4YAYC7WN.cjs.map +0 -7
  127. package/dist/types/src/signal/integration.test.d.ts +0 -2
  128. package/dist/types/src/signal/integration.test.d.ts.map +0 -1
  129. package/dist/types/src/signal/swarm-messenger.test.d.ts +0 -2
  130. package/dist/types/src/signal/swarm-messenger.test.d.ts.map +0 -1
  131. package/dist/types/src/tests/tcp-transport.test.d.ts +0 -2
  132. package/dist/types/src/tests/tcp-transport.test.d.ts.map +0 -1
  133. package/dist/types/src/transport/libdatachannel-transport.d.ts +0 -42
  134. package/dist/types/src/transport/libdatachannel-transport.d.ts.map +0 -1
  135. package/dist/types/src/transport/libdatachannel-transport.test.d.ts +0 -2
  136. package/dist/types/src/transport/libdatachannel-transport.test.d.ts.map +0 -1
  137. package/dist/types/src/transport/memory-transport.test.d.ts +0 -2
  138. package/dist/types/src/transport/memory-transport.test.d.ts.map +0 -1
  139. package/dist/types/src/transport/simplepeer-simple-peer.d.ts +0 -2
  140. package/dist/types/src/transport/simplepeer-simple-peer.d.ts.map +0 -1
  141. package/dist/types/src/transport/simplepeer-transport-proxy-test.d.ts +0 -2
  142. package/dist/types/src/transport/simplepeer-transport-proxy-test.d.ts.map +0 -1
  143. package/dist/types/src/transport/simplepeer-transport-proxy.d.ts.map +0 -1
  144. package/dist/types/src/transport/simplepeer-transport-service.d.ts.map +0 -1
  145. package/dist/types/src/transport/simplepeer-transport.d.ts +0 -36
  146. package/dist/types/src/transport/simplepeer-transport.d.ts.map +0 -1
  147. package/dist/types/src/transport/simplepeer-transport.test.d.ts +0 -2
  148. package/dist/types/src/transport/simplepeer-transport.test.d.ts.map +0 -1
  149. package/dist/types/src/transport/tcp-transport.browser.d.ts.map +0 -1
  150. package/dist/types/src/transport/tcp-transport.d.ts.map +0 -1
  151. package/dist/types/src/transport/webrtc.d.ts +0 -6
  152. package/dist/types/src/transport/webrtc.d.ts.map +0 -1
  153. package/src/globals.d.ts +0 -7
  154. package/src/tests/tcp-transport.test.ts +0 -67
  155. package/src/transport/libdatachannel-transport.test.ts +0 -100
  156. package/src/transport/libdatachannel-transport.ts +0 -376
  157. package/src/transport/memory-transport.test.ts +0 -74
  158. package/src/transport/simplepeer-simple-peer.ts +0 -26
  159. package/src/transport/simplepeer-transport-proxy-test.ts +0 -181
  160. package/src/transport/simplepeer-transport-proxy.ts +0 -246
  161. package/src/transport/simplepeer-transport-service.ts +0 -160
  162. package/src/transport/simplepeer-transport.test.ts +0 -61
  163. package/src/transport/simplepeer-transport.ts +0 -250
  164. package/src/transport/webrtc.ts +0 -15
@@ -18,36 +18,360 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var node_exports = {};
20
20
  __export(node_exports, {
21
- Connection: () => import_chunk_4YAYC7WN.Connection,
22
- ConnectionLimiter: () => import_chunk_4YAYC7WN.ConnectionLimiter,
23
- ConnectionLog: () => import_chunk_4YAYC7WN.ConnectionLog,
24
- ConnectionState: () => import_chunk_4YAYC7WN.ConnectionState,
25
- EventType: () => import_chunk_4YAYC7WN.EventType,
26
- FullyConnectedTopology: () => import_chunk_4YAYC7WN.FullyConnectedTopology,
27
- LibDataChannelTransport: () => import_chunk_4YAYC7WN.LibDataChannelTransport,
28
- MAX_CONCURRENT_INITIATING_CONNECTIONS: () => import_chunk_4YAYC7WN.MAX_CONCURRENT_INITIATING_CONNECTIONS,
29
- MMSTTopology: () => import_chunk_4YAYC7WN.MMSTTopology,
30
- MemoryTransport: () => import_chunk_4YAYC7WN.MemoryTransport,
31
- MemoryTransportFactory: () => import_chunk_4YAYC7WN.MemoryTransportFactory,
32
- SimplePeerTransport: () => import_chunk_4YAYC7WN.SimplePeerTransport,
33
- SimplePeerTransportProxy: () => import_chunk_4YAYC7WN.SimplePeerTransportProxy,
34
- SimplePeerTransportProxyFactory: () => import_chunk_4YAYC7WN.SimplePeerTransportProxyFactory,
35
- SimplePeerTransportService: () => import_chunk_4YAYC7WN.SimplePeerTransportService,
36
- StarTopology: () => import_chunk_4YAYC7WN.StarTopology,
37
- Swarm: () => import_chunk_4YAYC7WN.Swarm,
38
- SwarmMapper: () => import_chunk_4YAYC7WN.SwarmMapper,
39
- SwarmMessenger: () => import_chunk_4YAYC7WN.SwarmMessenger,
40
- SwarmNetworkManager: () => import_chunk_4YAYC7WN.SwarmNetworkManager,
41
- TcpTransport: () => import_chunk_4YAYC7WN.TcpTransport,
42
- TcpTransportFactory: () => import_chunk_4YAYC7WN.TcpTransportFactory,
43
- TransportKind: () => import_chunk_4YAYC7WN.TransportKind,
44
- createIceProvider: () => import_chunk_4YAYC7WN.createIceProvider,
45
- createLibDataChannelTransportFactory: () => import_chunk_4YAYC7WN.createLibDataChannelTransportFactory,
46
- createSimplePeerTransportFactory: () => import_chunk_4YAYC7WN.createSimplePeerTransportFactory,
47
- createTeleportProtocolFactory: () => import_chunk_4YAYC7WN.createTeleportProtocolFactory
21
+ Connection: () => import_chunk_4TTFBX3M.Connection,
22
+ ConnectionLimiter: () => import_chunk_4TTFBX3M.ConnectionLimiter,
23
+ ConnectionLog: () => import_chunk_4TTFBX3M.ConnectionLog,
24
+ ConnectionState: () => import_chunk_4TTFBX3M.ConnectionState,
25
+ EventType: () => import_chunk_4TTFBX3M.EventType,
26
+ FullyConnectedTopology: () => import_chunk_4TTFBX3M.FullyConnectedTopology,
27
+ MAX_CONCURRENT_INITIATING_CONNECTIONS: () => import_chunk_4TTFBX3M.MAX_CONCURRENT_INITIATING_CONNECTIONS,
28
+ MMSTTopology: () => MMSTTopology,
29
+ MemoryTransport: () => import_chunk_4TTFBX3M.MemoryTransport,
30
+ MemoryTransportFactory: () => import_chunk_4TTFBX3M.MemoryTransportFactory,
31
+ RtcTransportProxy: () => import_chunk_4TTFBX3M.RtcTransportProxy,
32
+ RtcTransportProxyFactory: () => import_chunk_4TTFBX3M.RtcTransportProxyFactory,
33
+ RtcTransportService: () => import_chunk_4TTFBX3M.RtcTransportService,
34
+ StarTopology: () => StarTopology,
35
+ Swarm: () => import_chunk_4TTFBX3M.Swarm,
36
+ SwarmMapper: () => import_chunk_4TTFBX3M.SwarmMapper,
37
+ SwarmMessenger: () => import_chunk_4TTFBX3M.SwarmMessenger,
38
+ SwarmNetworkManager: () => import_chunk_4TTFBX3M.SwarmNetworkManager,
39
+ TransportKind: () => import_chunk_4TTFBX3M.TransportKind,
40
+ createIceProvider: () => createIceProvider,
41
+ createRtcTransportFactory: () => import_chunk_4TTFBX3M.createRtcTransportFactory,
42
+ createTeleportProtocolFactory: () => import_chunk_4TTFBX3M.createTeleportProtocolFactory
48
43
  });
49
44
  module.exports = __toCommonJS(node_exports);
50
- var import_chunk_4YAYC7WN = require("./chunk-4YAYC7WN.cjs");
45
+ var import_chunk_4TTFBX3M = require("./chunk-4TTFBX3M.cjs");
46
+ var import_async = require("@dxos/async");
47
+ var import_log = require("@dxos/log");
48
+ var import_util = require("@dxos/util");
49
+ var import_invariant = require("@dxos/invariant");
50
+ var import_log2 = require("@dxos/log");
51
+ var import_invariant2 = require("@dxos/invariant");
52
+ var import_log3 = require("@dxos/log");
53
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/signal/ice.ts";
54
+ var createIceProvider = (iceProviders) => {
55
+ let cachedIceServers;
56
+ return {
57
+ getIceServers: async () => {
58
+ if (cachedIceServers) {
59
+ return cachedIceServers;
60
+ }
61
+ cachedIceServers = (await Promise.all(iceProviders.map(({ urls }) => (0, import_async.asyncTimeout)(fetch(urls, {
62
+ method: "GET"
63
+ }), 1e4).then((response) => response.json()).catch((err) => {
64
+ const isDev = typeof window !== "undefined" && window.location.href.includes("localhost");
65
+ if (!isDev) {
66
+ import_log.log.error("Failed to fetch ICE servers from provider", {
67
+ urls,
68
+ err
69
+ }, {
70
+ F: __dxlog_file,
71
+ L: 30,
72
+ S: void 0,
73
+ C: (f, a) => f(...a)
74
+ });
75
+ }
76
+ })))).filter(import_util.isNotNullOrUndefined).map(({ iceServers }) => iceServers).flat();
77
+ return cachedIceServers;
78
+ }
79
+ };
80
+ };
81
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/mmst-topology.ts";
82
+ var MIN_UPDATE_INTERVAL = 1e3 * 10;
83
+ var MAX_CHANGES_PER_UPDATE = 1;
84
+ var MMSTTopology = class {
85
+ constructor({ originateConnections = 2, maxPeers = 4, sampleSize = 10 } = {}) {
86
+ this._sampleCollected = false;
87
+ this._lastAction = /* @__PURE__ */ new Date(0);
88
+ this._originateConnections = originateConnections;
89
+ this._maxPeers = maxPeers;
90
+ this._sampleSize = sampleSize;
91
+ }
92
+ init(controller) {
93
+ (0, import_invariant.invariant)(!this._controller, "Already initialized", {
94
+ F: __dxlog_file2,
95
+ L: 49,
96
+ S: this,
97
+ A: [
98
+ "!this._controller",
99
+ "'Already initialized'"
100
+ ]
101
+ });
102
+ this._controller = controller;
103
+ }
104
+ update() {
105
+ (0, import_invariant.invariant)(this._controller, "Not initialized", {
106
+ F: __dxlog_file2,
107
+ L: 54,
108
+ S: this,
109
+ A: [
110
+ "this._controller",
111
+ "'Not initialized'"
112
+ ]
113
+ });
114
+ const { connected, candidates } = this._controller.getState();
115
+ if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {
116
+ (0, import_log2.log)("Running the algorithm.", void 0, {
117
+ F: __dxlog_file2,
118
+ L: 58,
119
+ S: this,
120
+ C: (f, a) => f(...a)
121
+ });
122
+ this._sampleCollected = true;
123
+ this._runAlgorithm();
124
+ }
125
+ }
126
+ forceUpdate() {
127
+ this._lastAction = /* @__PURE__ */ new Date(0);
128
+ this.update();
129
+ }
130
+ async onOffer(peer) {
131
+ (0, import_invariant.invariant)(this._controller, "Not initialized", {
132
+ F: __dxlog_file2,
133
+ L: 70,
134
+ S: this,
135
+ A: [
136
+ "this._controller",
137
+ "'Not initialized'"
138
+ ]
139
+ });
140
+ const { connected } = this._controller.getState();
141
+ const accept = connected.length < this._maxPeers;
142
+ (0, import_log2.log)(`Offer ${peer} accept=${accept}`, void 0, {
143
+ F: __dxlog_file2,
144
+ L: 73,
145
+ S: this,
146
+ C: (f, a) => f(...a)
147
+ });
148
+ return accept;
149
+ }
150
+ async destroy() {
151
+ }
152
+ _runAlgorithm() {
153
+ (0, import_invariant.invariant)(this._controller, "Not initialized", {
154
+ F: __dxlog_file2,
155
+ L: 82,
156
+ S: this,
157
+ A: [
158
+ "this._controller",
159
+ "'Not initialized'"
160
+ ]
161
+ });
162
+ const { connected, candidates, ownPeerId } = this._controller.getState();
163
+ if (connected.length > this._maxPeers) {
164
+ (0, import_log2.log)(`disconnect ${connected.length - this._maxPeers} peers.`, void 0, {
165
+ F: __dxlog_file2,
166
+ L: 88,
167
+ S: this,
168
+ C: (f, a) => f(...a)
169
+ });
170
+ const sorted = sortByXorDistance(connected, ownPeerId).reverse().slice(0, this._maxPeers - connected.length);
171
+ (0, import_invariant.invariant)(sorted.length === 0, void 0, {
172
+ F: __dxlog_file2,
173
+ L: 92,
174
+ S: this,
175
+ A: [
176
+ "sorted.length === 0",
177
+ ""
178
+ ]
179
+ });
180
+ if (sorted.length > MAX_CHANGES_PER_UPDATE) {
181
+ (0, import_log2.log)(`want to disconnect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {
182
+ F: __dxlog_file2,
183
+ L: 95,
184
+ S: this,
185
+ C: (f, a) => f(...a)
186
+ });
187
+ }
188
+ if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
189
+ for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
190
+ (0, import_log2.log)(`Disconnect ${peer}.`, void 0, {
191
+ F: __dxlog_file2,
192
+ L: 100,
193
+ S: this,
194
+ C: (f, a) => f(...a)
195
+ });
196
+ this._controller.disconnect(peer);
197
+ }
198
+ this._lastAction = /* @__PURE__ */ new Date();
199
+ } else {
200
+ (0, import_log2.log)("rate limited disconnect", void 0, {
201
+ F: __dxlog_file2,
202
+ L: 105,
203
+ S: this,
204
+ C: (f, a) => f(...a)
205
+ });
206
+ }
207
+ } else if (connected.length < this._originateConnections) {
208
+ (0, import_log2.log)(`connect ${this._originateConnections - connected.length} peers.`, void 0, {
209
+ F: __dxlog_file2,
210
+ L: 109,
211
+ S: this,
212
+ C: (f, a) => f(...a)
213
+ });
214
+ const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);
215
+ const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);
216
+ if (sorted.length > MAX_CHANGES_PER_UPDATE) {
217
+ (0, import_log2.log)(`want to connect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`, void 0, {
218
+ F: __dxlog_file2,
219
+ L: 114,
220
+ S: this,
221
+ C: (f, a) => f(...a)
222
+ });
223
+ }
224
+ if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {
225
+ for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {
226
+ (0, import_log2.log)(`Connect ${peer}.`, void 0, {
227
+ F: __dxlog_file2,
228
+ L: 118,
229
+ S: this,
230
+ C: (f, a) => f(...a)
231
+ });
232
+ this._controller.connect(peer);
233
+ }
234
+ this._lastAction = /* @__PURE__ */ new Date();
235
+ } else {
236
+ (0, import_log2.log)("rate limited connect", void 0, {
237
+ F: __dxlog_file2,
238
+ L: 123,
239
+ S: this,
240
+ C: (f, a) => f(...a)
241
+ });
242
+ }
243
+ }
244
+ }
245
+ toString() {
246
+ return "MMSTTopology";
247
+ }
248
+ };
249
+ var sortByXorDistance = (keys, reference) => {
250
+ const sorted = keys.sort((a, b) => {
251
+ return compareXor(distXor(a.asBuffer(), reference.asBuffer()), distXor(b.asBuffer(), reference.asBuffer()));
252
+ });
253
+ (0, import_log2.log)("Sorted keys", {
254
+ keys,
255
+ reference,
256
+ sorted
257
+ }, {
258
+ F: __dxlog_file2,
259
+ L: 137,
260
+ S: void 0,
261
+ C: (f, a) => f(...a)
262
+ });
263
+ return sorted;
264
+ };
265
+ var distXor = (a, b) => {
266
+ const maxLength = Math.max(a.length, b.length);
267
+ const result = Buffer.allocUnsafe(maxLength);
268
+ for (let i = 0; i < maxLength; i++) {
269
+ result[i] = (a[i] || 0) ^ (b[i] || 0);
270
+ }
271
+ return result;
272
+ };
273
+ var compareXor = (a, b) => {
274
+ const maxLength = Math.max(a.length, b.length);
275
+ for (let i = 0; i < maxLength; i++) {
276
+ if ((a[i] || 0) === (b[i] || 0)) {
277
+ continue;
278
+ }
279
+ return (a[i] || 0) < (b[i] || 0) ? -1 : 1;
280
+ }
281
+ return 0;
282
+ };
283
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/core/mesh/network-manager/src/topology/star-topology.ts";
284
+ var StarTopology = class {
285
+ constructor(_centralPeer) {
286
+ this._centralPeer = _centralPeer;
287
+ }
288
+ toString() {
289
+ return `StarTopology(${this._centralPeer.truncate()})`;
290
+ }
291
+ init(controller) {
292
+ (0, import_invariant2.invariant)(!this._controller, "Already initialized.", {
293
+ F: __dxlog_file3,
294
+ L: 21,
295
+ S: this,
296
+ A: [
297
+ "!this._controller",
298
+ "'Already initialized.'"
299
+ ]
300
+ });
301
+ this._controller = controller;
302
+ }
303
+ update() {
304
+ (0, import_invariant2.invariant)(this._controller, "Not initialized.", {
305
+ F: __dxlog_file3,
306
+ L: 26,
307
+ S: this,
308
+ A: [
309
+ "this._controller",
310
+ "'Not initialized.'"
311
+ ]
312
+ });
313
+ const { candidates, connected, ownPeerId } = this._controller.getState();
314
+ if (!ownPeerId.equals(this._centralPeer)) {
315
+ (0, import_log3.log)("leaf peer dropping all connections apart from central peer.", void 0, {
316
+ F: __dxlog_file3,
317
+ L: 29,
318
+ S: this,
319
+ C: (f, a) => f(...a)
320
+ });
321
+ for (const peer of connected) {
322
+ if (!peer.equals(this._centralPeer)) {
323
+ (0, import_log3.log)("dropping connection", {
324
+ peer
325
+ }, {
326
+ F: __dxlog_file3,
327
+ L: 34,
328
+ S: this,
329
+ C: (f, a) => f(...a)
330
+ });
331
+ this._controller.disconnect(peer);
332
+ }
333
+ }
334
+ }
335
+ for (const peer of candidates) {
336
+ if (peer.equals(this._centralPeer) || ownPeerId.equals(this._centralPeer)) {
337
+ (0, import_log3.log)("connecting to peer", {
338
+ peer
339
+ }, {
340
+ F: __dxlog_file3,
341
+ L: 43,
342
+ S: this,
343
+ C: (f, a) => f(...a)
344
+ });
345
+ this._controller.connect(peer);
346
+ }
347
+ }
348
+ }
349
+ async onOffer(peer) {
350
+ (0, import_invariant2.invariant)(this._controller, "Not initialized.", {
351
+ F: __dxlog_file3,
352
+ L: 50,
353
+ S: this,
354
+ A: [
355
+ "this._controller",
356
+ "'Not initialized.'"
357
+ ]
358
+ });
359
+ const { ownPeerId } = this._controller.getState();
360
+ (0, import_log3.log)("offer", {
361
+ peer,
362
+ isCentral: peer.equals(this._centralPeer),
363
+ isSelfCentral: ownPeerId.equals(this._centralPeer)
364
+ }, {
365
+ F: __dxlog_file3,
366
+ L: 52,
367
+ S: this,
368
+ C: (f, a) => f(...a)
369
+ });
370
+ return ownPeerId.equals(this._centralPeer) || peer.equals(this._centralPeer);
371
+ }
372
+ async destroy() {
373
+ }
374
+ };
51
375
  // Annotate the CommonJS export names for ESM import in node:
52
376
  0 && (module.exports = {
53
377
  Connection,
@@ -56,26 +380,21 @@ var import_chunk_4YAYC7WN = require("./chunk-4YAYC7WN.cjs");
56
380
  ConnectionState,
57
381
  EventType,
58
382
  FullyConnectedTopology,
59
- LibDataChannelTransport,
60
383
  MAX_CONCURRENT_INITIATING_CONNECTIONS,
61
384
  MMSTTopology,
62
385
  MemoryTransport,
63
386
  MemoryTransportFactory,
64
- SimplePeerTransport,
65
- SimplePeerTransportProxy,
66
- SimplePeerTransportProxyFactory,
67
- SimplePeerTransportService,
387
+ RtcTransportProxy,
388
+ RtcTransportProxyFactory,
389
+ RtcTransportService,
68
390
  StarTopology,
69
391
  Swarm,
70
392
  SwarmMapper,
71
393
  SwarmMessenger,
72
394
  SwarmNetworkManager,
73
- TcpTransport,
74
- TcpTransportFactory,
75
395
  TransportKind,
76
396
  createIceProvider,
77
- createLibDataChannelTransportFactory,
78
- createSimplePeerTransportFactory,
397
+ createRtcTransportFactory,
79
398
  createTeleportProtocolFactory
80
399
  });
81
400
  //# sourceMappingURL=index.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["index.cjs"],
4
- "sourcesContent": ["import {\n Connection,\n ConnectionLimiter,\n ConnectionLog,\n ConnectionState,\n EventType,\n FullyConnectedTopology,\n LibDataChannelTransport,\n MAX_CONCURRENT_INITIATING_CONNECTIONS,\n MMSTTopology,\n MemoryTransport,\n MemoryTransportFactory,\n SimplePeerTransport,\n SimplePeerTransportProxy,\n SimplePeerTransportProxyFactory,\n SimplePeerTransportService,\n StarTopology,\n Swarm,\n SwarmMapper,\n SwarmMessenger,\n SwarmNetworkManager,\n TcpTransport,\n TcpTransportFactory,\n TransportKind,\n createIceProvider,\n createLibDataChannelTransportFactory,\n createSimplePeerTransportFactory,\n createTeleportProtocolFactory\n} from \"./chunk-4YAYC7WN.cjs\";\nexport {\n Connection,\n ConnectionLimiter,\n ConnectionLog,\n ConnectionState,\n EventType,\n FullyConnectedTopology,\n LibDataChannelTransport,\n MAX_CONCURRENT_INITIATING_CONNECTIONS,\n MMSTTopology,\n MemoryTransport,\n MemoryTransportFactory,\n SimplePeerTransport,\n SimplePeerTransportProxy,\n SimplePeerTransportProxyFactory,\n SimplePeerTransportService,\n StarTopology,\n Swarm,\n SwarmMapper,\n SwarmMessenger,\n SwarmNetworkManager,\n TcpTransport,\n TcpTransportFactory,\n TransportKind,\n createIceProvider,\n createLibDataChannelTransportFactory,\n createSimplePeerTransportFactory,\n createTeleportProtocolFactory\n};\n//# sourceMappingURL=index.cjs.map\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BA4BO;",
6
- "names": []
3
+ "sources": ["../../../src/signal/ice.ts", "../../../src/topology/mmst-topology.ts", "../../../src/topology/star-topology.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { asyncTimeout } from '@dxos/async';\nimport { log } from '@dxos/log';\nimport { type Runtime } from '@dxos/protocols/proto/dxos/config';\nimport { isNotNullOrUndefined } from '@dxos/util';\n\nexport interface IceProvider {\n getIceServers: () => Promise<RTCIceServer[]>;\n}\n\nexport const createIceProvider = (iceProviders: Runtime.Services.IceProvider[]): IceProvider => {\n let cachedIceServers: RTCIceServer[];\n return {\n getIceServers: async () => {\n if (cachedIceServers) {\n return cachedIceServers;\n }\n\n cachedIceServers = (\n await Promise.all(\n iceProviders.map(({ urls }) =>\n asyncTimeout(fetch(urls, { method: 'GET' }), 10_000)\n .then((response) => response.json())\n .catch((err) => {\n const isDev = typeof window !== 'undefined' && window.location.href.includes('localhost');\n if (!isDev) {\n log.error('Failed to fetch ICE servers from provider', { urls, err });\n }\n }),\n ),\n )\n )\n .filter(isNotNullOrUndefined)\n .map(({ iceServers }: { iceServers: RTCIceServer[] }) => iceServers)\n .flat();\n\n return cachedIceServers;\n },\n };\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport { type SwarmController, type Topology } from './topology';\n\nconst MIN_UPDATE_INTERVAL = 1000 * 10;\nconst MAX_CHANGES_PER_UPDATE = 1;\n\nexport interface MMSTTopologyOptions {\n /**\n * Number of connections the peer will originate by itself.\n */\n originateConnections?: number;\n\n /**\n * Maximum number of connections allowed, all other connections will be dropped.\n */\n maxPeers?: number;\n\n /**\n * Size of random sample from which peer candidates are selected.\n */\n sampleSize?: number;\n}\n\nexport class MMSTTopology implements Topology {\n private readonly _originateConnections: number;\n private readonly _maxPeers: number;\n private readonly _sampleSize: number;\n\n private _controller?: SwarmController;\n\n private _sampleCollected = false;\n\n private _lastAction = new Date(0);\n\n constructor({ originateConnections = 2, maxPeers = 4, sampleSize = 10 }: MMSTTopologyOptions = {}) {\n this._originateConnections = originateConnections;\n this._maxPeers = maxPeers;\n this._sampleSize = sampleSize;\n }\n\n init(controller: SwarmController): void {\n invariant(!this._controller, 'Already initialized');\n this._controller = controller;\n }\n\n update(): void {\n invariant(this._controller, 'Not initialized');\n const { connected, candidates } = this._controller.getState();\n // Run the algorithms if we have first candidates, ran it before, or have more connections than needed.\n if (this._sampleCollected || connected.length > this._maxPeers || candidates.length > 0) {\n log('Running the algorithm.');\n this._sampleCollected = true;\n this._runAlgorithm();\n }\n }\n\n forceUpdate() {\n this._lastAction = new Date(0);\n this.update();\n }\n\n async onOffer(peer: PublicKey): Promise<boolean> {\n invariant(this._controller, 'Not initialized');\n const { connected } = this._controller.getState();\n const accept = connected.length < this._maxPeers;\n log(`Offer ${peer} accept=${accept}`);\n return accept;\n }\n\n async destroy(): Promise<void> {\n // Nothing to do.\n }\n\n private _runAlgorithm() {\n invariant(this._controller, 'Not initialized');\n const { connected, candidates, ownPeerId } = this._controller.getState();\n\n // TODO(nf): does this rate limiting/flap dampening logic belong here or in the SwarmController?\n if (connected.length > this._maxPeers) {\n // Disconnect extra peers.\n log(`disconnect ${connected.length - this._maxPeers} peers.`);\n const sorted = sortByXorDistance(connected, ownPeerId)\n .reverse()\n .slice(0, this._maxPeers - connected.length);\n invariant(sorted.length === 0);\n\n if (sorted.length > MAX_CHANGES_PER_UPDATE) {\n log(`want to disconnect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`);\n }\n\n if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {\n for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {\n log(`Disconnect ${peer}.`);\n this._controller.disconnect(peer);\n }\n this._lastAction = new Date();\n } else {\n log('rate limited disconnect');\n }\n } else if (connected.length < this._originateConnections) {\n // Connect new peers to reach desired quota.\n log(`connect ${this._originateConnections - connected.length} peers.`);\n const sample = candidates.sort(() => Math.random() - 0.5).slice(0, this._sampleSize);\n const sorted = sortByXorDistance(sample, ownPeerId).slice(0, this._originateConnections - connected.length);\n\n if (sorted.length > MAX_CHANGES_PER_UPDATE) {\n log(`want to connect ${sorted.length} peers but limited to ${MAX_CHANGES_PER_UPDATE}`);\n }\n if (Date.now() - this._lastAction.getTime() > MIN_UPDATE_INTERVAL) {\n for (const peer of sorted.slice(0, MAX_CHANGES_PER_UPDATE)) {\n log(`Connect ${peer}.`);\n this._controller.connect(peer);\n }\n this._lastAction = new Date();\n } else {\n log('rate limited connect');\n }\n }\n }\n\n toString() {\n return 'MMSTTopology';\n }\n}\n\nconst sortByXorDistance = (keys: PublicKey[], reference: PublicKey): PublicKey[] => {\n const sorted = keys.sort((a, b) => {\n return compareXor(distXor(a.asBuffer(), reference.asBuffer()), distXor(b.asBuffer(), reference.asBuffer()));\n });\n log('Sorted keys', { keys, reference, sorted });\n return sorted;\n};\n\nconst distXor = (a: Buffer, b: Buffer) => {\n const maxLength = Math.max(a.length, b.length);\n const result = Buffer.allocUnsafe(maxLength);\n for (let i = 0; i < maxLength; i++) {\n result[i] = (a[i] || 0) ^ (b[i] || 0);\n }\n return result;\n};\n\nconst compareXor = (a: Buffer, b: Buffer) => {\n const maxLength = Math.max(a.length, b.length);\n for (let i = 0; i < maxLength; i++) {\n if ((a[i] || 0) === (b[i] || 0)) {\n continue;\n }\n return (a[i] || 0) < (b[i] || 0) ? -1 : 1;\n }\n return 0;\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\n\nimport { type SwarmController, type Topology } from './topology';\n\nexport class StarTopology implements Topology {\n private _controller?: SwarmController;\n\n constructor(private readonly _centralPeer: PublicKey) {}\n\n toString() {\n return `StarTopology(${this._centralPeer.truncate()})`;\n }\n\n init(controller: SwarmController): void {\n invariant(!this._controller, 'Already initialized.');\n this._controller = controller;\n }\n\n update(): void {\n invariant(this._controller, 'Not initialized.');\n const { candidates, connected, ownPeerId } = this._controller.getState();\n if (!ownPeerId.equals(this._centralPeer)) {\n log('leaf peer dropping all connections apart from central peer.');\n\n // Drop all connections other than central peer.\n for (const peer of connected) {\n if (!peer.equals(this._centralPeer)) {\n log('dropping connection', { peer });\n this._controller.disconnect(peer);\n }\n }\n }\n\n for (const peer of candidates) {\n // Connect to central peer.\n if (peer.equals(this._centralPeer) || ownPeerId.equals(this._centralPeer)) {\n log('connecting to peer', { peer });\n this._controller.connect(peer);\n }\n }\n }\n\n async onOffer(peer: PublicKey): Promise<boolean> {\n invariant(this._controller, 'Not initialized.');\n const { ownPeerId } = this._controller.getState();\n log('offer', {\n peer,\n isCentral: peer.equals(this._centralPeer),\n isSelfCentral: ownPeerId.equals(this._centralPeer),\n });\n return ownPeerId.equals(this._centralPeer) || peer.equals(this._centralPeer);\n }\n\n async destroy(): Promise<void> {\n // Nothing to do.\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_log", "import_invariant", "createIceProvider", "iceProviders", "cachedIceServers", "getIceServers", "Promise", "all", "map", "urls", "asyncTimeout", "fetch", "method", "then", "response", "json", "catch", "err", "isDev", "window", "location", "href", "includes", "log", "error", "filter", "isNotNullOrUndefined", "iceServers", "flat", "MIN_UPDATE_INTERVAL", "MAX_CHANGES_PER_UPDATE", "MMSTTopology", "constructor", "originateConnections", "maxPeers", "sampleSize", "_sampleCollected", "_lastAction", "Date", "_originateConnections", "_maxPeers", "_sampleSize", "init", "controller", "invariant", "_controller", "update", "connected", "candidates", "getState", "length", "_runAlgorithm", "forceUpdate", "onOffer", "peer", "accept", "destroy", "ownPeerId", "sorted", "sortByXorDistance", "reverse", "slice", "now", "getTime", "disconnect", "sample", "sort", "Math", "random", "connect", "toString", "keys", "reference", "a", "b", "compareXor", "distXor", "asBuffer", "maxLength", "max", "result", "Buffer", "allocUnsafe", "i", "StarTopology", "_centralPeer", "truncate", "equals", "isCentral", "isSelfCentral"]
7
7
  }