@libp2p/webrtc 5.0.27 → 5.1.0-1fc0e2662

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 (120) hide show
  1. package/README.md +16 -21
  2. package/dist/index.min.js +31 -12
  3. package/dist/src/constants.d.ts +2 -0
  4. package/dist/src/constants.d.ts.map +1 -1
  5. package/dist/src/constants.js +2 -0
  6. package/dist/src/constants.js.map +1 -1
  7. package/dist/src/index.d.ts +33 -21
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +16 -21
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/maconn.d.ts +1 -0
  12. package/dist/src/maconn.d.ts.map +1 -1
  13. package/dist/src/maconn.js +4 -3
  14. package/dist/src/maconn.js.map +1 -1
  15. package/dist/src/muxer.d.ts +1 -0
  16. package/dist/src/muxer.d.ts.map +1 -1
  17. package/dist/src/muxer.js +2 -2
  18. package/dist/src/muxer.js.map +1 -1
  19. package/dist/src/private-to-private/util.d.ts +1 -0
  20. package/dist/src/private-to-private/util.d.ts.map +1 -1
  21. package/dist/src/private-to-private/util.js.map +1 -1
  22. package/dist/src/private-to-public/listener.browser.d.ts +17 -0
  23. package/dist/src/private-to-public/listener.browser.d.ts.map +1 -0
  24. package/dist/src/private-to-public/listener.browser.js +13 -0
  25. package/dist/src/private-to-public/listener.browser.js.map +1 -0
  26. package/dist/src/private-to-public/listener.d.ts +37 -0
  27. package/dist/src/private-to-public/listener.d.ts.map +1 -0
  28. package/dist/src/private-to-public/listener.js +175 -0
  29. package/dist/src/private-to-public/listener.js.map +1 -0
  30. package/dist/src/private-to-public/pb/message.d.ts.map +1 -0
  31. package/dist/src/private-to-public/pb/message.js.map +1 -0
  32. package/dist/src/private-to-public/transport.d.ts +10 -11
  33. package/dist/src/private-to-public/transport.d.ts.map +1 -1
  34. package/dist/src/private-to-public/transport.js +28 -155
  35. package/dist/src/private-to-public/transport.js.map +1 -1
  36. package/dist/src/private-to-public/utils/connect.d.ts +27 -0
  37. package/dist/src/private-to-public/utils/connect.d.ts.map +1 -0
  38. package/dist/src/private-to-public/utils/connect.js +142 -0
  39. package/dist/src/private-to-public/utils/connect.js.map +1 -0
  40. package/dist/src/private-to-public/utils/generate-certificates.browser.d.ts +2 -0
  41. package/dist/src/private-to-public/utils/generate-certificates.browser.d.ts.map +1 -0
  42. package/dist/src/private-to-public/utils/generate-certificates.browser.js +4 -0
  43. package/dist/src/private-to-public/utils/generate-certificates.browser.js.map +1 -0
  44. package/dist/src/private-to-public/utils/generate-certificates.d.ts +8 -0
  45. package/dist/src/private-to-public/utils/generate-certificates.d.ts.map +1 -0
  46. package/dist/src/private-to-public/utils/generate-certificates.js +39 -0
  47. package/dist/src/private-to-public/utils/generate-certificates.js.map +1 -0
  48. package/dist/src/private-to-public/utils/generate-noise-prologue.d.ts +7 -0
  49. package/dist/src/private-to-public/utils/generate-noise-prologue.d.ts.map +1 -0
  50. package/dist/src/private-to-public/utils/generate-noise-prologue.js +22 -0
  51. package/dist/src/private-to-public/utils/generate-noise-prologue.js.map +1 -0
  52. package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.d.ts +2 -0
  53. package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.d.ts.map +1 -0
  54. package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js +20 -0
  55. package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js.map +1 -0
  56. package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts +19 -0
  57. package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts.map +1 -0
  58. package/dist/src/private-to-public/utils/get-rtcpeerconnection.js +86 -0
  59. package/dist/src/private-to-public/utils/get-rtcpeerconnection.js.map +1 -0
  60. package/dist/src/private-to-public/utils/sdp.d.ts +36 -0
  61. package/dist/src/private-to-public/utils/sdp.d.ts.map +1 -0
  62. package/dist/src/private-to-public/{sdp.js → utils/sdp.js} +72 -57
  63. package/dist/src/private-to-public/utils/sdp.js.map +1 -0
  64. package/dist/src/private-to-public/utils/stun-listener.d.ts +15 -0
  65. package/dist/src/private-to-public/utils/stun-listener.d.ts.map +1 -0
  66. package/dist/src/private-to-public/utils/stun-listener.js +79 -0
  67. package/dist/src/private-to-public/utils/stun-listener.js.map +1 -0
  68. package/dist/src/stream.d.ts +2 -0
  69. package/dist/src/stream.d.ts.map +1 -1
  70. package/dist/src/stream.js +56 -12
  71. package/dist/src/stream.js.map +1 -1
  72. package/dist/src/util.d.ts +4 -0
  73. package/dist/src/util.d.ts.map +1 -1
  74. package/dist/src/util.js +7 -1
  75. package/dist/src/util.js.map +1 -1
  76. package/dist/src/webrtc/index.d.ts +2 -1
  77. package/dist/src/webrtc/index.d.ts.map +1 -1
  78. package/dist/src/webrtc/index.js +1 -1
  79. package/dist/src/webrtc/index.js.map +1 -1
  80. package/package.json +23 -12
  81. package/src/constants.ts +4 -0
  82. package/src/index.ts +35 -21
  83. package/src/maconn.ts +5 -3
  84. package/src/muxer.ts +3 -2
  85. package/src/private-to-private/util.ts +1 -0
  86. package/src/private-to-public/listener.browser.ts +28 -0
  87. package/src/private-to-public/listener.ts +233 -0
  88. package/src/private-to-public/transport.ts +39 -182
  89. package/src/private-to-public/utils/connect.ts +192 -0
  90. package/src/private-to-public/utils/generate-certificates.browser.ts +3 -0
  91. package/src/private-to-public/utils/generate-certificates.ts +51 -0
  92. package/src/private-to-public/utils/generate-noise-prologue.ts +26 -0
  93. package/src/private-to-public/utils/get-rtcpeerconnection.browser.ts +22 -0
  94. package/src/private-to-public/utils/get-rtcpeerconnection.ts +108 -0
  95. package/src/private-to-public/utils/sdp.ts +174 -0
  96. package/src/private-to-public/utils/stun-listener.ts +104 -0
  97. package/src/stream.ts +68 -15
  98. package/src/util.ts +11 -1
  99. package/src/webrtc/index.ts +2 -1
  100. package/dist/src/pb/message.d.ts.map +0 -1
  101. package/dist/src/pb/message.js.map +0 -1
  102. package/dist/src/private-to-public/options.d.ts +0 -6
  103. package/dist/src/private-to-public/options.d.ts.map +0 -1
  104. package/dist/src/private-to-public/options.js +0 -2
  105. package/dist/src/private-to-public/options.js.map +0 -1
  106. package/dist/src/private-to-public/sdp.d.ts +0 -31
  107. package/dist/src/private-to-public/sdp.d.ts.map +0 -1
  108. package/dist/src/private-to-public/sdp.js.map +0 -1
  109. package/dist/src/private-to-public/util.d.ts +0 -2
  110. package/dist/src/private-to-public/util.d.ts.map +0 -1
  111. package/dist/src/private-to-public/util.js +0 -3
  112. package/dist/src/private-to-public/util.js.map +0 -1
  113. package/dist/typedoc-urls.json +0 -12
  114. package/src/private-to-public/options.ts +0 -4
  115. package/src/private-to-public/sdp.ts +0 -159
  116. package/src/private-to-public/util.ts +0 -2
  117. /package/dist/src/{pb → private-to-public/pb}/message.d.ts +0 -0
  118. /package/dist/src/{pb → private-to-public/pb}/message.js +0 -0
  119. /package/src/{pb → private-to-public/pb}/message.proto +0 -0
  120. /package/src/{pb → private-to-public/pb}/message.ts +0 -0
