@libp2p/webtransport 5.0.51-8484de8a2 → 5.0.51-87bc8d4fb

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 (47) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/index.min.js.map +4 -4
  3. package/dist/src/constants.d.ts +2 -0
  4. package/dist/src/constants.d.ts.map +1 -0
  5. package/dist/src/constants.js +2 -0
  6. package/dist/src/constants.js.map +1 -0
  7. package/dist/src/index.d.ts +4 -1
  8. package/dist/src/index.d.ts.map +1 -1
  9. package/dist/src/index.js +63 -32
  10. package/dist/src/index.js.map +1 -1
  11. package/dist/src/listener.d.ts +1 -0
  12. package/dist/src/listener.d.ts.map +1 -1
  13. package/dist/src/listener.js.map +1 -1
  14. package/dist/src/muxer.d.ts +5 -2
  15. package/dist/src/muxer.d.ts.map +1 -1
  16. package/dist/src/muxer.js +74 -44
  17. package/dist/src/muxer.js.map +1 -1
  18. package/dist/src/stream.d.ts +2 -21
  19. package/dist/src/stream.d.ts.map +1 -1
  20. package/dist/src/stream.js +47 -75
  21. package/dist/src/stream.js.map +1 -1
  22. package/dist/src/utils/inert-duplex.d.ts +3 -0
  23. package/dist/src/utils/inert-duplex.d.ts.map +1 -0
  24. package/dist/src/utils/inert-duplex.js +20 -0
  25. package/dist/src/utils/inert-duplex.js.map +1 -0
  26. package/dist/src/utils/parse-multiaddr.d.ts +1 -1
  27. package/dist/src/utils/parse-multiaddr.d.ts.map +1 -1
  28. package/dist/src/utils/parse-multiaddr.js +11 -17
  29. package/dist/src/utils/parse-multiaddr.js.map +1 -1
  30. package/package.json +20 -19
  31. package/src/constants.ts +1 -0
  32. package/src/index.ts +74 -36
  33. package/src/listener.ts +1 -0
  34. package/src/muxer.ts +84 -60
  35. package/src/stream.ts +55 -88
  36. package/src/utils/inert-duplex.ts +21 -0
  37. package/src/utils/parse-multiaddr.ts +12 -20
  38. package/dist/src/session-to-conn.d.ts +0 -11
  39. package/dist/src/session-to-conn.d.ts.map +0 -1
  40. package/dist/src/session-to-conn.js +0 -35
  41. package/dist/src/session-to-conn.js.map +0 -1
  42. package/dist/src/utils/webtransport-message-stream.d.ts +0 -18
  43. package/dist/src/utils/webtransport-message-stream.d.ts.map +0 -1
  44. package/dist/src/utils/webtransport-message-stream.js +0 -49
  45. package/dist/src/utils/webtransport-message-stream.js.map +0 -1
  46. package/src/session-to-conn.ts +0 -50
  47. package/src/utils/webtransport-message-stream.ts +0 -69
@@ -0,0 +1,2 @@
1
+ export declare const MAX_INBOUND_STREAMS = 1000;
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,OAAQ,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const MAX_INBOUND_STREAMS = 1_000;
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA"}
@@ -3,18 +3,20 @@
3
3
  *
