@dxos/network-manager 0.6.13 → 0.6.14-main.1366248

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-XYSYUN63.mjs → chunk-UEVA7BFW.mjs} +1323 -1102
  2. package/dist/lib/browser/chunk-UEVA7BFW.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +9 -19
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +30 -37
  6. package/dist/lib/browser/testing/index.mjs.map +3 -3
  7. package/dist/lib/browser/transport/tcp/index.mjs +38 -0
  8. package/dist/lib/browser/transport/tcp/index.mjs.map +7 -0
  9. package/dist/lib/node/{chunk-4YAYC7WN.cjs → chunk-LK5D44SA.cjs} +1336 -1239
  10. package/dist/lib/node/chunk-LK5D44SA.cjs.map +7 -0
  11. package/dist/lib/node/index.cjs +27 -37
  12. package/dist/lib/node/index.cjs.map +2 -2
  13. package/dist/lib/node/meta.json +1 -1
  14. package/dist/lib/node/testing/index.cjs +34 -38
  15. package/dist/lib/node/testing/index.cjs.map +3 -3
  16. package/dist/lib/node/transport/tcp/index.cjs +191 -0
  17. package/dist/lib/node/transport/tcp/index.cjs.map +7 -0
  18. package/dist/lib/node-esm/chunk-Y5TD36KR.mjs +4413 -0
  19. package/dist/lib/node-esm/chunk-Y5TD36KR.mjs.map +7 -0
  20. package/dist/lib/node-esm/index.mjs +50 -0
  21. package/dist/lib/node-esm/index.mjs.map +7 -0
  22. package/dist/lib/node-esm/meta.json +1 -0
  23. package/dist/lib/node-esm/testing/index.mjs +285 -0
  24. package/dist/lib/node-esm/testing/index.mjs.map +7 -0
  25. package/dist/lib/node-esm/transport/tcp/index.mjs +159 -0
  26. package/dist/lib/node-esm/transport/tcp/index.mjs.map +7 -0
  27. package/dist/types/src/network-manager.d.ts +2 -1
  28. package/dist/types/src/network-manager.d.ts.map +1 -1
  29. package/dist/types/src/signal/ice.d.ts.map +1 -1
  30. package/dist/types/src/signal/integration.node.test.d.ts +2 -0
  31. package/dist/types/src/signal/integration.node.test.d.ts.map +1 -0
  32. package/dist/types/src/signal/swarm-messenger.node.test.d.ts +2 -0
  33. package/dist/types/src/signal/swarm-messenger.node.test.d.ts.map +1 -0
  34. package/dist/types/src/swarm/connection.d.ts.map +1 -1
  35. package/dist/types/src/swarm/peer.d.ts.map +1 -1
  36. package/dist/types/src/swarm/swarm.d.ts +2 -1
  37. package/dist/types/src/swarm/swarm.d.ts.map +1 -1
  38. package/dist/types/src/testing/test-builder.d.ts +2 -2
  39. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  40. package/dist/types/src/testing/test-wire-protocol.d.ts +1 -2
  41. package/dist/types/src/testing/test-wire-protocol.d.ts.map +1 -1
  42. package/dist/types/src/tests/basic-test-suite.d.ts.map +1 -1
  43. package/dist/types/src/tests/property-test-suite.d.ts.map +1 -1
  44. package/dist/types/src/tests/tcp-transport.node.test.d.ts +2 -0
  45. package/dist/types/src/tests/tcp-transport.node.test.d.ts.map +1 -0
  46. package/dist/types/src/tests/utils.d.ts.map +1 -1
  47. package/dist/types/src/transport/index.d.ts +1 -5
  48. package/dist/types/src/transport/index.d.ts.map +1 -1
  49. package/dist/types/src/transport/memory-transport.d.ts +2 -2
  50. package/dist/types/src/transport/memory-transport.d.ts.map +1 -1
  51. package/dist/types/src/transport/tcp/index.d.ts +2 -0
  52. package/dist/types/src/transport/tcp/index.d.ts.map +1 -0
  53. package/dist/types/src/transport/{tcp-transport.browser.d.ts → tcp/tcp-transport.browser.d.ts} +3 -3
  54. package/dist/types/src/transport/tcp/tcp-transport.browser.d.ts.map +1 -0
  55. package/dist/types/src/transport/{tcp-transport.d.ts → tcp/tcp-transport.d.ts} +3 -3
  56. package/dist/types/src/transport/tcp/tcp-transport.d.ts.map +1 -0
  57. package/dist/types/src/transport/transport.d.ts +7 -6
  58. package/dist/types/src/transport/transport.d.ts.map +1 -1
  59. package/dist/types/src/transport/webrtc/index.d.ts +4 -0
  60. package/dist/types/src/transport/webrtc/index.d.ts.map +1 -0
  61. package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts +14 -0
  62. package/dist/types/src/transport/webrtc/rtc-connection-factory.d.ts.map +1 -0
  63. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts +68 -0
  64. package/dist/types/src/transport/webrtc/rtc-peer-connection.d.ts.map +1 -0
  65. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts +33 -0
  66. package/dist/types/src/transport/webrtc/rtc-transport-channel.d.ts.map +1 -0
  67. package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts +2 -0
  68. package/dist/types/src/transport/webrtc/rtc-transport-channel.test.d.ts.map +1 -0
  69. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts +4 -0
  70. package/dist/types/src/transport/webrtc/rtc-transport-factory.d.ts.map +1 -0
  71. package/dist/types/src/transport/{simplepeer-transport-proxy.d.ts → webrtc/rtc-transport-proxy.d.ts} +10 -12
  72. package/dist/types/src/transport/webrtc/rtc-transport-proxy.d.ts.map +1 -0
  73. package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts +2 -0
  74. package/dist/types/src/transport/webrtc/rtc-transport-proxy.test.d.ts.map +1 -0
  75. package/dist/types/src/transport/{simplepeer-transport-service.d.ts → webrtc/rtc-transport-service.d.ts} +9 -7
  76. package/dist/types/src/transport/webrtc/rtc-transport-service.d.ts.map +1 -0
  77. package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts +4 -0
  78. package/dist/types/src/transport/webrtc/rtc-transport-stats.d.ts.map +1 -0
  79. package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts +2 -0
  80. package/dist/types/src/transport/webrtc/rtc-transport.test.d.ts.map +1 -0
  81. package/dist/types/src/transport/webrtc/test-utils.d.ts +5 -0
  82. package/dist/types/src/transport/webrtc/test-utils.d.ts.map +1 -0
  83. package/dist/types/src/transport/webrtc/utils.d.ts +3 -0
  84. package/dist/types/src/transport/webrtc/utils.d.ts.map +1 -0
  85. package/package.json +53 -36
  86. package/src/network-manager.ts +5 -13
  87. package/src/signal/ice.test.ts +1 -3
  88. package/src/signal/ice.ts +6 -1
  89. package/src/signal/{integration.test.ts → integration.node.test.ts} +9 -15
  90. package/src/signal/{swarm-messenger.test.ts → swarm-messenger.node.test.ts} +13 -23
  91. package/src/swarm/connection-limiter.test.ts +3 -6
  92. package/src/swarm/connection.test.ts +63 -38
  93. package/src/swarm/connection.ts +7 -7
  94. package/src/swarm/peer.ts +4 -1
  95. package/src/swarm/swarm.test.ts +10 -12
  96. package/src/swarm/swarm.ts +16 -3
  97. package/src/testing/test-builder.ts +14 -29
  98. package/src/testing/test-wire-protocol.ts +7 -8
  99. package/src/tests/basic-test-suite.ts +32 -31
  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 +10 -10
  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 +210 -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
