@libp2p/webrtc 3.2.1 → 3.2.2-77e3cbc3

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 (67) hide show
  1. package/dist/index.min.js +13 -13
  2. package/dist/src/index.d.ts +29 -0
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/maconn.d.ts.map +1 -1
  6. package/dist/src/maconn.js +5 -2
  7. package/dist/src/maconn.js.map +1 -1
  8. package/dist/src/muxer.d.ts +10 -13
  9. package/dist/src/muxer.d.ts.map +1 -1
  10. package/dist/src/muxer.js +44 -29
  11. package/dist/src/muxer.js.map +1 -1
  12. package/dist/src/pb/message.d.ts +2 -1
  13. package/dist/src/pb/message.d.ts.map +1 -1
  14. package/dist/src/pb/message.js +2 -0
  15. package/dist/src/pb/message.js.map +1 -1
  16. package/dist/src/private-to-private/initiate-connection.d.ts +25 -0
  17. package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -0
  18. package/dist/src/private-to-private/initiate-connection.js +145 -0
  19. package/dist/src/private-to-private/initiate-connection.js.map +1 -0
  20. package/dist/src/private-to-private/listener.d.ts +6 -2
  21. package/dist/src/private-to-private/listener.d.ts.map +1 -1
  22. package/dist/src/private-to-private/listener.js +6 -3
  23. package/dist/src/private-to-private/listener.js.map +1 -1
  24. package/dist/src/private-to-private/signaling-stream-handler.d.ts +10 -0
  25. package/dist/src/private-to-private/signaling-stream-handler.d.ts.map +1 -0
  26. package/dist/src/private-to-private/signaling-stream-handler.js +97 -0
  27. package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -0
  28. package/dist/src/private-to-private/transport.d.ts +12 -2
  29. package/dist/src/private-to-private/transport.d.ts.map +1 -1
  30. package/dist/src/private-to-private/transport.js +67 -56
  31. package/dist/src/private-to-private/transport.js.map +1 -1
  32. package/dist/src/private-to-private/util.d.ts +6 -5
  33. package/dist/src/private-to-private/util.d.ts.map +1 -1
  34. package/dist/src/private-to-private/util.js +72 -21
  35. package/dist/src/private-to-private/util.js.map +1 -1
  36. package/dist/src/private-to-public/transport.d.ts +2 -2
  37. package/dist/src/private-to-public/transport.d.ts.map +1 -1
  38. package/dist/src/private-to-public/transport.js +2 -2
  39. package/dist/src/private-to-public/transport.js.map +1 -1
  40. package/dist/src/stream.d.ts +39 -19
  41. package/dist/src/stream.d.ts.map +1 -1
  42. package/dist/src/stream.js +135 -39
  43. package/dist/src/stream.js.map +1 -1
  44. package/dist/src/util.d.ts +6 -0
  45. package/dist/src/util.d.ts.map +1 -1
  46. package/dist/src/util.js +46 -0
  47. package/dist/src/util.js.map +1 -1
  48. package/package.json +17 -11
  49. package/src/index.ts +34 -0
  50. package/src/maconn.ts +7 -2
  51. package/src/muxer.ts +58 -44
  52. package/src/pb/message.proto +6 -1
  53. package/src/pb/message.ts +4 -2
  54. package/src/private-to-private/initiate-connection.ts +191 -0
  55. package/src/private-to-private/listener.ts +12 -4
  56. package/src/private-to-private/signaling-stream-handler.ts +129 -0
  57. package/src/private-to-private/transport.ts +87 -59
  58. package/src/private-to-private/util.ts +89 -24
  59. package/src/private-to-public/transport.ts +4 -4
  60. package/src/stream.ts +163 -61
  61. package/src/util.ts +60 -0
  62. package/dist/src/private-to-private/handler.d.ts +0 -26
  63. package/dist/src/private-to-private/handler.d.ts.map +0 -1
  64. package/dist/src/private-to-private/handler.js +0 -137
  65. package/dist/src/private-to-private/handler.js.map +0 -1
  66. package/dist/typedoc-urls.json +0 -6
  67. package/src/private-to-private/handler.ts +0 -177
@@ -1,6 +1,35 @@
1
1
  import { type WebRTCTransportDirectInit, type WebRTCDirectTransportComponents } from './private-to-public/transport.js';
2
2
  import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js';
3
3
  import type { Transport } from '@libp2p/interface/transport';
