@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.
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/constants.d.ts.map +1 -0
- package/dist/src/constants.js +2 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/index.d.ts +4 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +63 -32
- package/dist/src/index.js.map +1 -1
- package/dist/src/listener.d.ts +1 -0
- package/dist/src/listener.d.ts.map +1 -1
- package/dist/src/listener.js.map +1 -1
- package/dist/src/muxer.d.ts +5 -2
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +74 -44
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/stream.d.ts +2 -21
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +47 -75
- package/dist/src/stream.js.map +1 -1
- package/dist/src/utils/inert-duplex.d.ts +3 -0
- package/dist/src/utils/inert-duplex.d.ts.map +1 -0
- package/dist/src/utils/inert-duplex.js +20 -0
- package/dist/src/utils/inert-duplex.js.map +1 -0
- package/dist/src/utils/parse-multiaddr.d.ts +1 -1
- package/dist/src/utils/parse-multiaddr.d.ts.map +1 -1
- package/dist/src/utils/parse-multiaddr.js +11 -17
- package/dist/src/utils/parse-multiaddr.js.map +1 -1
- package/package.json +20 -19
- package/src/constants.ts +1 -0
- package/src/index.ts +74 -36
- package/src/listener.ts +1 -0
- package/src/muxer.ts +84 -60
- package/src/stream.ts +55 -88
- package/src/utils/inert-duplex.ts +21 -0
- package/src/utils/parse-multiaddr.ts +12 -20
- package/dist/src/session-to-conn.d.ts +0 -11
- package/dist/src/session-to-conn.d.ts.map +0 -1
- package/dist/src/session-to-conn.js +0 -35
- package/dist/src/session-to-conn.js.map +0 -1
- package/dist/src/utils/webtransport-message-stream.d.ts +0 -18
- package/dist/src/utils/webtransport-message-stream.d.ts.map +0 -1
- package/dist/src/utils/webtransport-message-stream.js +0 -49
- package/dist/src/utils/webtransport-message-stream.js.map +0 -1
- package/src/session-to-conn.ts +0 -50
- package/src/utils/webtransport-message-stream.ts +0 -69
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA"}
|
package/dist/src/index.d.ts
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
|
|
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 {
|
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
|
|
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
|
|
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 {
|
|
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.
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
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(
|
|
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
|
-
|
|
195
|
-
|
|
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
|
/**
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA
|
|
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,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC5H,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,cAAc,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,YAAY,MAAM,mBAAmB,CAAA;AAoD5C,MAAM,qBAAqB;IACR,GAAG,CAAQ;IACX,UAAU,CAAwB;IAClC,MAAM,CAA4B;IAClC,OAAO,CAAsB;IAE9C,YAAa,UAAkC,EAAE,OAAyB,EAAE;QAC1E,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAA;QAChE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,IAAI;YACP,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,IAAI,mBAAmB;YAChE,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE;SACtC,CAAA;QAED,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG;gBACb,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,yCAAyC,EAAE;oBAC/F,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,mDAAmD;iBAC1D,CAAC;aACH,CAAA;QACH,CAAC;IACH,CAAC;IAEQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,sBAAsB,CAAA;IAE7C,CAAC,eAAe,CAAC,GAAG,IAAI,CAAA;IAExB,CAAC,mBAAmB,CAAC,GAAa;QACzC,mBAAmB;KACpB,CAAA;IAED,KAAK,CAAC,IAAI,CAAE,EAAa,EAAE,OAAqD;QAC9E,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAA;QAE/B,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;QAE1B,OAAO,GAAG,OAAO,IAAI,EAAE,CAAA;QAEvB,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;QAC1D,IAAI,aAAuC,CAAA;QAC3C,IAAI,MAAuC,CAAA;QAC3C,IAAI,gBAAgB,GAA+B,GAAG,EAAE,GAAE,CAAC,CAAA;QAC3D,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,KAAK,GAAG,KAAK,CAAA;QACjB,IAAI,aAAa,GAAG,KAAK,CAAA;QAEzB,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;YAEvD,MAAM,EAAE,GAAG,IAAI,YAAY,CAAC,GAAG,GAAG,6CAA6C,EAAE;gBAC/E,uBAAuB,EAAE,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACnD,SAAS,EAAE,SAAS;oBACpB,KAAK,EAAE,QAAQ,CAAC,MAAM;iBACvB,CAAC,CAAC;aACJ,CAAC,CAAA;YAEF,gBAAgB,GAAG,CAAC,MAAc,EAAE,EAAE;gBACpC,IAAI,MAAM,EAAE,CAAC;oBACX,yBAAyB;oBACzB,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC;oBACH,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAA;oBACxD,EAAE,CAAC,KAAK,EAAE,CAAA;gBACZ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAA;gBACjD,CAAC;wBAAS,CAAC;oBACT,yEAAyE;oBACzE,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;wBACnB,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;oBACpC,CAAC;oBAED,MAAM,GAAG,IAAI,CAAA;gBACf,CAAC;YACH,CAAC,CAAA;YAED,6EAA6E;YAC7E,aAAa,GAAG,GAAG,EAAE;gBACnB,IAAI,KAAK,EAAE,CAAC;oBACV,gBAAgB,CAAC,eAAe,CAAC,CAAA;gBACnC,CAAC;qBAAM,CAAC;oBACN,gBAAgB,CAAC,eAAe,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC,CAAA;YACD,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE;gBACtD,IAAI,EAAE,IAAI;aACX,CAAC,CAAA;YAEF,IAAI,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;YACxC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,+BAA+B,CAAC,CAAC,CAAA;YAC9E,MAAM,OAAO,CAAC,IAAI,CAAC;gBACjB,EAAE,CAAC,MAAM;gBACT,EAAE,CAAC,KAAK;aACT,CAAC,CAAA;YACF,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;YAEhC,KAAK,GAAG,IAAI,CAAA;YACZ,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAErD,0DAA0D;YAC1D,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;gBAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAA;YACzD,CAAC,CAAC;iBACC,OAAO,CAAC,GAAG,EAAE;gBACZ,gBAAgB,CAAC,cAAc,CAAC,CAAA;YAClC,CAAC,CAAC,CAAA;YAEJ,aAAa,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAE3H,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,MAAM,IAAI,0BAA0B,CAAC,qCAAqC,CAAC,CAAA;YAC7E,CAAC;YAED,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;YAEpD,MAAM,GAAG;gBACP,KAAK,EAAE,KAAK,IAAI,EAAE;oBAChB,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;oBAChC,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAC3B,CAAC;gBACD,KAAK,EAAE,CAAC,GAAU,EAAE,EAAE;oBACpB,IAAI,CAAC,GAAG,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAA;oBACxD,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBAC3B,CAAC;gBACD,UAAU,EAAE,EAAE;gBACd,QAAQ,EAAE;oBACR,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;iBACjB;gBACD,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,4BAA4B,CAAC;gBACtE,qFAAqF;gBACrF,GAAG,WAAW,EAAE;aACjB,CAAA;YAED,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE;gBACpD,GAAG,OAAO;gBACV,cAAc,EAAE,IAAI;gBACpB,YAAY,EAAE,iBAAiB,CAAC,EAAE,EAAE,EAAE,CAAC,4BAA4B,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;gBACvG,cAAc,EAAE,IAAI;aACrB,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAA;YAE5C,IAAI,aAAa,EAAE,CAAC;gBAClB,gBAAgB,CAAC,eAAe,CAAC,CAAA;YACnC,CAAC;iBAAM,IAAI,KAAK,EAAE,CAAC;gBACjB,gBAAgB,CAAC,aAAa,CAAC,CAAA;YACjC,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,aAAa,CAAC,CAAA;YACjC,CAAC;YAED,MAAM,GAAG,CAAA;QACX,CAAC;gBAAS,CAAC;YACT,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC1B,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAE,EAAE,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAmC;QACjH,MAAM,EAAE,cAAc,EAAE,CAAA;QAExB,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,yCAAyC,CAAC,CAAC,CAAA;QAChF,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,yBAAyB,EAAE,CAAA;QACnD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;QAE1C,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,CAAC,KAAK,SAAU,CAAC;gBACvB,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;oBAE/B,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;wBACtB,MAAM,GAAG,CAAC,KAAK,CAAA;oBACjB,CAAC;oBAED,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;wBACb,MAAK;oBACP,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,EAAE;YACJ,IAAI,EAAE,KAAK,EAAE,MAA2C,EAAE,EAAE;gBAC1D,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBACjC,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;oBAEtC,MAAM,GAAG,GAAG,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;oBAElE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;wBAC5B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,oEAAoE,EAAE,GAAG,CAAC,CAAA;oBAC3F,CAAC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;SACF,CAAA;QAED,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAElC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,yCAAyC,CAAC,CAAC,CAAA;QAChF,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE;YAC1D,MAAM;YACN,UAAU;YACV,0BAA0B,EAAE,IAAI;SACjC,CAAC,CAAA;QAEF,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,0CAA0C,CAAC,CAAC,CAAA;QACjF,6CAA6C;QAC7C,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YAClC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iDAAiD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,GAAU,EAAE,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,iDAAiD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;QAChF,CAAC,CAAC,CAAA;QAEF,uGAAuG;QACvG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,IAAI,EAAE,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC9F,MAAM,IAAI,sBAAsB,CAAC,qEAAqE,CAAC,CAAA;QACzG,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED,cAAc,CAAE,OAA8B;QAC5C,OAAO,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE;YACrC,GAAG,OAAO;YACV,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YACtC,iBAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB;SACjD,CAAC,CAAA;IACJ,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,EAAE,CAAA;IACX,CAAC;IAED;;OAEG;IACH,UAAU,CAAE,UAAuB;QACjC,gCAAgC;QAChC,IAAI,UAAU,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;YACpC,OAAO,EAAE,CAAA;QACX,CAAC;QAED,OAAO,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAC5B,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,CAAA;YAE9C,OAAO,GAAG,IAAI,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAC7C,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAAE,OAAyB,EAAE;IACvD,OAAO,CAAC,UAAkC,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC5F,CAAC"}
|
package/dist/src/listener.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/src/listener.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/listener.ts"],"names":[],"mappings":"
|
|
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"}
|
package/dist/src/muxer.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type WebTransport from './webtransport.js';
|
|
2
|
-
import type { StreamMuxerFactory } from '@libp2p/interface';
|
|
3
|
-
export
|
|
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
|
package/dist/src/muxer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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:
|
|
45
|
-
createStreamMuxer(
|
|
46
|
-
|
|
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
|
}
|
package/dist/src/muxer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
|
package/dist/src/stream.d.ts
CHANGED
|
@@ -1,22 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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
|
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,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"}
|