@@ -0,0 +1,33 @@
1
+ import { Event as AsyncEvent } from '@dxos/async';
2
+ import { Resource } from '@dxos/context';
3
+ import { ErrorStream } from '@dxos/debug';
4
+ import { type Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
5
+ import { type RtcPeerConnection } from './rtc-peer-connection';
6
+ import { type Transport, type TransportOptions, type TransportStats } from '../transport';
7
+ /**
8
+ * A WebRTC connection data channel.
9
+ * Manages a WebRTC connection to a remote peer using an abstract signalling mechanism.
10
+ */
11
+ export declare class RtcTransportChannel extends Resource implements Transport {
12
+ private readonly _connection;
13
+ private readonly _options;
14
+ readonly closed: AsyncEvent<void>;
15
+ readonly connected: AsyncEvent<void>;
16
+ readonly errors: ErrorStream;
17
+ private _channel;
18
+ private _stream;
19
+ private _streamDataFlushedCallback;
20
+ private _isChannelCreationInProgress;
21
+ constructor(_connection: RtcPeerConnection, _options: TransportOptions);
22
+ get isRtcChannelCreationInProgress(): boolean;
23
+ onConnectionError(error: Error): void;
24
+ protected _open(): Promise<void>;
25
+ protected _close(): Promise<void>;
26
+ private _initChannel;
27
+ private _handleChannelWrite;
28
+ private _safeCloseChannel;
29
+ onSignal(signal: Signal): Promise<void>;
30
+ getDetails(): Promise<string>;
31
+ getStats(): Promise<TransportStats>;
32
+ }
33
+ //# sourceMappingURL=rtc-transport-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-channel.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-channel.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAO1F;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,QAAS,YAAW,SAAS;IAWlE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAX3B,SAAgB,MAAM,mBAAoB;IAC1C,SAAgB,SAAS,mBAAoB;IAC7C,SAAgB,MAAM,cAAqB;IAE3C,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,0BAA0B,CAA6C;IAC/E,OAAO,CAAC,4BAA4B,CAAS;gBAG1B,WAAW,EAAE,iBAAiB,EAC9B,QAAQ,EAAE,gBAAgB;IAK7C,IAAW,8BAA8B,YAExC;IAEM,iBAAiB,CAAC,KAAK,EAAE,KAAK;cAMZ,KAAK;cAuBL,MAAM;IAW/B,OAAO,CAAC,YAAY;YAsDN,mBAAmB;IA+BjC,OAAO,CAAC,iBAAiB;IAQlB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAI7B,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;CAG1C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rtc-transport-channel.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-channel.test.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-channel.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { IceProvider } from '../../signal';
2
+ import type { TransportFactory } from '../transport';
3
+ export declare const createRtcTransportFactory: (webrtcConfig?: RTCConfiguration, iceProvider?: IceProvider) => TransportFactory;
4
+ //# sourceMappingURL=rtc-transport-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-factory.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-factory.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,eAAO,MAAM,yBAAyB,kBACrB,gBAAgB,gBACjB,WAAW,KACxB,gBAeF,CAAC"}
@@ -1,37 +1,35 @@
1
1
  import { Event } from '@dxos/async';
2
+ import { Resource } from '@dxos/context';
2
3
  import { ErrorStream } from '@dxos/debug';
3
4
  import { type BridgeService } from '@dxos/protocols/proto/dxos/mesh/bridge';
4
5
  import { type Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
5
- import { type Transport, type TransportFactory, type TransportOptions, type TransportStats } from './transport';
6
- export type SimplePeerTransportProxyOptions = TransportOptions & {
6
+ import { type Transport, type TransportFactory, type TransportOptions, type TransportStats } from '../transport';
7
+ export type RtcTransportProxyOptions = TransportOptions & {
7
8
  bridgeService: BridgeService;
8
9
  };
9
- export declare class SimplePeerTransportProxy implements Transport {
10
+ export declare class RtcTransportProxy extends Resource implements Transport {
10
11
  private readonly _options;
11
12
  private readonly _proxyId;
12
- private readonly _ctx;
13
- private _timeoutCount;
14
13
  readonly closed: Event<void>;
15
14
  readonly connected: Event<void>;
16
15
  readonly errors: ErrorStream;
17
- private _closed;
18
16
  private _serviceStream;
19
- constructor(_options: SimplePeerTransportProxyOptions);
20
- get isOpen(): boolean;
21
- open(): Promise<void>;
22
- close(): Promise<void>;
17
+ constructor(_options: RtcTransportProxyOptions);
18
+ protected _open(): Promise<void>;
19
+ protected _close(): Promise<void>;
23
20
  onSignal(signal: Signal): Promise<void>;
24
21
  private _handleConnection;
25
22
  private _handleData;
26
23
  private _handleSignal;
27
24
  getDetails(): Promise<string>;
28
25
  getStats(): Promise<TransportStats>;
26
+ private _raiseIfOpen;
29
27
  /**
30
28
  * Called when underlying proxy service becomes unavailable.
31
29
  */
32
30
  forceClose(): void;
33
31
  }
34
- export declare class SimplePeerTransportProxyFactory implements TransportFactory {
32
+ export declare class RtcTransportProxyFactory implements TransportFactory {
35
33
  private _bridgeService;
36
34
  private _connections;
37
35
  /**
@@ -41,4 +39,4 @@ export declare class SimplePeerTransportProxyFactory implements TransportFactory
41
39
  setBridgeService(bridgeService: BridgeService | undefined): this;
42
40
  createTransport(options: TransportOptions): Transport;
43
41
  }
44
- //# sourceMappingURL=simplepeer-transport-proxy.d.ts.map
42
+ //# sourceMappingURL=rtc-transport-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-proxy.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-proxy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAgB,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK1C,OAAO,EAAoB,KAAK,aAAa,EAAmB,MAAM,wCAAwC,CAAC;AAC/G,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAGpE,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAMjH,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,GAAG;IACxD,aAAa,EAAE,aAAa,CAAC;CAC9B,CAAC;AAEF,qBAAa,iBAAkB,SAAQ,QAAS,YAAW,SAAS;IAStD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IARrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAE/C,QAAQ,CAAC,MAAM,cAAe;IAC9B,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,cAAc,CAAkC;gBAE3B,QAAQ,EAAE,wBAAwB;cAItC,KAAK;cAiFL,MAAM;IAiBzB,QAAQ,CAAC,MAAM,EAAE,MAAM;YAMf,iBAAiB;IAkB/B,OAAO,CAAC,WAAW;YASL,aAAa;IAWrB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAY7B,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAezC,OAAO,CAAC,YAAY;IAQpB;;OAEG;IACH,UAAU;CAIX;AAED,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAAgC;IAEpD;;;OAGG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAQhE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;CAOtD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rtc-transport-proxy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-proxy.test.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-proxy.test.ts"],"names":[],"mappings":""}
@@ -1,16 +1,18 @@
1
1
  import { Stream } from '@dxos/codec-protobuf';
2
2
  import { type BridgeService, type ConnectionRequest, type SignalRequest, type DataRequest, type BridgeEvent, type CloseRequest, type DetailsRequest, type DetailsResponse, type StatsRequest, type StatsResponse } from '@dxos/protocols/proto/dxos/mesh/bridge';
3
- import { type IceProvider } from '../signal';
4
- export declare class SimplePeerTransportService implements BridgeService {
5
- private readonly _webrtcConfig?;
6
- private readonly _iceProvider?;
7
- private readonly transports;
8
- constructor(_webrtcConfig?: RTCConfiguration | undefined, _iceProvider?: IceProvider | undefined);
3
+ import { type IceProvider } from '../../signal';
4
+ import { type TransportFactory } from '../transport';
5
+ export declare class RtcTransportService implements BridgeService {
6
+ private readonly _transportFactory;
7
+ private readonly _openTransports;
8
+ constructor(webrtcConfig?: RTCConfiguration, iceProvider?: IceProvider, _transportFactory?: TransportFactory);
9
+ hasOpenTransports(): boolean;
9
10
  open(request: ConnectionRequest): Stream<BridgeEvent>;
10
11
  sendSignal({ proxyId, signal }: SignalRequest): Promise<void>;
11
12
  getDetails({ proxyId }: DetailsRequest): Promise<DetailsResponse>;
12
13
  getStats({ proxyId }: StatsRequest): Promise<StatsResponse>;
13
14
  sendData({ proxyId, payload }: DataRequest): Promise<void>;
14
15
  close({ proxyId }: CloseRequest): Promise<void>;
16
+ private _safeCloseTransport;
15
17
  }
16
- //# sourceMappingURL=simplepeer-transport-service.d.ts.map
18
+ //# sourceMappingURL=rtc-transport-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-service.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAI9C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,WAAW,EAEhB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,wCAAwC,CAAC;AAIhD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AASrE,qBAAa,mBAAoB,YAAW,aAAa;IAMrD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IALpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6D;gBAG3F,YAAY,CAAC,EAAE,gBAAgB,EAC/B,WAAW,CAAC,EAAE,WAAW,EACR,iBAAiB,GAAE,gBAAuE;IAGtG,iBAAiB;IAIxB,IAAI,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC;IAqE/C,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7D,UAAU,CAAC,EAAE,OAAO,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAOjE,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAO3D,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1D,KAAK,CAAC,EAAE,OAAO,EAAE,EAAE,YAAY;YAUvB,mBAAmB;CAmBlC"}
@@ -0,0 +1,4 @@
1
+ import type { TransportStats } from '../transport';
2
+ export declare const describeSelectedRemoteCandidate: (connection?: RTCPeerConnection) => Promise<string>;
3
+ export declare const createRtcTransportStats: (connection: RTCPeerConnection | undefined, topic: string) => Promise<TransportStats>;
4
+ //# sourceMappingURL=rtc-transport-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport-stats.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport-stats.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,eAAO,MAAM,+BAA+B,gBAAuB,iBAAiB,KAAG,OAAO,CAAC,MAAM,CAYpG,CAAC;AAEF,eAAO,MAAM,uBAAuB,eACtB,iBAAiB,GAAG,SAAS,SAClC,MAAM,KACZ,OAAO,CAAC,cAAc,CAmBxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rtc-transport.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rtc-transport.test.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/rtc-transport.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { type Transport } from '../transport';
2
+ export declare const handleChannelErrors: (channel: Transport) => {
3
+ expectErrorRaised: () => Promise<void>;
4
+ };
5
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/test-utils.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,eAAO,MAAM,mBAAmB,YAAa,SAAS;;CAWrD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const chooseInitiatorPeer: (peer1Key: string, peer2Key: string) => string;
2
+ export declare const areSdpEqual: (sdp1: string, sdp2: string) => boolean;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../src/transport/webrtc/utils.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB,aAAc,MAAM,YAAY,MAAM,WAAgD,CAAC;AAEvH,eAAO,MAAM,WAAW,SAAU,MAAM,QAAQ,MAAM,YAOrD,CAAC"}
package/package.json CHANGED
@@ -1,36 +1,59 @@
1
1
  {
2
2
  "name": "@dxos/network-manager",
3
- "version": "0.6.13",
3
+ "version": "0.6.14-main.1366248",
4
4
  "description": "Network Manager",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
7
  "license": "MIT",
8
8
  "author": "DXOS.org",
9
+ "sideEffects": true,
10
+ "imports": {
11
+ "#node-datachannel": {
12
+ "browser": "./module-stub.js",
13
+ "workerd": "./module-stub.js",
14
+ "default": "node-datachannel"
15
+ },
16
+ "#node-datachannel/*": {
17
+ "browser": "./module-stub.js",
18
+ "workerd": "./module-stub.js",
19
+ "default": "node-datachannel/*"
20
+ },
21
+ "#tcp-transport": {
22
+ "browser": "./dist/lib/browser/transport/tcp/index.mjs",
23
+ "node": "./dist/lib/node/transport/tcp/index.cjs",
24
+ "import": "./dist/lib/browser/transport/tcp/index.mjs",
25
+ "require": "./dist/lib/node/transport/tcp/index.cjs",
26
+ "types": "./dist/types/src/transport/tcp/index.d.ts"
27
+ }
28
+ },
9
29
  "exports": {
10
30
  ".": {
31
+ "types": "./dist/types/src/index.d.ts",
11
32
  "browser": "./dist/lib/browser/index.mjs",
12
- "node": {
13
- "default": "./dist/lib/node/index.cjs"
14
- },
15
- "types": "./dist/types/src/index.d.ts"
33
+ "node": "./dist/lib/node-esm/index.mjs"
16
34
  },
17
35
  "./testing": {
36
+ "types": "./dist/types/src/testing/index.d.ts",
18
37
  "browser": "./dist/lib/browser/testing/index.mjs",
19
- "node": {
20
- "default": "./dist/lib/node/testing/index.cjs"
21
- },
22
- "types": "./dist/types/src/testing/index.d.ts"
38
+ "node": "./dist/lib/node-esm/testing/index.mjs"
39
+ },
40
+ "./transport/tcp": {
41
+ "types": "./dist/types/src/transport/tcp/index.d.ts",
42
+ "browser": "./dist/lib/browser/transport/tcp/index.mjs",
43
+ "node": "./dist/lib/node-esm/transport/tcp/index.mjs"
23
44
  }
24
45
  },
25
46
  "browser": {
26
- "./src/transport/tcp-transport.ts": "./src/transport/tcp-transport.browser.ts",
27
- "./src/transport/datachannel/index.ts": "./src/transport/datachannel/index.browser.ts"
47
+ "./src/transport/tcp/tcp-transport.ts": "./src/transport/tcp/tcp-transport.browser.ts"
28
48
  },
29
49
  "types": "dist/types/src/index.d.ts",
30
50
  "typesVersions": {
31
51
  "*": {
32
52
  "testing": [
33
53
  "dist/types/src/testing/index.d.ts"
54
+ ],
55
+ "transport/tcp": [
56
+ "dist/types/src/transport/tcp/index.d.ts"
34
57
  ]
35
58
  }
36
59
  },
@@ -41,43 +64,37 @@
41
64
  "src"
42
65
  ],
43
66
  "dependencies": {
44
- "@koush/wrtc": "^0.5.3",
45
67
  "isomorphic-ws": "^5.0.0",
46
68
  "nanomessage-rpc": "^3.0.0",
47
- "node-datachannel": "^0.5.5",
69
+ "node-datachannel": "^0.9.2",
48
70
  "p-defer": "^3.0.0",
49
- "simple-peer": "9.11.1",
50
- "stream": "^0.0.2",
71
+ "stream": "^0.0.3",
51
72
  "tiny-invariant": "^1.3.1",
52
73
  "ws": "^8.14.2",
53
74
  "xor-distance": "^2.0.0",
54
- "@dxos/codec-protobuf": "0.6.13",
55
- "@dxos/async": "0.6.13",
56
- "@dxos/config": "0.6.13",
57
- "@dxos/context": "0.6.13",
58
- "@dxos/crypto": "0.6.13",
59
- "@dxos/credentials": "0.6.13",
60
- "@dxos/debug": "0.6.13",
61
- "@dxos/edge-client": "0.6.13",
62
- "@dxos/keys": "0.6.13",
63
- "@dxos/invariant": "0.6.13",
64
- "@dxos/log": "0.6.13",
65
- "@dxos/messaging": "0.6.13",
66
- "@dxos/node-std": "0.6.13",
67
- "@dxos/rpc": "0.6.13",
68
- "@dxos/util": "0.6.13",
69
- "@dxos/protocols": "0.6.13",
70
- "@dxos/teleport": "0.6.13"
75
+ "@dxos/async": "0.6.14-main.1366248",
76
+ "@dxos/codec-protobuf": "0.6.14-main.1366248",
77
+ "@dxos/context": "0.6.14-main.1366248",
78
+ "@dxos/debug": "0.6.14-main.1366248",
79
+ "@dxos/invariant": "0.6.14-main.1366248",
80
+ "@dxos/keys": "0.6.14-main.1366248",
81
+ "@dxos/log": "0.6.14-main.1366248",
82
+ "@dxos/messaging": "0.6.14-main.1366248",
83
+ "@dxos/node-std": "0.6.14-main.1366248",
84
+ "@dxos/protocols": "0.6.14-main.1366248",
85
+ "@dxos/rpc": "0.6.14-main.1366248",
86
+ "@dxos/teleport": "0.6.14-main.1366248",
87
+ "@dxos/tracing": "0.6.14-main.1366248",
88
+ "@dxos/util": "0.6.14-main.1366248"
71
89
  },
72
90
  "devDependencies": {
73
91
  "@swc-node/register": "1.9.1",
74
- "@types/simple-peer": "9.11.3",
75
92
  "@types/ws": "^7.4.0",
76
- "earljs": "~0.1.10",
77
93
  "fast-check": "^3.19.0",
78
94
  "fetch-mock": "^11.0.0",
79
- "typescript": "^5.5.4",
80
- "@dxos/signal": "0.6.13"
95
+ "@dxos/edge-client": "0.6.14-main.1366248",
96
+ "@dxos/keyring": "0.6.14-main.1366248",
97
+ "@dxos/signal": "0.6.14-main.1366248"
81
98
  },
82
99
  "publishConfig": {
83
100
  "access": "public"
@@ -152,31 +152,23 @@ export class SwarmNetworkManager {
152
152
  */
153
153
  @synchronized
154
154
  async joinSwarm({
155
- topic,
156
- peerInfo,
155
+ topic, //
157
156
  topology,
158
157
  protocolProvider: protocol,
159
158
  label,
160
159
  }: SwarmOptions): Promise<SwarmConnection> {
161
160
  invariant(PublicKey.isPublicKey(topic));
162
- if (!peerInfo) {
163
- peerInfo = {
164
- peerKey: this._peerInfo?.peerKey ?? PublicKey.random().toHex(),
165
- identityKey: this._peerInfo?.identityKey ?? PublicKey.random().toHex(),
166
- };
167
- }
168
- invariant(PublicKey.from(peerInfo.peerKey));
169
- invariant(PublicKey.from(peerInfo.identityKey!));
170
161
  invariant(topology);
162
+ invariant(this._peerInfo);
171
163
  invariant(typeof protocol === 'function');
172
164
  if (this._swarms.has(topic)) {
173
165
  throw new Error(`Already connected to swarm: ${PublicKey.from(topic)}`);
174
166
  }
175
167
 
176
- log('joining', { topic: PublicKey.from(topic), peerInfo, topology: topology.toString() }); // TODO(burdon): Log peerId.
168
+ log('joining', { topic: PublicKey.from(topic), peerInfo: this._peerInfo, topology: topology.toString() }); // TODO(burdon): Log peerId.
177
169
  const swarm = new Swarm(
178
170
  topic,
179
- peerInfo,
171
+ this._peerInfo,
180
172
  topology,
181
173
  protocol,
182
174
  this._messenger,
@@ -195,7 +187,7 @@ export class SwarmNetworkManager {
195
187
  // Open before joining.
196
188
  await swarm.open();
197
189
 
198
- this._signalConnection.join({ topic, peer: peerInfo }).catch((error) => log.catch(error));
190
+ this._signalConnection.join({ topic, peer: this._peerInfo }).catch((error) => log.catch(error));
199
191
 
200
192
  this.topicsUpdated.emit();
201
193
  this._connectionLog?.joinedSwarm(swarm);
@@ -2,10 +2,8 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { expect } from 'chai';
6
5
  import fetchMock from 'fetch-mock';
7
-
8
- import { test, describe } from '@dxos/test';
6
+ import { afterEach, test, expect, describe } from 'vitest';
9
7
 
10
8
  import { createIceProvider } from './ice';
11
9
 
package/src/signal/ice.ts CHANGED
@@ -24,7 +24,12 @@ export const createIceProvider = (iceProviders: Runtime.Services.IceProvider[]):
24
24
  iceProviders.map(({ urls }) =>
25
25
  asyncTimeout(fetch(urls, { method: 'GET' }), 10_000)
26
26
  .then((response) => response.json())
27
- .catch((err) => log.error('Failed to fetch ICE servers from provider', { urls, err })),
27
+ .catch((err) => {
28
+ const isDev = typeof window !== 'undefined' && window.location.href.includes('localhost');
29
+ if (!isDev) {
30
+ log.error('Failed to fetch ICE servers from provider', { urls, err });
31
+ }
32
+ }),
28
33
  ),
29
34
  )
30
35
  )
@@ -2,15 +2,11 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- // @dxos/test platform=nodejs
6
-
7
- import { expect } from 'earljs';
8
- import waitForExpect from 'wait-for-expect';
5
+ import { afterAll, onTestFinished, beforeAll, describe, expect, test } from 'vitest';
9
6
 
10
7
  import { PublicKey } from '@dxos/keys';
11
8
  import { Messenger, type PeerInfo, WebsocketSignalManager } from '@dxos/messaging';
12
9
  import { runTestSignalServer, type SignalServerRunner } from '@dxos/signal';
13
- import { afterAll, afterTest, beforeAll, describe, test } from '@dxos/test';
14
10
 
15
11
  import { type SignalMessage } from './signal-messenger';
16
12
  import { SwarmMessenger } from './swarm-messenger';
@@ -35,13 +31,15 @@ describe('Signal Integration Test', () => {
35
31
  }) => {
36
32
  const signalManager = new WebsocketSignalManager([{ server: broker.url() }]);
37
33
  await signalManager.open();
38
- afterTest(() => signalManager.close());
34
+ onTestFinished(async () => {
35
+ await signalManager.close();
36
+ });
39
37
 
40
38
  const messenger = new Messenger({
41
39
  signalManager,
42
40
  });
43
41
  messenger.open();
44
- afterTest(() => messenger.close());
42
+ onTestFinished(() => messenger.close());
45
43
  await messenger.listen({
46
44
  peer,
47
45
  onMessage: async (message) => await messageRouter.receiveMessage(message),
@@ -96,7 +94,7 @@ describe('Signal Integration Test', () => {
96
94
  offer: {},
97
95
  },
98
96
  }),
99
- ).toBeAnObjectWith({ accept: true });
97
+ ).toEqual(expect.objectContaining({ accept: true }));
100
98
 
101
99
  expect(
102
100
  await peerNetworking2.messageRouter.offer({
@@ -108,7 +106,7 @@ describe('Signal Integration Test', () => {
108
106
  offer: {},
109
107
  },
110
108
  }),
111
- ).toBeAnObjectWith({ accept: true });
109
+ ).toEqual(expect.objectContaining({ accept: true }));
112
110
 
113
111
  {
114
112
  const message: SignalMessage = {
@@ -123,9 +121,7 @@ describe('Signal Integration Test', () => {
123
121
  };
124
122
  await peerNetworking1.messageRouter.signal(message);
125
123
 
126
- await waitForExpect(() => {
127
- expect(peerNetworking2.receivedSignals[0]).toBeAnObjectWith(message);
128
- });
124
+ await expect.poll(() => peerNetworking2.receivedSignals[0]).toEqual(expect.objectContaining(message));
129
125
  }
130
126
 
131
127
  {
@@ -141,9 +137,7 @@ describe('Signal Integration Test', () => {
141
137
  };
142
138
  await peerNetworking2.messageRouter.signal(message);
143
139
 
144
- await waitForExpect(() => {
145
- expect(peerNetworking1.receivedSignals[0]).toBeAnObjectWith(message);
146
- });
140
+ await expect.poll(() => peerNetworking1.receivedSignals[0]).toEqual(expect.objectContaining(message));
147
141
  }
148
142
  });
149
143
  });
@@ -2,22 +2,18 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- // @dxos/test platform=nodejs
6
-
7
- import { expect } from 'earljs';
8
- import waitForExpect from 'wait-for-expect';
5
+ import { afterAll, beforeAll, beforeEach, describe, expect, test, onTestFinished } from 'vitest';
9
6
 
10
7
  import { type Awaited } from '@dxos/async';
11
8
  import { PublicKey } from '@dxos/keys';
12
9
  import { Messenger, WebsocketSignalManager } from '@dxos/messaging';
13
10
  import { type Answer } from '@dxos/protocols/proto/dxos/mesh/swarm';
14
11
  import { runTestSignalServer } from '@dxos/signal';
15
- import { afterAll, beforeAll, describe, test, afterTest } from '@dxos/test';
16
12
 
17
13
  import { type OfferMessage, type SignalMessage } from './signal-messenger';
18
14
  import { SwarmMessenger } from './swarm-messenger';
19
15
 
20
- describe('SwarmMessenger', () => {
16
+ describe('SwarmMessenger', { timeout: 7000 }, () => {
21
17
  let topic: PublicKey;
22
18
 
23
19
  let broker1: Awaited<ReturnType<typeof runTestSignalServer>>;
@@ -48,7 +44,9 @@ describe('SwarmMessenger', () => {
48
44
  const peer = { peerKey: PublicKey.random().toHex() };
49
45
  const signalManager = new WebsocketSignalManager([{ server: signalApiUrl }]);
50
46
  await signalManager.open();
51
- afterTest(() => signalManager.close());
47
+ onTestFinished(async () => {
48
+ await signalManager.close();
49
+ });
52
50
 
53
51
  const messenger = new Messenger({ signalManager });
54
52
  await messenger.listen({
@@ -106,10 +104,8 @@ describe('SwarmMessenger', () => {
106
104
  };
107
105
  await router2.signal(msg);
108
106
 
109
- await waitForExpect(() => {
110
- expect(received[0]).toBeAnObjectWith(msg);
111
- }, 4_000);
112
- }).timeout(5_000);
107
+ await expect.poll(() => received[0]).toEqual(expect.objectContaining(msg));
108
+ });
113
109
 
114
110
  test('offer/answer', async () => {
115
111
  const {
@@ -139,7 +135,7 @@ describe('SwarmMessenger', () => {
139
135
  data: { offer: {} },
140
136
  });
141
137
  expect(answer.accept).toEqual(true);
142
- }).timeout(5_000);
138
+ });
143
139
 
144
140
  test('signaling between 3 clients', async () => {
145
141
  const received1: SignalMessage[] = [];
@@ -198,9 +194,7 @@ describe('SwarmMessenger', () => {
198
194
  data: { signal: { payload: { msg: '1to3' } }, signalBatch: undefined },
199
195
  };
200
196
  await router1.signal(msg1to3);
201
- await waitForExpect(() => {
202
- expect(received3[0]).toBeAnObjectWith(msg1to3);
203
- }, 4_000);
197
+ await expect.poll(() => received3[0]).toEqual(expect.objectContaining(msg1to3));
204
198
 
205
199
  // sending signal from peer2 to peer3.
206
200
  const msg2to3: SignalMessage = {
@@ -211,9 +205,7 @@ describe('SwarmMessenger', () => {
211
205
  data: { signal: { payload: { msg: '2to3' } }, signalBatch: undefined },
212
206
  };
213
207
  await router2.signal(msg2to3);
214
- await waitForExpect(() => {
215
- expect(received3[1]).toBeAnObjectWith(msg2to3);
216
- }, 4_000);
208
+ await expect.poll(() => received3[1]).toEqual(expect.objectContaining(msg2to3));
217
209
 
218
210
  // sending signal from peer3 to peer1.
219
211
  const msg3to1: SignalMessage = {
@@ -224,10 +216,8 @@ describe('SwarmMessenger', () => {
224
216
  data: { signal: { payload: { msg: '3to1' } }, signalBatch: undefined },
225
217
  };
226
218
  await router3.signal(msg3to1);
227
- await waitForExpect(() => {
228
- expect(received1[0]).toBeAnObjectWith(msg3to1);
229
- }, 4_000);
230
- }).timeout(5_000);
219
+ await expect.poll(() => received1[0]).toEqual(expect.objectContaining(msg3to1));
220
+ });
231
221
 
232
222
  test('two offers', async () => {
233
223
  const {
@@ -273,5 +263,5 @@ describe('SwarmMessenger', () => {
273
263
  data: { offer: {} },
274
264
  });
275
265
  expect(answer2.accept).toEqual(true);
276
- }).timeout(5_000);
266
+ });
277
267
  });
@@ -1,17 +1,14 @@
1
1
  //
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
- import chai, { expect } from 'chai';
5
- import chaiAsPromised from 'chai-as-promised';
4
+
5
+ import { describe, expect, test } from 'vitest';
6
6
 
7
7
  import { asyncTimeout } from '@dxos/async';
8
8
  import { PublicKey } from '@dxos/keys';
9
- import { describe, test } from '@dxos/test';
10
9
 
11
10
  import { ConnectionLimiter } from './connection-limiter';
12
11
 
13
- chai.use(chaiAsPromised);
14
-
15
12
  describe('ConnectionLimiter', () => {
16
13
  function* setupPeers(
17
14
  limiter: ConnectionLimiter,
@@ -37,7 +34,7 @@ describe('ConnectionLimiter', () => {
37
34
  test('rejects if done is called', async () => {
38
35
  const limiter = new ConnectionLimiter({ maxConcurrentInitConnections: 1 });
39
36
  const [first] = setupPeers(limiter);
40
- const testPromise = expect(first.connecting()).to.be.rejected;
37
+ const testPromise = expect(first.connecting()).rejects.toBeInstanceOf(Error);
41
38
  first.doneConnecting();
42
39
  await testPromise;
43
40
  });