4
+ export interface DataChannelOptions {
5
+ /**
6
+ * The maximum message size sendable over the channel in bytes (default 16KB)
7
+ */
8
+ maxMessageSize?: number;
9
+ /**
10
+ * If the channel's `bufferedAmount` grows over this amount in bytes, wait
11
+ * for it to drain before sending more data (default: 16MB)
12
+ */
13
+ maxBufferedAmount?: number;
14
+ /**
15
+ * When `bufferedAmount` is above `maxBufferedAmount`, we pause sending until
16
+ * the `bufferedAmountLow` event fires - this controls how long we wait for
17
+ * that event in ms (default: 30s)
18
+ */
19
+ bufferedAmountLowEventTimeout?: number;
20
+ /**
21
+ * When closing a stream, we wait for `bufferedAmount` to become 0 before
22
+ * closing the underlying RTCDataChannel - this controls how long we wait
23
+ * in ms (default: 30s)
24
+ */
25
+ drainTimeout?: number;
26
+ /**
27
+ * When closing a stream we first send a FIN flag to the remote and wait
28
+ * for a FIN_ACK reply before closing the underlying RTCDataChannel - this
29
+ * controls how long we wait for the acknowledgement in ms (default: 5s)
30
+ */
31
+ closeTimeout?: number;
32
+ }
4
33
  /**
5
34
  * @param {WebRTCTransportDirectInit} init - WebRTC direct transport configuration
6
35
  * @param init.dataChannel - DataChannel configurations
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;;;;;;GAOG;AACH,iBAAS,YAAY,CAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnH;AAED;;;;;;;;GAQG;AACH,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;OAIG;IACH,6BAA6B,CAAC,EAAE,MAAM,CAAA;IAEtC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;GAOG;AACH,iBAAS,YAAY,CAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnH;AAED;;;;;;;;GAQG;AACH,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAwE,MAAM,kCAAkC,CAAA;AAI9I;;;;;;;GAOG;AACH,SAAS,YAAY,CAAE,IAAgC;IACrD,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrG,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAwE,MAAM,kCAAkC,CAAA;AAsC9I;;;;;;;GAOG;AACH,SAAS,YAAY,CAAE,IAAgC;IACrD,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrG,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"maconn.d.ts","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAInD,UAAU,6BAA6B;IACrC;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAA;IAE1C;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;gBAE1C,IAAI,EAAE,6BAA6B;IAY1C,KAAK,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;CAOzB"}
1
+ {"version":3,"file":"maconn.d.ts","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAA;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAInD,UAAU,6BAA6B;IACrC;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;CACvB;AAED,qBAAa,yBAA0B,YAAW,mBAAmB;IACnE;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAA;IAE1C;;OAEG;IACH,UAAU,EAAE,SAAS,CAAA;IAErB;;OAEG;IACH,QAAQ,EAAE,2BAA2B,CAAA;IAErC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;gBAE1C,IAAI,EAAE,6BAA6B;IAiB1C,KAAK,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;CAOzB"}
@@ -1,6 +1,6 @@
1
1
  import { logger } from '@libp2p/logger';
2
2
  import { nopSink, nopSource } from './util.js';
3
- const log = logger('libp2p:webrtc:connection');
3
+ const log = logger('libp2p:webrtc:maconn');
4
4
  export class WebRTCMultiaddrConnection {
5
5
  /**
6
6
  * WebRTC Peer Connection
@@ -30,8 +30,11 @@ export class WebRTCMultiaddrConnection {
30
30
  this.remoteAddr = init.remoteAddr;
31
31
  this.timeline = init.timeline;
32
32
  this.peerConnection = init.peerConnection;
33
+ const initialState = this.peerConnection.connectionState;
33
34
  this.peerConnection.onconnectionstatechange = () => {
34
- if (this.peerConnection.connectionState === 'closed' || this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed') {
35
+ log.trace('peer connection state change', this.peerConnection.connectionState, 'initial state', initialState);
36
+ if (this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed' || this.peerConnection.connectionState === 'closed') {
37
+ // nothing else to do but close the connection
35
38
  this.timeline.close = Date.now();
36
39
  }
37
40
  };
@@ -1 +1 @@
1
- {"version":3,"file":"maconn.js","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAM9C,MAAM,GAAG,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAA;AAwB9C,MAAM,OAAO,yBAAyB;IACpC;;OAEG;IACM,cAAc,CAAmB;IAE1C;;OAEG;IACH,UAAU,CAAW;IAErB;;OAEG;IACH,QAAQ,CAA6B;IAErC;;OAEG;IACH,OAAO,CAAe;IAEtB;;OAEG;IACH,MAAM,GAA6C,SAAS,EAAE,CAAA;IAE9D;;OAEG;IACH,IAAI,GAA4C,OAAO,CAAA;IAEvD,YAAa,IAAmC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAEzC,IAAI,CAAC,cAAc,CAAC,uBAAuB,GAAG,GAAG,EAAE;YACjD,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,EAAE;gBAClK,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;aACjC;QACH,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,OAAsB;QACjC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE/B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAE,GAAU;QACf,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;QAEjD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
1
+ {"version":3,"file":"maconn.js","sourceRoot":"","sources":["../../src/maconn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAM9C,MAAM,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAwB1C,MAAM,OAAO,yBAAyB;IACpC;;OAEG;IACM,cAAc,CAAmB;IAE1C;;OAEG;IACH,UAAU,CAAW;IAErB;;OAEG;IACH,QAAQ,CAA6B;IAErC;;OAEG;IACH,OAAO,CAAe;IAEtB;;OAEG;IACH,MAAM,GAA6C,SAAS,EAAE,CAAA;IAE9D;;OAEG;IACH,IAAI,GAA4C,OAAO,CAAA;IAEvD,YAAa,IAAmC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAA;QAExD,IAAI,CAAC,cAAc,CAAC,uBAAuB,GAAG,GAAG,EAAE;YACjD,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,eAAe,EAAE,YAAY,CAAC,CAAA;YAE7G,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,EAAE;gBAClK,8CAA8C;gBAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;aACjC;QACH,CAAC,CAAA;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,OAAsB;QACjC,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE/B,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAE,GAAU;QACf,GAAG,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAA;QAEjD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -1,4 +1,4 @@
1
- import type { DataChannelOpts } from './stream.js';
1
+ import type { DataChannelOptions } from './index.js';
2
2
  import type { Stream } from '@libp2p/interface/connection';
3
3
  import type { CounterGroup } from '@libp2p/interface/metrics';
4
4
  import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface/stream-muxer';
@@ -10,18 +10,15 @@ export interface DataChannelMuxerFactoryInit {
10
10
  * WebRTC Peer Connection
11
11
  */
