@dxos/network-manager 0.1.56-main.c19b7cd → 0.1.56-main.c277f68

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 (42) hide show
  1. package/dist/lib/browser/{chunk-FC6CWDES.mjs → chunk-WQ3YXGWP.mjs} +132 -141
  2. package/dist/lib/browser/chunk-WQ3YXGWP.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +1 -1
  4. package/dist/lib/browser/meta.json +1 -1
  5. package/dist/lib/browser/testing/index.mjs +23 -16
  6. package/dist/lib/browser/testing/index.mjs.map +3 -3
  7. package/dist/lib/node/index.cjs +130 -139
  8. package/dist/lib/node/index.cjs.map +3 -3
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/testing/index.cjs +152 -154
  11. package/dist/lib/node/testing/index.cjs.map +3 -3
  12. package/dist/types/src/connection-log.d.ts.map +1 -1
  13. package/dist/types/src/signal/swarm-messenger.d.ts +1 -1
  14. package/dist/types/src/signal/swarm-messenger.d.ts.map +1 -1
  15. package/dist/types/src/swarm/connection-limiter.d.ts +1 -1
  16. package/dist/types/src/swarm/connection-limiter.d.ts.map +1 -1
  17. package/dist/types/src/swarm/connection.d.ts +2 -1
  18. package/dist/types/src/swarm/connection.d.ts.map +1 -1
  19. package/dist/types/src/swarm/peer.d.ts +1 -1
  20. package/dist/types/src/swarm/peer.d.ts.map +1 -1
  21. package/dist/types/src/swarm/swarm.d.ts.map +1 -1
  22. package/dist/types/src/testing/test-builder.d.ts +4 -3
  23. package/dist/types/src/testing/test-builder.d.ts.map +1 -1
  24. package/dist/types/src/testing/test-wire-protocol.d.ts +13 -2
  25. package/dist/types/src/testing/test-wire-protocol.d.ts.map +1 -1
  26. package/dist/types/src/transport/webrtc-transport-proxy.d.ts +1 -1
  27. package/dist/types/src/transport/webrtc-transport-proxy.d.ts.map +1 -1
  28. package/dist/types/src/transport/webrtc-transport.d.ts +3 -3
  29. package/dist/types/src/transport/webrtc-transport.d.ts.map +1 -1
  30. package/package.json +18 -18
  31. package/src/connection-log.ts +2 -0
  32. package/src/signal/swarm-messenger.ts +2 -2
  33. package/src/swarm/connection-limiter.ts +1 -1
  34. package/src/swarm/connection.ts +12 -3
  35. package/src/swarm/peer.ts +8 -6
  36. package/src/swarm/swarm.ts +5 -5
  37. package/src/testing/test-builder.ts +9 -5
  38. package/src/testing/test-wire-protocol.ts +22 -2
  39. package/src/tests/memory-transport.test.ts +1 -1
  40. package/src/transport/webrtc-transport-proxy.ts +4 -4
  41. package/src/transport/webrtc-transport.ts +20 -6
  42. package/dist/lib/browser/chunk-FC6CWDES.mjs.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"connection-log.d.ts","sourceRoot":"","sources":["../../../src/connection-log.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAkB,MAAM,2CAA2C,CAAC;AAItF,OAAO,EAAmB,KAAK,EAAE,MAAM,SAAS,CAAC;AAGjD,oBAAY,SAAS;IACnB,wBAAwB,6BAA6B;IACrD,cAAc,mBAAmB;IACjC,+BAA+B,oCAAoC;IACnE,6BAA6B,kCAAkC;IAC/D,kBAAkB,uBAAuB;CAC1C;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAEhF,QAAQ,CAAC,MAAM,cAAe;IAE9B,YAAY,CAAC,OAAO,EAAE,SAAS;IAI/B,IAAI,MAAM,IAAI,SAAS,EAAE,CAExB;IAED,WAAW,CAAC,KAAK,EAAE,KAAK;IAkExB,SAAS,CAAC,KAAK,EAAE,KAAK;CAIvB"}