@@ -1,14 +1,15 @@
1
1
  import { StreamStateError, TimeoutError } from '@libp2p/interface';
2
2
  import { AbstractStream } from '@libp2p/utils/abstract-stream';
3
+ import { anySignal } from 'any-signal';
3
4
  import * as lengthPrefixed from 'it-length-prefixed';
4
5
  import { pushable } from 'it-pushable';
5
6
  import pDefer from 'p-defer';
6
- import { pEvent } from 'p-event';
7
7
  import pTimeout from 'p-timeout';
8
+ import { raceEvent } from 'race-event';
8
9
  import { raceSignal } from 'race-signal';
9
10
  import { encodingLength } from 'uint8-varint';
10
11
  import { Uint8ArrayList } from 'uint8arraylist';
11
- import { Message } from './pb/message.js';
12
+ import { Message } from './private-to-public/pb/message.js';
12
13
  /**
13
14
  * How much can be buffered to the DataChannel at once
14
15
  */
@@ -81,6 +82,7 @@ export class WebRTCStream extends AbstractStream {
81
82
  receiveFinAck;
82
83
  finAckTimeout;
83
84
  openTimeout;
85
+ closeController;
84
86
  constructor(init) {
85
87
  // override onEnd to send/receive FIN_ACK before closing the stream
86
88
  const originalOnEnd = init.onEnd;
@@ -103,6 +105,7 @@ export class WebRTCStream extends AbstractStream {
103
105
  .then(() => {
104
106
  // stop processing incoming messages
105
107
  this.incomingData.end();
108
+ this.channel.close();
106
109
  // final cleanup
107
110
  originalOnEnd?.(err);
108
111
  })
@@ -120,6 +123,7 @@ export class WebRTCStream extends AbstractStream {
120
123
  this.receiveFinAck = pDefer();
121
124
  this.finAckTimeout = init.closeTimeout ?? FIN_ACK_TIMEOUT;
122
125
  this.openTimeout = init.openTimeout ?? OPEN_TIMEOUT;
126
+ this.closeController = new AbortController();
123
127
  // set up initial state
124
128
  switch (this.channel.readyState) {
125
129
  case 'open':
@@ -143,6 +147,9 @@ export class WebRTCStream extends AbstractStream {
143
147
  this.timeline.open = new Date().getTime();
144
148
  };
145
149
  this.channel.onclose = (_evt) => {
150
+ this.log.trace('received onclose event');
151
+ // stop any in-progress writes
152
+ this.closeController.abort();
146
153
  // if the channel has closed we'll never receive a FIN_ACK so resolve the
147
154
  // promise so we don't try to wait later
148
155
  this.receiveFinAck.resolve();
@@ -151,6 +158,9 @@ export class WebRTCStream extends AbstractStream {
151
158
  });
152
159
  };
153
160
  this.channel.onerror = (evt) => {
161
+ this.log.trace('received onerror event');
162
+ // stop any in-progress writes
163
+ this.closeController.abort();
154
164
  const err = evt.error;
155
165
  this.abort(err);
156
166
  };
@@ -180,30 +190,54 @@ export class WebRTCStream extends AbstractStream {
180
190
  // opening new streams is handled by WebRTC so this is a noop
181
191
  }
182
192
  async _sendMessage(data, checkBuffer = true) {
193
+ if (this.channel.readyState === 'closed' || this.channel.readyState === 'closing') {
194
+ throw new StreamStateError(`Invalid datachannel state - ${this.channel.readyState}`);
195
+ }
196
+ if (this.channel.readyState !== 'open') {
197
+ const timeout = AbortSignal.timeout(this.openTimeout);
198
+ const signal = anySignal([
199
+ this.closeController.signal,
200
+ timeout
201
+ ]);
202
+ try {
203
+ this.log('channel state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState);
204
+ await raceEvent(this.channel, 'open', signal);
205
+ }
206
+ finally {
207
+ signal.clear();
208
+ }
209
+ this.log('channel state is now "%s", sending data', this.channel.readyState);
210
+ }
183
211
  if (checkBuffer && this.channel.bufferedAmount > this.maxBufferedAmount) {
212
+ const timeout = AbortSignal.timeout(this.bufferedAmountLowEventTimeout);
213
+ const signal = anySignal([
214
+ this.closeController.signal,
215
+ timeout
216
+ ]);
184
217
  try {
185
218
  this.log('channel buffer is %d, wait for "bufferedamountlow" event', this.channel.bufferedAmount);
186
- await pEvent(this.channel, 'bufferedamountlow', { timeout: this.bufferedAmountLowEventTimeout });
219
+ await raceEvent(this.channel, 'bufferedamountlow', signal);
187
220
  }
188
221
  catch (err) {
189
- if (err instanceof TimeoutError) {
222
+ if (timeout.aborted) {
190
223
  throw new TimeoutError(`Timed out waiting for DataChannel buffer to clear after ${this.bufferedAmountLowEventTimeout}ms`);
191
224
  }
192
225
  throw err;
193
226
  }
227
+ finally {
228
+ signal.clear();
229
+ }
194
230
  }
195
- if (this.channel.readyState === 'closed' || this.channel.readyState === 'closing') {
196
- throw new StreamStateError(`Invalid datachannel state - ${this.channel.readyState}`);
231
+ try {
232
+ // send message without copying data
233
+ this.channel.send(data.subarray());
197
234
  }
198
- if (this.channel.readyState !== 'open') {
199
- this.log('channel state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState);
200
- await pEvent(this.channel, 'open', { timeout: this.openTimeout });
201
- this.log('channel state is now "%s", sending data', this.channel.readyState);
235
+ catch (err) {
236
+ this.log.error('error while sending message', err);
202
237
  }
203
- // send message without copying data
204
- this.channel.send(data.subarray());
205
238
  }
206
239
  async sendData(data) {
240
+ this.log.trace('-> will send %d bytes', data.byteLength);
207
241
  // sending messages is an async operation so use a copy of the list as it
208
242
  // may be changed beneath us
209
243
  data = data.sublist();
@@ -212,9 +246,12 @@ export class WebRTCStream extends AbstractStream {
212
246
  const buf = data.subarray(0, toSend);
213
247
  const msgbuf = Message.encode({ message: buf });
214
248
  const sendbuf = lengthPrefixed.encode.single(msgbuf);
249
+ this.log.trace('-> sending message %s', this.channel.readyState);
215
250
  await this._sendMessage(sendbuf);
251
+ this.log.trace('-> sent message %s', this.channel.readyState);
216
252
  data.consume(toSend);
217
253
  }
254
+ this.log.trace('-> sent data %s', this.channel.readyState);
218
255
  }
219
256
  async sendReset() {
220
257
  try {
@@ -225,6 +262,10 @@ export class WebRTCStream extends AbstractStream {
225
262
  }
226
263
  }
227
264
  async sendCloseWrite(options) {
265
+ if (this.channel.readyState !== 'open') {
266
+ this.receiveFinAck.resolve();
267
+ return;
268
+ }
228
269
  const sent = await this._sendFlag(Message.Flag.FIN);
229
270
  if (sent) {
230
271
  this.log.trace('awaiting FIN_ACK');
@@ -245,6 +286,9 @@ export class WebRTCStream extends AbstractStream {
245
286
  this.receiveFinAck.resolve();
246
287
  }
247
288
  async sendCloseRead() {
289
+ if (this.channel.readyState !== 'open') {
290
+ return;
291
+ }
248
292
  await this._sendFlag(Message.Flag.STOP_SENDING);
249
293
  }
250
294
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAClE,OAAO,EAAE,cAAc,EAA2B,MAAM,+BAA+B,CAAA;AACvF,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAiB,QAAQ,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,QAAQ,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAiBzC;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAElD;;GAEG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,EAAE,GAAG,IAAI,CAAA;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,IAAI,CAAA;AAEzC;;;;;;GAMG;AACH,SAAS,yBAAyB,CAAE,cAAc,GAAG,gBAAgB;IACnE,0BAA0B;IAC1B,MAAM,aAAa,GAAG,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC,CAAA;IACrF,MAAM,SAAS,GAAG,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA,CAAC,gBAAgB;IAC3F,MAAM,kBAAkB,GAAG,CAAC,CAAA,CAAC,UAAU;IACvC,MAAM,SAAS,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,kBAAkB,CAAA;IAEjF,+DAA+D;IAC/D,MAAM,wBAAwB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IAE1D,OAAO,aAAa,GAAG,SAAS,GAAG,kBAAkB,GAAG,wBAAwB,CAAA;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,yBAAyB,EAAE,CAAA;AAE5D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAA;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAA;AAEhC,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC9C;;OAEG;IACc,OAAO,CAAgB;IAExC;;;OAGG;IACc,YAAY,CAAsB;IAElC,iBAAiB,CAAQ;IAEzB,6BAA6B,CAAQ;IAEtD;;OAEG;IACc,cAAc,CAAQ;IAEvC;;OAEG;IACc,aAAa,CAAuB;IACpC,aAAa,CAAQ;IACrB,WAAW,CAAQ;IAEpC,YAAa,IAAsB;QACjC,mEAAmE;QACnE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,CAAC,GAAW,EAAQ,EAAE;YACjC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;YAEjE,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;gBAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBAChE,OAAM;gBACR,CAAC;gBAED,qDAAqD;gBACrD,IAAI,CAAC;oBACH,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE;wBACzC,YAAY,EAAE,IAAI,CAAC,aAAa;qBACjC,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAA;gBAChD,CAAC;YACH,CAAC,CAAC;iBACC,IAAI,CAAC,GAAG,EAAE;gBACX,oCAAoC;gBAClC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA;gBAEvB,gBAAgB;gBAChB,aAAa,EAAE,CAAC,GAAG,CAAC,CAAA;YACtB,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAA;YAC5C,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;QAED,KAAK,CAAC,IAAI,CAAC,CAAA;QAEX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,aAAa,CAAA;QACvC,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAc,CAAA;QAC1C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,6BAA6B,IAAI,2BAA2B,CAAA;QACtG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAA;QACtE,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,gBAAgB,CAAC,GAAG,iBAAiB,CAAA;QACnF,IAAI,CAAC,aAAa,GAAG,MAAM,EAAE,CAAA;QAC7B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,IAAI,eAAe,CAAA;QACzD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,YAAY,CAAA;QAEnD,uBAAuB;QACvB,QAAQ,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;YAChC,KAAK,MAAM;gBACT,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;gBACzC,MAAK;YAEP,KAAK,QAAQ,CAAC;YACd,KAAK,SAAS;gBACZ,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;oBACnE,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;gBAClC,CAAC;gBACD,MAAK;YACP,KAAK,YAAY;gBACf,OAAO;gBACP,MAAK;YAEP;gBACE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;gBACvE,MAAM,IAAI,gBAAgB,CAAC,2BAA2B,CAAC,CAAA;QAC3D,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE;YAC7B,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAC3C,CAAC,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE;YAC9B,yEAAyE;YACzE,wCAAwC;YACxC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;YAE5B,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAA;YAClE,CAAC,CAAC,CAAA;QACJ,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,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,KAAgC,EAAE,EAAE;YAClE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;YAEtB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAM;YACR,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAClE,CAAC,CAAA;QAED,MAAM,IAAI,GAAG,IAAI,CAAA;QAEjB,uEAAuE;QACvE,kEAAkE;QAClE,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAChC,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACjE,MAAM,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAA;gBAEjD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;oBACpB,IAAI,CAAC,UAAU,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC,CAAC;aACC,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iDAAiD,EAAE,GAAG,CAAC,CAAA;QACxE,CAAC,CAAC,CAAA;IACN,CAAC;IAED,aAAa;QACX,6DAA6D;IAC/D,CAAC;IAED,KAAK,CAAC,YAAY,CAAE,IAAoB,EAAE,cAAuB,IAAI;QACnE,IAAI,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACxE,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,0DAA0D,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAA;gBACjG,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAA;YAClG,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,GAAG,YAAY,YAAY,EAAE,CAAC;oBAChC,MAAM,IAAI,YAAY,CAAC,2DAA2D,IAAI,CAAC,6BAA6B,IAAI,CAAC,CAAA;gBAC3H,CAAC;gBAED,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClF,MAAM,IAAI,gBAAgB,CAAC,+BAA+B,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;QACtF,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACvC,IAAI,CAAC,GAAG,CAAC,oFAAoF,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YACvH,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;YACjE,IAAI,CAAC,GAAG,CAAC,yCAAyC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAC9E,CAAC;QAED,oCAAoC;QACpC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;IACpC,CAAC;IAED,KAAK,CAAC,QAAQ,CAAE,IAAoB;QAClC,yEAAyE;QACzE,4BAA4B;QAC5B,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QAErB,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;YAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;YACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAA;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACpD,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAEhC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACtB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS;QACb,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAE,OAAqB;QACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEnD,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;YAClC,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;oBAC5D,YAAY,EAAE,6DAA6D;oBAC3E,SAAS,EAAE,wBAAwB;iBACpC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAA;QAC5D,CAAC;QAED,4DAA4D;QAC5D,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAE,MAAsB;QACrD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAEtC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uDAAuD,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YAExH,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACtC,8DAA8D;gBAC9D,IAAI,CAAC,gBAAgB,EAAE,CAAA;gBAEvB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;gBACjC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;qBACtC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAA;gBAC1D,CAAC,CAAC,CAAA;YACN,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACxC,qDAAqD;gBACrD,IAAI,CAAC,KAAK,EAAE,CAAA;YACd,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/C,iCAAiC;gBACjC,IAAI,CAAC,eAAe,EAAE,CAAA;YACxB,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;gBAClC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;YAC9B,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC,OAAO,CAAA;QACxB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,SAAS,CAAE,IAAkB;QACzC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;YACvC,0EAA0E;YAC1E,0EAA0E;YAC1E,0CAA0C;YAC1C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4DAA4D,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YACtH,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;QACvC,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QAExD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAE3C,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,6BAA6B,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAA;QACrE,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;CACF;AAwBD,MAAM,UAAU,YAAY,CAAE,OAA4B;IACxD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAEtC,OAAO,IAAI,YAAY,CAAC;QACtB,EAAE,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE;QACnE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,wBAAwB,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACnF,GAAG,OAAO;KACX,CAAC,CAAA;AACJ,CAAC"}
1
+ {"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import type { RTCDataChannel } from './webrtc/index.js';
2
+ import type { PeerConnection } from '@ipshipyard/node-datachannel';
1
3
  import type { LoggerOptions } from '@libp2p/interface';
2
4
  export declare const isFirefox: boolean;
3
5
  export declare const nopSource: () => AsyncGenerator<Uint8Array, any, unknown>;
@@ -8,5 +10,7 @@ export interface AbortPromiseOptions {
8
10
  signal?: AbortSignal;
9
11
  message?: string;
10
12
  }
13
+ export declare function isPeerConnection(obj: any): obj is PeerConnection;
11
14
  export declare function getRtcConfiguration(config?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>)): Promise<RTCConfiguration>;
15
+ export declare const genUfrag: (len?: number) => string;
12
16
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,eAAO,MAAM,SAAS,SAAoD,CAAA;AAE1E,eAAO,MAAM,SAAS,QAA4B,eAAe,UAAU,EAAE,GAAG,EAAE,OAAO,CAAI,CAAA;AAE7F,eAAO,MAAM,OAAO,MAAa,GAAG,KAAG,QAAQ,IAAI,CAAO,CAAA;AAE1D,eAAO,MAAM,0BAA0B,QAAY,CAAA;AAEnD,wBAAgB,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,oBAAqC,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA8C1J;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,mBAAmB,CAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CActJ"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,eAAO,MAAM,SAAS,SAAoD,CAAA;AAE1E,eAAO,MAAM,SAAS,QAA4B,eAAe,UAAU,EAAE,GAAG,EAAE,OAAO,CAAI,CAAA;AAE7F,eAAO,MAAM,OAAO,MAAa,GAAG,KAAG,QAAQ,IAAI,CAAO,CAAA;AAE1D,eAAO,MAAM,0BAA0B,QAAY,CAAA;AAEnD,wBAAgB,aAAa,CAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,oBAAqC,EAAE,OAAO,EAAE,aAAa,GAAG,IAAI,CA8C1J;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,cAAc,CAEjE;AAED,wBAAsB,mBAAmB,CAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CActJ;AAED,eAAO,MAAM,QAAQ,SAAS,MAAM,KAAQ,MAE3C,CAAA"}
package/dist/src/util.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { detect } from 'detect-browser';
2
2
  import pDefer from 'p-defer';
3
3
  import pTimeout from 'p-timeout';
4
- import { DEFAULT_ICE_SERVERS } from './constants.js';
4
+ import { DEFAULT_ICE_SERVERS, UFRAG_ALPHABET, UFRAG_PREFIX } from './constants.js';
5
5
  const browser = detect();
6
6
  export const isFirefox = ((browser != null) && browser.name === 'firefox');
7
7
  export const nopSource = async function* nop() { };
@@ -48,6 +48,9 @@ export function drainAndClose(channel, direction, drainTimeout = DATA_CHANNEL_DR
48
48
  options.log.error('error closing outbound stream', err);
49
49
  });
50
50
  }
51
+ export function isPeerConnection(obj) {
52
+ return typeof obj.state === 'function';
53
+ }
51
54
  export async function getRtcConfiguration(config) {
52
55
  config = config ?? {};
53
56
  if (typeof config === 'function') {
@@ -60,4 +63,7 @@ export async function getRtcConfiguration(config) {
60
63
  }));
61
64
  return config;
62
65
  }
66
+ export const genUfrag = (len = 32) => {
67
+ return UFRAG_PREFIX + [...Array(len)].map(() => UFRAG_ALPHABET.at(Math.floor(Math.random() * UFRAG_ALPHABET.length))).join('');
68
+ };
63
69
  //# sourceMappingURL=util.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- export { RTCSessionDescription, RTCIceCandidate, RTCPeerConnection } from 'node-datachannel/polyfill';
1
+ export { RTCSessionDescription, RTCIceCandidate, RTCPeerConnection } from '@ipshipyard/node-datachannel/polyfill';
2
+ export type { RTCDataChannel, RTCDataChannelEvent } from '@ipshipyard/node-datachannel/polyfill';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webrtc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webrtc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA;AACjH,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA"}
@@ -1,2 +1,2 @@
1
- export { RTCSessionDescription, RTCIceCandidate, RTCPeerConnection } from 'node-datachannel/polyfill';
1
+ export { RTCSessionDescription, RTCIceCandidate, RTCPeerConnection } from '@ipshipyard/node-datachannel/polyfill';
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webrtc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webrtc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/webrtc",
3
- "version": "5.0.27",
3
+ "version": "5.1.0-1fc0e2662",
4
4
  "description": "A libp2p transport using WebRTC connections",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/transport-webrtc#readme",
@@ -40,7 +40,7 @@
40
40
  "generate": "protons src/private-to-private/pb/message.proto src/pb/message.proto",
41
41
  "build": "aegir build",
42
42
  "test": "aegir test -t node -t browser",
43
- "test:node": "aegir test -t node --cov -- --exit",
43
+ "test:node": "aegir test -t node --cov",
44
44
  "test:chrome": "aegir test -t browser --cov",
45
45
  "test:firefox": "aegir test -t browser -- --browser firefox",
46
46
  "test:webkit": "aegir test -t browser -- --browser webkit",
@@ -51,35 +51,43 @@
51
51
  "doc-check": "aegir doc-check"
52
52
  },
53
53
  "dependencies": {
54
+ "@chainsafe/is-ip": "^2.0.2",
54
55
  "@chainsafe/libp2p-noise": "^16.0.0",
55
- "@libp2p/interface": "^2.5.0",
56
- "@libp2p/interface-internal": "^2.3.0",
57
- "@libp2p/peer-id": "^5.0.12",
58
- "@libp2p/utils": "^6.5.1",
56
+ "@ipshipyard/node-datachannel": "^0.26.4",
57
+ "@libp2p/interface": "2.5.0-1fc0e2662",
58
+ "@libp2p/interface-internal": "2.3.0-1fc0e2662",
59
+ "@libp2p/peer-id": "5.0.12-1fc0e2662",
60
+ "@libp2p/utils": "6.5.1-1fc0e2662",
59
61
  "@multiformats/multiaddr": "^12.3.3",
60
62
  "@multiformats/multiaddr-matcher": "^1.6.0",
63
+ "@peculiar/webcrypto": "^1.5.0",
64
+ "@peculiar/x509": "^1.11.0",
65
+ "any-signal": "^4.1.1",
61
66
  "detect-browser": "^5.3.0",
62
- "it-length-prefixed": "^9.1.0",
67
+ "get-port": "^7.1.0",
68
+ "it-length-prefixed": "^10.0.1",
63
69
  "it-protobuf-stream": "^1.1.5",
64
70
  "it-pushable": "^3.2.3",
65
71
  "it-stream-types": "^2.0.2",
66
72
  "multiformats": "^13.3.1",
67
- "node-datachannel": "^0.11.0",
68
73
  "p-defer": "^4.0.1",
69
74
  "p-event": "^6.0.1",
70
75
  "p-timeout": "^6.1.3",
76
+ "p-wait-for": "^5.0.2",
71
77
  "progress-events": "^1.0.1",
72
78
  "protons-runtime": "^5.5.0",
79
+ "race-event": "^1.3.0",
73
80
  "race-signal": "^1.1.0",
74
81
  "react-native-webrtc": "^124.0.4",
82
+ "stun": "^2.1.0",
75
83
  "uint8-varint": "^2.0.4",
76
84
  "uint8arraylist": "^2.4.8",
77
85
  "uint8arrays": "^5.1.0"
78
86
  },
79
87
  "devDependencies": {
80
- "@libp2p/crypto": "^5.0.11",
81
- "@libp2p/interface-compliance-tests": "^6.2.7",
82
- "@libp2p/logger": "^5.1.8",
88
+ "@libp2p/crypto": "5.0.11-1fc0e2662",
89
+ "@libp2p/interface-compliance-tests": "6.3.0-1fc0e2662",
90
+ "@libp2p/logger": "5.1.8-1fc0e2662",
83
91
  "@types/sinon": "^17.0.3",
84
92
  "aegir": "^45.0.5",
85
93
  "delay": "^6.0.0",
@@ -91,7 +99,10 @@
91
99
  "sinon-ts": "^2.0.0"
92
100
  },
93
101
  "browser": {
94
- "./dist/src/webrtc/index.js": "./dist/src/webrtc/index.browser.js"
102
+ "./dist/src/webrtc/index.js": "./dist/src/webrtc/index.browser.js",
103
+ "./dist/src/private-to-public/listener.js": "./dist/src/private-to-public/listener.browser.js",
104
+ "./dist/src/private-to-public/utils/get-rtcpeerconnection.js": "./dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js",
105
+ "node:net": false
95
106
  },
96
107
  "react-native": {
97
108
  "./dist/src/webrtc/index.js": "./dist/src/webrtc/index.react-native.js"
package/src/constants.ts CHANGED
@@ -12,3 +12,7 @@ export const DEFAULT_ICE_SERVERS = [
12
12
  'stun:stun.cloudflare.com:3478',
13
13
  'stun:stun.services.mozilla.com:3478'
14
14
  ]
15
+
16
+ export const UFRAG_ALPHABET = Array.from('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890')
17
+
18
+ export const UFRAG_PREFIX = 'libp2p+webrtc+v1/'
package/src/index.ts CHANGED
@@ -21,18 +21,6 @@
21
21
  *
22
22
  * In both cases, once the connection is established a [Noise handshake](https://noiseprotocol.org/noise.html) is carried out to ensure that the remote peer has the private key that corresponds to the public key that makes up their PeerId, giving you both encryption and authentication.
23
23
  *
24
- * ## Support
25
- *
26
- * WebRTC is supported in both Node.js and browsers.
27
- *
28
- * At the time of writing, WebRTC Direct is dial-only in browsers and not supported in Node.js at all.
29
- *
30
- * Support in Node.js is possible but PRs will need to be opened to [libdatachannel](https://github.com/paullouisageneau/libdatachannel) and the appropriate APIs exposed in [node-datachannel](https://github.com/murat-dogan/node-datachannel).
31
- *
32
- * WebRTC Direct support is available in rust-libp2p and arriving soon in go-libp2p.
33
- *
34
- * See the WebRTC section of https://connectivity.libp2p.io for more information.
35
- *
36
24
  * @example WebRTC
37
25
  *
38
26
  * WebRTC requires use of a relay to connect two nodes. The listener first discovers a relay server and makes a reservation, then the dialer can connect via the relayed address.
@@ -157,26 +145,33 @@
157
145
  *
158
146
  * ```TypeScript
159
147
  * import { createLibp2p } from 'libp2p'
160
- * import { noise } from '@chainsafe/libp2p-noise'
161
148
  * import { multiaddr } from '@multiformats/multiaddr'
162
149
  * import { pipe } from 'it-pipe'
163
150
  * import { fromString, toString } from 'uint8arrays'
164
151
  * import { webRTCDirect } from '@libp2p/webrtc'
165
152
  *
166
- * const node = await createLibp2p({
153
+ * const listener = await createLibp2p({
154
+ * addresses: {
155
+ * listen: [
156
+ * '/ip4/0.0.0.0/udp/0/webrtc-direct'
157
+ * ]
158
+ * },
167
159
  * transports: [
168
160
  * webRTCDirect()
169
- * ],
170
- * connectionEncrypters: [
171
- * noise()
172
161
  * ]
173
162
  * })
174
163
  *
175
- * await node.start()
164
+ * await listener.start()
176
165
  *
177
- * // this multiaddr corresponds to a remote node running a WebRTC Direct listener
178
- * const ma = multiaddr('/ip4/0.0.0.0/udp/56093/webrtc-direct/certhash/uEiByaEfNSLBexWBNFZy_QB1vAKEj7JAXDizRs4_SnTflsQ')
179
- * const stream = await node.dialProtocol(ma, '/my-protocol/1.0.0', {
166
+ * const dialer = await createLibp2p({
167
+ * transports: [
168
+ * webRTCDirect()
169
+ * ]
170
+ * })
171
+ *
172
+ * await dialer.start()
173
+ *
174
+ * const stream = await dialer.dialProtocol(listener.getMultiaddrs(), '/my-protocol/1.0.0', {
180
175
  * signal: AbortSignal.timeout(10_000)
181
176
  * })
182
177
  *
@@ -247,6 +242,25 @@ export interface DataChannelOptions {
247
242
  openTimeout?: number
248
243
  }
249
244
 
245
+ /**
246
+ * PEM format server certificate and private key
247
+ */
248
+ export interface TransportCertificate {
249
+ /**
250
+ * The private key for the certificate in PEM format
251
+ */
252
+ privateKey: string
253
+ /**
254
+ * PEM format certificate
255
+ */
256
+ pem: string
257
+
258
+ /**
259
+ * The hash of the certificate
260
+ */
261
+ certhash: string
262
+ }
263
+
250
264
  export type { WebRTCTransportDirectInit, WebRTCDirectTransportComponents }
251
265
 
252
266
  function webRTCDirect (init?: WebRTCTransportDirectInit): (components: WebRTCDirectTransportComponents) => Transport {
package/src/maconn.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { nopSink, nopSource } from './util.js'
2
+ import type { RTCPeerConnection } from './webrtc/index.js'
2
3
  import type { ComponentLogger, Logger, MultiaddrConnection, MultiaddrConnectionTimeline, CounterGroup } from '@libp2p/interface'
3
4
  import type { AbortOptions, Multiaddr } from '@multiformats/multiaddr'
4
5
  import type { Source, Sink } from 'it-stream-types'
@@ -69,12 +70,13 @@ export class WebRTCMultiaddrConnection implements MultiaddrConnection {
69
70
  this.timeline = init.timeline
70
71
  this.peerConnection = init.peerConnection
71
72
 
72
- const initialState = this.peerConnection.connectionState
73
+ const peerConnection = this.peerConnection
74
+ const initialState = peerConnection.connectionState
73
75
 
74
76
  this.peerConnection.onconnectionstatechange = () => {
75
- this.log.trace('peer connection state change', this.peerConnection.connectionState, 'initial state', initialState)
77
+ this.log.trace('peer connection state change', peerConnection.connectionState, 'initial state', initialState)
76
78
 
77
- if (this.peerConnection.connectionState === 'disconnected' || this.peerConnection.connectionState === 'failed' || this.peerConnection.connectionState === 'closed') {
79
+ if (peerConnection.connectionState === 'disconnected' || peerConnection.connectionState === 'failed' || peerConnection.connectionState === 'closed') {
78
80
  // nothing else to do but close the connection
79
81
  this.timeline.close = Date.now()
80
82
  }
package/src/muxer.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { createStream } from './stream.js'
2
2
  import { drainAndClose, nopSink, nopSource } from './util.js'
3
3
  import type { DataChannelOptions } from './index.js'
4
+ import type { RTCPeerConnection, RTCDataChannel } from './webrtc/index.js'
4
5
  import type { ComponentLogger, Logger, Stream, CounterGroup, StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface'
5
6
  import type { AbortOptions } from '@multiformats/multiaddr'
6
7
  import type { Source, Sink } from 'it-stream-types'
@@ -56,7 +57,7 @@ export class DataChannelMuxerFactory implements StreamMuxerFactory {
56
57
  this.metrics = init.metrics
57
58
  this.protocol = init.protocol ?? PROTOCOL
58
59
  this.dataChannelOptions = init.dataChannelOptions ?? {}
59
- this.log = components.logger.forComponent('libp2p:webrtc:datachannelmuxerfactory')
60
+ this.log = components.logger.forComponent('libp2p:webrtc:muxerfactory')
60
61
 
61
62
  // store any datachannels opened before upgrade has been completed
62
63
  this.peerConnection.ondatachannel = ({ channel }) => {
@@ -243,7 +244,7 @@ export class DataChannelMuxer implements StreamMuxer {
243
244
  sink: Sink<Source<Uint8Array | Uint8ArrayList>, Promise<void>> = nopSink
244
245
 
245
246
  newStream (): Stream {
246
- // The spec says the label SHOULD be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
247
+ // The spec says the label MUST be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
247
248
  const channel = this.peerConnection.createDataChannel('')
248
249
  // lib-datachannel throws if `.getId` is called on a closed channel so
249
250
  // memoize it
@@ -5,6 +5,7 @@ import { isFirefox } from '../util.js'
5
5
  import { RTCIceCandidate } from '../webrtc/index.js'
6
6
  import { Message } from './pb/message.js'
7
7
  import type { WebRTCDialEvents } from './transport.js'
8
+ import type { RTCPeerConnection } from '../webrtc/index.js'
8
9
  import type { LoggerOptions, Stream } from '@libp2p/interface'
9
10
  import type { AbortOptions, MessageStream } from 'it-protobuf-stream'
10
11
  import type { DeferredPromise } from 'p-defer'
@@ -0,0 +1,28 @@
1
+ import { TypedEventEmitter } from '@libp2p/interface'
2
+ import { UnimplementedError } from '../error.js'
3
+ import type { PeerId, ListenerEvents, Listener } from '@libp2p/interface'
4
+ import type { TransportManager } from '@libp2p/interface-internal'
5
+ import type { Multiaddr } from '@multiformats/multiaddr'
6
+
7
+ export interface WebRTCDirectListenerComponents {
8
+ peerId: PeerId
9
+ transportManager: TransportManager
10
+ }
11
+
12
+ export interface WebRTCDirectListenerInit {
13
+ shutdownController: AbortController
14
+ }
15
+
16
+ export class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> implements Listener {
17
+ async listen (): Promise<void> {
18
+ throw new UnimplementedError('WebRTCTransport.createListener')
19
+ }
20
+
21
+ getAddrs (): Multiaddr[] {
22
+ return []
23
+ }
24
+
25
+ async close (): Promise<void> {
26
+
27
+ }
28
+ }