@libp2p/webrtc 1.2.0 → 2.0.1

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 (97) hide show
  1. package/README.md +3 -3
  2. package/dist/index.min.js +19 -16
  3. package/dist/src/index.d.ts +2 -2
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +2 -2
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/maconn.d.ts.map +1 -1
  8. package/dist/src/maconn.js +5 -0
  9. package/dist/src/maconn.js.map +1 -1
  10. package/dist/src/pb/message.d.ts +20 -0
  11. package/dist/src/pb/message.d.ts.map +1 -0
  12. package/dist/src/pb/message.js +73 -0
  13. package/dist/src/pb/message.js.map +1 -0
  14. package/dist/src/{peer_transport → private-to-private}/handler.d.ts +10 -2
  15. package/dist/src/private-to-private/handler.d.ts.map +1 -0
  16. package/dist/src/{peer_transport → private-to-private}/handler.js +23 -11
  17. package/dist/src/private-to-private/handler.js.map +1 -0
  18. package/dist/src/{peer_transport → private-to-private}/listener.d.ts +6 -7
  19. package/dist/src/private-to-private/listener.d.ts.map +1 -0
  20. package/dist/src/private-to-private/listener.js +35 -0
  21. package/dist/src/private-to-private/listener.js.map +1 -0
  22. package/dist/src/{peer_transport/pb/index.d.ts → private-to-private/pb/message.d.ts} +2 -2
  23. package/dist/src/private-to-private/pb/message.d.ts.map +1 -0
  24. package/dist/src/{peer_transport/pb/index.js → private-to-private/pb/message.js} +1 -1
  25. package/dist/src/private-to-private/pb/message.js.map +1 -0
  26. package/dist/src/{peer_transport → private-to-private}/transport.d.ts +4 -6
  27. package/dist/src/private-to-private/transport.d.ts.map +1 -0
  28. package/dist/src/{peer_transport → private-to-private}/transport.js +21 -20
  29. package/dist/src/private-to-private/transport.js.map +1 -0
  30. package/dist/src/{peer_transport → private-to-private}/util.d.ts +3 -4
  31. package/dist/src/private-to-private/util.d.ts.map +1 -0
  32. package/dist/src/{peer_transport → private-to-private}/util.js +4 -6
  33. package/dist/src/private-to-private/util.js.map +1 -0
  34. package/dist/src/private-to-public/options.d.ts.map +1 -0
  35. package/dist/src/private-to-public/options.js.map +1 -0
  36. package/dist/src/private-to-public/sdp.d.ts.map +1 -0
  37. package/dist/src/{sdp.js → private-to-public/sdp.js} +1 -1
  38. package/dist/src/private-to-public/sdp.js.map +1 -0
  39. package/dist/src/private-to-public/transport.d.ts.map +1 -0
  40. package/dist/src/{transport.js → private-to-public/transport.js} +10 -12
  41. package/dist/src/private-to-public/transport.js.map +1 -0
  42. package/dist/src/private-to-public/util.d.ts +2 -0
  43. package/dist/src/private-to-public/util.d.ts.map +1 -0
  44. package/dist/src/private-to-public/util.js +3 -0
  45. package/dist/src/private-to-public/util.js.map +1 -0
  46. package/dist/src/stream.d.ts +2 -2
  47. package/dist/src/stream.d.ts.map +1 -1
  48. package/dist/src/stream.js +17 -17
  49. package/dist/src/stream.js.map +1 -1
  50. package/dist/src/util.d.ts +1 -1
  51. package/dist/src/util.d.ts.map +1 -1
  52. package/dist/src/util.js +3 -2
  53. package/dist/src/util.js.map +1 -1
  54. package/package.json +11 -16
  55. package/src/index.ts +3 -3
  56. package/src/maconn.ts +6 -0
  57. package/src/{message.proto → pb/message.proto} +2 -4
  58. package/src/pb/message.ts +92 -0
  59. package/src/{peer_transport → private-to-private}/handler.ts +32 -14
  60. package/src/private-to-private/listener.ts +55 -0
  61. package/src/{peer_transport/pb/index.ts → private-to-private/pb/message.ts} +1 -1
  62. package/src/{peer_transport → private-to-private}/transport.ts +29 -24
  63. package/src/{peer_transport → private-to-private}/util.ts +6 -9
  64. package/src/{sdp.ts → private-to-public/sdp.ts} +1 -1
  65. package/src/{transport.ts → private-to-public/transport.ts} +10 -12
  66. package/src/private-to-public/util.ts +3 -0
  67. package/src/stream.ts +19 -19
  68. package/src/util.ts +5 -3
  69. package/dist/proto_ts/message.d.ts +0 -56
  70. package/dist/proto_ts/message.d.ts.map +0 -1
  71. package/dist/proto_ts/message.js +0 -86
  72. package/dist/proto_ts/message.js.map +0 -1
  73. package/dist/src/options.d.ts.map +0 -1
  74. package/dist/src/options.js.map +0 -1
  75. package/dist/src/peer_transport/handler.d.ts.map +0 -1
  76. package/dist/src/peer_transport/handler.js.map +0 -1
  77. package/dist/src/peer_transport/listener.d.ts.map +0 -1
  78. package/dist/src/peer_transport/listener.js +0 -33
  79. package/dist/src/peer_transport/listener.js.map +0 -1
  80. package/dist/src/peer_transport/pb/index.d.ts.map +0 -1
  81. package/dist/src/peer_transport/pb/index.js.map +0 -1
  82. package/dist/src/peer_transport/transport.d.ts.map +0 -1
  83. package/dist/src/peer_transport/transport.js.map +0 -1
  84. package/dist/src/peer_transport/util.d.ts.map +0 -1
  85. package/dist/src/peer_transport/util.js.map +0 -1
  86. package/dist/src/sdp.d.ts.map +0 -1
  87. package/dist/src/sdp.js.map +0 -1
  88. package/dist/src/transport.d.ts.map +0 -1
  89. package/dist/src/transport.js.map +0 -1
  90. package/proto_ts/message.ts +0 -106
  91. package/src/peer_transport/listener.ts +0 -44
  92. /package/dist/src/{options.d.ts → private-to-public/options.d.ts} +0 -0
  93. /package/dist/src/{options.js → private-to-public/options.js} +0 -0
  94. /package/dist/src/{sdp.d.ts → private-to-public/sdp.d.ts} +0 -0
  95. /package/dist/src/{transport.d.ts → private-to-public/transport.d.ts} +0 -0
  96. /package/src/{peer_transport/pb/index.proto → private-to-private/pb/message.proto} +0 -0
  97. /package/src/{options.ts → private-to-public/options.ts} +0 -0
