@libp2p/webtransport 4.0.28-e1923b0a7 → 4.0.29-9d13a2f6a

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 (46) hide show
  1. package/dist/index.min.js +3 -3
  2. package/dist/src/index.d.ts +12 -1
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/index.js +55 -94
  5. package/dist/src/index.js.map +1 -1
  6. package/dist/src/listener.browser.d.ts +3 -0
  7. package/dist/src/listener.browser.d.ts.map +1 -0
  8. package/dist/src/listener.browser.js +4 -0
  9. package/dist/src/listener.browser.js.map +1 -0
  10. package/dist/src/listener.d.ts +15 -0
  11. package/dist/src/listener.d.ts.map +1 -0
  12. package/dist/src/listener.js +4 -0
  13. package/dist/src/listener.js.map +1 -0
  14. package/dist/src/muxer.d.ts +7 -0
  15. package/dist/src/muxer.d.ts.map +1 -0
  16. package/dist/src/muxer.js +70 -0
  17. package/dist/src/muxer.js.map +1 -0
  18. package/dist/src/stream.d.ts.map +1 -1
  19. package/dist/src/stream.js +79 -151
  20. package/dist/src/stream.js.map +1 -1
  21. package/dist/src/utils/generate-certificates.browser.d.ts +2 -0
  22. package/dist/src/utils/generate-certificates.browser.d.ts.map +1 -0
  23. package/dist/src/utils/generate-certificates.browser.js +4 -0
  24. package/dist/src/utils/generate-certificates.browser.js.map +1 -0
  25. package/dist/src/utils/generate-certificates.d.ts +8 -0
  26. package/dist/src/utils/generate-certificates.d.ts.map +1 -0
  27. package/dist/src/utils/generate-certificates.js +4 -0
  28. package/dist/src/utils/generate-certificates.js.map +1 -0
  29. package/dist/src/webtransport.browser.d.ts +2 -0
  30. package/dist/src/webtransport.browser.d.ts.map +1 -0
  31. package/dist/src/webtransport.browser.js +2 -0
  32. package/dist/src/webtransport.browser.js.map +1 -0
  33. package/dist/src/webtransport.d.ts +9 -0
  34. package/dist/src/webtransport.d.ts.map +1 -0
  35. package/dist/src/webtransport.js +15 -0
  36. package/dist/src/webtransport.js.map +1 -0
  37. package/package.json +18 -9
  38. package/src/index.ts +74 -122
  39. package/src/listener.browser.ts +5 -0
  40. package/src/listener.ts +19 -0
  41. package/src/muxer.ts +95 -0
  42. package/src/stream.ts +90 -164
  43. package/src/utils/generate-certificates.browser.ts +3 -0
  44. package/src/utils/generate-certificates.ts +11 -0
  45. package/src/webtransport.browser.ts +1 -0
  46. package/src/webtransport.ts +17 -0
@@ -28,9 +28,20 @@
28
28
  * })
29
29
  * ```
30
30
  */
31
- import { type Transport, type ComponentLogger, type CounterGroup, type Metrics, type PeerId } from '@libp2p/interface';
31
+ import type { Transport, ComponentLogger, CounterGroup, Metrics, PeerId } from '@libp2p/interface';
32
+ import type { MultihashDigest } from 'multiformats/hashes/interface';
33
+ /**
34
+ * PEM format server certificate and private key
35
+ */
36
+ export interface WebTransportCertificate {
37
+ privateKey: string;
38
+ pem: string;
39
+ hash: MultihashDigest<number>;
40
+ secret: string;
41
+ }
32
42
  export interface WebTransportInit {
33
43
  maxInboundStreams?: number;
44
+ certificates?: WebTransportCertificate[];
34
45
  }
35
46
  export interface WebTransportComponents {
36
47
  peerId: PeerId;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,KAAK,SAAS,EAAgF,KAAK,eAAe,EAAuE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAmE,MAAM,mBAAmB,CAAA;AAe1U,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAqUD,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;AAYH,OAAO,KAAK,EAAE,SAAS,EAAgD,eAAe,EAA2C,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAGzL,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAGpE;;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,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,YAAY,CAAA;CAC3B;AAsQD,wBAAgB,YAAY,CAAE,IAAI,GAAE,gBAAqB,GAAG,CAAC,UAAU,EAAE,sBAAsB,KAAK,SAAS,CAE5G"}
package/dist/src/index.js CHANGED
@@ -29,13 +29,15 @@
29
29
  * ```