12
12
  peerConnection: RTCPeerConnection;
13
- /**
14
- * Optional metrics for this data channel muxer
15
- */
16
- metrics?: CounterGroup;
17
- /**
18
- * Data channel options
19
- */
20
- dataChannelOptions?: Partial<DataChannelOpts>;
21
13
  /**
22
14
  * The protocol to use
23
15
  */
24
16
  protocol?: string;
17
+ /**
18
+ * Optional metrics for this data channel muxer
19
+ */
20
+ metrics?: CounterGroup;
21
+ dataChannelOptions?: DataChannelOptions;
25
22
  }
26
23
  export declare class DataChannelMuxerFactory implements StreamMuxerFactory {
27
24
  readonly protocol: string;
@@ -49,16 +46,17 @@ export declare class DataChannelMuxer implements StreamMuxer {
49
46
  streams: Stream[];
50
47
  protocol: string;
51
48
  private readonly peerConnection;
52
- private readonly dataChannelOptions?;
49
+ private readonly dataChannelOptions;
53
50
  private readonly metrics?;
51
+ constructor(init: DataChannelMuxerInit);
54
52
  /**
55
53
  * Gracefully close all tracked streams and stop the muxer
56
54
  */
57
- close: (options?: AbortOptions) => Promise<void>;
55
+ close(options?: AbortOptions): Promise<void>;
58
56
  /**
59
57
  * Abort all tracked streams and stop the muxer
60
58
  */
61
- abort: (err: Error) => void;
59
+ abort(err: Error): void;
62
60
  /**
63
61
  * The stream source, a no-op as the transport natively supports multiplexing
64
62
  */
@@ -67,7 +65,6 @@ export declare class DataChannelMuxer implements StreamMuxer {
67
65
  * The stream destination, a no-op as the transport natively supports multiplexing
68
66
  */
69
67
  sink: Sink<Source<Uint8Array | Uint8ArrayList>, Promise<void>>;
70
- constructor(init: DataChannelMuxerInit);
71
68
  newStream(): Stream;
72
69
  }
73
70
  //# sourceMappingURL=muxer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAIpD,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAE7C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAA0B;gBAEjD,IAAI,EAAE,2BAA2B;IAoB9C,iBAAiB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW;CAUxD;AAED,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B,EAAE,eAAe;IACxF,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IA+BrC,QAAQ,CAAC,IAAI,EAAE,oBAAoB;IA9BhD;;OAEG;IACI,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;IAEvC;;OAEG;IACH,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAkB;IAElE;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAY;IAEvC;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;gBAElD,IAAI,EAAE,oBAAoB;IAqChD,SAAS,IAAK,MAAM;CAmBrB"}
1
+ {"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AACtG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAMpD,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB,kBAAkB,CAAC,EAAE,kBAAkB,CAAA;CACxC;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAoB;gBAE3C,IAAI,EAAE,2BAA2B;IAoB9C,iBAAiB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW;CAUxD;AAED,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B,EAAE,eAAe;IACxF,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAWrC,QAAQ,CAAC,IAAI,EAAE,oBAAoB;IAVhD;;OAEG;IACI,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;gBAEjB,IAAI,EAAE,oBAAoB;IAsChD;;OAEG;IACG,KAAK,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAUnD;;OAEG;IACH,KAAK,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAMxB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;IAExE,SAAS,IAAK,MAAM;CAoBrB"}
package/dist/src/muxer.js CHANGED
@@ -1,5 +1,7 @@
1
+ import { logger } from '@libp2p/logger';
1
2
  import { createStream } from './stream.js';
2
- import { nopSink, nopSource } from './util.js';
3
+ import { drainAndClose, nopSink, nopSource } from './util.js';
4
+ const log = logger('libp2p:webrtc:muxer');
3
5
  const PROTOCOL = '/webrtc';
4
6
  export class DataChannelMuxerFactory {
5
7
  protocol;
@@ -14,16 +16,16 @@ export class DataChannelMuxerFactory {
14
16
  this.peerConnection = init.peerConnection;
15
17
  this.metrics = init.metrics;
16
18
  this.protocol = init.protocol ?? PROTOCOL;
17
- this.dataChannelOptions = init.dataChannelOptions;
19
+ this.dataChannelOptions = init.dataChannelOptions ?? {};
18
20
  // store any datachannels opened before upgrade has been completed
19
21
  this.peerConnection.ondatachannel = ({ channel }) => {
20
22
  const stream = createStream({
21
23
  channel,
22
24
  direction: 'inbound',
23
- dataChannelOptions: init.dataChannelOptions,
24
25
  onEnd: () => {
25
26
  this.streamBuffer = this.streamBuffer.filter(s => s.id !== stream.id);
26
- }
27
+ },
28
+ ...this.dataChannelOptions
27
29
  });
28
30
  this.streamBuffer.push(stream);
29
31
  };
@@ -52,28 +54,13 @@ export class DataChannelMuxer {
52
54
  peerConnection;
53
55
  dataChannelOptions;
54
56
  metrics;
55
- /**
56
- * Gracefully close all tracked streams and stop the muxer
57
- */
58
- close = async () => { };
59
- /**
60
- * Abort all tracked streams and stop the muxer
61
- */
62
- abort = () => { };
63
- /**
64
- * The stream source, a no-op as the transport natively supports multiplexing
65
- */
66
- source = nopSource();
67
- /**
68
- * The stream destination, a no-op as the transport natively supports multiplexing
69
- */
70
- sink = nopSink;
71
57
  constructor(init) {
72
58
  this.init = init;
73
59
  this.streams = init.streams;
74
60
  this.peerConnection = init.peerConnection;
75
61
  this.protocol = init.protocol ?? PROTOCOL;
76
62
  this.metrics = init.metrics;
63
+ this.dataChannelOptions = init.dataChannelOptions ?? {};
77
64
  /**
78
65
  * Fired when a data channel has been added to the connection has been
79
66
  * added by the remote peer.
@@ -84,37 +71,65 @@ export class DataChannelMuxer {
84
71
  const stream = createStream({
85
72
  channel,
86
73
  direction: 'inbound',
87
- dataChannelOptions: this.dataChannelOptions,
88
74
  onEnd: () => {
75
+ log.trace('stream %s %s %s onEnd', stream.direction, stream.id, stream.protocol);
76
+ drainAndClose(channel, `inbound ${stream.id} ${stream.protocol}`, this.dataChannelOptions.drainTimeout);
89
77
  this.streams = this.streams.filter(s => s.id !== stream.id);
90
78
  this.metrics?.increment({ stream_end: true });
91
79
  init?.onStreamEnd?.(stream);
92
- }
80
+ },
81
+ ...this.dataChannelOptions
93
82
  });
94
83
  this.streams.push(stream);
95
- if ((init?.onIncomingStream) != null) {
96
- this.metrics?.increment({ incoming_stream: true });
97
- init.onIncomingStream(stream);
98
- }
84
+ this.metrics?.increment({ incoming_stream: true });
85
+ init?.onIncomingStream?.(stream);
99
86
  };
100
87
  const onIncomingStream = init?.onIncomingStream;
101
88
  if (onIncomingStream != null) {
102
89
  this.streams.forEach(s => { onIncomingStream(s); });
103
90
  }
104
91
  }
92
+ /**
93
+ * Gracefully close all tracked streams and stop the muxer
94
+ */
95
+ async close(options) {
96
+ try {
97
+ await Promise.all(this.streams.map(async (stream) => stream.close(options)));
98
+ }
99
+ catch (err) {
100
+ this.abort(err);
101
+ }
102
+ }
103
+ /**
104
+ * Abort all tracked streams and stop the muxer
105
+ */
106
+ abort(err) {
107
+ for (const stream of this.streams) {
108
+ stream.abort(err);
109
+ }
110
+ }
111
+ /**
112
+ * The stream source, a no-op as the transport natively supports multiplexing
113
+ */
114
+ source = nopSource();
115
+ /**
116
+ * The stream destination, a no-op as the transport natively supports multiplexing
117
+ */
118
+ sink = nopSink;
105
119
  newStream() {
106
120
  // The spec says the label SHOULD be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
107
121
  const channel = this.peerConnection.createDataChannel('');
108
122
  const stream = createStream({
109
123
  channel,
110
124
  direction: 'outbound',
111
- dataChannelOptions: this.dataChannelOptions,
112
125
  onEnd: () => {
113
- channel.close(); // Stream initiator is responsible for closing the channel
126
+ log.trace('stream %s %s %s onEnd', stream.direction, stream.id, stream.protocol);
127
+ drainAndClose(channel, `outbound ${stream.id} ${stream.protocol}`, this.dataChannelOptions.drainTimeout);
114
128
  this.streams = this.streams.filter(s => s.id !== stream.id);
115
129
  this.metrics?.increment({ stream_end: true });
116
130
  this.init?.onStreamEnd?.(stream);
117
- }
131
+ },
132
+ ...this.dataChannelOptions
118
133
  });
119
134
  this.streams.push(stream);
120
135
  this.metrics?.increment({ outgoing_stream: true });
@@ -1 +1 @@
1
- {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@ export declare namespace Message {
8
8
  enum Flag {
9
9
  FIN = "FIN",
10
10
  STOP_SENDING = "STOP_SENDING",
11
- RESET = "RESET"
11
+ RESET = "RESET",
12
+ FIN_ACK = "FIN_ACK"
12
13
  }
13
14
  namespace Flag {
14
15
  const codec: () => Codec<Flag>;
@@ -1 +1 @@
1
- {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,yBAAiB,OAAO,CAAC;IACvB,KAAY,IAAI;QACd,GAAG,QAAQ;QACX,YAAY,iBAAiB;QAC7B,KAAK,UAAU;KAChB;IAQD,UAAiB,IAAI,CAAC;QACb,MAAM,KAAK,QAAO,MAAM,IAAI,CAElC,CAAA;KACF;IAIM,MAAM,KAAK,QAAO,MAAM,OAAO,CA8CrC,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,OAAO,CAAC,KAAG,UAE9C,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,OAEzD,CAAA;CACF"}
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAA;IACnB,OAAO,CAAC,EAAE,UAAU,CAAA;CACrB;AAED,yBAAiB,OAAO,CAAC;IACvB,KAAY,IAAI;QACd,GAAG,QAAQ;QACX,YAAY,iBAAiB;QAC7B,KAAK,UAAU;QACf,OAAO,YAAY;KACpB;IASD,UAAiB,IAAI,CAAC;QACb,MAAM,KAAK,QAAO,MAAM,IAAI,CAElC,CAAA;KACF;IAIM,MAAM,KAAK,QAAO,MAAM,OAAO,CA8CrC,CAAA;IAEM,MAAM,MAAM,QAAS,QAAQ,OAAO,CAAC,KAAG,UAE9C,CAAA;IAEM,MAAM,MAAM,QAAS,UAAU,GAAG,cAAc,KAAG,OAEzD,CAAA;CACF"}
@@ -11,12 +11,14 @@ export var Message;
11
11
  Flag["FIN"] = "FIN";
12
12
  Flag["STOP_SENDING"] = "STOP_SENDING";
13
13
  Flag["RESET"] = "RESET";
14
+ Flag["FIN_ACK"] = "FIN_ACK";
14
15
  })(Flag = Message.Flag || (Message.Flag = {}));
15
16
  let __FlagValues;
16
17
  (function (__FlagValues) {
17
18
  __FlagValues[__FlagValues["FIN"] = 0] = "FIN";
18
19
  __FlagValues[__FlagValues["STOP_SENDING"] = 1] = "STOP_SENDING";
19
20
  __FlagValues[__FlagValues["RESET"] = 2] = "RESET";
21
+ __FlagValues[__FlagValues["FIN_ACK"] = 3] = "FIN_ACK";
20
22
  })(__FlagValues || (__FlagValues = {}));
21
23
  (function (Flag) {
22
24
  Flag.codec = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type Multiaddr } from '@multiformats/multiaddr';
2
+ import { type RTCPeerConnection } from '../webrtc/index.js';
3
+ import { type WebRTCTransportMetrics } from './transport.js';
4
+ import type { DataChannelOptions } from '../index.js';
5
+ import type { ConnectionManager } from '@libp2p/interface-internal/connection-manager';
6
+ import type { IncomingStreamData } from '@libp2p/interface-internal/registrar';
7
+ import type { TransportManager } from '@libp2p/interface-internal/transport-manager';
8
+ export interface IncomingStreamOpts extends IncomingStreamData {
9
+ rtcConfiguration?: RTCConfiguration;
10
+ dataChannelOptions?: Partial<DataChannelOptions>;
11
+ signal: AbortSignal;
12
+ }
13
+ export interface ConnectOptions {
14
+ peerConnection: RTCPeerConnection;
15
+ multiaddr: Multiaddr;
16
+ connectionManager: ConnectionManager;
17
+ transportManager: TransportManager;
18
+ dataChannelOptions?: Partial<DataChannelOptions>;
19
+ signal?: AbortSignal;
20
+ metrics?: WebRTCTransportMetrics;
21
+ }
22
+ export declare function initiateConnection({ peerConnection, signal, metrics, multiaddr: ma, connectionManager, transportManager }: ConnectOptions): Promise<{
23
+ remoteAddress: Multiaddr;
24
+ }>;
25
+ //# sourceMappingURL=initiate-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initiate-connection.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAGnE,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAElF,OAAO,EAAiC,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+CAA+C,CAAA;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AAIpF,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,iBAAiB,CAAA;IACjC,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,sBAAsB,CAAA;CACjC;AAED,wBAAsB,kBAAkB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAA;CAAE,CAAC,CA4JxL"}
@@ -0,0 +1,145 @@
1
+ import { CodeError } from '@libp2p/interface/errors';
2
+ import { logger } from '@libp2p/logger';
3
+ import { peerIdFromString } from '@libp2p/peer-id';
4
+ import { multiaddr } from '@multiformats/multiaddr';
5
+ import { pbStream } from 'it-protobuf-stream';
6
+ import pDefer, {} from 'p-defer';
7
+ import { RTCSessionDescription } from '../webrtc/index.js';
8
+ import { Message } from './pb/message.js';
9
+ import { SIGNALING_PROTO_ID, splitAddr } from './transport.js';
10
+ import { parseRemoteAddress, readCandidatesUntilConnected, resolveOnConnected } from './util.js';
11
+ const log = logger('libp2p:webrtc:initiate-connection');
12
+ export async function initiateConnection({ peerConnection, signal, metrics, multiaddr: ma, connectionManager, transportManager }) {
13
+ const { baseAddr, peerId } = splitAddr(ma);
14
+ metrics?.dialerEvents.increment({ open: true });
15
+ log.trace('dialing base address: %a', baseAddr);
16
+ const relayPeer = baseAddr.getPeerId();
17
+ if (relayPeer == null) {
18
+ throw new CodeError('Relay peer was missing', 'ERR_INVALID_ADDRESS');
19
+ }
20
+ const connections = connectionManager.getConnections(peerIdFromString(relayPeer));
21
+ let connection;
22
+ let shouldCloseConnection = false;
23
+ if (connections.length === 0) {
24
+ // use the transport manager to open a connection. Initiating a WebRTC
25
+ // connection takes place in the context of a dial - if we use the
26
+ // connection manager instead we can end up joining our own dial context
27
+ connection = await transportManager.dial(baseAddr, {
28
+ signal
29
+ });
30
+ // this connection is unmanaged by the connection manager so we should
31
+ // close it when we are done
32
+ shouldCloseConnection = true;
33
+ }
34
+ else {
35
+ connection = connections[0];
36
+ }
37
+ try {
38
+ const stream = await connection.newStream(SIGNALING_PROTO_ID, {
39
+ signal,
40
+ runOnTransientConnection: true
41
+ });
42
+ const messageStream = pbStream(stream).pb(Message);
43
+ const connectedPromise = pDefer();
44
+ const sdpAbortedListener = () => {
45
+ connectedPromise.reject(new CodeError('SDP handshake aborted', 'ERR_SDP_HANDSHAKE_ABORTED'));
46
+ };
47
+ try {
48
+ resolveOnConnected(peerConnection, connectedPromise);
49
+ // reject the connectedPromise if the signal aborts
50
+ signal?.addEventListener('abort', sdpAbortedListener);
51
+ // we create the channel so that the RTCPeerConnection has a component for
52
+ // which to collect candidates. The label is not relevant to connection
53
+ // initiation but can be useful for debugging
54
+ const channel = peerConnection.createDataChannel('init');
55
+ // setup callback to write ICE candidates to the remote peer
56
+ peerConnection.onicecandidate = ({ candidate }) => {
57
+ // a null candidate means end-of-candidates, an empty string candidate
58
+ // means end-of-candidates for this generation, otherwise this should
59
+ // be a valid candidate object
60
+ // see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
61
+ const data = JSON.stringify(candidate?.toJSON() ?? null);
62
+ log.trace('initiator sending ICE candidate %s', data);
63
+ void messageStream.write({
64
+ type: Message.Type.ICE_CANDIDATE,
65
+ data
66
+ }, {
67
+ signal
68
+ })
69
+ .catch(err => {
70
+ log.error('error sending ICE candidate', err);
71
+ });
72
+ };
73
+ peerConnection.onicecandidateerror = (event) => {
74
+ log('initiator ICE candidate error', event);
75
+ };
76
+ // create an offer
77
+ const offerSdp = await peerConnection.createOffer();
78
+ log.trace('initiator send SDP offer %s', offerSdp.sdp);
79
+ // write the offer to the stream
80
+ await messageStream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp }, {
81
+ signal
82
+ });
83
+ // set offer as local description
84
+ await peerConnection.setLocalDescription(offerSdp).catch(err => {
85
+ log.error('could not execute setLocalDescription', err);
86
+ throw new CodeError('Failed to set localDescription', 'ERR_SDP_HANDSHAKE_FAILED');
87
+ });
88
+ // read answer
89
+ const answerMessage = await messageStream.read({
90
+ signal
91
+ });
92
+ if (answerMessage.type !== Message.Type.SDP_ANSWER) {
93
+ throw new CodeError('remote should send an SDP answer', 'ERR_SDP_HANDSHAKE_FAILED');
94
+ }
95
+ log.trace('initiator receive SDP answer %s', answerMessage.data);
96
+ const answerSdp = new RTCSessionDescription({ type: 'answer', sdp: answerMessage.data });
97
+ await peerConnection.setRemoteDescription(answerSdp).catch(err => {
98
+ log.error('could not execute setRemoteDescription', err);
99
+ throw new CodeError('Failed to set remoteDescription', 'ERR_SDP_HANDSHAKE_FAILED');
100
+ });
101
+ log.trace('initiator read candidates until connected');
102
+ await readCandidatesUntilConnected(connectedPromise, peerConnection, messageStream, {
103
+ direction: 'initiator',
104
+ signal
105
+ });
106
+ log.trace('initiator connected, closing init channel');
107
+ channel.close();
108
+ log.trace('initiator closing signalling stream');
109
+ await messageStream.unwrap().unwrap().close({
110
+ signal
111
+ });
112
+ const remoteAddress = parseRemoteAddress(peerConnection.currentRemoteDescription?.sdp ?? '');
113
+ log.trace('initiator connected to remote address %s', remoteAddress);
114
+ return {
115
+ remoteAddress: multiaddr(remoteAddress).encapsulate(`/p2p/${peerId.toString()}`)
116
+ };
117
+ }
118
+ catch (err) {
119
+ peerConnection.close();
120
+ stream.abort(err);
121
+ throw err;
122
+ }
123
+ finally {
124
+ // remove event listeners
125
+ signal?.removeEventListener('abort', sdpAbortedListener);
126
+ peerConnection.onicecandidate = null;
127
+ peerConnection.onicecandidateerror = null;
128
+ }
129
+ }
130
+ finally {
131
+ // if we had to open a connection to perform the SDP handshake
132
+ // close it because it's not tracked by the connection manager
133
+ if (shouldCloseConnection) {
134
+ try {
135
+ await connection.close({
136
+ signal
137
+ });
138
+ }
139
+ catch (err) {
140
+ connection.abort(err);
141
+ }
142
+ }
143
+ }
144
+ }
145
+ //# sourceMappingURL=initiate-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initiate-connection.js","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"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"}
@@ -3,14 +3,18 @@ import type { PeerId } from '@libp2p/interface/peer-id';
3
3
  import type { ListenerEvents, Listener } from '@libp2p/interface/transport';
4
4
  import type { TransportManager } from '@libp2p/interface-internal/transport-manager';
5
5
  import type { Multiaddr } from '@multiformats/multiaddr';
6
- export interface ListenerOptions {
6
+ export interface WebRTCPeerListenerComponents {
7
7
  peerId: PeerId;
8
8
  transportManager: TransportManager;
9
9
  }
10
+ export interface WebRTCPeerListenerInit {
11
+ shutdownController: AbortController;
12
+ }
10
13
  export declare class WebRTCPeerListener extends EventEmitter<ListenerEvents> implements Listener {
11
14
  private readonly peerId;
12
15
  private readonly transportManager;
13
- constructor(opts: ListenerOptions);
16
+ private readonly shutdownController;
17
+ constructor(components: WebRTCPeerListenerComponents, init: WebRTCPeerListenerInit);
14
18
  listen(): Promise<void>;
15
19
  getAddrs(): Multiaddr[];
16
20
  close(): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,gBAAgB,CAAA;CACnC;AAED,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAE,YAAW,QAAQ;IACtF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;gBAEtC,IAAI,EAAE,eAAe;IAO5B,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IAI9B,QAAQ,IAAK,SAAS,EAAE;IAalB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAG9B"}
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd,gBAAgB,EAAE,gBAAgB,CAAA;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC,kBAAkB,EAAE,eAAe,CAAA;CACpC;AAED,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAE,YAAW,QAAQ;IACtF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAEvC,UAAU,EAAE,4BAA4B,EAAE,IAAI,EAAE,sBAAsB;IAS7E,MAAM,IAAK,OAAO,CAAC,IAAI,CAAC;IAI9B,QAAQ,IAAK,SAAS,EAAE;IAalB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAI9B"}
@@ -3,10 +3,12 @@ import { Circuit } from '@multiformats/mafmt';
3
3
  export class WebRTCPeerListener extends EventEmitter {
4
4
  peerId;
5
5
  transportManager;
6
- constructor(opts) {
6
+ shutdownController;
7
+ constructor(components, init) {
7
8
  super();
8
- this.peerId = opts.peerId;
9
- this.transportManager = opts.transportManager;
9
+ this.peerId = components.peerId;
10
+ this.transportManager = components.transportManager;
11
+ this.shutdownController = init.shutdownController;
10
12
  }
11
13
  async listen() {
12
14
  this.safeDispatchEvent('listening', {});
@@ -23,6 +25,7 @@ export class WebRTCPeerListener extends EventEmitter {
23
25
  .flat();
24
26
  }
25
27
  async close() {
28
+ this.shutdownController.abort();
26
29
  this.safeDispatchEvent('close', {});
27
30
  }
28
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAW7C,MAAM,OAAO,kBAAmB,SAAQ,YAA4B;IACjD,MAAM,CAAQ;IACd,gBAAgB,CAAkB;IAEnD,YAAa,IAAqB;QAChC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAA;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,gBAAgB;aACzB,YAAY,EAAE;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;aACnB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACjC,GAAG,CAAC,EAAE,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrD,CAAC,CAAC,CACH;aACA,IAAI,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;CACF"}
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAe7C,MAAM,OAAO,kBAAmB,SAAQ,YAA4B;IACjD,MAAM,CAAQ;IACd,gBAAgB,CAAkB;IAClC,kBAAkB,CAAiB;IAEpD,YAAa,UAAwC,EAAE,IAA4B;QACjF,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,CAAA;QAEnD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAA;IACnD,CAAC;IAED,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,gBAAgB;aACzB,YAAY,EAAE;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;aACnB,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;aACjC,GAAG,CAAC,EAAE,CAAC,EAAE;YACR,OAAO,EAAE,CAAC,WAAW,CAAC,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACrD,CAAC,CAAC,CACH;aACA,IAAI,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAA;QAC/B,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACrC,CAAC;CACF"}
@@ -0,0 +1,10 @@
1
+ import { type RTCPeerConnection } from '../webrtc/index.js';
2
+ import type { IncomingStreamData } from '@libp2p/interface-internal/registrar';
3
+ export interface IncomingStreamOpts extends IncomingStreamData {
4
+ peerConnection: RTCPeerConnection;
5
+ signal: AbortSignal;
6
+ }
7
+ export declare function handleIncomingStream({ peerConnection, stream, signal, connection }: IncomingStreamOpts): Promise<{
8
+ remoteAddress: string;
9
+ }>;
10
+ //# sourceMappingURL=signaling-stream-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signaling-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAGlF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAA;AAI9E,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,cAAc,EAAE,iBAAiB,CAAA;IACjC,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,wBAAsB,oBAAoB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAgHlJ"}