@@ -1,5 +1,5 @@
1
- import { type WebRTCDirectTransportComponents } from './transport.js';
2
- import type { WebRTCTransportComponents, WebRTCTransportInit } from './peer_transport/transport.js';
1
+ import { type WebRTCDirectTransportComponents } from './private-to-public/transport.js';
2
+ import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js';
3
3
  import type { Transport } from '@libp2p/interface-transport';
4
4
  declare function webRTCDirect(): (components: WebRTCDirectTransportComponents) => Transport;
5
5
  declare function webRTC(init?: WebRTCTransportInit): (components: WebRTCTransportComponents) => Transport;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,+BAA+B,EAAE,MAAM,gBAAgB,CAAA;AAC5F,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,iBAAS,YAAY,IAAK,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnF;AAED,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,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9G,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D,iBAAS,YAAY,IAAK,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnF;AAED,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
package/dist/src/index.js CHANGED
@@ -1,5 +1,5 @@
1
- import { WebRTCTransport } from './peer_transport/transport.js';
2
- import { WebRTCDirectTransport } from './transport.js';
1
+ import { WebRTCTransport } from './private-to-private/transport.js';
2
+ import { WebRTCDirectTransport } from './private-to-public/transport.js';
3
3
  function webRTCDirect() {
4
4
  return (components) => new WebRTCDirectTransport(components);
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAwC,MAAM,gBAAgB,CAAA;AAI5F,SAAS,YAAY;IACnB,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAA;AAC/F,CAAC;AAED,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;AAC/F,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,EAAwC,MAAM,kCAAkC,CAAA;AAI9G,SAAS,YAAY;IACnB,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,CAAC,CAAA;AAC/F,CAAC;AAED,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;AAC/F,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,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,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;IAM1C,KAAK,CAAE,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAUrD"}
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,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,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,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAUrD"}
@@ -30,6 +30,11 @@ export class WebRTCMultiaddrConnection {
30
30
  this.remoteAddr = init.remoteAddr;
31
31
  this.timeline = init.timeline;
32
32
  this.peerConnection = init.peerConnection;
33
+ this.peerConnection.onconnectionstatechange = () => {
34
+ if (this.peerConnection.connectionState === 'closed' || this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed') {
35
+ this.timeline.close = Date.now();
36
+ }
37
+ };
33
38
  }
34
39
  async close(err) {
35
40
  if (err !== undefined) {
@@ -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;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,GAAuB;QAClC,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;SAC3C;QACD,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE/B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,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,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,GAAuB;QAClC,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;SAC3C;QACD,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;QAE/B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAChC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { Codec } from 'protons-runtime';
2
+ import type { Uint8ArrayList } from 'uint8arraylist';
3
+ export interface Message {
4
+ flag?: Message.Flag;
5
+ message?: Uint8Array;
6
+ }
7
+ export declare namespace Message {
8
+ enum Flag {
9
+ FIN = "FIN",
10
+ STOP_SENDING = "STOP_SENDING",
11
+ RESET = "RESET"
12
+ }
13
+ namespace Flag {
14
+ const codec: () => Codec<Flag>;
15
+ }
16
+ const codec: () => Codec<Message>;
17
+ const encode: (obj: Partial<Message>) => Uint8Array;
18
+ const decode: (buf: Uint8Array | Uint8ArrayList) => Message;
19
+ }
20
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,73 @@
1
+ /* eslint-disable import/export */
2
+ /* eslint-disable complexity */
3
+ /* eslint-disable @typescript-eslint/no-namespace */
4
+ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
5
+ /* eslint-disable @typescript-eslint/no-empty-interface */
6
+ import { enumeration, encodeMessage, decodeMessage, message } from 'protons-runtime';
7
+ export var Message;
8
+ (function (Message) {
9
+ let Flag;
10
+ (function (Flag) {
11
+ Flag["FIN"] = "FIN";
12
+ Flag["STOP_SENDING"] = "STOP_SENDING";
13
+ Flag["RESET"] = "RESET";
14
+ })(Flag = Message.Flag || (Message.Flag = {}));
15
+ let __FlagValues;
16
+ (function (__FlagValues) {
17
+ __FlagValues[__FlagValues["FIN"] = 0] = "FIN";
18
+ __FlagValues[__FlagValues["STOP_SENDING"] = 1] = "STOP_SENDING";
19
+ __FlagValues[__FlagValues["RESET"] = 2] = "RESET";
20
+ })(__FlagValues || (__FlagValues = {}));
21
+ (function (Flag) {
22
+ Flag.codec = () => {
23
+ return enumeration(__FlagValues);
24
+ };
25
+ })(Flag = Message.Flag || (Message.Flag = {}));
26
+ let _codec;
27
+ Message.codec = () => {
28
+ if (_codec == null) {
29
+ _codec = message((obj, w, opts = {}) => {
30
+ if (opts.lengthDelimited !== false) {
31
+ w.fork();
32
+ }
33
+ if (obj.flag != null) {
34
+ w.uint32(8);
35
+ Message.Flag.codec().encode(obj.flag, w);
36
+ }
37
+ if (obj.message != null) {
38
+ w.uint32(18);
39
+ w.bytes(obj.message);
40
+ }
41
+ if (opts.lengthDelimited !== false) {
42
+ w.ldelim();
43
+ }
44
+ }, (reader, length) => {
45
+ const obj = {};
46
+ const end = length == null ? reader.len : reader.pos + length;
47
+ while (reader.pos < end) {
48
+ const tag = reader.uint32();
49
+ switch (tag >>> 3) {
50
+ case 1:
51
+ obj.flag = Message.Flag.codec().decode(reader);
52
+ break;
53
+ case 2:
54
+ obj.message = reader.bytes();
55
+ break;
56
+ default:
57
+ reader.skipType(tag & 7);
58
+ break;
59
+ }
60
+ }
61
+ return obj;
62
+ });
63
+ }
64
+ return _codec;
65
+ };
66
+ Message.encode = (obj) => {
67
+ return encodeMessage(obj, Message.codec());
68
+ };
69
+ Message.decode = (buf) => {
70
+ return decodeMessage(buf, Message.codec());
71
+ };
72
+ })(Message || (Message = {}));
73
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../src/pb/message.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,19 @@ import type { StreamMuxerFactory } from '@libp2p/interface-stream-muxer';
4
4
  export type IncomingStreamOpts = {
5
5
  rtcConfiguration?: RTCConfiguration;
6
6
  } & IncomingStreamData;
7
- export declare function handleIncomingStream({ rtcConfiguration, stream: rawStream }: IncomingStreamOpts): Promise<[RTCPeerConnection, StreamMuxerFactory]>;
7
+ export declare function handleIncomingStream({ rtcConfiguration, stream: rawStream }: IncomingStreamOpts): Promise<{
8
+ pc: RTCPeerConnection;
9
+ muxerFactory: StreamMuxerFactory;
10
+ remoteAddress: string;
11
+ }>;
8
12
  export interface ConnectOptions {
9
13
  stream: Stream;
10
14
  signal: AbortSignal;
11
15
  rtcConfiguration?: RTCConfiguration;
12
16
  }
13
- export declare function initiateConnection({ rtcConfiguration, signal, stream: rawStream }: ConnectOptions): Promise<[RTCPeerConnection, StreamMuxerFactory]>;
17
+ export declare function initiateConnection({ rtcConfiguration, signal, stream: rawStream }: ConnectOptions): Promise<{
18
+ pc: RTCPeerConnection;
19
+ muxerFactory: StreamMuxerFactory;
20
+ remoteAddress: string;
21
+ }>;
14
22
  //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/handler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAMxE,MAAM,MAAM,kBAAkB,GAAG;IAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG,kBAAkB,CAAA;AAE7F,wBAAsB,oBAAoB,CAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAiEpM;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AAED,wBAAsB,kBAAkB,CAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAmDtM"}
@@ -3,13 +3,13 @@ import { abortableDuplex } from 'abortable-iterator';
3
3
  import { pbStream } from 'it-pb-stream';
4
4
  import pDefer from 'p-defer';
5
5
  import { DataChannelMuxerFactory } from '../muxer.js';
6
- import * as pb from './pb/index.js';
6
+ import { Message } from './pb/message.js';
7
7
  import { readCandidatesUntilConnected, resolveOnConnected } from './util.js';
8
8
  const DEFAULT_TIMEOUT = 30 * 1000;
9
9
  const log = logger('libp2p:webrtc:peer');
10
10
  export async function handleIncomingStream({ rtcConfiguration, stream: rawStream }) {
11
11
  const signal = AbortSignal.timeout(DEFAULT_TIMEOUT);
12
- const stream = pbStream(abortableDuplex(rawStream, signal)).pb(pb.Message);
12
+ const stream = pbStream(abortableDuplex(rawStream, signal)).pb(Message);
13
13
  const pc = new RTCPeerConnection(rtcConfiguration);
14
14
  const muxerFactory = new DataChannelMuxerFactory(pc);
15
15
  const connectedPromise = pDefer();
@@ -19,7 +19,7 @@ export async function handleIncomingStream({ rtcConfiguration, stream: rawStream
19
19
  pc.onicecandidate = ({ candidate }) => {
20
20
  answerSentPromise.promise.then(() => {
21
21
  stream.write({
22
- type: pb.Message.Type.ICE_CANDIDATE,
22
+ type: Message.Type.ICE_CANDIDATE,
23
23
  data: (candidate != null) ? JSON.stringify(candidate.toJSON()) : ''
24
24
  });
25
25
  }, (err) => {
@@ -29,7 +29,7 @@ export async function handleIncomingStream({ rtcConfiguration, stream: rawStream
29
29
  resolveOnConnected(pc, connectedPromise);
30
30
  // read an SDP offer
31
31
  const pbOffer = await stream.read();
32
- if (pbOffer.type !== pb.Message.Type.SDP_OFFER) {
32
+ if (pbOffer.type !== Message.Type.SDP_OFFER) {
33
33
  throw new Error(`expected message type SDP_OFFER, received: ${pbOffer.type ?? 'undefined'} `);
34
34
  }
35
35
  const offer = new RTCSessionDescription({
@@ -47,7 +47,7 @@ export async function handleIncomingStream({ rtcConfiguration, stream: rawStream
47
47
  throw new Error('Failed to create answer');
48
48
  });
49
49
  // write the answer to the remote
50
- stream.write({ type: pb.Message.Type.SDP_ANSWER, data: answer.sdp });
50
+ stream.write({ type: Message.Type.SDP_ANSWER, data: answer.sdp });
51
51
  await pc.setLocalDescription(answer).catch(err => {
52
52
  log.error('could not execute setLocalDescription', err);
53
53
  answerSentPromise.reject(err);
@@ -56,10 +56,11 @@ export async function handleIncomingStream({ rtcConfiguration, stream: rawStream
56
56
  answerSentPromise.resolve();
57
57
  // wait until candidates are connected
58
58
  await readCandidatesUntilConnected(connectedPromise, pc, stream);
59
- return [pc, muxerFactory];
59
+ const remoteAddress = parseRemoteAddress(pc.currentRemoteDescription?.sdp ?? '');
60
+ return { pc, muxerFactory, remoteAddress };
60
61
  }
61
62
  export async function initiateConnection({ rtcConfiguration, signal, stream: rawStream }) {
62
- const stream = pbStream(abortableDuplex(rawStream, signal)).pb(pb.Message);
63
+ const stream = pbStream(abortableDuplex(rawStream, signal)).pb(Message);
63
64
  // setup peer connection
64
65
  const pc = new RTCPeerConnection(rtcConfiguration);
65
66
  const muxerFactory = new DataChannelMuxerFactory(pc);
@@ -75,14 +76,14 @@ export async function initiateConnection({ rtcConfiguration, signal, stream: raw
75
76
  // peer
76
77
  pc.onicecandidate = ({ candidate }) => {
77
78
  stream.write({
78
- type: pb.Message.Type.ICE_CANDIDATE,
79
+ type: Message.Type.ICE_CANDIDATE,
79
80
  data: (candidate != null) ? JSON.stringify(candidate.toJSON()) : ''
80
81
  });
81
82
  };
82
83
  // create an offer
83
84
  const offerSdp = await pc.createOffer();
84
85
  // write the offer to the stream
85
- stream.write({ type: pb.Message.Type.SDP_OFFER, data: offerSdp.sdp });
86
+ stream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp });
86
87
  // set offer as local description
87
88
  await pc.setLocalDescription(offerSdp).catch(err => {
88
89
  log.error('could not execute setLocalDescription', err);
@@ -90,7 +91,7 @@ export async function initiateConnection({ rtcConfiguration, signal, stream: raw
90
91
  });
91
92
  // read answer
92
93
  const answerMessage = await stream.read();
93
- if (answerMessage.type !== pb.Message.Type.SDP_ANSWER) {
94
+ if (answerMessage.type !== Message.Type.SDP_ANSWER) {
94
95
  throw new Error('remote should send an SDP answer');
95
96
  }
96
97
  const answerSdp = new RTCSessionDescription({ type: 'answer', sdp: answerMessage.data });
@@ -100,6 +101,17 @@ export async function initiateConnection({ rtcConfiguration, signal, stream: raw
100
101
  });
101
102
  await readCandidatesUntilConnected(connectedPromise, pc, stream);
102
103
  channel.close();
103
- return [pc, muxerFactory];
104
+ const remoteAddress = parseRemoteAddress(pc.currentRemoteDescription?.sdp ?? '');
105
+ return { pc, muxerFactory, remoteAddress };
106
+ }
107
+ function parseRemoteAddress(sdp) {
108
+ // 'a=candidate:1746876089 1 udp 2113937151 0614fbad-b...ocal 54882 typ host generation 0 network-cost 999'
109
+ const candidateLine = sdp.split('\r\n').filter(line => line.startsWith('a=candidate')).pop();
110
+ const candidateParts = candidateLine?.split(' ');
111
+ if (candidateLine == null || candidateParts == null || candidateParts.length < 5) {
112
+ log('could not parse remote address from', candidateLine);
113
+ return '/webrtc';
114
+ }
115
+ return `/dnsaddr/${candidateParts[4]}/${candidateParts[2]}/${candidateParts[3]}/webrtc`;
104
116
  }
105
117
  //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/private-to-private/handler.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,16 @@
1
1
  import { EventEmitter } from '@libp2p/interfaces/events';
2
- import { type Multiaddr } from '@multiformats/multiaddr';
2
+ import type { Libp2pEvents } from '@libp2p/interface-libp2p';
3
3
  import type { PeerId } from '@libp2p/interface-peer-id';
4
- import type { ListenerEvents, TransportManager, Upgrader, Listener } from '@libp2p/interface-transport';
4
+ import type { ListenerEvents, Listener } from '@libp2p/interface-transport';
5
+ import type { Multiaddr } from '@multiformats/multiaddr';
5
6
  export interface ListenerOptions {
6
7
  peerId: PeerId;
7
- upgrader: Upgrader;
8
- transportManager: TransportManager;
8
+ events: EventEmitter<Libp2pEvents>;
9
9
  }
10
10
  export declare class WebRTCPeerListener extends EventEmitter<ListenerEvents> implements Listener {
11
- private readonly opts;
11
+ private readonly peerId;
12
+ private listeners;
12
13
  constructor(opts: ListenerOptions);
13
- private getBaseAddress;
14
- private listeningAddrs;
15
14
  listen(ma: Multiaddr): Promise<void>;
16
15
  getAddrs(): Multiaddr[];
17
16
  close(): Promise<void>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACnC;AAED,qBAAa,kBAAmB,SAAQ,YAAY,CAAC,cAAc,CAAE,YAAW,QAAQ;IACtF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,SAAS,CAAiB;gBAErB,IAAI,EAAE,eAAe;IAsB5B,MAAM,CAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,QAAQ,IAAK,SAAS,EAAE;IAUlB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAG9B"}
@@ -0,0 +1,35 @@
1
+ import { EventEmitter } from '@libp2p/interfaces/events';
2
+ export class WebRTCPeerListener extends EventEmitter {
3
+ peerId;
4
+ listeners = [];
5
+ constructor(opts) {
6
+ super();
7
+ this.peerId = opts.peerId;
8
+ opts.events.addEventListener('transport:listening', (event) => {
9
+ const listener = event.detail;
10
+ if (listener === this || this.listeners.includes(listener)) {
11
+ return;
12
+ }
13
+ this.listeners.push(listener);
14
+ });
15
+ opts.events.addEventListener('transport:close', (event) => {
16
+ const listener = event.detail;
17
+ this.listeners = this.listeners.filter(l => l !== listener);
18
+ });
19
+ }
20
+ async listen(ma) {
21
+ this.safeDispatchEvent('listening', {});
22
+ }
23
+ getAddrs() {
24
+ return this.listeners
25
+ .map(l => l.getAddrs()
26
+ .map(ma => {
27
+ return ma.encapsulate(`/webrtc/p2p/${this.peerId}`);
28
+ }))
29
+ .flat();
30
+ }
31
+ async close() {
32
+ this.safeDispatchEvent('close', {});
33
+ }
34
+ }
35
+ //# sourceMappingURL=listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-private/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAWxD,MAAM,OAAO,kBAAmB,SAAQ,YAA4B;IACjD,MAAM,CAAQ;IACvB,SAAS,GAAe,EAAE,CAAA;IAElC,YAAa,IAAqB;QAChC,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAEzB,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,EAAE;YAC5D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAA;YAE7B,IAAI,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAC1D,OAAM;aACP;YAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,CAAC,KAAK,EAAE,EAAE;YACxD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAA;YAE7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,EAAa;QACzB,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,SAAS;aAClB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;aACnB,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"}
@@ -14,7 +14,7 @@ export declare namespace Message {
14
14
  const codec: () => Codec<Type>;
15
15
  }
16
16
  const codec: () => Codec<Message>;
17
- const encode: (obj: Message) => Uint8Array;
17
+ const encode: (obj: Partial<Message>) => Uint8Array;
18
18
  const decode: (buf: Uint8Array | Uint8ArrayList) => Message;
19
19
  }
20
- //# sourceMappingURL=index.d.ts.map
20
+ //# sourceMappingURL=message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../../../../src/private-to-private/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,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,yBAAiB,OAAO,CAAC;IACvB,KAAY,IAAI;QACd,SAAS,cAAc;QACvB,UAAU,eAAe;QACzB,aAAa,kBAAkB;KAChC;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"}
@@ -70,4 +70,4 @@ export var Message;
70
70
  return decodeMessage(buf, Message.codec());
71
71
  };
72
72
  })(Message || (Message = {}));
73
- //# sourceMappingURL=index.js.map
73
+ //# sourceMappingURL=message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message.js","sourceRoot":"","sources":["../../../../src/private-to-private/pb/message.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,11 @@
1
- import { type CreateListenerOptions, type DialOptions, type Listener, symbol, type Transport, type TransportManager, type Upgrader } from '@libp2p/interface-transport';
1
+ import { type CreateListenerOptions, type DialOptions, type Listener, symbol, type Transport, type Upgrader, type TransportManager } from '@libp2p/interface-transport';
2
2
  import { type Multiaddr } from '@multiformats/multiaddr';
3
3
  import type { Connection } from '@libp2p/interface-connection';
4
+ import type { Libp2pEvents } from '@libp2p/interface-libp2p';
4
5
  import type { PeerId } from '@libp2p/interface-peer-id';
5
- import type { PeerStore } from '@libp2p/interface-peer-store';
6
6
  import type { IncomingStreamData, Registrar } from '@libp2p/interface-registrar';
7
+ import type { EventEmitter } from '@libp2p/interfaces/events';
7
8
  import type { Startable } from '@libp2p/interfaces/startable';
8
- export declare const TRANSPORT = "/webrtc";
9
- export declare const SIGNALING_PROTO_ID = "/webrtc-signaling/0.0.1";
10
- export declare const CODE: number;
11
9
  export interface WebRTCTransportInit {
12
10
  rtcConfiguration?: RTCConfiguration;
13
11
  }
@@ -16,7 +14,7 @@ export interface WebRTCTransportComponents {
16
14
  registrar: Registrar;
17
15
  upgrader: Upgrader;
18
16
  transportManager: TransportManager;
19
- peerStore: PeerStore;
17
+ events: EventEmitter<Libp2pEvents>;
20
18
  }
21
19
  export declare class WebRTCTransport implements Transport, Startable {
22
20
  private readonly components;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAIvK,OAAO,EAAa,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAA;AAK9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAS7D,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CACpC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACnC;AAED,qBAAa,eAAgB,YAAW,SAAS,EAAE,SAAS;IAIxD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,OAAO,CAAC,QAAQ,CAAQ;gBAGL,UAAU,EAAE,yBAAyB,EACrC,IAAI,EAAE,mBAAmB;IAI5C,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAOvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAK5B,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ;IAIzD,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAmB;IAEhD,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAO;IAExB,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAO7C,OAAO,CAAC,SAAS;IAqCX,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA0C/D,WAAW,CAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB9E"}
@@ -8,9 +8,10 @@ import { WebRTCMultiaddrConnection } from '../maconn.js';
8
8
  import { initiateConnection, handleIncomingStream } from './handler.js';
9
9
  import { WebRTCPeerListener } from './listener.js';
10
10
  const log = logger('libp2p:webrtc:peer');
11
- export const TRANSPORT = '/webrtc';
12
- export const SIGNALING_PROTO_ID = '/webrtc-signaling/0.0.1';
13
- export const CODE = protocols('webrtc').code;
11
+ const WEBRTC_TRANSPORT = '/webrtc';
12
+ const CIRCUIT_RELAY_TRANSPORT = '/p2p-circuit';
13
+ const SIGNALING_PROTO_ID = '/webrtc-signaling/0.0.1';
14
+ const WEBRTC_CODE = protocols('webrtc').code;
14
15
  export class WebRTCTransport {
15
16
  components;
16
17
  init;
@@ -40,20 +41,23 @@ export class WebRTCTransport {
40
41
  filter(multiaddrs) {
41
42
  return multiaddrs.filter((ma) => {
42
43
  const codes = ma.protoCodes();
43
- return codes.includes(CODE);
44
+ return codes.includes(WEBRTC_CODE);
44
45
  });
45
46
  }
46
47
  splitAddr(ma) {
47
- const addrs = ma.toString().split(`${TRANSPORT}/`);
48
+ const addrs = ma.toString().split(WEBRTC_TRANSPORT);
48
49
  if (addrs.length !== 2) {
49
- throw new CodeError('invalid multiaddr', codes.ERR_INVALID_MULTIADDR);
50
+ throw new CodeError('webrtc protocol was not present in multiaddr', codes.ERR_INVALID_MULTIADDR);
51
+ }
52
+ if (!addrs[0].includes(CIRCUIT_RELAY_TRANSPORT)) {
53
+ throw new CodeError('p2p-circuit protocol was not present in multiaddr', codes.ERR_INVALID_MULTIADDR);
50
54
  }
51
55
  // look for remote peerId
52
56
  let remoteAddr = multiaddr(addrs[0]);
53
- const destination = multiaddr('/' + addrs[1]);
57
+ const destination = multiaddr(addrs[1]);
54
58
  const destinationIdString = destination.getPeerId();
55
59
  if (destinationIdString == null) {
56
- throw new CodeError('bad destination', codes.ERR_INVALID_MULTIADDR);
60
+ throw new CodeError('destination peer id was missing', codes.ERR_INVALID_MULTIADDR);
57
61
  }
58
62
  const lastProtoInRemote = remoteAddr.protos().pop();
59
63
  if (lastProtoInRemote === undefined) {
@@ -78,47 +82,44 @@ export class WebRTCTransport {
78
82
  const controller = new AbortController();
79
83
  options.signal = controller.signal;
80
84
  }
81
- const connection = await this.components.transportManager.dial(baseAddr);
82
- const rawStream = await connection.newStream([SIGNALING_PROTO_ID], options);
85
+ const connection = await this.components.transportManager.dial(baseAddr, options);
86
+ const signalingStream = await connection.newStream([SIGNALING_PROTO_ID], options);
83
87
  try {
84
- const [pc, muxerFactory] = await initiateConnection({
85
- stream: rawStream,
88
+ const { pc, muxerFactory, remoteAddress } = await initiateConnection({
89
+ stream: signalingStream,
86
90
  rtcConfiguration: this.init.rtcConfiguration,
87
91
  signal: options.signal
88
92
  });
89
- const webrtcMultiaddr = baseAddr.encapsulate(`${TRANSPORT}/p2p/${peerId.toString()}`);
90
93
  const result = await options.upgrader.upgradeOutbound(new WebRTCMultiaddrConnection({
91
94
  peerConnection: pc,
92
95
  timeline: { open: Date.now() },
93
- remoteAddr: webrtcMultiaddr
96
+ remoteAddr: multiaddr(remoteAddress).encapsulate(`/p2p/${peerId.toString()}`)
94
97
  }), {
95
98
  skipProtection: true,
96
99
  skipEncryption: true,
97
100
  muxerFactory
98
101
  });
99
102
  // close the stream if SDP has been exchanged successfully
100
- rawStream.close();
103
+ signalingStream.close();
101
104
  return result;
102
105
  }
103
106
  catch (err) {
104
107
  // reset the stream in case of any error
105
- rawStream.reset();
108
+ signalingStream.reset();
106
109
  throw err;
107
110
  }
108
111
  }
109
112
  async _onProtocol({ connection, stream }) {
110
113
  try {
111
- const [pc, muxerFactory] = await handleIncomingStream({
114
+ const { pc, muxerFactory, remoteAddress } = await handleIncomingStream({
112
115
  rtcConfiguration: this.init.rtcConfiguration,
113
116
  connection,
114
117
  stream
115
118
  });
116
- const remotePeerId = connection.remoteAddr.getPeerId();
117
- const webrtcMultiaddr = connection.remoteAddr.encapsulate(`${TRANSPORT}/p2p/${remotePeerId}`);
118
119
  await this.components.upgrader.upgradeInbound(new WebRTCMultiaddrConnection({
119
120
  peerConnection: pc,
120
121
  timeline: { open: (new Date()).getTime() },
121
- remoteAddr: webrtcMultiaddr
122
+ remoteAddr: multiaddr(remoteAddress).encapsulate(`/p2p/${connection.remotePeer.toString()}`)
122
123
  }), {
123
124
  skipEncryption: true,
124
125
  skipProtection: true,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,8 @@
1
- import * as pb from './pb/index.js';
1
+ import { Message } from './pb/message.js';
2
2
  import type { DeferredPromise } from 'p-defer';
3
- export declare const isFirefox: boolean;
4
3
  interface MessageStream {
5
- read: () => Promise<pb.Message>;
6
- write: (d: pb.Message) => void | Promise<void>;
4
+ read: () => Promise<Message>;
5
+ write: (d: Message) => void | Promise<void>;
7
6
  }
8
7
  export declare const readCandidatesUntilConnected: (connectedPromise: DeferredPromise<void>, pc: RTCPeerConnection, stream: MessageStream) => Promise<void>;
9
8
  export declare function resolveOnConnected(pc: RTCPeerConnection, promise: DeferredPromise<void>): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5B,KAAK,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAID,eAAO,MAAM,4BAA4B,qBAA4B,gBAAgB,IAAI,CAAC,MAAM,iBAAiB,UAAU,aAAa,KAAG,QAAQ,IAAI,CA4BtJ,CAAA;AAED,wBAAgB,kBAAkB,CAAE,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAgB/F"}
@@ -1,8 +1,6 @@
1
1
  import { logger } from '@libp2p/logger';
2
- import { detect } from 'detect-browser';
3
- import * as pb from './pb/index.js';
4
- const browser = detect();
5
- export const isFirefox = ((browser != null) && browser.name === 'firefox');
2
+ import { isFirefox } from '../util.js';
3
+ import { Message } from './pb/message.js';
6
4
  const log = logger('libp2p:webrtc:peer:util');
7
5
  export const readCandidatesUntilConnected = async (connectedPromise, pc, stream) => {
8
6
  while (true) {
@@ -10,7 +8,7 @@ export const readCandidatesUntilConnected = async (connectedPromise, pc, stream)
10
8
  // check if readResult is a message
11
9
  if (readResult instanceof Object) {
12
10
  const message = readResult;
13
- if (message.type !== pb.Message.Type.ICE_CANDIDATE) {
11
+ if (message.type !== Message.Type.ICE_CANDIDATE) {
14
12
  throw new Error('expected only ice candidates');
15
13
  }
16
14
  // end of candidates has been signalled
@@ -44,7 +42,7 @@ export function resolveOnConnected(pc, promise) {
44
42
  case 'failed':
45
43
  case 'disconnected':
46
44
  case 'closed':
47
- promise.reject();
45
+ promise.reject(new Error('RTCPeerConnection was closed'));
48
46
  break;
49
47
  default:
50
48
  break;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAQzC,MAAM,GAAG,GAAG,MAAM,CAAC,yBAAyB,CAAC,CAAA;AAE7C,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,EAAE,gBAAuC,EAAE,EAAqB,EAAE,MAAqB,EAAiB,EAAE;IACzJ,OAAO,IAAI,EAAE;QACX,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;QAChF,mCAAmC;QACnC,IAAI,UAAU,YAAY,MAAM,EAAE;YAChC,MAAM,OAAO,GAAG,UAAU,CAAA;YAC1B,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC/C,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;aAChD;YACD,uCAAuC;YACvC,IAAI,OAAO,CAAC,IAAI,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,EAAE,EAAE;gBAC/C,GAAG,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAA;gBACvC,MAAK;aACN;YAED,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;YACzD,IAAI;gBACF,MAAM,EAAE,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aACxE;YAAC,OAAO,GAAG,EAAE;gBACZ,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;gBAC1C,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;aAC1C;SACF;aAAM;YACL,6BAA6B;YAC7B,MAAK;SACN;KACF;IACD,MAAM,gBAAgB,CAAC,OAAO,CAAA;AAChC,CAAC,CAAA;AAED,MAAM,UAAU,kBAAkB,CAAE,EAAqB,EAAE,OAA8B;IACvF,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE;QAC/E,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAA;QACrE,QAAQ,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE;YAC9D,KAAK,WAAW;gBACd,OAAO,CAAC,OAAO,EAAE,CAAA;gBACjB,MAAK;YACP,KAAK,QAAQ,CAAC;YACd,KAAK,cAAc,CAAC;YACpB,KAAK,QAAQ;gBACX,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAA;gBACzD,MAAK;YACP;gBACE,MAAK;SACR;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAErF,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;CAAG;AACvE,MAAM,WAAW,iBAAkB,SAAQ,WAAW;CAAG"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/private-to-public/options.ts"],"names":[],"mappings":""}