@libp2p/webrtc 1.1.11 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/index.min.js +21 -17
- package/dist/src/maconn.d.ts +9 -0
- package/dist/src/maconn.d.ts.map +1 -1
- package/dist/src/maconn.js +10 -0
- package/dist/src/maconn.js.map +1 -1
- package/dist/src/muxer.d.ts +12 -2
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +16 -4
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/peer_transport/handler.d.ts +10 -2
- package/dist/src/peer_transport/handler.d.ts.map +1 -1
- package/dist/src/peer_transport/handler.js +14 -2
- package/dist/src/peer_transport/handler.js.map +1 -1
- package/dist/src/peer_transport/listener.d.ts +6 -7
- package/dist/src/peer_transport/listener.d.ts.map +1 -1
- package/dist/src/peer_transport/listener.js +26 -24
- package/dist/src/peer_transport/listener.js.map +1 -1
- package/dist/src/peer_transport/transport.d.ts +4 -6
- package/dist/src/peer_transport/transport.d.ts.map +1 -1
- package/dist/src/peer_transport/transport.js +21 -20
- package/dist/src/peer_transport/transport.js.map +1 -1
- package/dist/src/peer_transport/util.js +1 -1
- package/dist/src/peer_transport/util.js.map +1 -1
- package/dist/src/stream.js +1 -1
- package/dist/src/stream.js.map +1 -1
- package/dist/src/transport.d.ts +6 -3
- package/dist/src/transport.d.ts.map +1 -1
- package/dist/src/transport.js +22 -12
- package/dist/src/transport.js.map +1 -1
- package/package.json +15 -15
- package/src/maconn.ts +18 -1
- package/src/muxer.ts +23 -4
- package/src/peer_transport/handler.ts +23 -5
- package/src/peer_transport/listener.ts +39 -28
- package/src/peer_transport/transport.ts +29 -24
- package/src/peer_transport/util.ts +1 -1
- package/src/stream.ts +1 -1
- package/src/transport.ts +29 -13
package/dist/src/stream.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,KAA+B,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAI5C,MAAM,GAAG,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAE1C;;GAEG;AACH,MAAM,UAAU,WAAW,CAAE,GAAc;IACzC,OAAO;QACL,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE;YACR,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,SAAS;SACjB;KACF,CAAA;AACH,CAAC;AA+CD,MAAM,CAAN,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,+CAAI,CAAA;IACJ,6DAAW,CAAA;IACX,+DAAY,CAAA;IACZ,mDAAM,CAAA;AACR,CAAC,EALW,YAAY,KAAZ,YAAY,QAKvB;AAED,4EAA4E;AAC5E,+BAA+B;AAC/B,SAAS,iBAAiB,CAAE,CAAQ;IAClC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;AAC/C,CAAC;AAED,MAAM,WAAW;IACf,KAAK,GAAiB,YAAY,CAAC,IAAI,CAAA;IAEvC,aAAa;QACX,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,CAAC,CAAA;IACzF,CAAC;IAED,UAAU,CAAE,EAAE,SAAS,EAAE,IAAI,EAAoB;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAA;QAEvB,uCAAuC;QACvC,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,EAAE;YACtC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;SACnC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE;YAC3B,QAAQ,IAAI,EAAE;gBACZ,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG;oBACtB,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;wBACpC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,WAAW,CAAA;qBACtC;yBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;wBACnD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;qBACjC;oBACD,MAAK;gBAEP,KAAK,EAAE,CAAC,YAAY,CAAC,YAAY;oBAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;wBACpC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,YAAY,CAAA;qBACvC;yBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,WAAW,EAAE;wBAClD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;qBACjC;oBACD,MAAK;gBAEP,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK;oBACxB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;oBAChC,MAAK;gBACP;oBACE,iBAAiB,CAAC,IAAI,CAAC,CAAA;aAC1B;SACF;aAAM;YACL,QAAQ,IAAI,EAAE;gBACZ,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG;oBACtB,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;wBACpC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,YAAY,CAAA;qBACvC;yBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,WAAW,EAAE;wBAClD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;qBACjC;oBACD,MAAK;gBAEP,KAAK,EAAE,CAAC,YAAY,CAAC,YAAY;oBAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,IAAI,EAAE;wBACpC,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,WAAW,CAAA;qBACtC;yBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,YAAY,CAAC,YAAY,EAAE;wBACnD,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;qBACjC;oBACD,MAAK;gBAEP,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK;oBACxB,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;oBAChC,MAAK;gBAEP;oBACE,iBAAiB,CAAC,IAAI,CAAC,CAAA;aAC1B;SACF;QACD,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB;;OAEG;IACH,EAAE,CAAQ;IAEV;;OAEG;IACH,IAAI,CAAY;IAEhB;;OAEG;IACH,QAAQ,CAAqB;IAE7B;;OAEG;IACc,OAAO,CAAgB;IAExC;;OAEG;IACH,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IAE/B;;;OAGG;IACc,IAAI,CAA8C;IAEnE;;;OAGG;IACc,SAAS,GAAG,QAAQ,EAAE,CAAA;IAEvC;;;OAGG;IACH,MAAM,GAA0B,KAAK,EAAE,CAAA;IAEvC;;OAEG;IACH,WAAW,GAAY,KAAK,CAAA;IAE5B;;OAEG;IACH,iBAAiB,GAA0B,KAAK,EAAE,CAAA;IAElD;;OAEG;IACH,OAAO,CAAiC;IAExC,YAAa,IAAoB;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,aAAa,CAAA;QACvC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA;QAE5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;QACrB,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YAC/B,KAAK,MAAM;gBACT,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;gBACrB,MAAK;YAEP,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;gBAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE;oBAC5E,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;iBAChD;gBACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;gBACrB,MAAK;YACP,KAAK,YAAY;gBACf,OAAO;gBACP,MAAK;YAEP;gBACE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;SAC7C;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;QAEnC,+BAA+B;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;QACvB,CAAC,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAI,GAAqB,CAAC,KAAK,CAAA;YACxC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC,CAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,cAAc;QACd,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1C,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;gBACtC,OAAM;aACP;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAuB,CAAC,CAAC,CAAA;QAC9D,CAAC,CAAA;QAED,uEAAuE;QACvE,kEAAkE;QAClE,IAAI,CAAC,IAAI,GAAG,IAAI,CACd,IAAI,CAAC,SAAS,EACd,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,EACzC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,SAAU,CAAC;YAC3B,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE;gBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAC5D,IAAI,OAAO,IAAI,IAAI,EAAE;oBACnB,MAAM,IAAI,cAAc,CAAC,OAAO,CAAC,CAAA;iBAClC;aACF;QACH,CAAC,CAAC,EAAE,CACL,CAAA;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,MAAM,CAAE,IAAkD,IAAI,CAAC;IAEnE,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAE,GAAwC;QAClD,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;SACtD;QACD,2CAA2C;QAC3C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAA;QACzB,IAAI;YACF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SACtB;gBAAS;YACR,IAAI,CAAC,UAAU,EAAE,CAAA;SAClB;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,KAAK,CAAE,GAAwC;QAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC7C,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE;YAC9C,IAAI,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,EAAE;gBACpC,OAAM;aACP;YACD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;YAC/D,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YAEpD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;SACtC;IACH,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAE,MAAkB;QACzC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAA;QAE7C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE;YAC9B,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;YAE3G,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC9B,QAAQ,SAAS,EAAE;oBACjB,KAAK,YAAY,CAAC,WAAW;wBAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;wBACpB,MAAK;oBACP,KAAK,YAAY,CAAC,YAAY;wBAC5B,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAA;wBAChC,MAAK;oBACP,KAAK,YAAY,CAAC,MAAM;wBACtB,IAAI,CAAC,KAAK,EAAE,CAAA;wBACZ,MAAK;oBACP,8CAA8C;oBAC9C,KAAK,YAAY,CAAC,IAAI;wBACpB,MAAK;oBACP;wBACE,iBAAiB,CAAC,SAAS,CAAC,CAAA;iBAC/B;aACF;SACF;QAED,OAAO,OAAO,CAAC,OAAO,CAAA;IACxB,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAC/C,IAAI,CAAC,WAAW,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAA;QAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;QACpB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAA;QAChC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAEpB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE;YAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;SACnB;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAA;QAC5H,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,mBAAmB;YACnB,OAAM;SACP;QAED,IAAI,YAAY,KAAK,YAAY,CAAC,IAAI,IAAI,YAAY,KAAK,YAAY,CAAC,YAAY,EAAE;YACpF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;YAC5C,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAA;SACrB;QAED,IAAI,SAAS,KAAK,YAAY,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,KAAK,EAAE,CAAA;SACb;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAA;QACnH,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,mBAAmB;YACnB,OAAM;SACP;QAED,IAAI,YAAY,KAAK,YAAY,CAAC,IAAI,IAAI,YAAY,KAAK,YAAY,CAAC,WAAW,EAAE;YACnF,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAA;YACnC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAA;SACjC;QAED,IAAI,SAAS,KAAK,YAAY,CAAC,MAAM,EAAE;YACrC,IAAI,CAAC,KAAK,EAAE,CAAA;SACb;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAE,GAAU;QACf,GAAG,CAAC,KAAK,CAAC,kEAAkE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAC1F,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAA;QACrH,IAAI,YAAY,KAAK,SAAS,EAAE;YAC9B,mBAAmB;YACnB,OAAM;SACP;QAED,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;QACrC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAEO,SAAS,CAAE,IAAqB;QACtC,IAAI;YACF,GAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;YAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA;SACnE;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,GAAG,YAAY,KAAK,EAAE;gBACxB,GAAG,CAAC,KAAK,CAAC,gCAAgC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;aAClE;SACF;IACH,CAAC;IAEO,mBAAmB;QACzB,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,OAAO;YACL,KAAK,CAAC,CAAE,CAAC,MAAM,CAAC,aAAa,CAAC;gBAC5B,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAA;gBACpC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;YACzB,CAAC;SACF,CAAA;IACH,CAAC;IAED,EAAE,CAAE,MAAc;QAChB,IAAI,MAAM,YAAY,YAAY,EAAE;YAClC,OAAO,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;SAC7C;QACD,OAAO,KAAK,CAAA;IACd,CAAC;CACF"}
|
package/dist/src/transport.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type CreateListenerOptions, type Listener, symbol, type Transport } from '@libp2p/interface-transport';
|
|
2
2
|
import type { WebRTCDialOptions } from './options.js';
|
|
3
3
|
import type { Connection } from '@libp2p/interface-connection';
|
|
4
|
+
import type { CounterGroup, Metrics } from '@libp2p/interface-metrics';
|
|
4
5
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
5
6
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
7
|
/**
|
|
@@ -20,11 +21,13 @@ export declare const CERTHASH_CODE: number;
|
|
|
20
21
|
*/
|
|
21
22
|
export interface WebRTCDirectTransportComponents {
|
|
22
23
|
peerId: PeerId;
|
|
24
|
+
metrics?: Metrics;
|
|
25
|
+
}
|
|
26
|
+
export interface WebRTCMetrics {
|
|
27
|
+
dialerEvents: CounterGroup;
|
|
23
28
|
}
|
|
24
29
|
export declare class WebRTCDirectTransport implements Transport {
|
|
25
|
-
|
|
26
|
-
* The peer for this transport
|
|
27
|
-
*/
|
|
30
|
+
private readonly metrics?;
|
|
28
31
|
private readonly components;
|
|
29
32
|
constructor(components: WebRTCDirectTransportComponents);
|
|
30
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAc/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASxD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAwC,CAAA;AAElE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAmC,CAAA;AAE/D;;GAEG;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAc/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASxD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAwC,CAAA;AAElE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAmC,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,qBAAa,qBAAsB,YAAW,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;gBAE/C,UAAU,EAAE,+BAA+B;IAYxD;;OAEG;IACG,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAM3E;;OAEG;IACH,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ;IAIzD;;OAEG;IACH,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAI7C;;OAEG;IACH,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,2BAA0B;IAEvD;;OAEG;IACH,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAO;IAExB;;OAEG;IACG,QAAQ,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAwI/E;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAkB9B"}
|
package/dist/src/transport.js
CHANGED
|
@@ -31,12 +31,18 @@ export const WEBRTC_CODE = protocols('webrtc-direct').code;
|
|
|
31
31
|
*/
|
|
32
32
|
export const CERTHASH_CODE = protocols('certhash').code;
|
|
33
33
|
export class WebRTCDirectTransport {
|
|
34
|
-
|
|
35
|
-
* The peer for this transport
|
|
36
|
-
*/
|
|
34
|
+
metrics;
|
|
37
35
|
components;
|
|
38
36
|
constructor(components) {
|
|
39
37
|
this.components = components;
|
|
38
|
+
if (components.metrics != null) {
|
|
39
|
+
this.metrics = {
|
|
40
|
+
dialerEvents: components.metrics.registerCounterGroup('libp2p_webrtc_dialer_events_total', {
|
|
41
|
+
label: 'event',
|
|
42
|
+
help: 'Total count of WebRTC dial events by type'
|
|
43
|
+
})
|
|
44
|
+
};
|
|
45
|
+
}
|
|
40
46
|
}
|
|
41
47
|
/**
|
|
42
48
|
* Dial a given multiaddr
|
|
@@ -96,6 +102,7 @@ export class WebRTCDirectTransport {
|
|
|
96
102
|
const handshakeTimeout = setTimeout(() => {
|
|
97
103
|
const error = `Data channel was never opened: state: ${handshakeDataChannel.readyState}`;
|
|
98
104
|
log.error(error);
|
|
105
|
+
this.metrics?.dialerEvents.increment({ open_error: true });
|
|
99
106
|
reject(dataChannelError('data', error));
|
|
100
107
|
}, HANDSHAKE_TIMEOUT_MS);
|
|
101
108
|
handshakeDataChannel.onopen = (_) => {
|
|
@@ -108,6 +115,8 @@ export class WebRTCDirectTransport {
|
|
|
108
115
|
const errorTarget = event.target?.toString() ?? 'not specified';
|
|
109
116
|
const error = `Error opening a data channel for handshaking: ${errorTarget}`;
|
|
110
117
|
log.error(error);
|
|
118
|
+
// NOTE: We use unknown error here but this could potentially be considered a reset by some standards.
|
|
119
|
+
this.metrics?.dialerEvents.increment({ unknown_error: true });
|
|
111
120
|
reject(dataChannelError('data', error));
|
|
112
121
|
};
|
|
113
122
|
});
|
|
@@ -136,15 +145,13 @@ export class WebRTCDirectTransport {
|
|
|
136
145
|
const wrappedDuplex = {
|
|
137
146
|
...wrappedChannel,
|
|
138
147
|
sink: wrappedChannel.sink.bind(wrappedChannel),
|
|
139
|
-
source: {
|
|
140
|
-
|
|
141
|
-
for
|
|
142
|
-
|
|
143
|
-
yield buf;
|
|
144
|
-
}
|
|
148
|
+
source: (async function* () {
|
|
149
|
+
for await (const list of wrappedChannel.source) {
|
|
150
|
+
for (const buf of list) {
|
|
151
|
+
yield buf;
|
|
145
152
|
}
|
|
146
153
|
}
|
|
147
|
-
}
|
|
154
|
+
}())
|
|
148
155
|
};
|
|
149
156
|
// Creating the connection before completion of the noise
|
|
150
157
|
// handshake ensures that the stream opening callback is set up
|
|
@@ -153,7 +160,8 @@ export class WebRTCDirectTransport {
|
|
|
153
160
|
remoteAddr: ma,
|
|
154
161
|
timeline: {
|
|
155
162
|
open: Date.now()
|
|
156
|
-
}
|
|
163
|
+
},
|
|
164
|
+
metrics: this.metrics?.dialerEvents
|
|
157
165
|
});
|
|
158
166
|
const eventListeningName = isFirefox ? 'iceconnectionstatechange' : 'connectionstatechange';
|
|
159
167
|
peerConnection.addEventListener(eventListeningName, () => {
|
|
@@ -172,7 +180,9 @@ export class WebRTCDirectTransport {
|
|
|
172
180
|
break;
|
|
173
181
|
}
|
|
174
182
|
}, { signal });
|
|
175
|
-
|
|
183
|
+
// Track opened peer connection
|
|
184
|
+
this.metrics?.dialerEvents.increment({ peer_connection: true });
|
|
185
|
+
const muxerFactory = new DataChannelMuxerFactory(peerConnection, this.metrics?.dialerEvents);
|
|
176
186
|
// For outbound connections, the remote is expected to start the noise handshake.
|
|
177
187
|
// Therefore, we need to secure an inbound noise connection from the remote.
|
|
178
188
|
await noise.secureInbound(myPeerId, wrappedDuplex, theirPeerId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAA6C,MAAM,EAAkB,MAAM,6BAA6B,CAAA;AAC/G,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,CAAC,MAAM,iBAAiB,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,WAAW,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAC3C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AACrG,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/webrtc",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "A libp2p transport using WebRTC connections",
|
|
5
5
|
"author": "",
|
|
6
6
|
"license": "Apache-2.0 OR MIT",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"url": "https://github.com/libp2p/js-libp2p-webrtc/issues"
|
|
14
14
|
},
|
|
15
15
|
"engines": {
|
|
16
|
-
"node": ">=
|
|
17
|
-
"npm": ">=
|
|
16
|
+
"node": ">=18.0.0",
|
|
17
|
+
"npm": ">=8.6.0"
|
|
18
18
|
},
|
|
19
19
|
"type": "module",
|
|
20
20
|
"types": "./dist/src/index.d.ts",
|
|
@@ -127,20 +127,20 @@
|
|
|
127
127
|
"generate:webrtc-direct": "protons src/peer_transport/pb/index.proto",
|
|
128
128
|
"build": "aegir build",
|
|
129
129
|
"test": "aegir test -t browser",
|
|
130
|
-
"test:chrome": "aegir test -t browser
|
|
131
|
-
"test:firefox": "aegir test -t browser
|
|
132
|
-
"test:peer": "aegir test -t browser -f \"./dist/test/peer.browser.spec.js\"",
|
|
130
|
+
"test:chrome": "aegir test -t browser --cov",
|
|
131
|
+
"test:firefox": "aegir test -t browser --browser firefox",
|
|
133
132
|
"lint": "aegir lint",
|
|
134
133
|
"lint:fix": "aegir lint --fix",
|
|
135
134
|
"clean": "aegir clean",
|
|
136
|
-
"dep-check": "aegir dep-check",
|
|
135
|
+
"dep-check": "aegir dep-check -i protons",
|
|
137
136
|
"release": "aegir release"
|
|
138
137
|
},
|
|
139
138
|
"dependencies": {
|
|
140
|
-
"@chainsafe/libp2p-noise": "^
|
|
139
|
+
"@chainsafe/libp2p-noise": "^12.0.0",
|
|
141
140
|
"@libp2p/interface-connection": "^5.0.2",
|
|
141
|
+
"@libp2p/interface-libp2p": "^3.1.0",
|
|
142
|
+
"@libp2p/interface-metrics": "^4.0.8",
|
|
142
143
|
"@libp2p/interface-peer-id": "^2.0.2",
|
|
143
|
-
"@libp2p/interface-peer-store": "^2.0.2",
|
|
144
144
|
"@libp2p/interface-registrar": "^2.0.12",
|
|
145
145
|
"@libp2p/interface-stream-muxer": "^4.0.1",
|
|
146
146
|
"@libp2p/interface-transport": "^4.0.2",
|
|
@@ -149,9 +149,9 @@
|
|
|
149
149
|
"@libp2p/peer-id": "^2.0.3",
|
|
150
150
|
"@multiformats/multiaddr": "^12.1.2",
|
|
151
151
|
"@protobuf-ts/runtime": "^2.9.0",
|
|
152
|
-
"abortable-iterator": "^
|
|
152
|
+
"abortable-iterator": "^5.0.1",
|
|
153
153
|
"detect-browser": "^5.3.0",
|
|
154
|
-
"it-length-prefixed": "^
|
|
154
|
+
"it-length-prefixed": "^9.0.1",
|
|
155
155
|
"it-merge": "^3.0.0",
|
|
156
156
|
"it-pb-stream": "^4.0.1",
|
|
157
157
|
"it-pipe": "^3.0.1",
|
|
@@ -165,14 +165,14 @@
|
|
|
165
165
|
"uint8arrays": "^4.0.3"
|
|
166
166
|
},
|
|
167
167
|
"devDependencies": {
|
|
168
|
-
"@libp2p/interface-mocks": "^
|
|
168
|
+
"@libp2p/interface-mocks": "^12.0.1",
|
|
169
169
|
"@libp2p/peer-id-factory": "^2.0.3",
|
|
170
170
|
"@protobuf-ts/protoc": "^2.9.0",
|
|
171
171
|
"@types/sinon": "^10.0.14",
|
|
172
|
-
"aegir": "^39.0.
|
|
173
|
-
"eslint-plugin-etc": "^2.0.2",
|
|
172
|
+
"aegir": "^39.0.6",
|
|
174
173
|
"it-pair": "^2.0.6",
|
|
175
174
|
"protons": "^7.0.2",
|
|
176
|
-
"sinon": "^15.0.4"
|
|
175
|
+
"sinon": "^15.0.4",
|
|
176
|
+
"sinon-ts": "^1.0.0"
|
|
177
177
|
}
|
|
178
178
|
}
|
package/src/maconn.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger'
|
|
2
2
|
import { nopSink, nopSource } from './util.js'
|
|
3
3
|
import type { MultiaddrConnection, MultiaddrConnectionTimeline } from '@libp2p/interface-connection'
|
|
4
|
+
import type { CounterGroup } from '@libp2p/interface-metrics'
|
|
4
5
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
5
6
|
import type { Source, Sink } from 'it-stream-types'
|
|
6
7
|
|
|
@@ -21,6 +22,11 @@ interface WebRTCMultiaddrConnectionInit {
|
|
|
21
22
|
* Holds the relevant events timestamps of the connection
|
|
22
23
|
*/
|
|
23
24
|
timeline: MultiaddrConnectionTimeline
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Optional metrics counter group for this connection
|
|
28
|
+
*/
|
|
29
|
+
metrics?: CounterGroup
|
|
24
30
|
}
|
|
25
31
|
|
|
26
32
|
export class WebRTCMultiaddrConnection implements MultiaddrConnection {
|
|
@@ -39,6 +45,11 @@ export class WebRTCMultiaddrConnection implements MultiaddrConnection {
|
|
|
39
45
|
*/
|
|
40
46
|
timeline: MultiaddrConnectionTimeline
|
|
41
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Optional metrics counter group for this connection
|
|
50
|
+
*/
|
|
51
|
+
metrics?: CounterGroup
|
|
52
|
+
|
|
42
53
|
/**
|
|
43
54
|
* The stream source, a no-op as the transport natively supports multiplexing
|
|
44
55
|
*/
|
|
@@ -53,16 +64,22 @@ export class WebRTCMultiaddrConnection implements MultiaddrConnection {
|
|
|
53
64
|
this.remoteAddr = init.remoteAddr
|
|
54
65
|
this.timeline = init.timeline
|
|
55
66
|
this.peerConnection = init.peerConnection
|
|
67
|
+
|
|
68
|
+
this.peerConnection.onconnectionstatechange = () => {
|
|
69
|
+
if (this.peerConnection.connectionState === 'closed' || this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed') {
|
|
70
|
+
this.timeline.close = Date.now()
|
|
71
|
+
}
|
|
72
|
+
}
|
|
56
73
|
}
|
|
57
74
|
|
|
58
75
|
async close (err?: Error | undefined): Promise<void> {
|
|
59
76
|
if (err !== undefined) {
|
|
60
77
|
log.error('error closing connection', err)
|
|
61
78
|
}
|
|
62
|
-
|
|
63
79
|
log.trace('closing connection')
|
|
64
80
|
|
|
65
81
|
this.timeline.close = Date.now()
|
|
66
82
|
this.peerConnection.close()
|
|
83
|
+
this.metrics?.increment({ close: true })
|
|
67
84
|
}
|
|
68
85
|
}
|
package/src/muxer.ts
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
import { WebRTCStream } from './stream.js'
|
|
2
2
|
import { nopSink, nopSource } from './util.js'
|
|
3
3
|
import type { Stream } from '@libp2p/interface-connection'
|
|
4
|
+
import type { CounterGroup } from '@libp2p/interface-metrics'
|
|
4
5
|
import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer'
|
|
5
6
|
import type { Source, Sink } from 'it-stream-types'
|
|
6
7
|
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
7
8
|
|
|
9
|
+
export interface DataChannelMuxerFactoryInit {
|
|
10
|
+
peerConnection: RTCPeerConnection
|
|
11
|
+
metrics?: CounterGroup
|
|
12
|
+
}
|
|
13
|
+
|
|
8
14
|
export class DataChannelMuxerFactory implements StreamMuxerFactory {
|
|
9
15
|
/**
|
|
10
16
|
* WebRTC Peer Connection
|
|
11
17
|
*/
|
|
12
18
|
private readonly peerConnection: RTCPeerConnection
|
|
13
19
|
private streamBuffer: WebRTCStream[] = []
|
|
20
|
+
private readonly metrics?: CounterGroup
|
|
14
21
|
|
|
15
|
-
constructor (peerConnection: RTCPeerConnection, readonly protocol = '/webrtc') {
|
|
22
|
+
constructor (peerConnection: RTCPeerConnection, metrics?: CounterGroup, readonly protocol = '/webrtc') {
|
|
16
23
|
this.peerConnection = peerConnection
|
|
17
24
|
// store any datachannels opened before upgrade has been completed
|
|
18
25
|
this.peerConnection.ondatachannel = ({ channel }) => {
|
|
@@ -28,10 +35,11 @@ export class DataChannelMuxerFactory implements StreamMuxerFactory {
|
|
|
28
35
|
})
|
|
29
36
|
this.streamBuffer.push(stream)
|
|
30
37
|
}
|
|
38
|
+
this.metrics = metrics
|
|
31
39
|
}
|
|
32
40
|
|
|
33
41
|
createStreamMuxer (init?: StreamMuxerInit | undefined): StreamMuxer {
|
|
34
|
-
return new DataChannelMuxer(this.peerConnection, this.streamBuffer, this.protocol, init)
|
|
42
|
+
return new DataChannelMuxer(this.peerConnection, this.streamBuffer, this.protocol, init, this.metrics)
|
|
35
43
|
}
|
|
36
44
|
}
|
|
37
45
|
|
|
@@ -44,6 +52,11 @@ export class DataChannelMuxer implements StreamMuxer {
|
|
|
44
52
|
*/
|
|
45
53
|
private readonly peerConnection: RTCPeerConnection
|
|
46
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Optional metrics for this data channel muxer
|
|
57
|
+
*/
|
|
58
|
+
private readonly metrics?: CounterGroup
|
|
59
|
+
|
|
47
60
|
/**
|
|
48
61
|
* Array of streams in the data channel
|
|
49
62
|
*/
|
|
@@ -69,7 +82,7 @@ export class DataChannelMuxer implements StreamMuxer {
|
|
|
69
82
|
*/
|
|
70
83
|
sink: Sink<Source<Uint8Array | Uint8ArrayList>, Promise<void>> = nopSink
|
|
71
84
|
|
|
72
|
-
constructor (peerConnection: RTCPeerConnection, streams: Stream[], readonly protocol = '/webrtc', init?: StreamMuxerInit) {
|
|
85
|
+
constructor (peerConnection: RTCPeerConnection, streams: Stream[], readonly protocol: string = '/webrtc', init?: StreamMuxerInit, metrics?: CounterGroup) {
|
|
73
86
|
/**
|
|
74
87
|
* Initialized stream muxer
|
|
75
88
|
*/
|
|
@@ -100,6 +113,7 @@ export class DataChannelMuxer implements StreamMuxer {
|
|
|
100
113
|
|
|
101
114
|
this.streams.push(stream)
|
|
102
115
|
if ((init?.onIncomingStream) != null) {
|
|
116
|
+
this.metrics?.increment({ incoming_stream: true })
|
|
103
117
|
init.onIncomingStream(stream)
|
|
104
118
|
}
|
|
105
119
|
}
|
|
@@ -120,6 +134,10 @@ export class DataChannelMuxer implements StreamMuxer {
|
|
|
120
134
|
newStream (): Stream {
|
|
121
135
|
// The spec says the label SHOULD be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
|
|
122
136
|
const channel = this.peerConnection.createDataChannel('')
|
|
137
|
+
const closeCb = (stream: Stream): void => {
|
|
138
|
+
this.metrics?.increment({ stream_end: true })
|
|
139
|
+
this.init?.onStreamEnd?.(stream)
|
|
140
|
+
}
|
|
123
141
|
const stream = new WebRTCStream({
|
|
124
142
|
channel,
|
|
125
143
|
stat: {
|
|
@@ -128,9 +146,10 @@ export class DataChannelMuxer implements StreamMuxer {
|
|
|
128
146
|
open: 0
|
|
129
147
|
}
|
|
130
148
|
},
|
|
131
|
-
closeCb: this.wrapStreamEnd(
|
|
149
|
+
closeCb: this.wrapStreamEnd(closeCb)
|
|
132
150
|
})
|
|
133
151
|
this.streams.push(stream)
|
|
152
|
+
this.metrics?.increment({ outgoing_stream: true })
|
|
134
153
|
|
|
135
154
|
return stream
|
|
136
155
|
}
|
|
@@ -15,7 +15,7 @@ const log = logger('libp2p:webrtc:peer')
|
|
|
15
15
|
|
|
16
16
|
export type IncomingStreamOpts = { rtcConfiguration?: RTCConfiguration } & IncomingStreamData
|
|
17
17
|
|
|
18
|
-
export async function handleIncomingStream ({ rtcConfiguration, stream: rawStream }: IncomingStreamOpts): Promise<
|
|
18
|
+
export async function handleIncomingStream ({ rtcConfiguration, stream: rawStream }: IncomingStreamOpts): Promise<{ pc: RTCPeerConnection, muxerFactory: StreamMuxerFactory, remoteAddress: string }> {
|
|
19
19
|
const signal = AbortSignal.timeout(DEFAULT_TIMEOUT)
|
|
20
20
|
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(pb.Message)
|
|
21
21
|
const pc = new RTCPeerConnection(rtcConfiguration)
|
|
@@ -76,7 +76,10 @@ export async function handleIncomingStream ({ rtcConfiguration, stream: rawStrea
|
|
|
76
76
|
|
|
77
77
|
// wait until candidates are connected
|
|
78
78
|
await readCandidatesUntilConnected(connectedPromise, pc, stream)
|
|
79
|
-
|
|
79
|
+
|
|
80
|
+
const remoteAddress = parseRemoteAddress(pc.currentRemoteDescription?.sdp ?? '')
|
|
81
|
+
|
|
82
|
+
return { pc, muxerFactory, remoteAddress }
|
|
80
83
|
}
|
|
81
84
|
|
|
82
85
|
export interface ConnectOptions {
|
|
@@ -85,9 +88,8 @@ export interface ConnectOptions {
|
|
|
85
88
|
rtcConfiguration?: RTCConfiguration
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
export async function initiateConnection ({ rtcConfiguration, signal, stream: rawStream }: ConnectOptions): Promise<
|
|
91
|
+
export async function initiateConnection ({ rtcConfiguration, signal, stream: rawStream }: ConnectOptions): Promise<{ pc: RTCPeerConnection, muxerFactory: StreamMuxerFactory, remoteAddress: string }> {
|
|
89
92
|
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(pb.Message)
|
|
90
|
-
|
|
91
93
|
// setup peer connection
|
|
92
94
|
const pc = new RTCPeerConnection(rtcConfiguration)
|
|
93
95
|
const muxerFactory = new DataChannelMuxerFactory(pc)
|
|
@@ -133,5 +135,21 @@ export async function initiateConnection ({ rtcConfiguration, signal, stream: ra
|
|
|
133
135
|
|
|
134
136
|
await readCandidatesUntilConnected(connectedPromise, pc, stream)
|
|
135
137
|
channel.close()
|
|
136
|
-
|
|
138
|
+
|
|
139
|
+
const remoteAddress = parseRemoteAddress(pc.currentRemoteDescription?.sdp ?? '')
|
|
140
|
+
|
|
141
|
+
return { pc, muxerFactory, remoteAddress }
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
function parseRemoteAddress (sdp: string): string {
|
|
145
|
+
// 'a=candidate:1746876089 1 udp 2113937151 0614fbad-b...ocal 54882 typ host generation 0 network-cost 999'
|
|
146
|
+
const candidateLine = sdp.split('\r\n').filter(line => line.startsWith('a=candidate')).pop()
|
|
147
|
+
const candidateParts = candidateLine?.split(' ')
|
|
148
|
+
|
|
149
|
+
if (candidateLine == null || candidateParts == null || candidateParts.length < 5) {
|
|
150
|
+
log('could not parse remote address from', candidateLine)
|
|
151
|
+
return '/webrtc'
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
return `/dnsaddr/${candidateParts[4]}/${candidateParts[2]}/${candidateParts[3]}/webrtc`
|
|
137
155
|
}
|
|
@@ -1,44 +1,55 @@
|
|
|
1
1
|
import { EventEmitter } from '@libp2p/interfaces/events'
|
|
2
|
-
import {
|
|
3
|
-
import { inappropriateMultiaddr } from '../error.js'
|
|
4
|
-
import { TRANSPORT } from './transport.js'
|
|
2
|
+
import type { Libp2pEvents } from '@libp2p/interface-libp2p'
|
|
5
3
|
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
6
|
-
import type { ListenerEvents,
|
|
4
|
+
import type { ListenerEvents, Listener } from '@libp2p/interface-transport'
|
|
5
|
+
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
7
6
|
|
|
8
7
|
export interface ListenerOptions {
|
|
9
8
|
peerId: PeerId
|
|
10
|
-
|
|
11
|
-
transportManager: TransportManager
|
|
9
|
+
events: EventEmitter<Libp2pEvents>
|
|
12
10
|
}
|
|
13
11
|
|
|
14
12
|
export class WebRTCPeerListener extends EventEmitter<ListenerEvents> implements Listener {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
private readonly peerId: PeerId
|
|
14
|
+
private listeners: Listener[] = []
|
|
15
|
+
|
|
16
|
+
constructor (opts: ListenerOptions) {
|
|
18
17
|
super()
|
|
19
|
-
}
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
this.peerId = opts.peerId
|
|
20
|
+
|
|
21
|
+
opts.events.addEventListener('transport:listening', (event) => {
|
|
22
|
+
const listener = event.detail
|
|
23
|
+
|
|
24
|
+
if (listener === this || this.listeners.includes(listener)) {
|
|
25
|
+
return
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
this.listeners.push(listener)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
opts.events.addEventListener('transport:close', (event) => {
|
|
32
|
+
const listener = event.detail
|
|
33
|
+
|
|
34
|
+
this.listeners = this.listeners.filter(l => l !== listener)
|
|
35
|
+
})
|
|
27
36
|
}
|
|
28
37
|
|
|
29
|
-
private listeningAddrs: Multiaddr[] = []
|
|
30
38
|
async listen (ma: Multiaddr): Promise<void> {
|
|
31
|
-
|
|
32
|
-
const tpt = this.opts.transportManager.transportForMultiaddr(baseAddr)
|
|
33
|
-
const listener = tpt?.createListener({ ...this.opts })
|
|
34
|
-
await listener?.listen(baseAddr)
|
|
35
|
-
const listeningAddr = ma.encapsulate(`/p2p/${this.opts.peerId.toString()}`)
|
|
36
|
-
this.listeningAddrs.push(listeningAddr)
|
|
37
|
-
listener?.addEventListener('close', () => {
|
|
38
|
-
this.listeningAddrs = this.listeningAddrs.filter(a => a !== listeningAddr)
|
|
39
|
-
})
|
|
39
|
+
this.safeDispatchEvent('listening', {})
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
getAddrs (): Multiaddr[] {
|
|
43
|
-
|
|
42
|
+
getAddrs (): Multiaddr[] {
|
|
43
|
+
return this.listeners
|
|
44
|
+
.map(l => l.getAddrs()
|
|
45
|
+
.map(ma => {
|
|
46
|
+
return ma.encapsulate(`/webrtc/p2p/${this.peerId}`)
|
|
47
|
+
})
|
|
48
|
+
)
|
|
49
|
+
.flat()
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async close (): Promise<void> {
|
|
53
|
+
this.safeDispatchEvent('close', {})
|
|
54
|
+
}
|
|
44
55
|
}
|