@libp2p/webtransport 4.0.28 → 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.
- package/dist/index.min.js +3 -3
- package/dist/src/index.d.ts +12 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +55 -94
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.browser.d.ts +3 -0
- package/dist/src/listener.browser.d.ts.map +1 -0
- package/dist/src/listener.browser.js +4 -0
- package/dist/src/listener.browser.js.map +1 -0
- package/dist/src/listener.d.ts +15 -0
- package/dist/src/listener.d.ts.map +1 -0
- package/dist/src/listener.js +4 -0
- package/dist/src/listener.js.map +1 -0
- package/dist/src/muxer.d.ts +7 -0
- package/dist/src/muxer.d.ts.map +1 -0
- package/dist/src/muxer.js +70 -0
- package/dist/src/muxer.js.map +1 -0
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +79 -151
- package/dist/src/stream.js.map +1 -1
- package/dist/src/utils/generate-certificates.browser.d.ts +2 -0
- package/dist/src/utils/generate-certificates.browser.d.ts.map +1 -0
- package/dist/src/utils/generate-certificates.browser.js +4 -0
- package/dist/src/utils/generate-certificates.browser.js.map +1 -0
- package/dist/src/utils/generate-certificates.d.ts +8 -0
- package/dist/src/utils/generate-certificates.d.ts.map +1 -0
- package/dist/src/utils/generate-certificates.js +4 -0
- package/dist/src/utils/generate-certificates.js.map +1 -0
- package/dist/src/webtransport.browser.d.ts +2 -0
- package/dist/src/webtransport.browser.d.ts.map +1 -0
- package/dist/src/webtransport.browser.js +2 -0
- package/dist/src/webtransport.browser.js.map +1 -0
- package/dist/src/webtransport.d.ts +9 -0
- package/dist/src/webtransport.d.ts.map +1 -0
- package/dist/src/webtransport.js +15 -0
- package/dist/src/webtransport.js.map +1 -0
- package/package.json +18 -9
- package/src/index.ts +74 -122
- package/src/listener.browser.ts +5 -0
- package/src/listener.ts +19 -0
- package/src/muxer.ts +95 -0
- package/src/stream.ts +90 -164
- package/src/utils/generate-certificates.browser.ts +3 -0
- package/src/utils/generate-certificates.ts +11 -0
- package/src/webtransport.browser.ts +1 -0
- package/src/webtransport.ts +17 -0
- package/dist/typedoc-urls.json +0 -10
package/dist/src/index.d.ts
CHANGED
|
@@ -28,9 +28,20 @@
|
|
|
28
28
|
* })
|
|
29
29
|
* ```
|
|
30
30
|
*/
|
|
31
|
-
import {
|
|
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;
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;
|
|
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 {
|
|
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
|
-
|
|
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?.
|
|
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
|
|
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
|
|
77
|
+
throw new CodeError('Need a target peerid', 'ERR_INVALID_PARAMETERS');
|
|
72
78
|
}
|
|
73
79
|
if (certhashes.length === 0) {
|
|
74
|
-
throw new
|
|
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
|
-
|
|
136
|
-
|
|
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('
|
|
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
|
-
|
|
157
|
-
|
|
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
|
|
209
|
+
sink: async (source) => {
|
|
196
210
|
for await (const chunk of source) {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
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
|
-
|
|
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
|
-
*
|
|
248
|
+
* Filter check for all Multiaddrs that this transport can dial
|
|
294
249
|
*/
|
|
295
|
-
|
|
296
|
-
return multiaddrs.filter(
|
|
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 = {}) {
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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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"}
|
package/dist/src/stream.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"
|
|
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"}
|