@libp2p/webrtc 2.0.2 → 2.0.4
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 +17 -17
- package/dist/src/index.d.ts +19 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +20 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/muxer.d.ts +27 -17
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +47 -71
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/private-to-private/handler.d.ts +5 -2
- package/dist/src/private-to-private/handler.d.ts.map +1 -1
- package/dist/src/private-to-private/handler.js +4 -4
- package/dist/src/private-to-private/handler.js.map +1 -1
- package/dist/src/private-to-private/transport.d.ts +3 -1
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +4 -2
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +6 -1
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +6 -4
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/stream.d.ts +20 -133
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +121 -289
- package/dist/src/stream.js.map +1 -1
- package/package.json +12 -4
- package/src/index.ts +21 -4
- package/src/muxer.ts +75 -76
- package/src/private-to-private/handler.ts +7 -6
- package/src/private-to-private/transport.ts +6 -2
- package/src/private-to-public/transport.ts +11 -5
- package/src/stream.ts +156 -345
package/dist/src/index.d.ts
CHANGED
|
@@ -1,7 +1,24 @@
|
|
|
1
|
-
import { type WebRTCDirectTransportComponents } from './private-to-public/transport.js';
|
|
1
|
+
import { type WebRTCTransportDirectInit, type WebRTCDirectTransportComponents } from './private-to-public/transport.js';
|
|
2
2
|
import type { WebRTCTransportComponents, WebRTCTransportInit } from './private-to-private/transport.js';
|
|
3
3
|
import type { Transport } from '@libp2p/interface-transport';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* @param {WebRTCTransportDirectInit} init - WebRTC direct transport configuration
|
|
6
|
+
* @param init.dataChannel - DataChannel configurations
|
|
7
|
+
* @param {number} init.dataChannel.maxMessageSize - Max message size that can be sent through the DataChannel. Larger messages will be chunked into smaller messages below this size (default 16kb)
|
|
8
|
+
* @param {number} init.dataChannel.maxBufferedAmount - Max buffered amount a DataChannel can have (default 16mb)
|
|
9
|
+
* @param {number} init.dataChannel.bufferedAmountLowEventTimeout - If max buffered amount is reached, this is the max time that is waited before the buffer is cleared (default 30 seconds)
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
declare function webRTCDirect(init?: WebRTCTransportDirectInit): (components: WebRTCDirectTransportComponents) => Transport;
|
|
13
|
+
/**
|
|
14
|
+
* @param {WebRTCTransportInit} init - WebRTC transport configuration
|
|
15
|
+
* @param {RTCConfiguration} init.rtcConfiguration - RTCConfiguration
|
|
16
|
+
* @param init.dataChannel - DataChannel configurations
|
|
17
|
+
* @param {number} init.dataChannel.maxMessageSize - Max message size that can be sent through the DataChannel. Larger messages will be chunked into smaller messages below this size (default 16kb)
|
|
18
|
+
* @param {number} init.dataChannel.maxBufferedAmount - Max buffered amount a DataChannel can have (default 16mb)
|
|
19
|
+
* @param {number} init.dataChannel.bufferedAmountLowEventTimeout - If max buffered amount is reached, this is the max time that is waited before the buffer is cleared (default 30 seconds)
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
5
22
|
declare function webRTC(init?: WebRTCTransportInit): (components: WebRTCTransportComponents) => Transport;
|
|
6
23
|
export { webRTC, webRTCDirect };
|
|
7
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,yBAAyB,EAAE,KAAK,+BAA+B,EAAE,MAAM,kCAAkC,CAAA;AAC9I,OAAO,KAAK,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AACvG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAE5D;;;;;;;GAOG;AACH,iBAAS,YAAY,CAAE,IAAI,CAAC,EAAE,yBAAyB,GAAG,CAAC,UAAU,EAAE,+BAA+B,KAAK,SAAS,CAEnH;AAED;;;;;;;;GAQG;AACH,iBAAS,MAAM,CAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,CAAC,UAAU,EAAE,yBAAyB,KAAK,SAAS,CAEjG;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
import { WebRTCTransport } from './private-to-private/transport.js';
|
|
2
2
|
import { WebRTCDirectTransport } from './private-to-public/transport.js';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
/**
|
|
4
|
+
* @param {WebRTCTransportDirectInit} init - WebRTC direct transport configuration
|
|
5
|
+
* @param init.dataChannel - DataChannel configurations
|
|
6
|
+
* @param {number} init.dataChannel.maxMessageSize - Max message size that can be sent through the DataChannel. Larger messages will be chunked into smaller messages below this size (default 16kb)
|
|
7
|
+
* @param {number} init.dataChannel.maxBufferedAmount - Max buffered amount a DataChannel can have (default 16mb)
|
|
8
|
+
* @param {number} init.dataChannel.bufferedAmountLowEventTimeout - If max buffered amount is reached, this is the max time that is waited before the buffer is cleared (default 30 seconds)
|
|
9
|
+
* @returns
|
|
10
|
+
*/
|
|
11
|
+
function webRTCDirect(init) {
|
|
12
|
+
return (components) => new WebRTCDirectTransport(components, init);
|
|
5
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* @param {WebRTCTransportInit} init - WebRTC transport configuration
|
|
16
|
+
* @param {RTCConfiguration} init.rtcConfiguration - RTCConfiguration
|
|
17
|
+
* @param init.dataChannel - DataChannel configurations
|
|
18
|
+
* @param {number} init.dataChannel.maxMessageSize - Max message size that can be sent through the DataChannel. Larger messages will be chunked into smaller messages below this size (default 16kb)
|
|
19
|
+
* @param {number} init.dataChannel.maxBufferedAmount - Max buffered amount a DataChannel can have (default 16mb)
|
|
20
|
+
* @param {number} init.dataChannel.bufferedAmountLowEventTimeout - If max buffered amount is reached, this is the max time that is waited before the buffer is cleared (default 30 seconds)
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
6
23
|
function webRTC(init) {
|
|
7
|
-
return (components) => new WebRTCTransport(components, init
|
|
24
|
+
return (components) => new WebRTCTransport(components, init);
|
|
8
25
|
}
|
|
9
26
|
export { webRTC, webRTCDirect };
|
|
10
27
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAAwE,MAAM,kCAAkC,CAAA;AAI9I;;;;;;;GAOG;AACH,SAAS,YAAY,CAAE,IAAgC;IACrD,OAAO,CAAC,UAA2C,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACrG,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,MAAM,CAAE,IAA0B;IACzC,OAAO,CAAC,UAAqC,EAAE,EAAE,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACzF,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/src/muxer.d.ts
CHANGED
|
@@ -1,11 +1,26 @@
|
|
|
1
|
+
import type { DataChannelOpts } from './stream.js';
|
|
1
2
|
import type { Stream } from '@libp2p/interface-connection';
|
|
2
3
|
import type { CounterGroup } from '@libp2p/interface-metrics';
|
|
3
4
|
import type { StreamMuxer, StreamMuxerFactory, StreamMuxerInit } from '@libp2p/interface-stream-muxer';
|
|
4
5
|
import type { Source, Sink } from 'it-stream-types';
|
|
5
6
|
import type { Uint8ArrayList } from 'uint8arraylist';
|
|
6
7
|
export interface DataChannelMuxerFactoryInit {
|
|
8
|
+
/**
|
|
9
|
+
* WebRTC Peer Connection
|
|
10
|
+
*/
|
|
7
11
|
peerConnection: RTCPeerConnection;
|
|
12
|
+
/**
|
|
13
|
+
* Optional metrics for this data channel muxer
|
|
14
|
+
*/
|
|
8
15
|
metrics?: CounterGroup;
|
|
16
|
+
/**
|
|
17
|
+
* Data channel options
|
|
18
|
+
*/
|
|
19
|
+
dataChannelOptions?: Partial<DataChannelOpts>;
|
|
20
|
+
/**
|
|
21
|
+
* The protocol to use
|
|
22
|
+
*/
|
|
23
|
+
protocol?: string;
|
|
9
24
|
}
|
|
10
25
|
export declare class DataChannelMuxerFactory implements StreamMuxerFactory {
|
|
11
26
|
readonly protocol: string;
|
|
@@ -15,30 +30,26 @@ export declare class DataChannelMuxerFactory implements StreamMuxerFactory {
|
|
|
15
30
|
private readonly peerConnection;
|
|
16
31
|
private streamBuffer;
|
|
17
32
|
private readonly metrics?;
|
|
18
|
-
|
|
19
|
-
|
|
33
|
+
private readonly dataChannelOptions?;
|
|
34
|
+
constructor(init: DataChannelMuxerFactoryInit);
|
|
35
|
+
createStreamMuxer(init?: StreamMuxerInit): StreamMuxer;
|
|
36
|
+
}
|
|
37
|
+
export interface DataChannelMuxerInit extends DataChannelMuxerFactoryInit, StreamMuxerInit {
|
|
38
|
+
streams: Stream[];
|
|
20
39
|
}
|
|
21
40
|
/**
|
|
22
41
|
* A libp2p data channel stream muxer
|
|
23
42
|
*/
|
|
24
43
|
export declare class DataChannelMuxer implements StreamMuxer {
|
|
25
|
-
readonly
|
|
26
|
-
/**
|
|
27
|
-
* WebRTC Peer Connection
|
|
28
|
-
*/
|
|
29
|
-
private readonly peerConnection;
|
|
30
|
-
/**
|
|
31
|
-
* Optional metrics for this data channel muxer
|
|
32
|
-
*/
|
|
33
|
-
private readonly metrics?;
|
|
44
|
+
readonly init: DataChannelMuxerInit;
|
|
34
45
|
/**
|
|
35
46
|
* Array of streams in the data channel
|
|
36
47
|
*/
|
|
37
48
|
streams: Stream[];
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
49
|
+
protocol: string;
|
|
50
|
+
private readonly peerConnection;
|
|
51
|
+
private readonly dataChannelOptions?;
|
|
52
|
+
private readonly metrics?;
|
|
42
53
|
/**
|
|
43
54
|
* Close or abort all tracked streams and stop the muxer
|
|
44
55
|
*/
|
|
@@ -51,8 +62,7 @@ export declare class DataChannelMuxer implements StreamMuxer {
|
|
|
51
62
|
* The stream destination, a no-op as the transport natively supports multiplexing
|
|
52
63
|
*/
|
|
53
64
|
sink: Sink<Source<Uint8Array | Uint8ArrayList>, Promise<void>>;
|
|
54
|
-
constructor(
|
|
65
|
+
constructor(init: DataChannelMuxerInit);
|
|
55
66
|
newStream(): Stream;
|
|
56
|
-
private wrapStreamEnd;
|
|
57
67
|
}
|
|
58
68
|
//# 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":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AACtG,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"muxer.d.ts","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAA;AACtG,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAIpD,MAAM,WAAW,2BAA2B;IAC1C;;OAEG;IACH,cAAc,EAAE,iBAAiB,CAAA;IAEjC;;OAEG;IACH,OAAO,CAAC,EAAE,YAAY,CAAA;IAEtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAE7C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAEhC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;IACvC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAA0B;gBAEjD,IAAI,EAAE,2BAA2B;IAoB9C,iBAAiB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW;CAUxD;AAED,MAAM,WAAW,oBAAqB,SAAQ,2BAA2B,EAAE,eAAe;IACxF,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IA0BrC,QAAQ,CAAC,IAAI,EAAE,oBAAoB;IAzBhD;;OAEG;IACI,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAEvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAiB;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAc;IAEvC;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,KAAK,IAAI,CAAY;IAEpD;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC,UAAU,EAAE,GAAG,EAAE,OAAO,CAAC,CAAc;IAE9D;;OAEG;IACH,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,cAAc,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAU;gBAElD,IAAI,EAAE,oBAAoB;IAqChD,SAAS,IAAK,MAAM;CAkBrB"}
|
package/dist/src/muxer.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createStream } from './stream.js';
|
|
2
2
|
import { nopSink, nopSource } from './util.js';
|
|
3
|
+
const PROTOCOL = '/webrtc';
|
|
3
4
|
export class DataChannelMuxerFactory {
|
|
4
5
|
protocol;
|
|
5
6
|
/**
|
|
@@ -8,50 +9,49 @@ export class DataChannelMuxerFactory {
|
|
|
8
9
|
peerConnection;
|
|
9
10
|
streamBuffer = [];
|
|
10
11
|
metrics;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
this.peerConnection = peerConnection;
|
|
12
|
+
dataChannelOptions;
|
|
13
|
+
constructor(init) {
|
|
14
|
+
this.peerConnection = init.peerConnection;
|
|
15
|
+
this.metrics = init.metrics;
|
|
16
|
+
this.protocol = init.protocol ?? PROTOCOL;
|
|
17
|
+
this.dataChannelOptions = init.dataChannelOptions;
|
|
14
18
|
// store any datachannels opened before upgrade has been completed
|
|
15
19
|
this.peerConnection.ondatachannel = ({ channel }) => {
|
|
16
|
-
const stream =
|
|
20
|
+
const stream = createStream({
|
|
17
21
|
channel,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
closeCb: (_stream) => {
|
|
23
|
-
this.streamBuffer = this.streamBuffer.filter(s => !_stream.eq(s));
|
|
22
|
+
direction: 'inbound',
|
|
23
|
+
dataChannelOptions: init.dataChannelOptions,
|
|
24
|
+
onEnd: () => {
|
|
25
|
+
this.streamBuffer = this.streamBuffer.filter(s => s.id !== stream.id);
|
|
24
26
|
}
|
|
25
27
|
});
|
|
26
28
|
this.streamBuffer.push(stream);
|
|
27
29
|
};
|
|
28
|
-
this.metrics = metrics;
|
|
29
30
|
}
|
|
30
31
|
createStreamMuxer(init) {
|
|
31
|
-
return new DataChannelMuxer(
|
|
32
|
+
return new DataChannelMuxer({
|
|
33
|
+
...init,
|
|
34
|
+
peerConnection: this.peerConnection,
|
|
35
|
+
dataChannelOptions: this.dataChannelOptions,
|
|
36
|
+
metrics: this.metrics,
|
|
37
|
+
streams: this.streamBuffer,
|
|
38
|
+
protocol: this.protocol
|
|
39
|
+
});
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
/**
|
|
35
43
|
* A libp2p data channel stream muxer
|
|
36
44
|
*/
|
|
37
45
|
export class DataChannelMuxer {
|
|
38
|
-
|
|
46
|
+
init;
|
|
39
47
|
/**
|
|
40
|
-
*
|
|
48
|
+
* Array of streams in the data channel
|
|
41
49
|
*/
|
|
50
|
+
streams;
|
|
51
|
+
protocol;
|
|
42
52
|
peerConnection;
|
|
43
|
-
|
|
44
|
-
* Optional metrics for this data channel muxer
|
|
45
|
-
*/
|
|
53
|
+
dataChannelOptions;
|
|
46
54
|
metrics;
|
|
47
|
-
/**
|
|
48
|
-
* Array of streams in the data channel
|
|
49
|
-
*/
|
|
50
|
-
streams = [];
|
|
51
|
-
/**
|
|
52
|
-
* Initialized stream muxer
|
|
53
|
-
*/
|
|
54
|
-
init;
|
|
55
55
|
/**
|
|
56
56
|
* Close or abort all tracked streams and stop the muxer
|
|
57
57
|
*/
|
|
@@ -64,16 +64,12 @@ export class DataChannelMuxer {
|
|
|
64
64
|
* The stream destination, a no-op as the transport natively supports multiplexing
|
|
65
65
|
*/
|
|
66
66
|
sink = nopSink;
|
|
67
|
-
constructor(
|
|
68
|
-
this.protocol = protocol;
|
|
69
|
-
/**
|
|
70
|
-
* Initialized stream muxer
|
|
71
|
-
*/
|
|
67
|
+
constructor(init) {
|
|
72
68
|
this.init = init;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
this.
|
|
69
|
+
this.streams = init.streams;
|
|
70
|
+
this.peerConnection = init.peerConnection;
|
|
71
|
+
this.protocol = init.protocol ?? PROTOCOL;
|
|
72
|
+
this.metrics = init.metrics;
|
|
77
73
|
/**
|
|
78
74
|
* Fired when a data channel has been added to the connection has been
|
|
79
75
|
* added by the remote peer.
|
|
@@ -81,15 +77,15 @@ export class DataChannelMuxer {
|
|
|
81
77
|
* {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/datachannel_event}
|
|
82
78
|
*/
|
|
83
79
|
this.peerConnection.ondatachannel = ({ channel }) => {
|
|
84
|
-
const stream =
|
|
80
|
+
const stream = createStream({
|
|
85
81
|
channel,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
|
|
82
|
+
direction: 'inbound',
|
|
83
|
+
dataChannelOptions: this.dataChannelOptions,
|
|
84
|
+
onEnd: () => {
|
|
85
|
+
this.streams = this.streams.filter(s => s.id !== stream.id);
|
|
86
|
+
this.metrics?.increment({ stream_end: true });
|
|
87
|
+
init?.onStreamEnd?.(stream);
|
|
88
|
+
}
|
|
93
89
|
});
|
|
94
90
|
this.streams.push(stream);
|
|
95
91
|
if ((init?.onIncomingStream) != null) {
|
|
@@ -97,13 +93,6 @@ export class DataChannelMuxer {
|
|
|
97
93
|
init.onIncomingStream(stream);
|
|
98
94
|
}
|
|
99
95
|
};
|
|
100
|
-
// wrap open streams with the onStreamEnd callback
|
|
101
|
-
this.streams = streams
|
|
102
|
-
.filter(stream => stream.stat.timeline.close == null)
|
|
103
|
-
.map(stream => {
|
|
104
|
-
stream.closeCb = this.wrapStreamEnd(init?.onStreamEnd);
|
|
105
|
-
return stream;
|
|
106
|
-
});
|
|
107
96
|
const onIncomingStream = init?.onIncomingStream;
|
|
108
97
|
if (onIncomingStream != null) {
|
|
109
98
|
this.streams.forEach(s => { onIncomingStream(s); });
|
|
@@ -112,32 +101,19 @@ export class DataChannelMuxer {
|
|
|
112
101
|
newStream() {
|
|
113
102
|
// The spec says the label SHOULD be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
|
|
114
103
|
const channel = this.peerConnection.createDataChannel('');
|
|
115
|
-
const
|
|
116
|
-
this.metrics?.increment({ stream_end: true });
|
|
117
|
-
this.init?.onStreamEnd?.(stream);
|
|
118
|
-
};
|
|
119
|
-
const stream = new WebRTCStream({
|
|
104
|
+
const stream = createStream({
|
|
120
105
|
channel,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
|
|
106
|
+
direction: 'outbound',
|
|
107
|
+
dataChannelOptions: this.dataChannelOptions,
|
|
108
|
+
onEnd: () => {
|
|
109
|
+
this.streams = this.streams.filter(s => s.id !== stream.id);
|
|
110
|
+
this.metrics?.increment({ stream_end: true });
|
|
111
|
+
this.init?.onStreamEnd?.(stream);
|
|
112
|
+
}
|
|
128
113
|
});
|
|
129
114
|
this.streams.push(stream);
|
|
130
115
|
this.metrics?.increment({ outgoing_stream: true });
|
|
131
116
|
return stream;
|
|
132
117
|
}
|
|
133
|
-
wrapStreamEnd(onStreamEnd) {
|
|
134
|
-
const self = this;
|
|
135
|
-
return (_stream) => {
|
|
136
|
-
self.streams = self.streams.filter(s => !(_stream instanceof WebRTCStream && (_stream).eq(s)));
|
|
137
|
-
if (onStreamEnd != null) {
|
|
138
|
-
onStreamEnd(_stream);
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
118
|
}
|
|
143
119
|
//# sourceMappingURL=muxer.js.map
|
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,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import type { DataChannelOpts } from '../stream.js';
|
|
1
2
|
import type { Stream } from '@libp2p/interface-connection';
|
|
2
3
|
import type { IncomingStreamData } from '@libp2p/interface-registrar';
|
|
3
4
|
import type { StreamMuxerFactory } from '@libp2p/interface-stream-muxer';
|
|
4
5
|
export type IncomingStreamOpts = {
|
|
5
6
|
rtcConfiguration?: RTCConfiguration;
|
|
7
|
+
dataChannelOptions?: Partial<DataChannelOpts>;
|
|
6
8
|
} & IncomingStreamData;
|
|
7
|
-
export declare function handleIncomingStream({ rtcConfiguration, stream: rawStream }: IncomingStreamOpts): Promise<{
|
|
9
|
+
export declare function handleIncomingStream({ rtcConfiguration, dataChannelOptions, stream: rawStream }: IncomingStreamOpts): Promise<{
|
|
8
10
|
pc: RTCPeerConnection;
|
|
9
11
|
muxerFactory: StreamMuxerFactory;
|
|
10
12
|
remoteAddress: string;
|
|
@@ -13,8 +15,9 @@ export interface ConnectOptions {
|
|
|
13
15
|
stream: Stream;
|
|
14
16
|
signal: AbortSignal;
|
|
15
17
|
rtcConfiguration?: RTCConfiguration;
|
|
18
|
+
dataChannelOptions?: Partial<DataChannelOpts>;
|
|
16
19
|
}
|
|
17
|
-
export declare function initiateConnection({ rtcConfiguration, signal, stream: rawStream }: ConnectOptions): Promise<{
|
|
20
|
+
export declare function initiateConnection({ rtcConfiguration, dataChannelOptions, signal, stream: rawStream }: ConnectOptions): Promise<{
|
|
18
21
|
pc: RTCPeerConnection;
|
|
19
22
|
muxerFactory: StreamMuxerFactory;
|
|
20
23
|
remoteAddress: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/handler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAMxE,MAAM,MAAM,kBAAkB,GAAG;IAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;CAAE,GAAG,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/handler.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AAMxE,MAAM,MAAM,kBAAkB,GAAG;IAAE,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CAAE,GAAG,kBAAkB,CAAA;AAE5I,wBAAsB,oBAAoB,CAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAgExN;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,WAAW,CAAA;IACnB,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CAC9C;AAED,wBAAsB,kBAAkB,CAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAmD1N"}
|
|
@@ -7,11 +7,11 @@ import { Message } from './pb/message.js';
|
|
|
7
7
|
import { readCandidatesUntilConnected, resolveOnConnected } from './util.js';
|
|
8
8
|
const DEFAULT_TIMEOUT = 30 * 1000;
|
|
9
9
|
const log = logger('libp2p:webrtc:peer');
|
|
10
|
-
export async function handleIncomingStream({ rtcConfiguration, stream: rawStream }) {
|
|
10
|
+
export async function handleIncomingStream({ rtcConfiguration, dataChannelOptions, stream: rawStream }) {
|
|
11
11
|
const signal = AbortSignal.timeout(DEFAULT_TIMEOUT);
|
|
12
12
|
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(Message);
|
|
13
13
|
const pc = new RTCPeerConnection(rtcConfiguration);
|
|
14
|
-
const muxerFactory = new DataChannelMuxerFactory(pc);
|
|
14
|
+
const muxerFactory = new DataChannelMuxerFactory({ peerConnection: pc, dataChannelOptions });
|
|
15
15
|
const connectedPromise = pDefer();
|
|
16
16
|
const answerSentPromise = pDefer();
|
|
17
17
|
signal.onabort = () => { connectedPromise.reject(); };
|
|
@@ -59,11 +59,11 @@ export async function handleIncomingStream({ rtcConfiguration, stream: rawStream
|
|
|
59
59
|
const remoteAddress = parseRemoteAddress(pc.currentRemoteDescription?.sdp ?? '');
|
|
60
60
|
return { pc, muxerFactory, remoteAddress };
|
|
61
61
|
}
|
|
62
|
-
export async function initiateConnection({ rtcConfiguration, signal, stream: rawStream }) {
|
|
62
|
+
export async function initiateConnection({ rtcConfiguration, dataChannelOptions, signal, stream: rawStream }) {
|
|
63
63
|
const stream = pbStream(abortableDuplex(rawStream, signal)).pb(Message);
|
|
64
64
|
// setup peer connection
|
|
65
65
|
const pc = new RTCPeerConnection(rtcConfiguration);
|
|
66
|
-
const muxerFactory = new DataChannelMuxerFactory(pc);
|
|
66
|
+
const muxerFactory = new DataChannelMuxerFactory({ peerConnection: pc, dataChannelOptions });
|
|
67
67
|
const connectedPromise = pDefer();
|
|
68
68
|
resolveOnConnected(pc, connectedPromise);
|
|
69
69
|
// reject the connectedPromise if the signal aborts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/private-to-private/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,MAAgC,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/private-to-private/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,MAAgC,MAAM,SAAS,CAAA;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAM5E,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAA;AAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAA;AAIxC,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,SAAS,EAAsB;IACzH,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;IACnD,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IACvE,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAC5F,MAAM,gBAAgB,GAA0B,MAAM,EAAE,CAAA;IACxD,MAAM,iBAAiB,GAA0B,MAAM,EAAE,CAAA;IAEzD,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAA,CAAC,CAAC,CAAA;IACpD,sBAAsB;IACtB,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAC5B,GAAG,EAAE;YACH,MAAM,CAAC,KAAK,CAAC;gBACX,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa;gBAChC,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;aACpE,CAAC,CAAA;QACJ,CAAC,EACD,CAAC,GAAG,EAAE,EAAE;YACN,GAAG,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,CAAC,CAAA;QACpE,CAAC,CACF,CAAA;IACH,CAAC,CAAA;IAED,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;IAExC,oBAAoB;IACpB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACnC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE;QAC3C,MAAM,IAAI,KAAK,CAAC,8CAA8C,OAAO,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC,CAAA;KAC9F;IACD,MAAM,KAAK,GAAG,IAAI,qBAAqB,CAAC;QACtC,IAAI,EAAE,OAAO;QACb,GAAG,EAAE,OAAO,CAAC,IAAI;KAClB,CAAC,CAAA;IAEF,MAAM,EAAE,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC/C,GAAG,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAA;QACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,iCAAiC;IACjC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACjD,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;QAChD,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IACF,iCAAiC;IACjC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;IAEjE,MAAM,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC/C,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAA;QACvD,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAC7B,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,iBAAiB,CAAC,OAAO,EAAE,CAAA;IAE3B,sCAAsC;IACtC,MAAM,4BAA4B,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IAEhE,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAEhF,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAA;AAC5C,CAAC;AASD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAkB;IAC3H,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IACvE,wBAAwB;IACxB,MAAM,EAAE,GAAG,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,kBAAkB,EAAE,CAAC,CAAA;IAE5F,MAAM,gBAAgB,GAA0B,MAAM,EAAE,CAAA;IACxD,kBAAkB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;IAExC,mDAAmD;IACnD,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAA;IACxC,6EAA6E;IAC7E,4EAA4E;IAC5E,kCAAkC;IAClC,MAAM,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC5C,uDAAuD;IACvD,OAAO;IACP,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QACpC,MAAM,CAAC,KAAK,CAAC;YACX,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa;YAChC,IAAI,EAAE,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;SACpE,CAAC,CAAA;IACJ,CAAC,CAAA;IACD,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,CAAA;IACvC,gCAAgC;IAChC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;IAClE,iCAAiC;IACjC,MAAM,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACjD,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAA;QACvD,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,cAAc;IACd,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACzC,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE;QAClD,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAA;KACpD;IAED,MAAM,SAAS,GAAG,IAAI,qBAAqB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;IACxF,MAAM,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QACnD,GAAG,CAAC,KAAK,CAAC,wCAAwC,EAAE,GAAG,CAAC,CAAA;QACxD,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,MAAM,4BAA4B,CAAC,gBAAgB,EAAE,EAAE,EAAE,MAAM,CAAC,CAAA;IAChE,OAAO,CAAC,KAAK,EAAE,CAAA;IAEf,MAAM,aAAa,GAAG,kBAAkB,CAAC,EAAE,CAAC,wBAAwB,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;IAEhF,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAA;AAC5C,CAAC;AAED,SAAS,kBAAkB,CAAE,GAAW;IACtC,2GAA2G;IAC3G,MAAM,aAAa,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;IAC5F,MAAM,cAAc,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;IAEhD,IAAI,aAAa,IAAI,IAAI,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;QAChF,GAAG,CAAC,qCAAqC,EAAE,aAAa,CAAC,CAAA;QACzD,OAAO,SAAS,CAAA;KACjB;IAED,OAAO,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,SAAS,CAAA;AACzF,CAAC"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type CreateListenerOptions, type DialOptions, type Listener, symbol, type Transport, type Upgrader, type TransportManager } from '@libp2p/interface-transport';
|
|
2
2
|
import { type Multiaddr } from '@multiformats/multiaddr';
|
|
3
|
+
import type { DataChannelOpts } from '../stream.js';
|
|
3
4
|
import type { Connection } from '@libp2p/interface-connection';
|
|
4
5
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
5
6
|
import type { IncomingStreamData, Registrar } from '@libp2p/interface-registrar';
|
|
6
7
|
import type { Startable } from '@libp2p/interfaces/startable';
|
|
7
8
|
export interface WebRTCTransportInit {
|
|
8
9
|
rtcConfiguration?: RTCConfiguration;
|
|
10
|
+
dataChannel?: Partial<DataChannelOpts>;
|
|
9
11
|
}
|
|
10
12
|
export interface WebRTCTransportComponents {
|
|
11
13
|
peerId: PeerId;
|
|
@@ -17,7 +19,7 @@ export declare class WebRTCTransport implements Transport, Startable {
|
|
|
17
19
|
private readonly components;
|
|
18
20
|
private readonly init;
|
|
19
21
|
private _started;
|
|
20
|
-
constructor(components: WebRTCTransportComponents, init
|
|
22
|
+
constructor(components: WebRTCTransportComponents, init?: WebRTCTransportInit);
|
|
21
23
|
isStarted(): boolean;
|
|
22
24
|
start(): Promise<void>;
|
|
23
25
|
stop(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAIvK,OAAO,EAAa,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAA;AAK9E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAS7D,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAIvK,OAAO,EAAa,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAA;AAK9E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAChF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAS7D,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;CACnC;AAED,qBAAa,eAAgB,YAAW,SAAS,EAAE,SAAS;IAIxD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAJvB,OAAO,CAAC,QAAQ,CAAQ;gBAGL,UAAU,EAAE,yBAAyB,EACrC,IAAI,GAAE,mBAAwB;IAIjD,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAOvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAK5B,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ;IAIzD,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAmB;IAEhD,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAO;IAExB,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAO7C,OAAO,CAAC,SAAS;IAqCX,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IA2C/D,WAAW,CAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAuB9E"}
|
|
@@ -16,7 +16,7 @@ export class WebRTCTransport {
|
|
|
16
16
|
components;
|
|
17
17
|
init;
|
|
18
18
|
_started = false;
|
|
19
|
-
constructor(components, init) {
|
|
19
|
+
constructor(components, init = {}) {
|
|
20
20
|
this.components = components;
|
|
21
21
|
this.init = init;
|
|
22
22
|
}
|
|
@@ -88,6 +88,7 @@ export class WebRTCTransport {
|
|
|
88
88
|
const { pc, muxerFactory, remoteAddress } = await initiateConnection({
|
|
89
89
|
stream: signalingStream,
|
|
90
90
|
rtcConfiguration: this.init.rtcConfiguration,
|
|
91
|
+
dataChannelOptions: this.init.dataChannel,
|
|
91
92
|
signal: options.signal
|
|
92
93
|
});
|
|
93
94
|
const result = await options.upgrader.upgradeOutbound(new WebRTCMultiaddrConnection({
|
|
@@ -114,7 +115,8 @@ export class WebRTCTransport {
|
|
|
114
115
|
const { pc, muxerFactory, remoteAddress } = await handleIncomingStream({
|
|
115
116
|
rtcConfiguration: this.init.rtcConfiguration,
|
|
116
117
|
connection,
|
|
117
|
-
stream
|
|
118
|
+
stream,
|
|
119
|
+
dataChannelOptions: this.init.dataChannel
|
|
118
120
|
});
|
|
119
121
|
await this.components.upgrader.upgradeInbound(new WebRTCMultiaddrConnection({
|
|
120
122
|
peerConnection: pc,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+D,MAAM,EAAwD,MAAM,6BAA6B,CAAA;AACvK,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAkB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC9E,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type CreateListenerOptions, type Listener, symbol, type Transport } from '@libp2p/interface-transport';
|
|
2
2
|
import type { WebRTCDialOptions } from './options.js';
|
|
3
|
+
import type { DataChannelOpts } from '../stream.js';
|
|
3
4
|
import type { Connection } from '@libp2p/interface-connection';
|
|
4
5
|
import type { CounterGroup, Metrics } from '@libp2p/interface-metrics';
|
|
5
6
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
@@ -26,10 +27,14 @@ export interface WebRTCDirectTransportComponents {
|
|
|
26
27
|
export interface WebRTCMetrics {
|
|
27
28
|
dialerEvents: CounterGroup;
|
|
28
29
|
}
|
|
30
|
+
export interface WebRTCTransportDirectInit {
|
|
31
|
+
dataChannel?: Partial<DataChannelOpts>;
|
|
32
|
+
}
|
|
29
33
|
export declare class WebRTCDirectTransport implements Transport {
|
|
30
34
|
private readonly metrics?;
|
|
31
35
|
private readonly components;
|
|
32
|
-
|
|
36
|
+
private readonly init;
|
|
37
|
+
constructor(components: WebRTCDirectTransportComponents, init?: WebRTCTransportDirectInit);
|
|
33
38
|
/**
|
|
34
39
|
* Dial a given multiaddr
|
|
35
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAc/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASxD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAwC,CAAA;AAElE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAmC,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,qBAAa,qBAAsB,YAAW,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAc/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASxD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAwC,CAAA;AAElE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAmC,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;CACvC;AAED,qBAAa,qBAAsB,YAAW,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;gBACnC,UAAU,EAAE,+BAA+B,EAAE,IAAI,GAAE,yBAA8B;IAa9F;;OAEG;IACG,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAM3E;;OAEG;IACH,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ;IAIzD;;OAEG;IACH,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAI7C;;OAEG;IACH,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,2BAA0B;IAEvD;;OAEG;IACH,QAAQ,CAAC,CAAC,MAAM,CAAC,QAAO;IAExB;;OAEG;IACG,QAAQ,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAwI/E;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAkB9B"}
|
|
@@ -9,7 +9,7 @@ import { fromString as uint8arrayFromString } from 'uint8arrays/from-string';
|
|
|
9
9
|
import { dataChannelError, inappropriateMultiaddr, unimplemented, invalidArgument } from '../error.js';
|
|
10
10
|
import { WebRTCMultiaddrConnection } from '../maconn.js';
|
|
11
11
|
import { DataChannelMuxerFactory } from '../muxer.js';
|
|
12
|
-
import {
|
|
12
|
+
import { createStream } from '../stream.js';
|
|
13
13
|
import { isFirefox } from '../util.js';
|
|
14
14
|
import * as sdp from './sdp.js';
|
|
15
15
|
import { genUfrag } from './util.js';
|
|
@@ -33,8 +33,10 @@ export const CERTHASH_CODE = protocols('certhash').code;
|
|
|
33
33
|
export class WebRTCDirectTransport {
|
|
34
34
|
metrics;
|
|
35
35
|
components;
|
|
36
|
-
|
|
36
|
+
init;
|
|
37
|
+
constructor(components, init = {}) {
|
|
37
38
|
this.components = components;
|
|
39
|
+
this.init = init;
|
|
38
40
|
if (components.metrics != null) {
|
|
39
41
|
this.metrics = {
|
|
40
42
|
dialerEvents: components.metrics.registerCounterGroup('libp2p_webrtc_dialer_events_total', {
|
|
@@ -141,7 +143,7 @@ export class WebRTCDirectTransport {
|
|
|
141
143
|
// Since we use the default crypto interface and do not use a static key or early data,
|
|
142
144
|
// we pass in undefined for these parameters.
|
|
143
145
|
const noise = Noise({ prologueBytes: fingerprintsPrologue })();
|
|
144
|
-
const wrappedChannel =
|
|
146
|
+
const wrappedChannel = createStream({ channel: handshakeDataChannel, direction: 'inbound', dataChannelOptions: this.init.dataChannel });
|
|
145
147
|
const wrappedDuplex = {
|
|
146
148
|
...wrappedChannel,
|
|
147
149
|
sink: wrappedChannel.sink.bind(wrappedChannel),
|
|
@@ -182,7 +184,7 @@ export class WebRTCDirectTransport {
|
|
|
182
184
|
}, { signal });
|
|
183
185
|
// Track opened peer connection
|
|
184
186
|
this.metrics?.dialerEvents.increment({ peer_connection: true });
|
|
185
|
-
const muxerFactory = new DataChannelMuxerFactory(peerConnection, this.metrics?.dialerEvents);
|
|
187
|
+
const muxerFactory = new DataChannelMuxerFactory({ peerConnection, metrics: this.metrics?.dialerEvents, dataChannelOptions: this.init.dataChannel });
|
|
186
188
|
// For outbound connections, the remote is expected to start the noise handshake.
|
|
187
189
|
// Therefore, we need to secure an inbound noise connection from the remote.
|
|
188
190
|
await noise.secureInbound(myPeerId, wrappedDuplex, theirPeerId);
|