30
30
  */
31
31
  import { noise } from '@chainsafe/libp2p-noise';
32
- import { transportSymbol } from '@libp2p/interface';
33
- import {} from '@multiformats/multiaddr';
32
+ import { AbortError, CodeError, transportSymbol } from '@libp2p/interface';
34
33
  import { WebTransport as WebTransportMatcher } from '@multiformats/multiaddr-matcher';
35
- import { webtransportBiDiStreamToStream } from './stream.js';
34
+ import { raceSignal } from 'race-signal';
35
+ import createListener from './listener.js';
36
+ import { webtransportMuxer } from './muxer.js';
36
37
  import { inertDuplex } from './utils/inert-duplex.js';
37
38
  import { isSubset } from './utils/is-subset.js';
38
39
  import { parseMultiaddr } from './utils/parse-multiaddr.js';
40
+ import WebTransport from './webtransport.js';
39
41
  class WebTransportTransport {
40
42
  log;
41
43
  components;
@@ -45,7 +47,9 @@ class WebTransportTransport {
45
47
  this.log = components.logger.forComponent('libp2p:webtransport');
46
48
  this.components = components;
47
49
  this.config = {
48
- maxInboundStreams: init.maxInboundStreams ?? 1000
50
+ ...init,
51
+ maxInboundStreams: init.maxInboundStreams ?? 1000,
52
+ certificates: init.certificates ?? []
49
53
  };
50
54
  if (components.metrics != null) {
51
55
  this.metrics = {
@@ -59,19 +63,21 @@ class WebTransportTransport {
59
63
  [Symbol.toStringTag] = '@libp2p/webtransport';
60
64
  [transportSymbol] = true;
61
65
  async dial(ma, options) {
62
- options?.signal?.throwIfAborted();
66
+ if (options?.signal?.aborted === true) {
67
+ throw new AbortError();
68
+ }
63
69
  this.log('dialing %s', ma);
64
70
  const localPeer = this.components.peerId;
65
71
  if (localPeer === undefined) {
66
- throw new Error('Need a local peerid');
72
+ throw new CodeError('Need a local peerid', 'ERR_INVALID_PARAMETERS');
67
73
  }
68
74
  options = options ?? {};
69
75
  const { url, certhashes, remotePeer } = parseMultiaddr(ma);
70
76
  if (remotePeer == null) {
71
- throw new Error('Need a target peerid');
77
+ throw new CodeError('Need a target peerid', 'ERR_INVALID_PARAMETERS');
72
78
  }
73
79
  if (certhashes.length === 0) {
74
- throw new Error('Expected multiaddr to contain certhashes');
80
+ throw new CodeError('Expected multiaddr to contain certhashes', 'ERR_INVALID_PARAMETERS');
75
81
  }
76
82
  let abortListener;
77
83
  let maConn;
@@ -119,10 +125,12 @@ class WebTransportTransport {
119
125
  options.signal?.addEventListener('abort', abortListener, {
120
126
  once: true
121
127
  });
128
+ this.log('wait for session to be ready');
122
129
  await Promise.race([
123
130
  wt.closed,
124
131
  wt.ready
125
132
  ]);
133
+ this.log('session became ready');
126
134
  ready = true;
127
135
  this.metrics?.dialerEvents.increment({ ready: true });
128
136
  // this promise resolves/throws when the session is closed
@@ -132,13 +140,14 @@ class WebTransportTransport {
132
140
  .finally(() => {
133
141
  cleanUpWTSession('remote_close');
134
142
  });
135
- if (!await this.authenticateWebTransport(wt, localPeer, remotePeer, certhashes)) {
136
- throw new Error('Failed to authenticate webtransport');
143
+ authenticated = await raceSignal(this.authenticateWebTransport(wt, localPeer, remotePeer, certhashes), options.signal);
144
+ if (!authenticated) {
145
+ throw new CodeError('Failed to authenticate webtransport', 'ERR_AUTHENTICATION_FAILED');
137
146
  }
138
147
  this.metrics?.dialerEvents.increment({ open: true });
139
148
  maConn = {
140
149
  close: async () => {
141
- this.log('Closing webtransport');
150
+ this.log('closing webtransport');
142
151
  cleanUpWTSession('close');
143
152
  },
144
153
  abort: (err) => {
@@ -153,8 +162,11 @@ class WebTransportTransport {
153
162
  // This connection is never used directly since webtransport supports native streams.
154
163
  ...inertDuplex()
155
164
  };
156
- authenticated = true;
157
- return await options.upgrader.upgradeOutbound(maConn, { skipEncryption: true, muxerFactory: this.webtransportMuxer(wt), skipProtection: true });
165
+ return await options.upgrader.upgradeOutbound(maConn, {
166
+ skipEncryption: true,
167
+ muxerFactory: webtransportMuxer(wt, wt.incomingBidirectionalStreams.getReader(), this.components.logger, this.config),
168
+ skipProtection: true
169
+ });
158
170
  }
159
171
  catch (err) {
160
172
  this.log.error('caught wt session err', err);
@@ -175,11 +187,13 @@ class WebTransportTransport {
175
187
  }
176
188
  }
177
189
  }
178
- async authenticateWebTransport(wt, localPeer, remotePeer, certhashes) {
190
+ async authenticateWebTransport(wt, localPeer, remotePeer, certhashes, signal) {
191
+ if (signal?.aborted === true) {
192
+ throw new AbortError();
193
+ }
179
194
  const stream = await wt.createBidirectionalStream();
180
195
  const writer = stream.writable.getWriter();
181
196
  const reader = stream.readable.getReader();
182
- await writer.ready;
183
197
  const duplex = {
184
198
  source: (async function* () {
185
199
  while (true) {
@@ -192,14 +206,13 @@ class WebTransportTransport {
192
206
  }
193
207
  }
194
208
  })(),
195
- sink: async function (source) {
209
+ sink: async (source) => {
196
210
  for await (const chunk of source) {
197
- if (chunk instanceof Uint8Array) {
198
- await writer.write(chunk);
199
- }
200
- else {
201
- await writer.write(chunk.subarray());
202
- }
211
+ await raceSignal(writer.ready, signal);
212
+ const buf = chunk instanceof Uint8Array ? chunk : chunk.subarray();
213
+ writer.write(buf).catch(err => {
214
+ this.log.error('could not write chunk during authentication of WebTransport stream', err);
215
+ });
203
216
  }
204
217
  }
205
218
  };
@@ -218,82 +231,30 @@ class WebTransportTransport {
218
231
  }
219
232
  return true;
220
233
  }
221
- webtransportMuxer(wt) {
222
- let streamIDCounter = 0;
223
- const config = this.config;
224
- const self = this;
225
- return {
226
- protocol: 'webtransport',
227
- createStreamMuxer: (init) => {
228
- // !TODO handle abort signal when WebTransport supports this.
229
- if (typeof init === 'function') {
230
- // The api docs say that init may be a function
231
- init = { onIncomingStream: init };
232
- }
233
- const activeStreams = [];
234
- (async function () {
235
- //! TODO unclear how to add backpressure here?
236
- const reader = wt.incomingBidirectionalStreams.getReader();
237
- while (true) {
238
- const { done, value: wtStream } = await reader.read();
239
- if (done) {
240
- break;
241
- }
242
- if (activeStreams.length >= config.maxInboundStreams) {
243
- // We've reached our limit, close this stream.
244
- wtStream.writable.close().catch((err) => {
245
- self.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${err.message}`);
246
- });
247
- wtStream.readable.cancel().catch((err) => {
248
- self.log.error(`Failed to close inbound stream that crossed our maxInboundStream limit: ${err.message}`);
249
- });
250
- }
251
- else {
252
- const stream = await webtransportBiDiStreamToStream(wtStream, String(streamIDCounter++), 'inbound', activeStreams, init?.onStreamEnd, self.components.logger);
253
- activeStreams.push(stream);
254
- init?.onIncomingStream?.(stream);
255
- }
256
- }
257
- })().catch(() => {
258
- this.log.error('WebTransport failed to receive incoming stream');
259
- });
260
- const muxer = {
261
- protocol: 'webtransport',
262
- streams: activeStreams,
263
- newStream: async (name) => {
264
- const wtStream = await wt.createBidirectionalStream();
265
- const stream = await webtransportBiDiStreamToStream(wtStream, String(streamIDCounter++), init?.direction ?? 'outbound', activeStreams, init?.onStreamEnd, self.components.logger);
266
- activeStreams.push(stream);
267
- return stream;
268
- },
269
- /**
270
- * Close or abort all tracked streams and stop the muxer
271
- */
272
- close: async (options) => {
273
- this.log('Closing webtransport muxer');
274
- await Promise.all(activeStreams.map(async (s) => s.close(options)));
275
- },
276
- abort: (err) => {
277
- this.log('Aborting webtransport muxer with err:', err);
278
- for (const stream of activeStreams) {
279
- stream.abort(err);
280
- }
281
- },
282
- // This stream muxer is webtransport native. Therefore it doesn't plug in with any other duplex.
283
- ...inertDuplex()
284
- };
285
- return muxer;
286
- }
287
- };
288
- }
289
234
  createListener(options) {
290
- throw new Error('Webtransport servers are not supported in Node or the browser');
235
+ return createListener(this.components, {
236
+ ...options,
237
+ certificates: this.config.certificates,
238
+ maxInboundStreams: this.config.maxInboundStreams
239
+ });
240
+ }
241
+ /**
242
+ * Filter check for all Multiaddrs that this transport can listen on
243
+ */
244
+ listenFilter() {
245
+ return [];
291
246
  }
292
247
  /**
293
- * Takes a list of `Multiaddr`s and returns only valid webtransport addresses.
248
+ * Filter check for all Multiaddrs that this transport can dial
294
249
  */
295
- filter(multiaddrs) {
296
- return multiaddrs.filter(WebTransportMatcher.exactMatch);
250
+ dialFilter(multiaddrs) {
251
+ return multiaddrs.filter(ma => {
252
+ if (!WebTransportMatcher.exactMatch(ma)) {
253
+ return false;
254
+ }
255
+ const { url, certhashes, remotePeer } = parseMultiaddr(ma);
256
+ return url != null && remotePeer != null && certhashes.length > 0;
257
+ });
297
258
  }
298
259
  }
299
260
  export function webTransport(init = {}) {
@@ -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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"}
@@ -0,0 +1,3 @@
1
+ import type { CreateListenerOptions, Listener } from '@libp2p/interface';
2
+ export default function createListener(options: CreateListenerOptions): Listener;
3
+ //# sourceMappingURL=listener.browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.browser.d.ts","sourceRoot":"","sources":["../../src/listener.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAExE,MAAM,CAAC,OAAO,UAAU,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ,CAEhF"}
@@ -0,0 +1,4 @@
1
+ export default function createListener(options) {
2
+ throw new Error('Not implemented');
3
+ }
4
+ //# sourceMappingURL=listener.browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listener.browser.js","sourceRoot":"","sources":["../../src/listener.browser.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,cAAc,CAAE,OAA8B;IACpE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;AACpC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { WebTransportCertificate } from './index.js';
2
+ import type { Connection, Upgrader, Listener, CreateListenerOptions, PeerId, ComponentLogger, Metrics } from '@libp2p/interface';
3
+ export interface WebTransportListenerComponents {
4
+ peerId: PeerId;
5
+ logger: ComponentLogger;
6
+ metrics?: Metrics;
7
+ }
8
+ export interface WebTransportListenerInit extends CreateListenerOptions {
9
+ handler?(conn: Connection): void;
10
+ upgrader: Upgrader;
11
+ certificates?: WebTransportCertificate[];
12
+ maxInboundStreams?: number;
13
+ }
14
+ export default function createListener(components: WebTransportListenerComponents, options: WebTransportListenerInit): Listener;
15
+ //# sourceMappingURL=listener.d.ts.map
@@ -0,0 +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;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"}
@@ -0,0 +1,4 @@
1
+ export default function createListener(components, options) {
2
+ throw new Error('Only supported in browsers');
3
+ }
4
+ //# sourceMappingURL=listener.js.map
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,7 @@
1
+ import type WebTransport from './webtransport.js';
2
+ import type { ComponentLogger, 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>, logger: ComponentLogger, config: WebTransportMuxerInit): StreamMuxerFactory;
7
+ //# sourceMappingURL=muxer.d.ts.map
@@ -0,0 +1 @@
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,eAAe,EAAuB,kBAAkB,EAAmB,MAAM,mBAAmB,CAAA;AAElH,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,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,qBAAqB,GAAG,kBAAkB,CAqFlP"}
@@ -0,0 +1,70 @@
1
+ import { webtransportBiDiStreamToStream } from './stream.js';
2
+ import { inertDuplex } from './utils/inert-duplex.js';
3
+ export function webtransportMuxer(wt, reader, logger, config) {
4
+ let streamIDCounter = 0;
5
+ const log = logger.forComponent('libp2p:webtransport:muxer');
6
+ return {
7
+ protocol: 'webtransport',
8
+ createStreamMuxer: (init) => {
9
+ // !TODO handle abort signal when WebTransport supports this.
10
+ if (typeof init === 'function') {
11
+ // The api docs say that init may be a function
12
+ init = { onIncomingStream: init };
13
+ }
14
+ const activeStreams = [];
15
+ void Promise.resolve().then(async () => {
16
+ //! TODO unclear how to add backpressure here?
17
+ while (true) {
18
+ const { done, value: wtStream } = await reader.read();
19
+ if (done) {
20
+ break;
21
+ }
22
+ if (activeStreams.length >= config.maxInboundStreams) {
23
+ log(`too many inbound streams open - ${activeStreams.length}/${config.maxInboundStreams}, closing new incoming stream`);
24
+ // We've reached our limit, close this stream.
25
+ wtStream.writable.close().catch((err) => {
26
+ log.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${err.message}`);
27
+ });
28
+ wtStream.readable.cancel().catch((err) => {
29
+ log.error(`failed to close inbound stream that crossed our maxInboundStream limit: ${err.message}`);
30
+ });
31
+ }
32
+ else {
33
+ const stream = await webtransportBiDiStreamToStream(wtStream, String(streamIDCounter++), 'inbound', activeStreams, init?.onStreamEnd, logger);
34
+ activeStreams.push(stream);
35
+ init?.onIncomingStream?.(stream);
36
+ }
37
+ }
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, logger);
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
+ wt.close();
55
+ },
56
+ /**
57
+ * Abort all tracked streams and stop the muxer
58
+ */
59
+ abort: (err) => {
60
+ log('closing webtransport muxer with err:', err);
61
+ wt.close();
62
+ },
63
+ // This stream muxer is webtransport native. Therefore it doesn't plug in with any other duplex.
64
+ ...inertDuplex()
65
+ };
66
+ return muxer;
67
+ }
68
+ };
69
+ }
70
+ //# sourceMappingURL=muxer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAGzF,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,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAmL5P"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,eAAe,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAuFzF,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,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB5P"}