@dxos/network-manager 0.1.0

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 (184) hide show
  1. package/LICENSE +21 -0
  2. package/dist/src/connection-log.d.ts +23 -0
  3. package/dist/src/connection-log.d.ts.map +1 -0
  4. package/dist/src/connection-log.js +98 -0
  5. package/dist/src/connection-log.js.map +1 -0
  6. package/dist/src/index.d.ts +9 -0
  7. package/dist/src/index.d.ts.map +1 -0
  8. package/dist/src/index.js +28 -0
  9. package/dist/src/index.js.map +1 -0
  10. package/dist/src/network-manager.d.ts +80 -0
  11. package/dist/src/network-manager.d.ts.map +1 -0
  12. package/dist/src/network-manager.js +123 -0
  13. package/dist/src/network-manager.js.map +1 -0
  14. package/dist/src/network-manager.test.d.ts +2 -0
  15. package/dist/src/network-manager.test.d.ts.map +1 -0
  16. package/dist/src/network-manager.test.js +621 -0
  17. package/dist/src/network-manager.test.js.map +1 -0
  18. package/dist/src/presence.test.d.ts +2 -0
  19. package/dist/src/presence.test.d.ts.map +1 -0
  20. package/dist/src/presence.test.js +60 -0
  21. package/dist/src/presence.test.js.map +1 -0
  22. package/dist/src/protocol-factory.d.ts +30 -0
  23. package/dist/src/protocol-factory.d.ts.map +1 -0
  24. package/dist/src/protocol-factory.js +64 -0
  25. package/dist/src/protocol-factory.js.map +1 -0
  26. package/dist/src/signal/index.d.ts +4 -0
  27. package/dist/src/signal/index.d.ts.map +1 -0
  28. package/dist/src/signal/index.js +23 -0
  29. package/dist/src/signal/index.js.map +1 -0
  30. package/dist/src/signal/integration.test.d.ts +2 -0
  31. package/dist/src/signal/integration.test.d.ts.map +1 -0
  32. package/dist/src/signal/integration.test.js +105 -0
  33. package/dist/src/signal/integration.test.js.map +1 -0
  34. package/dist/src/signal/message-router.d.ts +39 -0
  35. package/dist/src/signal/message-router.d.ts.map +1 -0
  36. package/dist/src/signal/message-router.js +135 -0
  37. package/dist/src/signal/message-router.js.map +1 -0
  38. package/dist/src/signal/message-router.test.d.ts +2 -0
  39. package/dist/src/signal/message-router.test.d.ts.map +1 -0
  40. package/dist/src/signal/message-router.test.js +211 -0
  41. package/dist/src/signal/message-router.test.js.map +1 -0
  42. package/dist/src/signal/signal-connection.d.ts +21 -0
  43. package/dist/src/signal/signal-connection.d.ts.map +1 -0
  44. package/dist/src/signal/signal-connection.js +6 -0
  45. package/dist/src/signal/signal-connection.js.map +1 -0
  46. package/dist/src/signal/signal-messaging.d.ts +34 -0
  47. package/dist/src/signal/signal-messaging.d.ts.map +1 -0
  48. package/dist/src/signal/signal-messaging.js +6 -0
  49. package/dist/src/signal/signal-messaging.js.map +1 -0
  50. package/dist/src/swarm/connection.d.ts +69 -0
  51. package/dist/src/swarm/connection.d.ts.map +1 -0
  52. package/dist/src/swarm/connection.js +187 -0
  53. package/dist/src/swarm/connection.js.map +1 -0
  54. package/dist/src/swarm/index.d.ts +4 -0
  55. package/dist/src/swarm/index.d.ts.map +1 -0
  56. package/dist/src/swarm/index.js +23 -0
  57. package/dist/src/swarm/index.js.map +1 -0
  58. package/dist/src/swarm/swarm-mapper.d.ts +30 -0
  59. package/dist/src/swarm/swarm-mapper.d.ts.map +1 -0
  60. package/dist/src/swarm/swarm-mapper.js +90 -0
  61. package/dist/src/swarm/swarm-mapper.js.map +1 -0
  62. package/dist/src/swarm/swarm.d.ts +64 -0
  63. package/dist/src/swarm/swarm.d.ts.map +1 -0
  64. package/dist/src/swarm/swarm.js +276 -0
  65. package/dist/src/swarm/swarm.js.map +1 -0
  66. package/dist/src/swarm/swarm.test.d.ts +2 -0
  67. package/dist/src/swarm/swarm.test.d.ts.map +1 -0
  68. package/dist/src/swarm/swarm.test.js +145 -0
  69. package/dist/src/swarm/swarm.test.js.map +1 -0
  70. package/dist/src/testing/index.d.ts +2 -0
  71. package/dist/src/testing/index.d.ts.map +1 -0
  72. package/dist/src/testing/index.js +21 -0
  73. package/dist/src/testing/index.js.map +1 -0
  74. package/dist/src/testing/test-protocol.d.ts +59 -0
  75. package/dist/src/testing/test-protocol.d.ts.map +1 -0
  76. package/dist/src/testing/test-protocol.js +140 -0
  77. package/dist/src/testing/test-protocol.js.map +1 -0
  78. package/dist/src/topology/fully-connected-topology.d.ts +11 -0
  79. package/dist/src/topology/fully-connected-topology.d.ts.map +1 -0
  80. package/dist/src/topology/fully-connected-topology.js +34 -0
  81. package/dist/src/topology/fully-connected-topology.js.map +1 -0
  82. package/dist/src/topology/index.d.ts +5 -0
  83. package/dist/src/topology/index.d.ts.map +1 -0
  84. package/dist/src/topology/index.js +24 -0
  85. package/dist/src/topology/index.js.map +1 -0
  86. package/dist/src/topology/mmst-topology.d.ts +31 -0
  87. package/dist/src/topology/mmst-topology.d.ts.map +1 -0
  88. package/dist/src/topology/mmst-topology.js +73 -0
  89. package/dist/src/topology/mmst-topology.js.map +1 -0
  90. package/dist/src/topology/star-topology.d.ts +13 -0
  91. package/dist/src/topology/star-topology.d.ts.map +1 -0
  92. package/dist/src/topology/star-topology.js +60 -0
  93. package/dist/src/topology/star-topology.js.map +1 -0
  94. package/dist/src/topology/topology.d.ts +56 -0
  95. package/dist/src/topology/topology.d.ts.map +1 -0
  96. package/dist/src/topology/topology.js +6 -0
  97. package/dist/src/topology/topology.js.map +1 -0
  98. package/dist/src/transport/index.d.ts +6 -0
  99. package/dist/src/transport/index.d.ts.map +1 -0
  100. package/dist/src/transport/index.js +25 -0
  101. package/dist/src/transport/index.js.map +1 -0
  102. package/dist/src/transport/memory-transport.d.ts +32 -0
  103. package/dist/src/transport/memory-transport.d.ts.map +1 -0
  104. package/dist/src/transport/memory-transport.js +98 -0
  105. package/dist/src/transport/memory-transport.js.map +1 -0
  106. package/dist/src/transport/memory-transport.test.d.ts +2 -0
  107. package/dist/src/transport/memory-transport.test.d.ts.map +1 -0
  108. package/dist/src/transport/memory-transport.test.js +84 -0
  109. package/dist/src/transport/memory-transport.test.js.map +1 -0
  110. package/dist/src/transport/transport.d.ts +38 -0
  111. package/dist/src/transport/transport.d.ts.map +1 -0
  112. package/dist/src/transport/transport.js +6 -0
  113. package/dist/src/transport/transport.js.map +1 -0
  114. package/dist/src/transport/webrtc-transport-proxy.d.ts +48 -0
  115. package/dist/src/transport/webrtc-transport-proxy.d.ts.map +1 -0
  116. package/dist/src/transport/webrtc-transport-proxy.js +139 -0
  117. package/dist/src/transport/webrtc-transport-proxy.js.map +1 -0
  118. package/dist/src/transport/webrtc-transport-proxy.test.d.ts +2 -0
  119. package/dist/src/transport/webrtc-transport-proxy.test.d.ts.map +1 -0
  120. package/dist/src/transport/webrtc-transport-proxy.test.js +245 -0
  121. package/dist/src/transport/webrtc-transport-proxy.test.js.map +1 -0
  122. package/dist/src/transport/webrtc-transport-service.d.ts +15 -0
  123. package/dist/src/transport/webrtc-transport-service.d.ts.map +1 -0
  124. package/dist/src/transport/webrtc-transport-service.js +97 -0
  125. package/dist/src/transport/webrtc-transport-service.js.map +1 -0
  126. package/dist/src/transport/webrtc-transport.d.ts +34 -0
  127. package/dist/src/transport/webrtc-transport.d.ts.map +1 -0
  128. package/dist/src/transport/webrtc-transport.js +100 -0
  129. package/dist/src/transport/webrtc-transport.js.map +1 -0
  130. package/dist/src/transport/webrtc-transport.test.d.ts +2 -0
  131. package/dist/src/transport/webrtc-transport.test.d.ts.map +1 -0
  132. package/dist/src/transport/webrtc-transport.test.js +80 -0
  133. package/dist/src/transport/webrtc-transport.test.js.map +1 -0
  134. package/dist/src/transport/webrtc.d.ts +6 -0
  135. package/dist/src/transport/webrtc.d.ts.map +1 -0
  136. package/dist/src/transport/webrtc.js +17 -0
  137. package/dist/src/transport/webrtc.js.map +1 -0
  138. package/dist/src/transport/wrtc-simple-peer.test.d.ts +2 -0
  139. package/dist/src/transport/wrtc-simple-peer.test.d.ts.map +1 -0
  140. package/dist/src/transport/wrtc-simple-peer.test.js +24 -0
  141. package/dist/src/transport/wrtc-simple-peer.test.js.map +1 -0
  142. package/dist/src/types.d.ts +6 -0
  143. package/dist/src/types.d.ts.map +1 -0
  144. package/dist/src/types.js +6 -0
  145. package/dist/src/types.js.map +1 -0
  146. package/package.json +58 -0
  147. package/src/connection-log.ts +102 -0
  148. package/src/globals.d.ts +7 -0
  149. package/src/index.ts +12 -0
  150. package/src/network-manager.test.ts +764 -0
  151. package/src/network-manager.ts +204 -0
  152. package/src/presence.test.ts +78 -0
  153. package/src/protocol-factory.ts +83 -0
  154. package/src/signal/index.ts +7 -0
  155. package/src/signal/integration.test.ts +129 -0
  156. package/src/signal/message-router.test.ts +274 -0
  157. package/src/signal/message-router.ts +200 -0
  158. package/src/signal/signal-connection.ts +20 -0
  159. package/src/signal/signal-messaging.ts +38 -0
  160. package/src/swarm/connection.ts +206 -0
  161. package/src/swarm/index.ts +7 -0
  162. package/src/swarm/swarm-mapper.ts +120 -0
  163. package/src/swarm/swarm.test.ts +192 -0
  164. package/src/swarm/swarm.ts +328 -0
  165. package/src/testing/index.ts +5 -0
  166. package/src/testing/test-protocol.ts +160 -0
  167. package/src/topology/fully-connected-topology.ts +38 -0
  168. package/src/topology/index.ts +8 -0
  169. package/src/topology/mmst-topology.ts +105 -0
  170. package/src/topology/star-topology.ts +67 -0
  171. package/src/topology/topology.ts +69 -0
  172. package/src/transport/index.ts +9 -0
  173. package/src/transport/memory-transport.test.ts +110 -0
  174. package/src/transport/memory-transport.ts +128 -0
  175. package/src/transport/transport.ts +47 -0
  176. package/src/transport/webrtc-transport-proxy.test.ts +290 -0
  177. package/src/transport/webrtc-transport-proxy.ts +167 -0
  178. package/src/transport/webrtc-transport-service.ts +115 -0
  179. package/src/transport/webrtc-transport.test.ts +112 -0
  180. package/src/transport/webrtc-transport.ts +122 -0
  181. package/src/transport/webrtc.ts +15 -0
  182. package/src/transport/wrtc-simple-peer.test.ts +24 -0
  183. package/src/types.ts +10 -0
  184. package/src/typings.d.ts +7 -0
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.wrtc = void 0;
7
+ /**
8
+ * Will be null if WebRTC is not available in this environment.
9
+ */
10
+ let wrtc = null;
11
+ exports.wrtc = wrtc;
12
+ // Try to load WebRTC if available. This will fail in the shared-worker context.
13
+ try {
14
+ exports.wrtc = wrtc = require('@koush/wrtc');
15
+ }
16
+ catch (_a) { }
17
+ //# sourceMappingURL=webrtc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webrtc.js","sourceRoot":"","sources":["../../../src/transport/webrtc.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAEF;;GAEG;AACH,IAAI,IAAI,GAAQ,IAAI,CAAC;AAOZ,oBAAI;AALb,gFAAgF;AAChF,IAAI;IACF,eAAA,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC/B;AAAC,WAAM,GAAE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wrtc-simple-peer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrtc-simple-peer.test.d.ts","sourceRoot":"","sources":["../../../src/transport/wrtc-simple-peer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2020 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ // @dxos/mocha platform=nodejs
10
+ const wrtc_1 = __importDefault(require("@koush/wrtc"));
11
+ const simple_peer_1 = __importDefault(require("simple-peer"));
12
+ const async_1 = require("@dxos/async");
13
+ describe('node wrtc and simple-peer', function () {
14
+ // Simplest test that reproduces SIGABRT (mac) and SIGSEGV (linux) in wrtc.
15
+ it.skip('open and close', async function () {
16
+ const peer = new simple_peer_1.default({
17
+ initiator: true,
18
+ wrtc: wrtc_1.default
19
+ });
20
+ await (0, async_1.sleep)(1);
21
+ await peer.destroy();
22
+ }).timeout(3000);
23
+ });
24
+ //# sourceMappingURL=wrtc-simple-peer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrtc-simple-peer.test.js","sourceRoot":"","sources":["../../../src/transport/wrtc-simple-peer.test.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;AAEF,8BAA8B;AAE9B,uDAA+B;AAC/B,8DAAgD;AAEhD,uCAAoC;AAEpC,QAAQ,CAAC,2BAA2B,EAAE;IACpC,2EAA2E;IAC3E,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK;QAC7B,MAAM,IAAI,GAAG,IAAI,qBAAqB,CAAC;YACrC,SAAS,EAAE,IAAI;YACf,IAAI,EAAJ,cAAI;SACL,CAAC,CAAC;QAEH,MAAM,IAAA,aAAK,EAAC,CAAC,CAAC,CAAC;QAEf,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAK,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { PublicKey } from '@dxos/keys';
2
+ /**
3
+ * Swarm topic.
4
+ */
5
+ export declare type Topic = PublicKey;
6
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,oBAAY,KAAK,GAAG,SAAS,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2021 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@dxos/network-manager",
3
+ "version": "0.1.0",
4
+ "description": "Network Manager",
5
+ "homepage": "https://dxos.org",
6
+ "bugs": "https://github.com/dxos/dxos/issues",
7
+ "license": "MIT",
8
+ "author": "DXOS.org",
9
+ "main": "dist/src/index.js",
10
+ "browser": {
11
+ "node:assert": "assert"
12
+ },
13
+ "types": "dist/src/index.d.ts",
14
+ "files": [
15
+ "dist",
16
+ "src",
17
+ "README.md"
18
+ ],
19
+ "dependencies": {
20
+ "@dxos/async": "0.1.0",
21
+ "@dxos/codec-protobuf": "0.1.0",
22
+ "@dxos/credentials": "0.1.0",
23
+ "@dxos/crypto": "0.1.0",
24
+ "@dxos/debug": "0.1.0",
25
+ "@dxos/keys": "0.1.0",
26
+ "@dxos/log": "0.1.0",
27
+ "@dxos/mesh-protocol": "0.1.0",
28
+ "@dxos/messaging": "0.1.0",
29
+ "@dxos/protocol-plugin-presence": "0.1.0",
30
+ "@dxos/protocols": "0.1.0",
31
+ "@dxos/rpc": "0.1.0",
32
+ "@dxos/util": "0.1.0",
33
+ "@koush/wrtc": "^0.5.3",
34
+ "assert": "^2.0.0",
35
+ "isomorphic-ws": "^4.0.1",
36
+ "nanomessage-rpc": "^3.0.0",
37
+ "simple-peer": "9.11.0",
38
+ "ws": "^7.4.4",
39
+ "xor-distance": "^2.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "@dxos/signal": "0.1.0",
43
+ "@dxos/testutils": "0.1.0",
44
+ "@swc-node/register": "^1.5.4",
45
+ "@swc/core": "^1.3.9",
46
+ "@types/simple-peer": "9.11.3",
47
+ "@types/ws": "^7.4.0",
48
+ "earljs": "~0.1.10",
49
+ "fast-check": "~2.14.0",
50
+ "typescript": "^4.8.4"
51
+ },
52
+ "publishConfig": {
53
+ "access": "public"
54
+ },
55
+ "scripts": {
56
+ "check": "true"
57
+ }
58
+ }
@@ -0,0 +1,102 @@
1
+ //
2
+ // Copyright 2021 DXOS.org
3
+ //
4
+
5
+ import { Event } from '@dxos/async';
6
+ import { raise } from '@dxos/debug';
7
+ import { PublicKey } from '@dxos/keys';
8
+ import { SwarmInfo, ConnectionInfo } from '@dxos/protocols/proto/dxos/devtools/swarmLog';
9
+ import { ComplexMap } from '@dxos/util';
10
+
11
+ import { ConnectionState, Swarm } from './swarm';
12
+
13
+ export enum EventType {
14
+ CONNECTION_STATE_CHANGED = 'CONNECTION_STATE_CHANGED',
15
+ PROTOCOL_ERROR = 'PROTOCOL_ERROR',
16
+ PROTOCOL_EXTENSIONS_INITIALIZED = 'PROTOCOL_EXTENSIONS_INITIALIZED',
17
+ PROTOCOL_EXTENSIONS_HANDSHAKE = 'PROTOCOL_EXTENSIONS_HANDSHAKE',
18
+ PROTOCOL_HANDSHAKE = 'PROTOCOL_HANDSHAKE'
19
+ }
20
+
21
+ export class ConnectionLog {
22
+ /**
23
+ * SwarmId => info
24
+ */
25
+ private readonly _swarms = new ComplexMap<PublicKey, SwarmInfo>(PublicKey.hash);
26
+
27
+ readonly update = new Event();
28
+
29
+ getSwarmInfo(swarmId: PublicKey) {
30
+ return this._swarms.get(swarmId) ?? raise(new Error(`Swarm not found: ${swarmId}`));
31
+ }
32
+
33
+ get swarms(): SwarmInfo[] {
34
+ return Array.from(this._swarms.values());
35
+ }
36
+
37
+ swarmJoined(swarm: Swarm) {
38
+ const info: SwarmInfo = {
39
+ id: swarm.id,
40
+ topic: swarm.topic,
41
+ isActive: true,
42
+ label: swarm.label,
43
+ connections: []
44
+ };
45
+
46
+ this._swarms.set(swarm.id, info);
47
+ this.update.emit();
48
+
49
+ swarm.connectionAdded.on((connection) => {
50
+ const connectionInfo: ConnectionInfo = {
51
+ state: ConnectionState.INITIAL,
52
+ remotePeerId: connection.remoteId,
53
+ sessionId: connection.sessionId,
54
+ transport: connection.transport && Object.getPrototypeOf(connection.transport).constructor.name,
55
+ protocolExtensions: connection.protocol.extensionNames,
56
+ events: []
57
+ };
58
+ info.connections!.push(connectionInfo);
59
+ this.update.emit();
60
+
61
+ connection.stateChanged.on((state) => {
62
+ connectionInfo.state = state;
63
+ connectionInfo.events!.push({
64
+ type: EventType.CONNECTION_STATE_CHANGED,
65
+ newState: state
66
+ });
67
+ this.update.emit();
68
+ });
69
+
70
+ connection.protocol.error.on((error) => {
71
+ connectionInfo.events!.push({
72
+ type: EventType.PROTOCOL_ERROR,
73
+ error: error.stack ?? error.message
74
+ });
75
+ this.update.emit();
76
+ });
77
+ connection.protocol.extensionsInitialized.on(() => {
78
+ connectionInfo.events!.push({
79
+ type: EventType.PROTOCOL_EXTENSIONS_INITIALIZED
80
+ });
81
+ this.update.emit();
82
+ });
83
+ connection.protocol.extensionsHandshake.on(() => {
84
+ connectionInfo.events!.push({
85
+ type: EventType.PROTOCOL_EXTENSIONS_HANDSHAKE
86
+ });
87
+ this.update.emit();
88
+ });
89
+ connection.protocol.handshake.on(() => {
90
+ connectionInfo.events!.push({
91
+ type: EventType.PROTOCOL_HANDSHAKE
92
+ });
93
+ this.update.emit();
94
+ });
95
+ });
96
+ }
97
+
98
+ swarmLeft(swarm: Swarm) {
99
+ this.getSwarmInfo(swarm.id).isActive = false;
100
+ this.update.emit();
101
+ }
102
+ }
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2021 DXOS.org
3
+ //
4
+
5
+ declare const mochaExecutor: {
6
+ environment: import('@dxos/mocha').TestEnvironment;
7
+ };
package/src/index.ts ADDED
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2020 DXOS.org
3
+ //
4
+
5
+ export * from './network-manager';
6
+ export * from './protocol-factory';
7
+ export * from './swarm';
8
+ export * from './topology';
9
+ export * from './transport';
10
+ export * from './signal';
11
+ export * from './types';
12
+ export * from './connection-log';