1
+ {"version":3,"file":"connection-log.d.ts","sourceRoot":"","sources":["../../../src/connection-log.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,SAAS,EAAkB,MAAM,2CAA2C,CAAC;AAItF,OAAO,EAAmB,KAAK,EAAE,MAAM,SAAS,CAAC;AAGjD,oBAAY,SAAS;IACnB,wBAAwB,6BAA6B;IACrD,cAAc,mBAAmB;IACjC,+BAA+B,oCAAoC;IACnE,6BAA6B,kCAAkC;IAC/D,kBAAkB,uBAAuB;CAC1C;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwD;IAEhF,QAAQ,CAAC,MAAM,cAAe;IAE9B,YAAY,CAAC,OAAO,EAAE,SAAS;IAI/B,IAAI,MAAM,IAAI,SAAS,EAAE,CAExB;IAED,WAAW,CAAC,KAAK,EAAE,KAAK;IAoExB,SAAS,CAAC,KAAK,EAAE,KAAK;CAIvB"}
@@ -17,8 +17,8 @@ export type SwarmMessengerOptions = {
17
17
  */
18
18
  export declare class SwarmMessenger implements SignalMessenger {
19
19
  private readonly _ctx;
20
- private readonly _onSignal;
21
20
  private readonly _sendMessage;
21
+ private readonly _onSignal;
22
22
  private readonly _onOffer;
23
23
  private readonly _topic;
24
24
  private readonly _offerRecords;
@@ -1 +1 @@
1
- {"version":3,"file":"swarm-messenger.d.ts","sourceRoot":"","sources":["../../../../src/signal/swarm-messenger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,MAAM,EAAgB,MAAM,uCAAuC,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMlF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAIF;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoF;IAEjH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4E;gBAE9F,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,qBAAqB;IAOtE,cAAc,CAAC,EACnB,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE;QACD,MAAM,EAAE,SAAS,CAAC;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BX,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;YAerC,oBAAoB;YA0BpB,eAAe;YAWf,YAAY;YAiCZ,aAAa;CAuB5B"}
1
+ {"version":3,"file":"swarm-messenger.d.ts","sourceRoot":"","sources":["../../../../src/signal/swarm-messenger.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAG3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,EAAE,MAAM,EAAgB,MAAM,uCAAuC,CAAC;AAG7E,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAMlF,MAAM,MAAM,qBAAqB,GAAG;IAClC,WAAW,EAAE,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,SAAS,CAAC;QAAC,SAAS,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpD,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC;AAIF;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoF;IACjH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4C;IACtE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6C;IACtE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4E;gBAE9F,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,qBAAqB;IAOtE,cAAc,CAAC,EACnB,MAAM,EACN,SAAS,EACT,OAAO,GACR,EAAE;QACD,MAAM,EAAE,SAAS,CAAC;QAClB,SAAS,EAAE,SAAS,CAAC;QACrB,OAAO,EAAE,GAAG,CAAC;KACd,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BX,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAS7C,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;YAerC,oBAAoB;YA0BpB,eAAe;YAWf,YAAY;YAiCZ,aAAa;CAuB5B"}
@@ -1,6 +1,6 @@
1
1
  import { DeferredTask } from '@dxos/async';
2
2
  import { PublicKey } from '@dxos/keys';
3
- export declare const MAX_CONCURRENT_INITIATING_CONNECTIONS = 3;
3
+ export declare const MAX_CONCURRENT_INITIATING_CONNECTIONS = 10;
4
4
  export type ConnectionLimiterOptions = {
5
5
  maxConcurrentInitConnections?: number;
6
6
  };
@@ -1 +1 @@
1
- {"version":3,"file":"connection-limiter.d.ts","sourceRoot":"","sources":["../../../../src/swarm/connection-limiter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,MAAM,MAAM,wBAAwB,GAAG;IACrC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC/C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE/B;IAEF,sBAAsB,eAMnB;gBAES,EAAE,4BAAoE,EAAE,GAAE,wBAA6B;IAInH;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,SAAS;CASpC"}
1
+ {"version":3,"file":"connection-limiter.d.ts","sourceRoot":"","sources":["../../../../src/swarm/connection-limiter.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,eAAO,MAAM,qCAAqC,KAAK,CAAC;AAExD,MAAM,MAAM,wBAAwB,GAAG;IACrC,4BAA4B,CAAC,EAAE,MAAM,CAAC;CACvC,CAAC;AAEF;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC/C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAE/B;IAEF,sBAAsB,eAMnB;gBAES,EAAE,4BAAoE,EAAE,GAAE,wBAA6B;IAInH;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAarD;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,SAAS;CASpC"}
@@ -46,6 +46,7 @@ export declare class Connection {
46
46
  private readonly _ctx;
47
47
  private _state;
48
48
  private _transport;
49
+ closeReason?: string;
49
50
  private _incomingSignalBuffer;
50
51
  private _outgoingSignalBuffer;
51
52
  readonly stateChanged: Event<ConnectionState>;
@@ -62,7 +63,7 @@ export declare class Connection {
62
63
  * Create an underlying transport and prepares it for the connection.
63
64
  */
64
65
  openConnection(): Promise<void>;
65
- close(): Promise<void>;
66
+ close(err?: Error): Promise<void>;
66
67
  private _sendSignal;
67
68
  private _flushSignalBuffer;
68
69
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/swarm/connection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,EAAuB,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAahD;;GAEG;AACH,oBAAY,eAAe;IACzB;;;OAGG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,UAAU,eAAe;IAEzB;;OAEG;IACH,SAAS,cAAc;IAEvB;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,qBAAa,UAAU;aAqBH,KAAK,EAAE,SAAS;aAChB,KAAK,EAAE,SAAS;aAChB,QAAQ,EAAE,SAAS;aACnB,SAAS,EAAE,SAAS;aACpB,SAAS,EAAE,OAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IA3BpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,UAAU,CAAwB;IAE1C,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,qBAAqB,CAAgB;IAE7C,QAAQ,CAAC,YAAY,yBAAgC;IACrD,QAAQ,CAAC,MAAM,cAAqB;IAE7B,WAAW,SAA8B;IAEhD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,OAAO,CAAC,gBAAgB,CAA6B;gBAGnC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAAE,wBAAwB;IAC1C,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,OAAO,EACjB,gBAAgB,EAAE,eAAe,EACjC,SAAS,EAAE,YAAY,EACvB,iBAAiB,EAAE,gBAAgB;IAWtD,IAAI,KAAK,oBAER;IAED,IAAI,SAAS,0BAEZ;IAED,IAAI,QAAQ,iBAEX;IAED;;OAEG;IACG,cAAc;IAyDd,KAAK;IA4BX,OAAO,CAAC,WAAW;YAKL,kBAAkB;IA8BhC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,aAAa;IA2B/B,OAAO,CAAC,YAAY;CAMrB"}
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../../src/swarm/connection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,EAAuB,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAKvC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAahD;;GAEG;AACH,oBAAY,eAAe;IACzB;;;OAGG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,UAAU,eAAe;IAEzB;;OAEG;IACH,SAAS,cAAc;IAEvB;;OAEG;IACH,OAAO,YAAY;IAEnB;;OAEG;IACH,MAAM,WAAW;CAClB;AAED;;;GAGG;AACH,qBAAa,UAAU;aAsBH,KAAK,EAAE,SAAS;aAChB,KAAK,EAAE,SAAS;aAChB,QAAQ,EAAE,SAAS;aACnB,SAAS,EAAE,SAAS;aACpB,SAAS,EAAE,OAAO;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IA5BpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,OAAO,CAAC,MAAM,CAA4C;IAC1D,OAAO,CAAC,UAAU,CAAwB;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,OAAO,CAAC,qBAAqB,CAAgB;IAC7C,OAAO,CAAC,qBAAqB,CAAgB;IAE7C,QAAQ,CAAC,YAAY,yBAAgC;IACrD,QAAQ,CAAC,MAAM,cAAqB;IAE7B,WAAW,SAA8B;IAEhD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAE7B;IAEH,OAAO,CAAC,gBAAgB,CAA6B;gBAGnC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAAE,wBAAwB;IAC1C,QAAQ,EAAE,SAAS,EACnB,SAAS,EAAE,SAAS,EACpB,SAAS,EAAE,OAAO,EACjB,gBAAgB,EAAE,eAAe,EACjC,SAAS,EAAE,YAAY,EACvB,iBAAiB,EAAE,gBAAgB;IAWtD,IAAI,KAAK,oBAER;IAED,IAAI,SAAS,0BAEZ;IAED,IAAI,QAAQ,iBAEX;IAED;;OAEG;IACG,cAAc;IA4Dd,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK;IA+BvB,OAAO,CAAC,WAAW;YAKL,kBAAkB;IAgChC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,aAAa;IA2B/B,OAAO,CAAC,YAAY;CAMrB"}
@@ -76,7 +76,7 @@ export declare class Peer {
76
76
  * Either we're initiating a connection or creating one in response to an offer from the other peer.
77
77
  */
78
78
  private _createConnection;
79
- closeConnection(): Promise<void>;
79
+ closeConnection(err?: Error): Promise<void>;
80
80
  onSignal(message: SignalMessage): Promise<void>;
81
81
  destroy(): Promise<void>;
82
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../../../src/swarm/peer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,aAAa;IACrB;;OAEG;IACH,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAE9C;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC;IAE3B;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;OAEG;IACH,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAOD;;;GAGG;AACH,qBAAa,IAAI;aAoBG,EAAE,EAAE,SAAS;aACb,KAAK,EAAE,SAAS;aAChB,WAAW,EAAE,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU;IA1B7B;;OAEG;IACH,OAAO,CAAC,eAAe,CAAK;IACrB,kBAAkB,UAAQ;IACjC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAU;IAE1B,UAAU,CAAC,EAAE,UAAU,CAAC;IAE/B;;OAEG;IACI,WAAW,UAAS;IAEpB,UAAU,UAAS;gBAER,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,SAAS,EACrB,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,oBAAoB,EACvC,iBAAiB,EAAE,gBAAgB,EACnC,kBAAkB,EAAE,iBAAiB,EACrC,UAAU,EAAE,aAAa;IAG5C;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDrD;;OAEG;IACG,kBAAkB;IAyCxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqGnB,eAAe;IAcf,QAAQ,CAAC,OAAO,EAAE,aAAa;IAU/B,OAAO;CAOd"}
1
+ {"version":3,"file":"peer.d.ts","sourceRoot":"","sources":["../../../../src/swarm/peer.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,UAAU,aAAa;IACrB;;OAEG;IACH,WAAW,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAE9C;;OAEG;IACH,WAAW,EAAE,MAAM,IAAI,CAAC;IAExB;;OAEG;IACH,cAAc,EAAE,MAAM,IAAI,CAAC;IAE3B;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB;;OAEG;IACH,OAAO,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD;;OAEG;IACH,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAOD;;;GAGG;AACH,qBAAa,IAAI;aAsBG,EAAE,EAAE,SAAS;aACb,KAAK,EAAE,SAAS;aAChB,WAAW,EAAE,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU;IA5B7B;;OAEG;IACH,OAAO,CAAC,eAAe,CAAK;IACrB,kBAAkB,UAAQ;IACjC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IAErC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IACtC,OAAO,CAAC,cAAc,CAAC,CAAU;IAE1B,UAAU,CAAC,EAAE,UAAU,CAAC;IAE/B;;OAEG;IACI,WAAW,UAAS;IAEpB,UAAU,UAAS;gBAIR,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,SAAS,EACrB,gBAAgB,EAAE,eAAe,EACjC,iBAAiB,EAAE,oBAAoB,EACvC,iBAAiB,EAAE,gBAAgB,EACnC,kBAAkB,EAAE,iBAAiB,EACrC,UAAU,EAAE,aAAa;IAG5C;;OAEG;IACG,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAiDrD;;OAEG;IACG,kBAAkB;IAyCxB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqGnB,eAAe,CAAC,GAAG,CAAC,EAAE,KAAK;IAc3B,QAAQ,CAAC,OAAO,EAAE,aAAa;IAU/B,OAAO;CAOd"}
@@ -1 +1 @@
1
- {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../../../src/swarm/swarm.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAmB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAkB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAmB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD;;;;GAIG;AACH,qBAAa,KAAK;IA0Cd,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IA3CrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO,CAAC,IAAI,CAAiB;IAE7B,OAAO,CAAC,gBAAgB,CAAC,CAA8B;IAEvD;;OAEG;IAEH,QAAQ,CAAC,WAAW,SAA8B;IAoBlD,QAAQ,CAAC,MAAM,cAAqB;gBAMjB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,EAC9B,SAAS,EAAE,QAAQ,EACV,iBAAiB,EAAE,oBAAoB,EACvC,UAAU,EAAE,SAAS,EACrB,iBAAiB,EAAE,gBAAgB,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,kBAAkB,EAAE,iBAAiB;IAkBxD,IAAI,WAAW,iBAId;IAED,IACI,SAAS,cAEZ;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IACI,KAAK,IAAI,KAAK,CAEjB;IAEK,IAAI;IAaJ,OAAO;IAWP,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAiBpC,YAAY,CAAC,UAAU,EAAE,UAAU;IA8B7B,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB/C,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C,SAAS;IAOT,QAAQ;IAId,OAAO,CAAC,gBAAgB;YAkDV,YAAY;IAM1B,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;YACW,mBAAmB;YA0BnB,gBAAgB;CAQ/B"}
1
+ {"version":3,"file":"swarm.d.ts","sourceRoot":"","sources":["../../../../src/swarm/swarm.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAmB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAkB,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAmB,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAQzD;;;;GAIG;AACH,qBAAa,KAAK;IA0Cd,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IAhDrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO,CAAC,IAAI,CAAiB;IAE7B,OAAO,CAAC,gBAAgB,CAAC,CAA8B;IAOvD;;OAEG;IAEH,QAAQ,CAAC,WAAW,SAA8B;IAoBlD,QAAQ,CAAC,MAAM,cAAqB;gBAMjB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,EAC9B,SAAS,EAAE,QAAQ,EACV,iBAAiB,EAAE,oBAAoB,EACvC,UAAU,EAAE,SAAS,EACrB,iBAAiB,EAAE,gBAAgB,EACnC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,kBAAkB,EAAE,iBAAiB;IAkBxD,IAAI,WAAW,iBAId;IAED,IACI,SAAS,cAEZ;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,GAAG,SAAS,CAE9B;IAED,IACI,KAAK,IAAI,KAAK,CAEjB;IAEK,IAAI;IAaJ,OAAO;IAWP,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAiBpC,YAAY,CAAC,UAAU,EAAE,UAAU;IA8B7B,OAAO,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAwB/C,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C,SAAS;IAOT,QAAQ;IAId,OAAO,CAAC,gBAAgB;YAkDV,YAAY;IAM1B,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;YACW,mBAAmB;YA0BnB,gBAAgB;CAQ/B"}
@@ -3,7 +3,7 @@ import { MemorySignalManager, WebsocketSignalManager } from '@dxos/messaging';
3
3
  import { Runtime } from '@dxos/protocols/proto/dxos/config';
4
4
  import { NetworkManager } from '../network-manager';
5
5
  import { FullyConnectedTopology } from '../topology';
6
- import { TestWireProtocol } from './test-wire-protocol';
6
+ import { TestWireProtocol, type TestTeleportExtensionFactory } from './test-wire-protocol';
7
7
  export declare const TEST_SIGNAL_HOSTS: Runtime.Services.Signal[];
8
8
  export type TestBuilderOptions = {
9
9
  signalHosts?: Runtime.Services.Signal[];
@@ -33,15 +33,16 @@ export declare class TestPeer {
33
33
  open(): Promise<void>;
34
34
  close(): Promise<void>;
35
35
  getSwarm(topic: PublicKey): TestSwarmConnection;
36
- createSwarm(topic: PublicKey): TestSwarmConnection;
36
+ createSwarm(topic: PublicKey, extensionFactory?: TestTeleportExtensionFactory): TestSwarmConnection;
37
37
  goOffline(): Promise<void>;
38
38
  goOnline(): Promise<void>;
39
39
  }
40
40
  export declare class TestSwarmConnection {
41
41
  readonly peer: TestPeer;
42
42
  readonly topic: PublicKey;
43
+ readonly extensionFactory: TestTeleportExtensionFactory;
43
44
  protocol: TestWireProtocol;
44
- constructor(peer: TestPeer, topic: PublicKey);
45
+ constructor(peer: TestPeer, topic: PublicKey, extensionFactory: TestTeleportExtensionFactory);
45
46
  join(topology?: FullyConnectedTopology): Promise<this>;
46
47
  leave(): Promise<this>;
47
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"test-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,mBAAmB,EAGnB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAIxD,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAEtD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;aAGM,OAAO,EAAE,kBAAkB;IAFvD,OAAO,CAAC,cAAc,CAAoC;gBAE9B,OAAO,GAAE,kBAAuB;IAE5D,mBAAmB;IAQnB,UAAU,CAAC,MAAM,GAAE,SAA8B;CAGlD;AAED;;GAEG;AACH,qBAAa,QAAQ;IAgBP,OAAO,CAAC,QAAQ,CAAC,WAAW;aAA+B,MAAM,EAAE,SAAS;IAfxF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;IAY1F,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;gBAER,WAAW,EAAE,WAAW,EAAkB,MAAM,EAAE,SAAS;IAMxF,oBAAoB;IA6Cd,IAAI;IAMJ,KAAK;IASX,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB;IAS/C,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB;IAW5C,SAAS;IAIT,QAAQ;CAGf;AAGD,qBAAa,mBAAmB;IAGlB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAAE,QAAQ,CAAC,KAAK,EAAE,SAAS;IAF9D,QAAQ,EAAE,gBAAgB,CAAC;gBAEN,IAAI,EAAE,QAAQ,EAAW,KAAK,EAAE,SAAS;IAQxD,IAAI,CAAC,QAAQ,yBAA+B;IAW5C,KAAK;CAIZ"}
1
+ {"version":3,"file":"test-builder.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-builder.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,mBAAmB,EAGnB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAQrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAI3F,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAEtD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACxC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,qBAAa,WAAW;aAGM,OAAO,EAAE,kBAAkB;IAFvD,OAAO,CAAC,cAAc,CAAoC;gBAE9B,OAAO,GAAE,kBAAuB;IAE5D,mBAAmB;IAQnB,UAAU,CAAC,MAAM,GAAE,SAA8B;CAGlD;AAED;;GAEG;AACH,qBAAa,QAAQ;IAgBP,OAAO,CAAC,QAAQ,CAAC,WAAW;aAA+B,MAAM,EAAE,SAAS;IAfxF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkE;IAY1F,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,QAAQ,CAAC,CAAoB;gBAER,WAAW,EAAE,WAAW,EAAkB,MAAM,EAAE,SAAS;IAMxF,oBAAoB;IA6Cd,IAAI;IAMJ,KAAK;IASX,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,mBAAmB;IAS/C,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,gBAAgB,GAAE,4BAAuC,GAAG,mBAAmB;IAWvG,SAAS;IAIT,QAAQ;CAGf;AAGD,qBAAa,mBAAmB;IAI5B,QAAQ,CAAC,IAAI,EAAE,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,SAAS;IACzB,QAAQ,CAAC,gBAAgB,EAAE,4BAA4B;IALzD,QAAQ,EAAE,gBAAgB,CAAC;gBAGhB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,4BAA4B;IASnD,IAAI,CAAC,QAAQ,yBAA+B;IAW5C,KAAK;CAIZ"}
@@ -1,14 +1,25 @@
1
1
  import { Event } from '@dxos/async';
2
2
  import { PublicKey } from '@dxos/keys';
3
- import { TestExtension, TestExtensionWithStreams, type TestStreamStats } from '@dxos/teleport';
3
+ import { TestExtension, TestExtensionWithStreams } from '@dxos/teleport';
4
+ import type { TestStreamStats, TeleportExtension } from '@dxos/teleport';
4
5
  import { ComplexMap } from '@dxos/util';
6
+ export type TestTeleportExtension = {
7
+ name: string;
8
+ extension: TeleportExtension;
9
+ };
10
+ export type TestTeleportExtensionFactory = () => TestTeleportExtension[];
5
11
  export declare class TestWireProtocol {
6
12
  readonly peerId: PublicKey;
13
+ private readonly _extensionFactory;
7
14
  readonly connections: ComplexMap<PublicKey, TestExtension>;
8
15
  readonly streamConnections: ComplexMap<PublicKey, TestExtensionWithStreams>;
9
16
  readonly connected: Event<PublicKey>;
10
17
  readonly disconnected: Event<PublicKey>;
11
- constructor(peerId: PublicKey);
18
+ readonly otherConnections: ComplexMap<{
19
+ remotePeerId: PublicKey;
20
+ extension: string;
21
+ }, TeleportExtension>;
22
+ constructor(peerId: PublicKey, _extensionFactory?: TestTeleportExtensionFactory);
12
23
  readonly factory: import("../wire-protocol").WireProtocolProvider;
13
24
  waitForConnection(peerId: PublicKey): Promise<TestExtension>;
14
25
  testConnection(peerId: PublicKey, message?: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"test-wire-protocol.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-wire-protocol.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,qBAAa,gBAAgB;aAOC,MAAM,EAAE,SAAS;IAN7C,SAAgB,WAAW,uCAA4D;IACvF,SAAgB,iBAAiB,kDAAuE;IAExG,SAAgB,SAAS,mBAA0B;IACnD,SAAgB,YAAY,mBAA0B;gBAE1B,MAAM,EAAE,SAAS;IAE7C,QAAQ,CAAC,OAAO,kDAmBb;IAEG,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAanC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAKlD,UAAU,CACd,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC;IAQZ,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAOlF"}
1
+ {"version":3,"file":"test-wire-protocol.d.ts","sourceRoot":"","sources":["../../../../src/testing/test-wire-protocol.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAIxC,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,iBAAiB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,MAAM,qBAAqB,EAAE,CAAC;AAEzE,qBAAa,gBAAgB;aAYT,MAAM,EAAE,SAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAZpC,SAAgB,WAAW,uCAA4D;IACvF,SAAgB,iBAAiB,kDAAuE;IAExG,SAAgB,SAAS,mBAA0B;IACnD,SAAgB,YAAY,mBAA0B;IAEtD,SAAgB,gBAAgB;sBAAkC,SAAS;mBAAa,MAAM;0BAE5F;gBAGgB,MAAM,EAAE,SAAS,EAChB,iBAAiB,GAAE,4BAAuC;IAG7E,QAAQ,CAAC,OAAO,kDAwBb;IAEG,iBAAiB,CAAC,MAAM,EAAE,SAAS;IAanC,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;IAKlD,UAAU,CACd,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,EAC1B,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,MAAM,CAAC;IAQZ,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAOlF"}
@@ -15,9 +15,9 @@ export declare class WebRTCTransportProxy implements Transport {
15
15
  private readonly _proxyId;
16
16
  private readonly _ctx;
17
17
  readonly closed: Event<void>;
18
- private _closed;
19
18
  readonly connected: Event<void>;
20
19
  readonly errors: ErrorStream;
20
+ private _closed;
21
21
  private _serviceStream;
22
22
  constructor(_params: WebRTCTransportProxyParams);
23
23
  private _handleConnection;
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-transport-proxy.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport-proxy.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,EAAgC,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,qBAAa,oBAAqB,YAAW,SAAS;IAclD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,QAAQ,CAAC,MAAM,cAAe;IAC9B,OAAO,CAAC,OAAO,CAAS;IACxB,QAAQ,CAAC,SAAS,cAAe;IAEjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,cAAc,CAAuB;gBAI1B,OAAO,EAAE,0BAA0B;YAsCxC,iBAAiB;IAiB/B,OAAO,CAAC,WAAW;YAKL,aAAa;IAI3B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IAEH,UAAU;CAKX;AAGD,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAAmC;IAEvD;;;OAGG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAShE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;CAatD"}
1
+ {"version":3,"file":"webrtc-transport-proxy.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport-proxy.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI1C,OAAO,EAAgC,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACrG,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAG/D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE5E,MAAM,MAAM,0BAA0B,GAAG;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,aAAa,EAAE,aAAa,CAAC;IAE7B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF,qBAAa,oBAAqB,YAAW,SAAS;IAalD,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAsB;IAC/C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiB;IAEtC,QAAQ,CAAC,MAAM,cAAe;IAC9B,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,cAAc,CAAuB;gBAI1B,OAAO,EAAE,0BAA0B;YAsCxC,iBAAiB;IAiB/B,OAAO,CAAC,WAAW;YAKL,aAAa;IAI3B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAUtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB9B;;OAEG;IAEH,UAAU;CAKX;AAGD,qBAAa,2BAA4B,YAAW,gBAAgB;IAClE,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAAmC;IAEvD;;;OAGG;IACH,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAShE,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,SAAS;CAatD"}
@@ -5,21 +5,21 @@ import { Signal } from '@dxos/protocols/proto/dxos/mesh/swarm';
5
5
  import { Transport, TransportFactory } from './transport';
6
6
  export type WebRTCTransportParams = {
7
7
  initiator: boolean;
8
- stream: NodeJS.ReadWriteStream;
9
8
  webrtcConfig?: any;
9
+ stream: NodeJS.ReadWriteStream;
10
10
  sendSignal: (signal: Signal) => Promise<void>;
11
11
  };
12
12
  /**
13
- * Implements Transport for WebRTC. Uses simple-peer under the hood.
13
+ * Implements WebRTC transport using simple-peer (used by WebTorrent).
14
14
  */
15
15
  export declare class WebRTCTransport implements Transport {
16
16
  private readonly params;
17
+ private readonly _instanceId;
17
18
  private readonly _peer;
18
19
  private _closed;
19
20
  readonly closed: Event<void>;
20
21
  readonly connected: Event<void>;
21
22
  readonly errors: ErrorStream;
22
- private readonly _instanceId;
23
23
  constructor(params: WebRTCTransportParams);
24
24
  destroy(): Promise<void>;
25
25
  signal(signal: Signal): void;
@@ -1 +1 @@
1
- {"version":3,"file":"webrtc-transport.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAS,MAAM,aAAa,CAAC;AAKjD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAEF;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IAUnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IATnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,OAAO,CAAS;IAExB,QAAQ,CAAC,MAAM,cAAe;IAC9B,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,MAAM,cAAqB;IAEpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE7B,MAAM,EAAE,qBAAqB;IA8CpD,OAAO;IASb,MAAM,CAAC,MAAM,EAAE,MAAM;YASP,kBAAkB;CAIjC;AAGD,eAAO,MAAM,4BAA4B,kBAAmB,GAAG,KAAG,gBAMhE,CAAC"}
1
+ {"version":3,"file":"webrtc-transport.d.ts","sourceRoot":"","sources":["../../../../src/transport/webrtc-transport.ts"],"names":[],"mappings":";AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAS,MAAM,aAAa,CAAC;AAKjD,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,OAAO,CAAC;IAEnB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC;IAE/B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/C,CAAC;AAMF;;GAEG;AACH,qBAAa,eAAgB,YAAW,SAAS;IASnC,OAAO,CAAC,QAAQ,CAAC,MAAM;IARnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IAEnC,OAAO,CAAC,OAAO,CAAS;IACxB,QAAQ,CAAC,MAAM,cAAe;IAC9B,QAAQ,CAAC,SAAS,cAAe;IACjC,QAAQ,CAAC,MAAM,cAAqB;gBAEP,MAAM,EAAE,qBAAqB;IAuDpD,OAAO;IASb,MAAM,CAAC,MAAM,EAAE,MAAM;YASP,kBAAkB;CAIjC;AAGD,eAAO,MAAM,4BAA4B,kBAAmB,GAAG,KAAG,gBAMhE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/network-manager",
3
- "version": "0.1.56-main.c19b7cd",
3
+ "version": "0.1.56-main.c277f68",
4
4
  "description": "Network Manager",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -25,22 +25,22 @@
25
25
  "simple-peer": "9.11.1",
26
26
  "ws": "^7.4.4",
27
27
  "xor-distance": "^2.0.0",
28
- "@dxos/async": "0.1.56-main.c19b7cd",
29
- "@dxos/codec-protobuf": "0.1.56-main.c19b7cd",
30
- "@dxos/context": "0.1.56-main.c19b7cd",
31
- "@dxos/credentials": "0.1.56-main.c19b7cd",
32
- "@dxos/crypto": "0.1.56-main.c19b7cd",
33
- "@dxos/debug": "0.1.56-main.c19b7cd",
34
- "@dxos/errors": "0.1.56-main.c19b7cd",
35
- "@dxos/invariant": "0.1.56-main.c19b7cd",
36
- "@dxos/keys": "0.1.56-main.c19b7cd",
37
- "@dxos/log": "0.1.56-main.c19b7cd",
38
- "@dxos/messaging": "0.1.56-main.c19b7cd",
39
- "@dxos/node-std": "0.1.56-main.c19b7cd",
40
- "@dxos/protocols": "0.1.56-main.c19b7cd",
41
- "@dxos/rpc": "0.1.56-main.c19b7cd",
42
- "@dxos/teleport": "0.1.56-main.c19b7cd",
43
- "@dxos/util": "0.1.56-main.c19b7cd"
28
+ "@dxos/async": "0.1.56-main.c277f68",
29
+ "@dxos/codec-protobuf": "0.1.56-main.c277f68",
30
+ "@dxos/context": "0.1.56-main.c277f68",
31
+ "@dxos/credentials": "0.1.56-main.c277f68",
32
+ "@dxos/crypto": "0.1.56-main.c277f68",
33
+ "@dxos/debug": "0.1.56-main.c277f68",
34
+ "@dxos/errors": "0.1.56-main.c277f68",
35
+ "@dxos/invariant": "0.1.56-main.c277f68",
36
+ "@dxos/keys": "0.1.56-main.c277f68",
37
+ "@dxos/log": "0.1.56-main.c277f68",
38
+ "@dxos/messaging": "0.1.56-main.c277f68",
39
+ "@dxos/node-std": "0.1.56-main.c277f68",
40
+ "@dxos/protocols": "0.1.56-main.c277f68",
41
+ "@dxos/rpc": "0.1.56-main.c277f68",
42
+ "@dxos/teleport": "0.1.56-main.c277f68",
43
+ "@dxos/util": "0.1.56-main.c277f68"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@swc-node/register": "1.5.4",
@@ -50,7 +50,7 @@
50
50
  "earljs": "~0.1.10",
51
51
  "fast-check": "~3.3.0",
52
52
  "typescript": "^5.0.4",
53
- "@dxos/signal": "0.1.56-main.c19b7cd"
53
+ "@dxos/signal": "0.1.56-main.c277f68"
54
54
  },
55
55
  "publishConfig": {
56
56
  "access": "public"
@@ -51,6 +51,7 @@ export class ConnectionLog {
51
51
  swarm.connectionAdded.on((connection) => {
52
52
  const connectionInfo: ConnectionInfo = {
53
53
  state: ConnectionState.INITIAL,
54
+ closeReason: connection.closeReason,
54
55
  remotePeerId: connection.remoteId,
55
56
  sessionId: connection.sessionId,
56
57
  transport: connection.transport && Object.getPrototypeOf(connection.transport).constructor.name,
@@ -62,6 +63,7 @@ export class ConnectionLog {
62
63
 
63
64
  connection.stateChanged.on((state) => {
64
65
  connectionInfo.state = state;
66
+ connectionInfo.closeReason = connection.closeReason;
65
67
  connectionInfo.events!.push({
66
68
  type: EventType.CONNECTION_STATE_CHANGED,
67
69
  newState: state,
@@ -31,9 +31,9 @@ const SwarmMessage = schema.getCodecForType('dxos.mesh.swarm.SwarmMessage');
31
31
  */
32
32
  export class SwarmMessenger implements SignalMessenger {
33
33
  private readonly _ctx = new Context();
34
- private readonly _onSignal: (message: SignalMessage) => Promise<void>;
35
- private readonly _sendMessage: (msg: { author: PublicKey; recipient: PublicKey; payload: Any }) => Promise<void>;
36
34
 
35
+ private readonly _sendMessage: (msg: { author: PublicKey; recipient: PublicKey; payload: Any }) => Promise<void>;
36
+ private readonly _onSignal: (message: SignalMessage) => Promise<void>;
37
37
  private readonly _onOffer: (message: OfferMessage) => Promise<Answer>;
38
38
  private readonly _topic: PublicKey;
39
39
 
@@ -10,7 +10,7 @@ import { PublicKey } from '@dxos/keys';
10
10
  import { log } from '@dxos/log';
11
11
  import { ComplexMap } from '@dxos/util';
12
12
 
13
- export const MAX_CONCURRENT_INITIATING_CONNECTIONS = 3;
13
+ export const MAX_CONCURRENT_INITIATING_CONNECTIONS = 10;
14
14
 
15
15
  export type ConnectionLimiterOptions = {
16
16
  maxConcurrentInitConnections?: number;
@@ -67,6 +67,7 @@ export class Connection {
67
67
 
68
68
  private _state: ConnectionState = ConnectionState.INITIAL;
69
69
  private _transport: Transport | undefined;
70
+ closeReason?: string;
70
71
 
71
72
  private _incomingSignalBuffer: Signal[] = [];
72
73
  private _outgoingSignalBuffer: Signal[] = [];
@@ -157,6 +158,9 @@ export class Connection {
157
158
  });
158
159
 
159
160
  this._transport.errors.handle((err) => {
161
+ if (!this.closeReason) {
162
+ this.closeReason = err?.message;
163
+ }
160
164
  if (this._state !== ConnectionState.CLOSED && this._state !== ConnectionState.CLOSING) {
161
165
  this.errors.raise(err);
162
166
  }
@@ -173,7 +177,10 @@ export class Connection {
173
177
  }
174
178
 
175
179
  @synchronized
176
- async close() {
180
+ async close(err?: Error) {
181
+ if (!this.closeReason) {
182
+ this.closeReason = err?.message;
183
+ }
177
184
  if (this._state === ConnectionState.CLOSED) {
178
185
  return;
179
186
  }
@@ -212,8 +219,10 @@ export class Connection {
212
219
  }
213
220
 
214
221
  try {
215
- await cancelWithContext(this._ctx, sleep(this._signallingDelay));
216
- this._signallingDelay = Math.min(this._signallingDelay * 2, MAX_SIGNALLING_DELAY);
222
+ if (process.env.NODE_ENV !== 'test') {
223
+ await cancelWithContext(this._ctx, sleep(this._signallingDelay));
224
+ this._signallingDelay = Math.min(this._signallingDelay * 2, MAX_SIGNALLING_DELAY);
225
+ }
217
226
 
218
227
  const signals = [...this._outgoingSignalBuffer];
219
228
  this._outgoingSignalBuffer.length = 0;
package/src/swarm/peer.ts CHANGED
@@ -81,6 +81,8 @@ export class Peer {
81
81
  public advertizing = false;
82
82
 
83
83
  public initiating = false;
84
+
85
+ // TODO(burdon): Convert to map?
84
86
  constructor(
85
87
  public readonly id: PublicKey,
86
88
  public readonly topic: PublicKey,
@@ -112,7 +114,7 @@ export class Peer {
112
114
 
113
115
  if (this.connection) {
114
116
  // Close our connection and accept remote peer's connection.
115
- await this.closeConnection();
117
+ await this.closeConnection(new Error('Connection displaced by remote initiator.'));
116
118
  }
117
119
  } else {
118
120
  // Continue with our origination attempt, the remote peer will close it's connection and accept ours.
@@ -135,7 +137,7 @@ export class Peer {
135
137
  }
136
138
 
137
139
  // Calls `onStateChange` with CLOSED state.
138
- await this.closeConnection();
140
+ await this.closeConnection(err);
139
141
  }
140
142
 
141
143
  return { accept: true };
@@ -181,7 +183,7 @@ export class Peer {
181
183
  } catch (err: any) {
182
184
  log('initiation error', { err, topic: this.topic, peerId: this.localPeerId, remoteId: this.id });
183
185
  // Calls `onStateChange` with CLOSED state.
184
- await this.closeConnection();
186
+ await this.closeConnection(err);
185
187
  throw err;
186
188
  } finally {
187
189
  this.initiating = false;
@@ -285,7 +287,7 @@ export class Peer {
285
287
  });
286
288
 
287
289
  // Calls `onStateChange` with CLOSED state.
288
- void this.closeConnection();
290
+ void this.closeConnection(err);
289
291
  });
290
292
 
291
293
  this.connection = connection;
@@ -293,7 +295,7 @@ export class Peer {
293
295
  return connection;
294
296
  }
295
297
 
296
- async closeConnection() {
298
+ async closeConnection(err?: Error) {
297
299
  if (!this.connection) {
298
300
  return;
299
301
  }
@@ -302,7 +304,7 @@ export class Peer {
302
304
 
303
305
  // Triggers `onStateChange` callback which will clean up the connection.
304
306
  // Won't throw.
305
- await connection.close();
307
+ await connection.close(err);
306
308
 
307
309
  log('closed', { peerId: this.id, sessionId: connection.sessionId });
308
310
  }
@@ -34,17 +34,17 @@ const getClassName = (obj: any) => Object.getPrototypeOf(obj).constructor.name;
34
34
  * Routes signal events and maintains swarm topology.
35
35
  */
36
36
  export class Swarm {
37
- /**
38
- * @internal
39
- */
40
- readonly _peers = new ComplexMap<PublicKey, Peer>(PublicKey.hash);
41
-
42
37
  private readonly _swarmMessenger: SwarmMessenger;
43
38
 
44
39
  private _ctx = new Context();
45
40
 
46
41
  private _listeningHandle?: ListeningHandle = undefined;
47
42
 
43
+ /**
44
+ * @internal
45
+ */
46
+ readonly _peers = new ComplexMap<PublicKey, Peer>(PublicKey.hash);
47
+
48
48
  /**
49
49
  * Unique id of the swarm, local to the current peer, generated when swarm is joined.
50
50
  */
@@ -24,7 +24,7 @@ import {
24
24
  WebRTCTransportProxyFactory,
25
25
  WebRTCTransportService,
26
26
  } from '../transport';
27
- import { TestWireProtocol } from './test-wire-protocol';
27
+ import { TestWireProtocol, type TestTeleportExtensionFactory } from './test-wire-protocol';
28
28
 
29
29
  // Signal server will be started by the setup script.
30
30
  const port = process.env.SIGNAL_PORT ?? 4000;
@@ -152,13 +152,13 @@ export class TestPeer {
152
152
  return swarm;
153
153
  }
154
154
 
155
- createSwarm(topic: PublicKey): TestSwarmConnection {
155
+ createSwarm(topic: PublicKey, extensionFactory: TestTeleportExtensionFactory = () => []): TestSwarmConnection {
156
156
  // TODO(burdon): Multiple.
157
157
  // if (this._swarms.get(topic)) {
158
158
  // throw new Error(`Swarm already exists for topic: ${topic.truncate()}`);
159
159
  // }
160
160
 
161
- const swarm = new TestSwarmConnection(this, topic);
161
+ const swarm = new TestSwarmConnection(this, topic, extensionFactory);
162
162
  this._swarms.set(topic, swarm);
163
163
  return swarm;
164
164
  }
@@ -176,10 +176,14 @@ export class TestPeer {
176
176
  export class TestSwarmConnection {
177
177
  protocol: TestWireProtocol;
178
178
 
179
- constructor(readonly peer: TestPeer, readonly topic: PublicKey) {
179
+ constructor(
180
+ readonly peer: TestPeer,
181
+ readonly topic: PublicKey,
182
+ readonly extensionFactory: TestTeleportExtensionFactory,
183
+ ) {
180
184
  // TODO(burdon): Configure plugins.
181
185
  // TODO(burdon): Prevent reuse?
182
- this.protocol = new TestWireProtocol(this.peer.peerId);
186
+ this.protocol = new TestWireProtocol(this.peer.peerId, this.extensionFactory);
183
187
  }
184
188
 
185
189
  // TODO(burdon): Need to create new plugin instance per swarm?
@@ -5,11 +5,19 @@
5
5
  import { asyncTimeout, Event } from '@dxos/async';
6
6
  import { PublicKey } from '@dxos/keys';
7
7
  import { log } from '@dxos/log';
8
- import { TestExtension, TestExtensionWithStreams, type TestStreamStats } from '@dxos/teleport';
8
+ import { TestExtension, TestExtensionWithStreams } from '@dxos/teleport';
9
+ import type { TestStreamStats, TeleportExtension } from '@dxos/teleport';
9
10
  import { ComplexMap } from '@dxos/util';
10
11
 
11
12
  import { createTeleportProtocolFactory } from '../wire-protocol';
12
13
 
14
+ export type TestTeleportExtension = {
15
+ name: string;
16
+ extension: TeleportExtension;
17
+ };
18
+
19
+ export type TestTeleportExtensionFactory = () => TestTeleportExtension[];
20
+
13
21
  export class TestWireProtocol {
14
22
  public readonly connections = new ComplexMap<PublicKey, TestExtension>(PublicKey.hash);
15
23
  public readonly streamConnections = new ComplexMap<PublicKey, TestExtensionWithStreams>(PublicKey.hash);
@@ -17,7 +25,14 @@ export class TestWireProtocol {
17
25
  public readonly connected = new Event<PublicKey>();
18
26
  public readonly disconnected = new Event<PublicKey>();
19
27
 
20
- constructor(public readonly peerId: PublicKey) {}
28
+ public readonly otherConnections = new ComplexMap<{ remotePeerId: PublicKey; extension: string }, TeleportExtension>(
29
+ ({ remotePeerId, extension }) => remotePeerId.toHex() + extension,
30
+ );
31
+
32
+ constructor(
33
+ public readonly peerId: PublicKey,
34
+ private readonly _extensionFactory: TestTeleportExtensionFactory = () => [],
35
+ ) {}
21
36
 
22
37
  readonly factory = createTeleportProtocolFactory(async (teleport) => {
23
38
  log('create', { remotePeerId: teleport.remotePeerId });
@@ -38,6 +53,11 @@ export class TestWireProtocol {
38
53
  });
39
54
  this.streamConnections.set(teleport.remotePeerId, streamExtension);
40
55
  teleport.addExtension('test-stream', streamExtension);
56
+
57
+ for (const { name, extension } of this._extensionFactory()) {
58
+ this.otherConnections.set({ remotePeerId: teleport.remotePeerId, extension: name }, extension);
59
+ teleport.addExtension(name, extension);
60
+ }
41
61
  });
42
62
 
43
63
  async waitForConnection(peerId: PublicKey) {
@@ -45,7 +45,7 @@ describe('Memory transport', () => {
45
45
  const message = randomBytes(PACKET_SIZE / 2).toString('hex');
46
46
 
47
47
  for (let i = 0; i < NUM_ROUNDS; i++) {
48
- console.log(`Round ${i}/${NUM_ROUNDS}`);
48
+ // console.log(`Round ${i}/${NUM_ROUNDS}`);
49
49
  await Promise.all(
50
50
  pairs.map(async ({ swarm1, swarm2 }) => {
51
51
  await exchangeMessages(swarm1, swarm2, message);
@@ -21,6 +21,7 @@ export type WebRTCTransportProxyParams = {
21
21
  initiator: boolean;
22
22
  stream: NodeJS.ReadWriteStream;
23
23
  bridgeService: BridgeService;
24
+ // TODO(burdon): Rename onSignal.
24
25
  sendSignal: (signal: Signal) => Promise<void>;
25
26
  };
26
27
 
@@ -29,11 +30,10 @@ export class WebRTCTransportProxy implements Transport {
29
30
  private readonly _ctx = new Context();
30
31
 
31
32
  readonly closed = new Event();
32
- private _closed = false;
33
33
  readonly connected = new Event();
34
-
35
34
  readonly errors = new ErrorStream();
36
35
 
36
+ private _closed = false;
37
37
  private _serviceStream!: Stream<BridgeEvent>;
38
38
 
39
39
  // prettier-ignore
@@ -118,7 +118,7 @@ export class WebRTCTransportProxy implements Transport {
118
118
  return;
119
119
  }
120
120
 
121
- this._serviceStream.close();
121
+ await this._serviceStream.close();
122
122
 
123
123
  try {
124
124
  await this._params.bridgeService.close({ proxyId: this._proxyId });
@@ -135,7 +135,7 @@ export class WebRTCTransportProxy implements Transport {
135
135
  */
136
136
  // TODO(burdon): Option on close method.
137
137
  forceClose() {
138
- this._serviceStream.close();
138
+ void this._serviceStream.close();
139
139
  this.closed.emit();
140
140
  this._closed = true;
141
141
  }