4
4
  * A [libp2p transport](https://docs.libp2p.io/concepts/transports/overview/) based on [WebTransport](https://www.w3.org/TR/webtransport/).
5
5
  *
6
+ * >
6
7
  * > ⚠️ **Note**
7
8
  * >
8
9
  * > This WebTransport implementation currently only allows dialing to other nodes. It does not yet allow listening for incoming dials. This feature requires QUIC support to land in Node JS first.
9
10
  * >
10
11
  * > QUIC support in Node JS is actively being worked on. You can keep an eye on the progress by watching the [related issues on the Node JS issue tracker](https://github.com/nodejs/node/labels/quic)
12
+ * >
11
13
  *
12
14
  * @example
13
15
  *
14
16
  * ```TypeScript
15
17
  * import { createLibp2p } from 'libp2p'
16
18
  * import { webTransport } from '@libp2p/webtransport'
17
- * import { noise } from '@libp2p/noise'
19
+ * import { noise } from '@chainsafe/libp2p-noise'
18
20
  *
19
21
  * const node = await createLibp2p({
20
22
  * transports: [
@@ -39,6 +41,7 @@ export interface WebTransportCertificate {
39
41
  secret: string;
40
42
  }
41
43
  export interface WebTransportInit {
44
+ maxInboundStreams?: number;
42
45
  certificates?: WebTransportCertificate[];
43
46
  }
44
47
  export interface WebTransportComponents {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAaH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAyD,eAAe,EAA2C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAEzP,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAEpD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,MAAM,WAAW,gBAAgB;IAC/B,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,MAAM,sBAAsB,GAChC,+BAA+B,GAC/B,aAAa,CAAC,+BAA+B,CAAC,GAC9C,aAAa,CAAC,yCAAyC,CAAC,GACxD,aAAa,CAAC,yCAAyC,CAAC,GACxD,aAAa,CAAC,0CAA0C,CAAC,CAAA;AA2O3D,wBAAgB,YAAY,CAAE,IAAI,GAAE,gBAAqB,GAAG,CAAC,UAAU,EAAE,sBAAsB,KAAK,SAAS,CAE5G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAcH,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAyD,eAAe,EAA2C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,+BAA+B,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGzP,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAGpD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,EAAE,MAAM,CAAA;CACf;AAMD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,MAAM,sBAAsB,GAChC,+BAA+B,GAC/B,aAAa,CAAC,+BAA+B,CAAC,GAC9C,aAAa,CAAC,yCAAyC,CAAC,GACxD,aAAa,CAAC,yCAAyC,CAAC,GACxD,aAAa,CAAC,0CAA0C,CAAC,CAAA;AA2Q3D,wBAAgB,YAAY,CAAE,IAAI,GAAE,gBAAqB,GAAG,CAAC,UAAU,EAAE,sBAAsB,KAAK,SAAS,CAE5G"}
package/dist/src/index.js CHANGED
@@ -3,18 +3,20 @@
3
3
  *
4
4
  * A [libp2p transport](https://docs.libp2p.io/concepts/transports/overview/) based on [WebTransport](https://www.w3.org/TR/webtransport/).
5
5
  *
6
+ * >
6
7
  * > ⚠️ **Note**
7
8
  * >
8
9
  * > This WebTransport implementation currently only allows dialing to other nodes. It does not yet allow listening for incoming dials. This feature requires QUIC support to land in Node JS first.
9
10
  * >
10
11
  * > QUIC support in Node JS is actively being worked on. You can keep an eye on the progress by watching the [related issues on the Node JS issue tracker](https://github.com/nodejs/node/labels/quic)
12
+ * >
11
13
  *
12
14
  * @example
13
15
  *
14
16
  * ```TypeScript
15
17
  * import { createLibp2p } from 'libp2p'
16
18
  * import { webTransport } from '@libp2p/webtransport'
17
- * import { noise } from '@libp2p/noise'
19
+ * import { noise } from '@chainsafe/libp2p-noise'
18
20
  *
19
21
  * const node = await createLibp2p({
20
22
  * transports: [
@@ -26,16 +28,17 @@
26
28
  * })
27
29
  * ```
28
30
  */
31
+ import { noise } from '@chainsafe/libp2p-noise';
29
32
  import { InvalidCryptoExchangeError, InvalidParametersError, serviceCapabilities, transportSymbol } from '@libp2p/interface';
30
- import { noise } from '@libp2p/noise';
31
33
  import { WebTransport as WebTransportMatcher } from '@multiformats/multiaddr-matcher';
32
34
  import { CustomProgressEvent } from 'progress-events';
35
+ import { raceSignal } from 'race-signal';
36
+ import { MAX_INBOUND_STREAMS } from './constants.js';
33
37
  import createListener from './listener.js';
34
38
  import { webtransportMuxer } from './muxer.js';
35
- import { toMultiaddrConnection } from "./session-to-conn.js";
39
+ import { inertDuplex } from './utils/inert-duplex.js';
36
40
  import { isSubset } from './utils/is-subset.js';
37
41
  import { parseMultiaddr } from './utils/parse-multiaddr.js';
38
- import { WebTransportMessageStream } from "./utils/webtransport-message-stream.js";
39
42
  import WebTransport from './webtransport.js';
40
43
  class WebTransportTransport {
41
44
  log;
@@ -47,6 +50,7 @@ class WebTransportTransport {
47
50
  this.components = components;
48
51
  this.config = {
49
52
  ...init,
53
+ maxInboundStreams: init.maxInboundStreams ?? MAX_INBOUND_STREAMS,
50
54
  certificates: init.certificates ?? []
51
55
  };
52
56
  if (components.metrics != null) {
@@ -130,28 +134,32 @@ class WebTransportTransport {
130
134
  .finally(() => {
131
135
  cleanUpWTSession('remote_close');
132
136
  });
133
- this.metrics?.dialerEvents.increment({ open: true });
134
- maConn = toMultiaddrConnection({
135
- remoteAddr: ma,
136
- cleanUpWTSession,
137
- direction: 'outbound',
138
- log: this.components.logger.forComponent('libp2p:webtransport:connection')
139
- });
140
- authenticated = await this.authenticateWebTransport({
141
- wt,
142
- maConn,
143
- remotePeer,
144
- certhashes,
145
- ...options
146
- });
137
+ authenticated = await raceSignal(this.authenticateWebTransport({ wt, remotePeer, certhashes, ...options }), options.signal);
147
138
  if (!authenticated) {
148
139
  throw new InvalidCryptoExchangeError('Failed to authenticate webtransport');
149
140
  }
141
+ this.metrics?.dialerEvents.increment({ open: true });
142
+ maConn = {
143
+ close: async () => {
144
+ this.log('closing webtransport');
145
+ cleanUpWTSession('close');
146
+ },
147
+ abort: (err) => {
148
+ this.log('aborting webtransport due to passed err', err);
149
+ cleanUpWTSession('abort');
150
+ },
151
+ remoteAddr: ma,
152
+ timeline: {
153
+ open: Date.now()
154
+ },
155
+ log: this.components.logger.forComponent('libp2p:webtransport:maconn'),
156
+ // This connection is never used directly since webtransport supports native streams.
157
+ ...inertDuplex()
158
+ };
150
159
  return await options.upgrader.upgradeOutbound(maConn, {
151
160
  ...options,
152
161
  skipEncryption: true,
153
- remotePeer,
154
- muxerFactory: webtransportMuxer(wt),
162
+ muxerFactory: webtransportMuxer(wt, wt.incomingBidirectionalStreams.getReader(), this.log, this.config),
155
163
  skipProtection: true
156
164
  });
157
165
  }
@@ -174,28 +182,50 @@ class WebTransportTransport {
174
182
  }
175
183
  }
176
184
  }
177
- async authenticateWebTransport({ wt, maConn, remotePeer, certhashes, onProgress, signal }) {
185
+ async authenticateWebTransport({ wt, remotePeer, certhashes, onProgress, signal }) {
186
+ signal?.throwIfAborted();
178
187
  onProgress?.(new CustomProgressEvent('webtransport:open-authentication-stream'));
179
188
  const stream = await wt.createBidirectionalStream();
180
- signal?.throwIfAborted();
181
- const messages = new WebTransportMessageStream({
182
- stream,
183
- log: maConn.log.newScope('muxer')
184
- });
189
+ const writer = stream.writable.getWriter();
190
+ const reader = stream.readable.getReader();
191
+ const duplex = {
192
+ source: (async function* () {
193
+ while (true) {
194
+ const val = await reader.read();
195
+ if (val.value != null) {
196
+ yield val.value;
197
+ }
198
+ if (val.done) {
199
+ break;
200
+ }
201
+ }
202
+ })(),
203
+ sink: async (source) => {
204
+ for await (const chunk of source) {
205
+ await raceSignal(writer.ready, signal);
206
+ const buf = chunk instanceof Uint8Array ? chunk : chunk.subarray();
207
+ writer.write(buf).catch(err => {
208
+ this.log.error('could not write chunk during authentication of WebTransport stream', err);
209
+ });
210
+ }
211
+ }
212
+ };
185
213
  const n = noise()(this.components);
186
214
  onProgress?.(new CustomProgressEvent('webtransport:secure-outbound-connection'));
187
- const { remoteExtensions } = await n.secureOutbound(messages, {
215
+ const { remoteExtensions } = await n.secureOutbound(duplex, {
188
216
  signal,
189
217
  remotePeer,
190
218
  skipStreamMuxerNegotiation: true
191
219
  });
192
220
  onProgress?.(new CustomProgressEvent('webtransport:close-authentication-stream'));
193
221
  // We're done with this authentication stream
194
- await messages.close({
195
- signal
222
+ writer.close().catch((err) => {
223
+ this.log.error(`Failed to close authentication stream writer: ${err.message}`);
224
+ });
225
+ reader.cancel().catch((err) => {
226
+ this.log.error(`Failed to close authentication stream reader: ${err.message}`);
196
227
  });
197
- // Verify the certhashes we used when dialing are a subset of the certhashes
198
- // relayed by the remote peer
228
+ // Verify the certhashes we used when dialing are a subset of the certhashes relayed by the remote peer
199
229
  if (!isSubset(remoteExtensions?.webtransportCerthashes ?? [], certhashes.map(ch => ch.bytes))) {
200
230
  throw new InvalidParametersError("Our certhashes are not a subset of the remote's reported certhashes");
201
231
  }
@@ -204,7 +234,8 @@ class WebTransportTransport {
204
234
  createListener(options) {
205
235
  return createListener(this.components, {
206
236
  ...options,
207
- certificates: this.config.certificates
237
+ certificates: this.config.certificates,
238
+ maxInboundStreams: this.config.maxInboundStreams
208
239
  });
209
240
  }
210
241
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export interface WebTransportListenerInit extends CreateListenerOptions {
9
9
  handler?(conn: Connection): void;
10
10
  upgrader: Upgrader;
11
11
  certificates?: WebTransportCertificate[];
12
+ maxInboundStreams?: number;
12
13
  }
13
14
  export default function createListener(components: WebTransportListenerComponents, options: WebTransportListenerInit): Listener;
14
15
  //# sourceMappingURL=listener.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhI,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAChC,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAA;CACzC;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAE,UAAU,EAAE,8BAA8B,EAAE,OAAO,EAAE,wBAAwB,GAAG,QAAQ,CAE/H"}
1
+ {"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAEhI,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,qBAAqB;IACrE,OAAO,CAAC,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAChC,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,uBAAuB,EAAE,CAAA;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,CAAC,OAAO,UAAU,cAAc,CAAE,UAAU,EAAE,8BAA8B,EAAE,OAAO,EAAE,wBAAwB,GAAG,QAAQ,CAE/H"}
@@ -1 +1 @@
1
- {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAeA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAE,UAA0C,EAAE,OAAiC;IACnH,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAE,UAA0C,EAAE,OAAiC;IACnH,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;AAC/C,CAAC"}
@@ -1,4 +1,7 @@
1
1
  import type WebTransport from './webtransport.js';
2
- import type { StreamMuxerFactory } from '@libp2p/interface';
3
- export declare function webtransportMuxer(webTransport: WebTransport): StreamMuxerFactory;
2
+ import type { Logger, StreamMuxerFactory } from '@libp2p/interface';
3
+ export interface WebTransportMuxerInit {
4
+ maxInboundStreams: number;
5
+ }
6
+ export declare function webtransportMuxer(wt: Pick<WebTransport, 'close' | 'createBidirectionalStream'>, reader: ReadableStreamDefaultReader<WebTransportBidirectionalStream>, log: Logger, config: WebTransportMuxerInit): StreamMuxerFactory;
4
7
  //# sourceMappingURL=muxer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAyD,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAmElH,wBAAgB,iBAAiB,CAAE,YAAY,EAAE,YAAY,GAAG,kBAAkB,CAOjF"}
1
+ {"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,EAAE,MAAM,EAAuB,kBAAkB,EAAmB,MAAM,mBAAmB,CAAA;AAEzG,MAAM,WAAW,qBAAqB;IACpC,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,wBAAgB,iBAAiB,CAAE,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,2BAA2B,CAAC,EAAE,MAAM,EAAE,2BAA2B,CAAC,+BAA+B,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,CA6FtO"}
package/dist/src/muxer.js CHANGED
@@ -1,49 +1,79 @@
1
- import { AbstractStreamMuxer } from '@libp2p/utils';
2
1
  import { webtransportBiDiStreamToStream } from './stream.js';
3
- const PROTOCOL = '/webtransport';
4
- class WebTransportStreamMuxer extends AbstractStreamMuxer {
5
- webTransport;
6
- streamIDCounter;
7
- reader;
8
- constructor(webTransport, maConn) {
9
- super(maConn, {
10
- protocol: PROTOCOL,
11
- name: 'muxer'
12
- });
13
- this.webTransport = webTransport;
14
- this.streamIDCounter = 0;
15
- this.reader = this.webTransport.incomingBidirectionalStreams.getReader();
16
- Promise.resolve()
17
- .then(async () => {
18
- //! TODO unclear how to add backpressure here?
19
- while (true) {
20
- const { done, value } = await this.reader.read();
21
- if (done || value == null) {
22
- break;
23
- }
24
- this.onRemoteStream(webtransportBiDiStreamToStream(value, String(this.streamIDCounter++), 'inbound', this.log, this.streamOptions));
25
- }
26
- })
27
- .catch(err => {
28
- this.log.error('could not create a new stream - %e', err);
29
- });
30
- }
31
- async onCreateStream(options) {
32
- const wtStream = await this.webTransport.createBidirectionalStream();
33
- options?.signal?.throwIfAborted();
34
- return webtransportBiDiStreamToStream(wtStream, String(this.streamIDCounter++), 'outbound', this.log, options);
35
- }
36
- onData() {
37
- }
38
- sendReset() {
39
- this.webTransport.close();
40
- }
41
- }
42
- export function webtransportMuxer(webTransport) {
2
+ import { inertDuplex } from './utils/inert-duplex.js';
3
+ export function webtransportMuxer(wt, reader, log, config) {
4
+ let streamIDCounter = 0;
5
+ log = log.newScope('muxer');
43
6
  return {
44
- protocol: PROTOCOL,
45
- createStreamMuxer(maConn) {
46
- return new WebTransportStreamMuxer(webTransport, maConn);
7
+ protocol: 'webtransport',
8
+ createStreamMuxer: (init) => {
9
+ // !TODO handle abort signal when WebTransport supports this.
10
+ const activeStreams = [];
11
+ Promise.resolve()
12
+ .then(async () => {
13
+ //! TODO unclear how to add backpressure here?
14
+ while (true) {
15
+ const { done, value: wtStream } = await reader.read();
16
+ if (done) {
17
+ break;
18
+ }
19
+ if (activeStreams.length >= config.maxInboundStreams) {
20
+ log(`too many inbound streams open - ${activeStreams.length}/${config.maxInboundStreams}, closing new incoming stream`);
21
+ // We've reached our limit, close this stream.
22
+ wtStream.writable.close().catch((err) => {
23
+ log.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${err.message}`);
24
+ });
25
+ wtStream.readable.cancel().catch((err) => {
26
+ log.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${err.message}`);
27
+ });
28
+ }
29
+ else {
30
+ const stream = await webtransportBiDiStreamToStream(wtStream, String(streamIDCounter++), 'inbound', activeStreams, init?.onStreamEnd, log);
31
+ activeStreams.push(stream);
32
+ init?.onIncomingStream?.(stream);
33
+ }
34
+ }
35
+ })
36
+ .catch(err => {
37
+ log.error('could not create a new stream', err);
38
+ });
39
+ const muxer = {
40
+ protocol: 'webtransport',
41
+ streams: activeStreams,
42
+ newStream: async (name) => {
43
+ log('new outgoing stream', name);
44
+ const wtStream = await wt.createBidirectionalStream();
45
+ const stream = await webtransportBiDiStreamToStream(wtStream, String(streamIDCounter++), init?.direction ?? 'outbound', activeStreams, init?.onStreamEnd, log);
46
+ activeStreams.push(stream);
47
+ return stream;
48
+ },
49
+ /**
50
+ * Close all tracked streams and stop the muxer
51
+ */
52
+ close: async () => {
53
+ log('closing webtransport muxer gracefully');
54
+ try {
55
+ wt.close();
56
+ }
57
+ catch (err) {
58
+ muxer.abort(err);
59
+ }
60
+ },
61
+ /**
62
+ * Abort all tracked streams and stop the muxer
63
+ */
64
+ abort: (err) => {
65
+ log('closing webtransport muxer with err:', err);
66
+ try {
67
+ wt.close();
68
+ }
69
+ catch (err) {
70
+ log.error('webtransport session threw error during close', err);
71
+ }
72
+ },
73
+ // This stream muxer is webtransport native. Therefore it doesn't plug in with any other duplex.
74
+ ...inertDuplex()
75
+ };
76
+ return muxer;
47
77
  }
48
78
  };
49
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAA;AAK5D,MAAM,QAAQ,GAAG,eAAe,CAAA;AAEhC,MAAM,uBAAwB,SAAQ,mBAAuC;IACnE,YAAY,CAAc;IAC1B,eAAe,CAAQ;IACvB,MAAM,CAA8D;IAE5E,YAAa,YAA0B,EAAE,MAA2B;QAClE,KAAK,CAAC,MAAM,EAAE;YACZ,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,OAAO;SACd,CAAC,CAAA;QAEF,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,4BAA4B,CAAC,SAAS,EAAE,CAAA;QAExE,OAAO,CAAC,OAAO,EAAE;aACd,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,8CAA8C;YAC9C,OAAO,IAAI,EAAE,CAAC;gBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;gBAEhD,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAC1B,MAAK;gBACP,CAAC;gBAED,IAAI,CAAC,cAAc,CACjB,8BAA8B,CAC5B,KAAK,EACL,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAC9B,SAAS,EACT,IAAI,CAAC,GAAG,EACR,IAAI,CAAC,aAAa,CACnB,CACF,CAAA;YACH,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,cAAc,CAAE,OAA4B;QAChD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,CAAA;QACpE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;QAEjC,OAAO,8BAA8B,CACnC,QAAQ,EACR,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,EAC9B,UAAU,EACV,IAAI,CAAC,GAAG,EACR,OAAO,CACR,CAAA;IACH,CAAC;IAED,MAAM;IAEN,CAAC;IAED,SAAS;QACP,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAA;IAC3B,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAE,YAA0B;IAC3D,OAAO;QACL,QAAQ,EAAE,QAAQ;QAClB,iBAAiB,CAAE,MAA2B;YAC5C,OAAO,IAAI,uBAAuB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAA;QAC1D,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAQrD,MAAM,UAAU,iBAAiB,CAAE,EAA6D,EAAE,MAAoE,EAAE,GAAW,EAAE,MAA6B;IAChN,IAAI,eAAe,GAAG,CAAC,CAAA;IACvB,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IAE3B,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,iBAAiB,EAAE,CAAC,IAAsB,EAAe,EAAE;YACzD,6DAA6D;YAC7D,MAAM,aAAa,GAAa,EAAE,CAAA;YAElC,OAAO,CAAC,OAAO,EAAE;iBACd,IAAI,CAAC,KAAK,IAAI,EAAE;gBACf,8CAA8C;gBAC9C,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;oBAErD,IAAI,IAAI,EAAE,CAAC;wBACT,MAAK;oBACP,CAAC;oBAED,IAAI,aAAa,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;wBACrD,GAAG,CAAC,mCAAmC,aAAa,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,+BAA+B,CAAC,CAAA;wBACvH,8CAA8C;wBAC9C,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;4BAC7C,GAAG,CAAC,KAAK,CAAC,2EAA2E,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;wBACrG,CAAC,CAAC,CAAA;wBACF,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;4BAC9C,GAAG,CAAC,KAAK,CAAC,2EAA2E,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;wBACrG,CAAC,CAAC,CAAA;oBACJ,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAG,MAAM,8BAA8B,CACjD,QAAQ,EACR,MAAM,CAAC,eAAe,EAAE,CAAC,EACzB,SAAS,EACT,aAAa,EACb,IAAI,EAAE,WAAW,EACjB,GAAG,CACJ,CAAA;wBACD,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;wBAC1B,IAAI,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAA;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC;iBACD,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,GAAG,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAA;YACjD,CAAC,CAAC,CAAA;YAEJ,MAAM,KAAK,GAAgB;gBACzB,QAAQ,EAAE,cAAc;gBACxB,OAAO,EAAE,aAAa;gBACtB,SAAS,EAAE,KAAK,EAAE,IAAa,EAAmB,EAAE;oBAClD,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;oBAEhC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,yBAAyB,EAAE,CAAA;oBACrD,MAAM,MAAM,GAAG,MAAM,8BAA8B,CAAC,QAAQ,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,IAAI,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,CAAC,CAAA;oBAC9J,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;oBAE1B,OAAO,MAAM,CAAA;gBACf,CAAC;gBAED;;mBAEG;gBACH,KAAK,EAAE,KAAK,IAAI,EAAE;oBAChB,GAAG,CAAC,uCAAuC,CAAC,CAAA;oBAE5C,IAAI,CAAC;wBACH,EAAE,CAAC,KAAK,EAAE,CAAA;oBACZ,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;oBAClB,CAAC;gBACH,CAAC;gBAED;;mBAEG;gBACH,KAAK,EAAE,CAAC,GAAU,EAAE,EAAE;oBACpB,GAAG,CAAC,sCAAsC,EAAE,GAAG,CAAC,CAAA;oBAEhD,IAAI,CAAC;wBACH,EAAE,CAAC,KAAK,EAAE,CAAA;oBACZ,CAAC;oBAAC,OAAO,GAAQ,EAAE,CAAC;wBAClB,GAAG,CAAC,KAAK,CAAC,+CAA+C,EAAE,GAAG,CAAC,CAAA;oBACjE,CAAC;gBACH,CAAC;gBAED,gGAAgG;gBAChG,GAAG,WAAW,EAAE;aACjB,CAAA;YAED,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,22 +1,3 @@
1
- import { AbstractStream } from '@libp2p/utils';
2
- import type { AbortOptions, MessageStreamDirection, Logger, StreamOptions } from '@libp2p/interface';
3
- import type { AbstractStreamInit, SendResult } from '@libp2p/utils';
4
- import type { Uint8ArrayList } from 'uint8arraylist';
5
- interface WebTransportStreamInit extends AbstractStreamInit {
6
- stream: WebTransportBidirectionalStream;
7
- }
8
- export declare class WebTransportStream extends AbstractStream {
9
- private readonly writer;
10
- private readonly reader;
11
- constructor(init: WebTransportStreamInit);
12
- private readData;
13
- sendData(data: Uint8ArrayList): SendResult;
14
- sendReset(err: Error): void;
15
- sendCloseWrite(options?: AbortOptions): Promise<void>;
16
- sendCloseRead(options?: AbortOptions): Promise<void>;
17
- sendPause(): void;
18
- sendResume(): void;
19
- }
20
- export declare function webtransportBiDiStreamToStream(stream: WebTransportBidirectionalStream, streamId: string, direction: MessageStreamDirection, log: Logger, options?: StreamOptions): WebTransportStream;
21
- export {};
1
+ import type { Direction, Logger, Stream } from '@libp2p/interface';
2
+ export declare function webtransportBiDiStreamToStream(bidiStream: WebTransportBidirectionalStream, streamId: string, direction: Direction, activeStreams: Stream[], onStreamEnd: undefined | ((s: Stream) => void), log: Logger): Promise<Stream>;
22
3
  //# sourceMappingURL=stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,UAAU,sBAAuB,SAAQ,kBAAkB;IACzD,MAAM,EAAE,+BAA+B,CAAA;CACxC;AAED,qBAAa,kBAAmB,SAAQ,cAAc;IACpD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyC;gBAEnD,IAAI,EAAE,sBAAsB;IA0BzC,OAAO,CAAC,QAAQ;IA6BhB,QAAQ,CAAE,IAAI,EAAE,cAAc,GAAG,UAAU;IAoC3C,SAAS,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAOtB,cAAc,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,aAAa,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D,SAAS,IAAK,IAAI;IAIlB,UAAU,IAAK,IAAI;CAGpB;AAED,wBAAgB,8BAA8B,CAAE,MAAM,EAAE,+BAA+B,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,kBAAkB,CAStM"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAyFhF,wBAAsB,8BAA8B,CAAE,UAAU,EAAE,+BAA+B,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBhP"}