@libp2p/webrtc 5.2.24-6059227cb → 5.2.24-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/README.md +20 -10
- package/dist/index.min.js +18 -18
- package/dist/index.min.js.map +4 -4
- package/dist/src/constants.d.ts +23 -4
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +23 -4
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +22 -20
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +22 -12
- package/dist/src/index.js.map +1 -1
- package/dist/src/maconn.d.ts +58 -0
- package/dist/src/maconn.d.ts.map +1 -0
- package/dist/src/maconn.js +56 -0
- package/dist/src/maconn.js.map +1 -0
- package/dist/src/muxer.d.ts +46 -14
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +138 -30
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/private-to-private/initiate-connection.d.ts +3 -2
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
- package/dist/src/private-to-private/initiate-connection.js +5 -37
- package/dist/src/private-to-private/initiate-connection.js.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.d.ts +4 -4
- package/dist/src/private-to-private/signaling-stream-handler.d.ts.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.js +7 -19
- package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -1
- package/dist/src/private-to-private/transport.d.ts +9 -2
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +15 -30
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts +2 -3
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js +14 -26
- package/dist/src/private-to-private/util.js.map +1 -1
- package/dist/src/private-to-public/listener.d.ts.map +1 -1
- package/dist/src/private-to-public/listener.js +15 -21
- package/dist/src/private-to-public/listener.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +8 -0
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +2 -3
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/private-to-public/utils/connect.d.ts +1 -1
- package/dist/src/private-to-public/utils/connect.d.ts.map +1 -1
- package/dist/src/private-to-public/utils/connect.js +14 -17
- package/dist/src/private-to-public/utils/connect.js.map +1 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts +4 -4
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts.map +1 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.js +2 -13
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.js.map +1 -1
- package/dist/src/private-to-public/utils/sdp.d.ts.map +1 -1
- package/dist/src/private-to-public/utils/sdp.js +13 -25
- package/dist/src/private-to-public/utils/sdp.js.map +1 -1
- package/dist/src/private-to-public/utils/stun-listener.js +1 -1
- package/dist/src/private-to-public/utils/stun-listener.js.map +1 -1
- package/dist/src/stream.d.ts +26 -14
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +204 -134
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.d.ts +1 -3
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +0 -19
- package/dist/src/util.js.map +1 -1
- package/dist/src/webrtc/index.d.ts +1 -1
- package/dist/src/webrtc/index.d.ts.map +1 -1
- package/dist/src/webrtc/index.js +1 -1
- package/dist/src/webrtc/index.js.map +1 -1
- package/package.json +29 -26
- package/src/constants.ts +28 -5
- package/src/index.ts +22 -21
- package/src/maconn.ts +101 -0
- package/src/muxer.ts +169 -39
- package/src/private-to-private/initiate-connection.ts +8 -46
- package/src/private-to-private/signaling-stream-handler.ts +10 -23
- package/src/private-to-private/transport.ts +25 -33
- package/src/private-to-private/util.ts +16 -33
- package/src/private-to-public/listener.ts +15 -22
- package/src/private-to-public/transport.ts +12 -3
- package/src/private-to-public/utils/connect.ts +15 -18
- package/src/private-to-public/utils/get-rtcpeerconnection.ts +4 -16
- package/src/private-to-public/utils/sdp.ts +13 -29
- package/src/private-to-public/utils/stun-listener.ts +1 -1
- package/src/stream.ts +237 -153
- package/src/util.ts +1 -22
- package/src/webrtc/index.ts +1 -1
- package/dist/src/rtcpeerconnection-to-conn.d.ts +0 -12
- package/dist/src/rtcpeerconnection-to-conn.d.ts.map +0 -1
- package/dist/src/rtcpeerconnection-to-conn.js +0 -46
- package/dist/src/rtcpeerconnection-to-conn.js.map +0 -1
- package/src/rtcpeerconnection-to-conn.ts +0 -66
package/dist/src/muxer.js
CHANGED
@@ -1,25 +1,59 @@
|
|
1
|
-
import { AbstractStreamMuxer } from '@libp2p/utils';
|
2
1
|
import { MUXER_PROTOCOL } from './constants.js';
|
3
|
-
import { createStream
|
2
|
+
import { createStream } from './stream.js';
|
3
|
+
import { drainAndClose, nopSink, nopSource } from './util.js';
|
4
4
|
export class DataChannelMuxerFactory {
|
5
5
|
protocol;
|
6
6
|
/**
|
7
7
|
* WebRTC Peer Connection
|
8
8
|
*/
|
9
9
|
peerConnection;
|
10
|
+
bufferedStreams = [];
|
10
11
|
metrics;
|
11
12
|
dataChannelOptions;
|
12
|
-
|
13
|
+
components;
|
14
|
+
log;
|
15
|
+
constructor(components, init) {
|
16
|
+
this.components = components;
|
13
17
|
this.peerConnection = init.peerConnection;
|
14
18
|
this.metrics = init.metrics;
|
15
19
|
this.protocol = init.protocol ?? MUXER_PROTOCOL;
|
16
20
|
this.dataChannelOptions = init.dataChannelOptions ?? {};
|
21
|
+
this.log = components.logger.forComponent('libp2p:webrtc:muxerfactory');
|
22
|
+
// store any data channels opened before upgrade has been completed
|
23
|
+
this.peerConnection.ondatachannel = ({ channel }) => {
|
24
|
+
this.log.trace('incoming early datachannel with channel id %d and label "%s"', channel.id);
|
25
|
+
// 'init' channel is only used during connection establishment
|
26
|
+
if (channel.label === 'init') {
|
27
|
+
this.log.trace('closing early init channel');
|
28
|
+
channel.close();
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
// @ts-expect-error fields are set below
|
32
|
+
const bufferedStream = {};
|
33
|
+
const stream = createStream({
|
34
|
+
channel,
|
35
|
+
direction: 'inbound',
|
36
|
+
onEnd: (err) => {
|
37
|
+
bufferedStream.onEnd(err);
|
38
|
+
},
|
39
|
+
log: this.log,
|
40
|
+
...this.dataChannelOptions
|
41
|
+
});
|
42
|
+
bufferedStream.stream = stream;
|
43
|
+
bufferedStream.channel = channel;
|
44
|
+
bufferedStream.onEnd = () => {
|
45
|
+
this.bufferedStreams = this.bufferedStreams.filter(s => s.stream.id !== stream.id);
|
46
|
+
};
|
47
|
+
this.bufferedStreams.push(bufferedStream);
|
48
|
+
};
|
17
49
|
}
|
18
|
-
createStreamMuxer(
|
19
|
-
return new DataChannelMuxer(
|
50
|
+
createStreamMuxer(init) {
|
51
|
+
return new DataChannelMuxer(this.components, {
|
52
|
+
...init,
|
20
53
|
peerConnection: this.peerConnection,
|
21
54
|
dataChannelOptions: this.dataChannelOptions,
|
22
55
|
metrics: this.metrics,
|
56
|
+
streams: this.bufferedStreams,
|
23
57
|
protocol: this.protocol
|
24
58
|
});
|
25
59
|
}
|
@@ -27,16 +61,26 @@ export class DataChannelMuxerFactory {
|
|
27
61
|
/**
|
28
62
|
* A libp2p data channel stream muxer
|
29
63
|
*/
|
30
|
-
export class DataChannelMuxer
|
64
|
+
export class DataChannelMuxer {
|
65
|
+
init;
|
66
|
+
/**
|
67
|
+
* Array of streams in the data channel
|
68
|
+
*/
|
69
|
+
streams;
|
70
|
+
protocol;
|
71
|
+
log;
|
31
72
|
peerConnection;
|
32
73
|
dataChannelOptions;
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
74
|
+
metrics;
|
75
|
+
logger;
|
76
|
+
constructor(components, init) {
|
77
|
+
this.init = init;
|
78
|
+
this.log = init.log?.newScope('muxer') ?? components.logger.forComponent('libp2p:webrtc:muxer');
|
79
|
+
this.logger = components.logger;
|
80
|
+
this.streams = init.streams.map(s => s.stream);
|
38
81
|
this.peerConnection = init.peerConnection;
|
39
82
|
this.protocol = init.protocol ?? MUXER_PROTOCOL;
|
83
|
+
this.metrics = init.metrics;
|
40
84
|
this.dataChannelOptions = init.dataChannelOptions ?? {};
|
41
85
|
/**
|
42
86
|
* Fired when a data channel has been added to the connection has been
|
@@ -45,41 +89,105 @@ export class DataChannelMuxer extends AbstractStreamMuxer {
|
|
45
89
|
* {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/datachannel_event}
|
46
90
|
*/
|
47
91
|
this.peerConnection.ondatachannel = ({ channel }) => {
|
48
|
-
this.log.trace('incoming
|
49
|
-
// 'init' channel is only used during connection establishment
|
50
|
-
// closed by the initiator
|
92
|
+
this.log.trace('incoming datachannel with channel id %d', channel.id);
|
93
|
+
// 'init' channel is only used during connection establishment
|
51
94
|
if (channel.label === 'init') {
|
52
|
-
this.log.trace('closing init channel
|
95
|
+
this.log.trace('closing init channel');
|
53
96
|
channel.close();
|
54
97
|
return;
|
55
98
|
}
|
99
|
+
// lib-datachannel throws if `.getId` is called on a closed channel so
|
100
|
+
// memoize it
|
101
|
+
const id = channel.id;
|
56
102
|
const stream = createStream({
|
57
|
-
...this.streamOptions,
|
58
|
-
...this.dataChannelOptions,
|
59
103
|
channel,
|
60
104
|
direction: 'inbound',
|
61
|
-
|
105
|
+
onEnd: () => {
|
106
|
+
this.#onStreamEnd(stream, channel);
|
107
|
+
this.log('incoming channel %s ended', id);
|
108
|
+
},
|
109
|
+
log: this.log,
|
110
|
+
...this.dataChannelOptions
|
62
111
|
});
|
63
|
-
this.
|
112
|
+
this.streams.push(stream);
|
113
|
+
this.metrics?.increment({ incoming_stream: true });
|
114
|
+
init?.onIncomingStream?.(stream);
|
64
115
|
};
|
116
|
+
// the DataChannelMuxer constructor is called during set up of the
|
117
|
+
// connection by the upgrader.
|
118
|
+
//
|
119
|
+
// If we invoke `init.onIncomingStream` immediately, the connection object
|
120
|
+
// will not be set up yet so add a tiny delay before letting the
|
121
|
+
// connection know about early streams
|
122
|
+
if (this.init.streams.length > 0) {
|
123
|
+
queueMicrotask(() => {
|
124
|
+
this.init.streams.forEach(bufferedStream => {
|
125
|
+
bufferedStream.onEnd = () => {
|
126
|
+
this.log('incoming early channel %s ended with state %s', bufferedStream.channel.id, bufferedStream.channel.readyState);
|
127
|
+
this.#onStreamEnd(bufferedStream.stream, bufferedStream.channel);
|
128
|
+
};
|
129
|
+
this.metrics?.increment({ incoming_stream: true });
|
130
|
+
this.init?.onIncomingStream?.(bufferedStream.stream);
|
131
|
+
});
|
132
|
+
});
|
133
|
+
}
|
65
134
|
}
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
// protocol: options?.protocol
|
135
|
+
#onStreamEnd(stream, channel) {
|
136
|
+
this.log.trace('stream %s %s %s onEnd', stream.direction, stream.id, stream.protocol);
|
137
|
+
drainAndClose(channel, `${stream.direction} ${stream.id} ${stream.protocol}`, this.dataChannelOptions.drainTimeout, {
|
138
|
+
log: this.log
|
71
139
|
});
|
72
|
-
this.
|
140
|
+
this.streams = this.streams.filter(s => s.id !== stream.id);
|
141
|
+
this.metrics?.increment({ stream_end: true });
|
142
|
+
this.init?.onStreamEnd?.(stream);
|
143
|
+
}
|
144
|
+
/**
|
145
|
+
* Gracefully close all tracked streams and stop the muxer
|
146
|
+
*/
|
147
|
+
async close(options) {
|
148
|
+
try {
|
149
|
+
await Promise.all(this.streams.map(async (stream) => stream.close(options)));
|
150
|
+
}
|
151
|
+
catch (err) {
|
152
|
+
this.abort(err);
|
153
|
+
}
|
154
|
+
}
|
155
|
+
/**
|
156
|
+
* Abort all tracked streams and stop the muxer
|
157
|
+
*/
|
158
|
+
abort(err) {
|
159
|
+
for (const stream of this.streams) {
|
160
|
+
stream.abort(err);
|
161
|
+
}
|
162
|
+
}
|
163
|
+
/**
|
164
|
+
* The stream source, a no-op as the transport natively supports multiplexing
|
165
|
+
*/
|
166
|
+
source = nopSource();
|
167
|
+
/**
|
168
|
+
* The stream destination, a no-op as the transport natively supports multiplexing
|
169
|
+
*/
|
170
|
+
sink = nopSink;
|
171
|
+
newStream() {
|
172
|
+
// The spec says the label MUST be an empty string: https://github.com/libp2p/specs/blob/master/webrtc/README.md#rtcdatachannel-label
|
173
|
+
const channel = this.peerConnection.createDataChannel('');
|
174
|
+
// lib-datachannel throws if `.getId` is called on a closed channel so
|
175
|
+
// memoize it
|
176
|
+
const id = channel.id;
|
177
|
+
this.log.trace('opened outgoing datachannel with channel id %s', id);
|
73
178
|
const stream = createStream({
|
74
|
-
...options,
|
75
|
-
...this.dataChannelOptions,
|
76
179
|
channel,
|
77
180
|
direction: 'outbound',
|
78
|
-
|
181
|
+
onEnd: () => {
|
182
|
+
this.#onStreamEnd(stream, channel);
|
183
|
+
this.log('outgoing channel %s ended', id);
|
184
|
+
},
|
185
|
+
log: this.log,
|
186
|
+
...this.dataChannelOptions
|
79
187
|
});
|
188
|
+
this.streams.push(stream);
|
189
|
+
this.metrics?.increment({ outgoing_stream: true });
|
80
190
|
return stream;
|
81
191
|
}
|
82
|
-
onData() {
|
83
|
-
}
|
84
192
|
}
|
85
193
|
//# 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,
|
1
|
+
{"version":3,"file":"muxer.js","sourceRoot":"","sources":["../../src/muxer.ts"],"names":[],"mappings":"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"}
|
@@ -2,13 +2,14 @@ import { DataChannelMuxerFactory } from '../muxer.js';
|
|
2
2
|
import { RTCPeerConnection } from '../webrtc/index.js';
|
3
3
|
import type { WebRTCDialEvents, WebRTCTransportMetrics } from './transport.js';
|
4
4
|
import type { DataChannelOptions } from '../index.js';
|
5
|
-
import type { LoggerOptions, ComponentLogger,
|
5
|
+
import type { LoggerOptions, ComponentLogger, IncomingStreamData } from '@libp2p/interface';
|
6
6
|
import type { ConnectionManager, TransportManager } from '@libp2p/interface-internal';
|
7
7
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
8
8
|
import type { ProgressOptions } from 'progress-events';
|
9
|
-
export interface
|
9
|
+
export interface IncomingStreamOpts extends IncomingStreamData {
|
10
10
|
rtcConfiguration?: RTCConfiguration;
|
11
11
|
dataChannelOptions?: Partial<DataChannelOptions>;
|
12
|
+
signal: AbortSignal;
|
12
13
|
}
|
13
14
|
export interface ConnectOptions extends LoggerOptions, ProgressOptions<WebRTCDialEvents> {
|
14
15
|
rtcConfiguration?: RTCConfiguration;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"initiate-connection.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"initiate-connection.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAI7E,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAc,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACvG,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa,EAAE,eAAe,CAAC,gBAAgB,CAAC;IACtF,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,SAAS,EAAE,SAAS,CAAA;IACpB,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,sBAAsB,CAAA;IAChC,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,wBAAsB,kBAAkB,CAAE,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAC;IAAC,cAAc,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAwJ1S"}
|
@@ -1,5 +1,4 @@
|
|
1
|
-
import { pbStream } from '
|
2
|
-
import { pEvent } from 'p-event';
|
1
|
+
import { pbStream } from 'it-protobuf-stream';
|
3
2
|
import { CustomProgressEvent } from 'progress-events';
|
4
3
|
import { SIGNALING_PROTOCOL } from '../constants.js';
|
5
4
|
import { SDPHandshakeFailedError } from '../error.js';
|
@@ -35,19 +34,9 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
35
34
|
});
|
36
35
|
const messageStream = pbStream(stream).pb(Message);
|
37
36
|
const peerConnection = new RTCPeerConnection(rtcConfiguration);
|
38
|
-
// make sure C++ peer connection is garbage collected
|
39
|
-
// https://github.com/murat-dogan/node-datachannel/issues/366#issuecomment-3228453155
|
40
|
-
peerConnection.addEventListener('connectionstatechange', () => {
|
41
|
-
switch (peerConnection.connectionState) {
|
42
|
-
case 'closed':
|
43
|
-
peerConnection.close();
|
44
|
-
break;
|
45
|
-
default:
|
46
|
-
break;
|
47
|
-
}
|
48
|
-
});
|
49
37
|
const muxerFactory = new DataChannelMuxerFactory({
|
50
|
-
|
38
|
+
logger
|
39
|
+
}, {
|
51
40
|
peerConnection,
|
52
41
|
dataChannelOptions: dataChannel
|
53
42
|
});
|
@@ -58,18 +47,10 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
58
47
|
const channel = peerConnection.createDataChannel('init');
|
59
48
|
// setup callback to write ICE candidates to the remote peer
|
60
49
|
peerConnection.onicecandidate = ({ candidate }) => {
|
61
|
-
if (peerConnection.connectionState === 'connected') {
|
62
|
-
log.trace('ignore new ice candidate as peer connection is already connected');
|
63
|
-
return;
|
64
|
-
}
|
65
50
|
// a null candidate means end-of-candidates, an empty string candidate
|
66
51
|
// means end-of-candidates for this generation, otherwise this should
|
67
52
|
// be a valid candidate object
|
68
53
|
// see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
|
69
|
-
if (candidate == null || candidate?.candidate === '') {
|
70
|
-
log.trace('initiator detected end of ICE candidates');
|
71
|
-
return;
|
72
|
-
}
|
73
54
|
const data = JSON.stringify(candidate?.toJSON() ?? null);
|
74
55
|
log.trace('initiator sending ICE candidate %o', candidate);
|
75
56
|
void messageStream.write({
|
@@ -79,7 +60,7 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
79
60
|
signal
|
80
61
|
})
|
81
62
|
.catch(err => {
|
82
|
-
log.error('error sending ICE candidate
|
63
|
+
log.error('error sending ICE candidate', err);
|
83
64
|
});
|
84
65
|
};
|
85
66
|
peerConnection.onicecandidateerror = (event) => {
|
@@ -124,21 +105,8 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
124
105
|
log,
|
125
106
|
onProgress
|
126
107
|
});
|
127
|
-
log.trace('initiator connected');
|
128
|
-
if (channel.readyState !== 'open') {
|
129
|
-
log.trace('wait for init channel to open');
|
130
|
-
await pEvent(channel, 'open', {
|
131
|
-
signal
|
132
|
-
});
|
133
|
-
}
|
134
|
-
log.trace('closing init channel');
|
108
|
+
log.trace('initiator connected, closing init channel');
|
135
109
|
channel.close();
|
136
|
-
// wait for init channel to close before proceeding, otherwise the channel
|
137
|
-
// id can be reused before both sides have seen the channel close
|
138
|
-
log.trace('waiting for init channel to close');
|
139
|
-
await pEvent(channel, 'close', {
|
140
|
-
signal
|
141
|
-
});
|
142
110
|
onProgress?.(new CustomProgressEvent('webrtc:close-signaling-stream'));
|
143
111
|
log.trace('closing signaling channel');
|
144
112
|
await stream.close({
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"initiate-connection.js","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"initiate-connection.js","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"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"}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import type { RTCPeerConnection } from '../webrtc/index.js';
|
2
|
-
import type {
|
2
|
+
import type { Logger, IncomingStreamData } from '@libp2p/interface';
|
3
3
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
4
|
-
export interface
|
4
|
+
export interface IncomingStreamOpts extends IncomingStreamData {
|
5
5
|
peerConnection: RTCPeerConnection;
|
6
|
+
signal: AbortSignal;
|
6
7
|
log: Logger;
|
7
8
|
}
|
8
|
-
export declare function handleIncomingStream(
|
9
|
+
export declare function handleIncomingStream({ peerConnection, stream, signal, connection, log }: IncomingStreamOpts): Promise<{
|
9
10
|
remoteAddress: Multiaddr;
|
10
|
-
remotePeer: PeerId;
|
11
11
|
}>;
|
12
12
|
//# sourceMappingURL=signaling-stream-handler.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signaling-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,
|
1
|
+
{"version":3,"file":"signaling-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,cAAc,EAAE,iBAAiB,CAAA;IACjC,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAsB,oBAAoB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAA;CAAE,CAAC,CA4F1J"}
|
@@ -1,27 +1,19 @@
|
|
1
|
-
import { pbStream } from '@libp2p/utils';
|
2
1
|
import { multiaddr } from '@multiformats/multiaddr';
|
2
|
+
import { pbStream } from 'it-protobuf-stream';
|
3
3
|
import { SDPHandshakeFailedError } from '../error.js';
|
4
4
|
import { RTCSessionDescription } from '../webrtc/index.js';
|
5
5
|
import { Message } from './pb/message.js';
|
6
|
-
import {
|
7
|
-
export async function handleIncomingStream(
|
6
|
+
import { getConnectionState, readCandidatesUntilConnected } from './util.js';
|
7
|
+
export async function handleIncomingStream({ peerConnection, stream, signal, connection, log }) {
|
8
8
|
log.trace('new inbound signaling stream');
|
9
9
|
const messageStream = pbStream(stream).pb(Message);
|
10
10
|
try {
|
11
11
|
// candidate callbacks
|
12
12
|
peerConnection.onicecandidate = ({ candidate }) => {
|
13
|
-
if (peerConnection.connectionState === 'connected') {
|
14
|
-
log.trace('ignore new ice candidate as peer connection is already connected');
|
15
|
-
return;
|
16
|
-
}
|
17
13
|
// a null candidate means end-of-candidates, an empty string candidate
|
18
14
|
// means end-of-candidates for this generation, otherwise this should
|
19
15
|
// be a valid candidate object
|
20
16
|
// see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
|
21
|
-
if (candidate == null || candidate?.candidate === '') {
|
22
|
-
log.trace('recipient detected end of ICE candidates');
|
23
|
-
return;
|
24
|
-
}
|
25
17
|
const data = JSON.stringify(candidate?.toJSON() ?? null);
|
26
18
|
log.trace('recipient sending ICE candidate %s', data);
|
27
19
|
messageStream.write({
|
@@ -31,7 +23,7 @@ export async function handleIncomingStream(stream, connection, { peerConnection,
|
|
31
23
|
signal
|
32
24
|
})
|
33
25
|
.catch(err => {
|
34
|
-
log.error('error sending ICE candidate
|
26
|
+
log.error('error sending ICE candidate', err);
|
35
27
|
});
|
36
28
|
};
|
37
29
|
log.trace('recipient read SDP offer');
|
@@ -74,7 +66,7 @@ export async function handleIncomingStream(stream, connection, { peerConnection,
|
|
74
66
|
});
|
75
67
|
}
|
76
68
|
catch (err) {
|
77
|
-
if (peerConnection
|
69
|
+
if (getConnectionState(peerConnection) !== 'connected') {
|
78
70
|
log.error('error while handling signaling stream from peer %a', connection.remoteAddr, err);
|
79
71
|
peerConnection.close();
|
80
72
|
throw err;
|
@@ -83,12 +75,8 @@ export async function handleIncomingStream(stream, connection, { peerConnection,
|
|
83
75
|
log('error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected', connection.remoteAddr, err);
|
84
76
|
}
|
85
77
|
}
|
86
|
-
const
|
87
|
-
const remoteAddress = multiaddr(`/webrtc/p2p/${remotePeer}`);
|
78
|
+
const remoteAddress = multiaddr(`/webrtc/p2p/${connection.remoteAddr.getPeerId()}`);
|
88
79
|
log.trace('recipient connected to remote address %s', remoteAddress);
|
89
|
-
return {
|
90
|
-
remoteAddress,
|
91
|
-
remotePeer
|
92
|
-
};
|
80
|
+
return { remoteAddress };
|
93
81
|
}
|
94
82
|
//# sourceMappingURL=signaling-stream-handler.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"signaling-stream-handler.js","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"signaling-stream-handler.js","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { serviceCapabilities, serviceDependencies, transportSymbol } from '@libp2p/interface';
|
2
2
|
import type { DataChannelOptions } from '../index.js';
|
3
|
-
import type { OutboundConnectionUpgradeEvents, CreateListenerOptions, DialTransportOptions, Transport, Listener, Upgrader, ComponentLogger, Connection, PeerId, CounterGroup, Metrics, Startable, OpenConnectionProgressEvents,
|
3
|
+
import type { OutboundConnectionUpgradeEvents, CreateListenerOptions, DialTransportOptions, Transport, Listener, Upgrader, ComponentLogger, Connection, PeerId, CounterGroup, Metrics, Startable, OpenConnectionProgressEvents, IncomingStreamData, Libp2pEvents } from '@libp2p/interface';
|
4
4
|
import type { Registrar, ConnectionManager, TransportManager } from '@libp2p/interface-internal';
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
6
6
|
import type { TypedEventTarget } from 'main-event';
|
@@ -16,6 +16,13 @@ export interface WebRTCTransportInit {
|
|
16
16
|
* Any options here will be applied to any RTCDataChannels that are opened.
|
17
17
|
*/
|
18
18
|
dataChannel?: DataChannelOptions;
|
19
|
+
/**
|
20
|
+
* Inbound connections must complete the upgrade within this many ms
|
21
|
+
*
|
22
|
+
* @default 30_000
|
23
|
+
* @deprecated configure `connectionManager.inboundUpgradeTimeout` instead
|
24
|
+
*/
|
25
|
+
inboundConnectionTimeout?: number;
|
19
26
|
}
|
20
27
|
export interface WebRTCTransportComponents {
|
21
28
|
peerId: PeerId;
|
@@ -57,7 +64,7 @@ export declare class WebRTCTransport implements Transport<WebRTCDialEvents>, Sta
|
|
57
64
|
*/
|
58
65
|
dialFilter(multiaddrs: Multiaddr[]): Multiaddr[];
|
59
66
|
dial(ma: Multiaddr, options: DialTransportOptions<WebRTCDialEvents>): Promise<Connection>;
|
60
|
-
_onProtocol(
|
67
|
+
_onProtocol({ connection, stream }: IncomingStreamData, signal: AbortSignal): Promise<void>;
|
61
68
|
private _closeOnShutdown;
|
62
69
|
}
|
63
70
|
export declare function splitAddr(ma: Multiaddr): {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"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"}
|