@libp2p/webrtc 5.2.23 → 5.2.24-6059227cb
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 +10 -20
- package/dist/index.min.js +18 -18
- package/dist/index.min.js.map +4 -4
- package/dist/src/constants.d.ts +4 -23
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +4 -23
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +20 -22
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -22
- package/dist/src/index.js.map +1 -1
- package/dist/src/muxer.d.ts +14 -46
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +30 -138
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/private-to-private/initiate-connection.d.ts +2 -3
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
- package/dist/src/private-to-private/initiate-connection.js +37 -5
- 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 +19 -7
- package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -1
- package/dist/src/private-to-private/transport.d.ts +2 -9
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +30 -15
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts +3 -2
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js +26 -14
- 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 +21 -15
- package/dist/src/private-to-public/listener.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +0 -8
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +3 -2
- 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 +18 -15
- 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 +13 -2
- 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 +25 -13
- 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/rtcpeerconnection-to-conn.d.ts +12 -0
- package/dist/src/rtcpeerconnection-to-conn.d.ts.map +1 -0
- package/dist/src/rtcpeerconnection-to-conn.js +46 -0
- package/dist/src/rtcpeerconnection-to-conn.js.map +1 -0
- package/dist/src/stream.d.ts +17 -26
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +135 -205
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.d.ts +3 -1
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +19 -0
- 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 +26 -29
- package/src/constants.ts +5 -28
- package/src/index.ts +21 -22
- package/src/muxer.ts +39 -169
- package/src/private-to-private/initiate-connection.ts +46 -8
- package/src/private-to-private/signaling-stream-handler.ts +23 -10
- package/src/private-to-private/transport.ts +33 -25
- package/src/private-to-private/util.ts +33 -16
- package/src/private-to-public/listener.ts +22 -15
- package/src/private-to-public/transport.ts +3 -12
- package/src/private-to-public/utils/connect.ts +19 -16
- package/src/private-to-public/utils/get-rtcpeerconnection.ts +16 -4
- package/src/private-to-public/utils/sdp.ts +29 -13
- package/src/private-to-public/utils/stun-listener.ts +1 -1
- package/src/rtcpeerconnection-to-conn.ts +66 -0
- package/src/stream.ts +157 -238
- package/src/util.ts +22 -1
- package/src/webrtc/index.ts +1 -1
- package/dist/src/maconn.d.ts +0 -58
- package/dist/src/maconn.d.ts.map +0 -1
- package/dist/src/maconn.js +0 -56
- package/dist/src/maconn.js.map +0 -1
- package/dist/typedoc-urls.json +0 -14
- package/src/maconn.ts +0 -101
@@ -2,14 +2,13 @@ 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, AbortOptions } 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 IncomingStreamOptions extends AbortOptions {
|
10
10
|
rtcConfiguration?: RTCConfiguration;
|
11
11
|
dataChannelOptions?: Partial<DataChannelOptions>;
|
12
|
-
signal: AbortSignal;
|
13
12
|
}
|
14
13
|
export interface ConnectOptions extends LoggerOptions, ProgressOptions<WebRTCDialEvents> {
|
15
14
|
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":"AAKA,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,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACjG,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,qBAAsB,SAAQ,YAAY;IACzD,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACjD;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,CA8L1S"}
|
@@ -1,4 +1,5 @@
|
|
1
|
-
import { pbStream } from '
|
1
|
+
import { pbStream } from '@libp2p/utils';
|
2
|
+
import { pEvent } from 'p-event';
|
2
3
|
import { CustomProgressEvent } from 'progress-events';
|
3
4
|
import { SIGNALING_PROTOCOL } from '../constants.js';
|
4
5
|
import { SDPHandshakeFailedError } from '../error.js';
|
@@ -34,9 +35,19 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
34
35
|
});
|
35
36
|
const messageStream = pbStream(stream).pb(Message);
|
36
37
|
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
|
+
});
|
37
49
|
const muxerFactory = new DataChannelMuxerFactory({
|
38
|
-
|
39
|
-
}, {
|
50
|
+
// @ts-expect-error https://github.com/murat-dogan/node-datachannel/pull/370
|
40
51
|
peerConnection,
|
41
52
|
dataChannelOptions: dataChannel
|
42
53
|
});
|
@@ -47,10 +58,18 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
47
58
|
const channel = peerConnection.createDataChannel('init');
|
48
59
|
// setup callback to write ICE candidates to the remote peer
|
49
60
|
peerConnection.onicecandidate = ({ candidate }) => {
|
61
|
+
if (peerConnection.connectionState === 'connected') {
|
62
|
+
log.trace('ignore new ice candidate as peer connection is already connected');
|
63
|
+
return;
|
64
|
+
}
|
50
65
|
// a null candidate means end-of-candidates, an empty string candidate
|
51
66
|
// means end-of-candidates for this generation, otherwise this should
|
52
67
|
// be a valid candidate object
|
53
68
|
// 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
|
+
}
|
54
73
|
const data = JSON.stringify(candidate?.toJSON() ?? null);
|
55
74
|
log.trace('initiator sending ICE candidate %o', candidate);
|
56
75
|
void messageStream.write({
|
@@ -60,7 +79,7 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
60
79
|
signal
|
61
80
|
})
|
62
81
|
.catch(err => {
|
63
|
-
log.error('error sending ICE candidate', err);
|
82
|
+
log.error('error sending ICE candidate - %e', err);
|
64
83
|
});
|
65
84
|
};
|
66
85
|
peerConnection.onicecandidateerror = (event) => {
|
@@ -105,8 +124,21 @@ export async function initiateConnection({ rtcConfiguration, dataChannel, signal
|
|
105
124
|
log,
|
106
125
|
onProgress
|
107
126
|
});
|
108
|
-
log.trace('initiator connected
|
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');
|
109
135
|
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
|
+
});
|
110
142
|
onProgress?.(new CustomProgressEvent('webrtc:close-signaling-stream'));
|
111
143
|
log.trace('closing signaling channel');
|
112
144
|
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 { Logger,
|
2
|
+
import type { AbortOptions, Connection, Logger, PeerId, Stream } from '@libp2p/interface';
|
3
3
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
4
|
-
export interface
|
4
|
+
export interface IncomingStreamOptions extends AbortOptions {
|
5
5
|
peerConnection: RTCPeerConnection;
|
6
|
-
signal: AbortSignal;
|
7
6
|
log: Logger;
|
8
7
|
}
|
9
|
-
export declare function handleIncomingStream(
|
8
|
+
export declare function handleIncomingStream(stream: Stream, connection: Connection, { peerConnection, signal, log }: IncomingStreamOptions): Promise<{
|
10
9
|
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,MAAM,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,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,cAAc,EAAE,iBAAiB,CAAA;IACjC,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAsB,oBAAoB,CAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,qBAAqB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA0GrM"}
|
@@ -1,19 +1,27 @@
|
|
1
|
+
import { pbStream } from '@libp2p/utils';
|
1
2
|
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({ peerConnection,
|
6
|
+
import { getRemotePeer, readCandidatesUntilConnected } from './util.js';
|
7
|
+
export async function handleIncomingStream(stream, connection, { peerConnection, signal, 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
|
+
}
|
13
17
|
// a null candidate means end-of-candidates, an empty string candidate
|
14
18
|
// means end-of-candidates for this generation, otherwise this should
|
15
19
|
// be a valid candidate object
|
16
20
|
// 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
|
+
}
|
17
25
|
const data = JSON.stringify(candidate?.toJSON() ?? null);
|
18
26
|
log.trace('recipient sending ICE candidate %s', data);
|
19
27
|
messageStream.write({
|
@@ -23,7 +31,7 @@ export async function handleIncomingStream({ peerConnection, stream, signal, con
|
|
23
31
|
signal
|
24
32
|
})
|
25
33
|
.catch(err => {
|
26
|
-
log.error('error sending ICE candidate', err);
|
34
|
+
log.error('error sending ICE candidate - %e', err);
|
27
35
|
});
|
28
36
|
};
|
29
37
|
log.trace('recipient read SDP offer');
|
@@ -66,7 +74,7 @@ export async function handleIncomingStream({ peerConnection, stream, signal, con
|
|
66
74
|
});
|
67
75
|
}
|
68
76
|
catch (err) {
|
69
|
-
if (
|
77
|
+
if (peerConnection.connectionState !== 'connected') {
|
70
78
|
log.error('error while handling signaling stream from peer %a', connection.remoteAddr, err);
|
71
79
|
peerConnection.close();
|
72
80
|
throw err;
|
@@ -75,8 +83,12 @@ export async function handleIncomingStream({ peerConnection, stream, signal, con
|
|
75
83
|
log('error while handling signaling stream from peer %a, ignoring as the RTCPeerConnection is already connected', connection.remoteAddr, err);
|
76
84
|
}
|
77
85
|
}
|
78
|
-
const
|
86
|
+
const remotePeer = getRemotePeer(connection.remoteAddr);
|
87
|
+
const remoteAddress = multiaddr(`/webrtc/p2p/${remotePeer}`);
|
79
88
|
log.trace('recipient connected to remote address %s', remoteAddress);
|
80
|
-
return {
|
89
|
+
return {
|
90
|
+
remoteAddress,
|
91
|
+
remotePeer
|
92
|
+
};
|
81
93
|
}
|
82
94
|
//# 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, Libp2pEvents, Stream } 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,13 +16,6 @@ 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;
|
26
19
|
}
|
27
20
|
export interface WebRTCTransportComponents {
|
28
21
|
peerId: PeerId;
|
@@ -64,7 +57,7 @@ export declare class WebRTCTransport implements Transport<WebRTCDialEvents>, Sta
|
|
64
57
|
*/
|
65
58
|
dialFilter(multiaddrs: Multiaddr[]): Multiaddr[];
|
66
59
|
dial(ma: Multiaddr, options: DialTransportOptions<WebRTCDialEvents>): Promise<Connection>;
|
67
|
-
_onProtocol(
|
60
|
+
_onProtocol(stream: Stream, connection: Connection, signal: AbortSignal): Promise<void>;
|
68
61
|
private _closeOnShutdown;
|
69
62
|
}
|
70
63
|
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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"}
|
@@ -4,13 +4,14 @@ import { multiaddr } from '@multiformats/multiaddr';
|
|
4
4
|
import { WebRTC } from '@multiformats/multiaddr-matcher';
|
5
5
|
import { setMaxListeners } from 'main-event';
|
6
6
|
import { SIGNALING_PROTOCOL } from '../constants.js';
|
7
|
-
import { WebRTCMultiaddrConnection } from '../maconn.js';
|
8
7
|
import { DataChannelMuxerFactory } from '../muxer.js';
|
8
|
+
import { toMultiaddrConnection } from "../rtcpeerconnection-to-conn.js";
|
9
9
|
import { getRtcConfiguration } from '../util.js';
|
10
10
|
import { RTCPeerConnection } from '../webrtc/index.js';
|
11
11
|
import { initiateConnection } from './initiate-connection.js';
|
12
12
|
import { WebRTCPeerListener } from './listener.js';
|
13
13
|
import { handleIncomingStream } from './signaling-stream-handler.js';
|
14
|
+
import { getRemotePeer } from "./util.js";
|
14
15
|
export class WebRTCTransport {
|
15
16
|
components;
|
16
17
|
init;
|
@@ -50,12 +51,12 @@ export class WebRTCTransport {
|
|
50
51
|
return this._started;
|
51
52
|
}
|
52
53
|
async start() {
|
53
|
-
await this.components.registrar.handle(SIGNALING_PROTOCOL, (
|
54
|
+
await this.components.registrar.handle(SIGNALING_PROTOCOL, (stream, connection) => {
|
54
55
|
// ensure we don't try to upgrade forever
|
55
56
|
const signal = this.components.upgrader.createInboundAbortSignal(this.shutdownController.signal);
|
56
|
-
this._onProtocol(
|
57
|
+
this._onProtocol(stream, connection, signal)
|
57
58
|
.catch(err => {
|
58
|
-
this.log.error('failed to handle incoming connect from %p',
|
59
|
+
this.log.error('failed to handle incoming connect from %p', connection.remotePeer, err);
|
59
60
|
})
|
60
61
|
.finally(() => {
|
61
62
|
signal.clear();
|
@@ -107,15 +108,17 @@ export class WebRTCTransport {
|
|
107
108
|
logger: this.components.logger,
|
108
109
|
onProgress: options.onProgress
|
109
110
|
});
|
110
|
-
const webRTCConn =
|
111
|
+
const webRTCConn = toMultiaddrConnection({
|
111
112
|
peerConnection,
|
112
|
-
timeline: { open: Date.now() },
|
113
113
|
remoteAddr: remoteAddress,
|
114
|
-
metrics: this.metrics?.dialerEvents
|
114
|
+
metrics: this.metrics?.dialerEvents,
|
115
|
+
direction: 'outbound',
|
116
|
+
log: this.components.logger.forComponent('libp2p:webrtc:connection')
|
115
117
|
});
|
116
118
|
const connection = await options.upgrader.upgradeOutbound(webRTCConn, {
|
117
119
|
skipProtection: true,
|
118
120
|
skipEncryption: true,
|
121
|
+
remotePeer: getRemotePeer(ma),
|
119
122
|
muxerFactory,
|
120
123
|
onProgress: options.onProgress,
|
121
124
|
signal: options.signal
|
@@ -124,17 +127,27 @@ export class WebRTCTransport {
|
|
124
127
|
this._closeOnShutdown(peerConnection, webRTCConn);
|
125
128
|
return connection;
|
126
129
|
}
|
127
|
-
async _onProtocol(
|
130
|
+
async _onProtocol(stream, connection, signal) {
|
128
131
|
const peerConnection = new RTCPeerConnection(await getRtcConfiguration(this.init.rtcConfiguration));
|
129
|
-
|
132
|
+
// make sure C++ peer connection is garbage collected
|
133
|
+
// https://github.com/murat-dogan/node-datachannel/issues/366#issuecomment-3228453155
|
134
|
+
peerConnection.addEventListener('connectionstatechange', () => {
|
135
|
+
switch (peerConnection.connectionState) {
|
136
|
+
case 'closed':
|
137
|
+
peerConnection.close();
|
138
|
+
break;
|
139
|
+
default:
|
140
|
+
break;
|
141
|
+
}
|
142
|
+
});
|
143
|
+
const muxerFactory = new DataChannelMuxerFactory({
|
144
|
+
// @ts-expect-error https://github.com/murat-dogan/node-datachannel/pull/370
|
130
145
|
peerConnection,
|
131
146
|
dataChannelOptions: this.init.dataChannel
|
132
147
|
});
|
133
148
|
try {
|
134
|
-
const { remoteAddress } = await handleIncomingStream({
|
149
|
+
const { remoteAddress, remotePeer } = await handleIncomingStream(stream, connection, {
|
135
150
|
peerConnection,
|
136
|
-
connection,
|
137
|
-
stream,
|
138
151
|
signal,
|
139
152
|
log: this.log
|
140
153
|
});
|
@@ -142,15 +155,17 @@ export class WebRTCTransport {
|
|
142
155
|
await stream.close({
|
143
156
|
signal
|
144
157
|
});
|
145
|
-
const webRTCConn =
|
158
|
+
const webRTCConn = toMultiaddrConnection({
|
146
159
|
peerConnection,
|
147
|
-
timeline: { open: (new Date()).getTime() },
|
148
160
|
remoteAddr: remoteAddress,
|
149
|
-
metrics: this.metrics?.listenerEvents
|
161
|
+
metrics: this.metrics?.listenerEvents,
|
162
|
+
direction: 'inbound',
|
163
|
+
log: this.components.logger.forComponent('libp2p:webrtc:connection')
|
150
164
|
});
|
151
165
|
await this.components.upgrader.upgradeInbound(webRTCConn, {
|
152
166
|
skipEncryption: true,
|
153
167
|
skipProtection: true,
|
168
|
+
remotePeer,
|
154
169
|
muxerFactory,
|
155
170
|
signal
|
156
171
|
});
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACrH,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"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"}
|
@@ -1,12 +1,13 @@
|
|
1
1
|
import { Message } from './pb/message.js';
|
2
2
|
import type { WebRTCDialEvents } from './transport.js';
|
3
3
|
import type { RTCPeerConnection } from '../webrtc/index.js';
|
4
|
-
import type { AbortOptions, LoggerOptions, Stream } from '@libp2p/interface';
|
4
|
+
import type { AbortOptions, LoggerOptions, PeerId, Stream } from '@libp2p/interface';
|
5
|
+
import type { Multiaddr } from '@multiformats/multiaddr';
|
5
6
|
import type { MessageStream } from 'it-protobuf-stream';
|
6
7
|
import type { ProgressOptions } from 'progress-events';
|
7
8
|
export interface ReadCandidatesOptions extends AbortOptions, LoggerOptions, ProgressOptions<WebRTCDialEvents> {
|
8
9
|
direction: string;
|
9
10
|
}
|
10
11
|
export declare const readCandidatesUntilConnected: (pc: RTCPeerConnection, stream: MessageStream<Message, Stream>, options: ReadCandidatesOptions) => Promise<void>;
|
11
|
-
export declare function
|
12
|
+
export declare function getRemotePeer(ma: Multiaddr): PeerId;
|
12
13
|
//# sourceMappingURL=util.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,qBAAsB,SAAQ,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,gBAAgB,CAAC;IAC3G,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,4BAA4B,GAAU,IAAI,iBAAiB,EAAE,QAAQ,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,SAAS,qBAAqB,KAAG,OAAO,CAAC,IAAI,CAyD9J,CAAA;AAwBD,wBAAgB,aAAa,CAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAcpD"}
|
@@ -1,12 +1,11 @@
|
|
1
|
-
import { ConnectionFailedError, InvalidMessageError } from '@libp2p/interface';
|
2
|
-
import
|
1
|
+
import { ConnectionFailedError, InvalidMessageError, InvalidMultiaddrError } from '@libp2p/interface';
|
2
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
3
3
|
import { CustomProgressEvent } from 'progress-events';
|
4
|
-
import { isFirefox } from '../util.js';
|
5
4
|
import { RTCIceCandidate } from '../webrtc/index.js';
|
6
5
|
import { Message } from './pb/message.js';
|
7
6
|
export const readCandidatesUntilConnected = async (pc, stream, options) => {
|
8
7
|
try {
|
9
|
-
const connectedPromise =
|
8
|
+
const connectedPromise = Promise.withResolvers();
|
10
9
|
resolveOnConnected(pc, connectedPromise);
|
11
10
|
// read candidates until we are connected or we reach the end of the stream
|
12
11
|
while (true) {
|
@@ -15,7 +14,7 @@ export const readCandidatesUntilConnected = async (pc, stream, options) => {
|
|
15
14
|
connectedPromise.promise,
|
16
15
|
stream.read({
|
17
16
|
signal: options.signal
|
18
|
-
})
|
17
|
+
})
|
19
18
|
]);
|
20
19
|
// stream ended or we became connected
|
21
20
|
if (message == null) {
|
@@ -42,34 +41,47 @@ export const readCandidatesUntilConnected = async (pc, stream, options) => {
|
|
42
41
|
await pc.addIceCandidate(candidate);
|
43
42
|
}
|
44
43
|
catch (err) {
|
45
|
-
options.log.error('%s bad candidate received', options.direction, candidateInit, err);
|
44
|
+
options.log.error('%s bad candidate received %o - %e', options.direction, candidateInit, err);
|
46
45
|
}
|
47
46
|
}
|
48
47
|
}
|
49
48
|
catch (err) {
|
50
|
-
options.log.error('%s error parsing ICE candidate', options.direction, err);
|
51
|
-
if (options.signal?.aborted === true &&
|
49
|
+
options.log.error('%s error parsing ICE candidate - %e', options.direction, err);
|
50
|
+
if (options.signal?.aborted === true && pc.connectionState !== 'connected') {
|
52
51
|
throw err;
|
53
52
|
}
|
54
53
|
}
|
55
54
|
};
|
56
|
-
export function getConnectionState(pc) {
|
57
|
-
return isFirefox ? pc.iceConnectionState : pc.connectionState;
|
58
|
-
}
|
59
55
|
function resolveOnConnected(pc, promise) {
|
60
|
-
pc
|
61
|
-
|
56
|
+
if (pc.connectionState === 'connected') {
|
57
|
+
promise.resolve();
|
58
|
+
return;
|
59
|
+
}
|
60
|
+
pc.onconnectionstatechange = (_) => {
|
61
|
+
switch (pc.connectionState) {
|
62
62
|
case 'connected':
|
63
63
|
promise.resolve();
|
64
64
|
break;
|
65
65
|
case 'failed':
|
66
66
|
case 'disconnected':
|
67
67
|
case 'closed':
|
68
|
-
promise.reject(new ConnectionFailedError(
|
68
|
+
promise.reject(new ConnectionFailedError(`RTCPeerConnection connection state became "${pc.connectionState}"`));
|
69
69
|
break;
|
70
70
|
default:
|
71
71
|
break;
|
72
72
|
}
|
73
73
|
};
|
74
74
|
}
|
75
|
+
export function getRemotePeer(ma) {
|
76
|
+
let remotePeer;
|
77
|
+
for (const component of ma.getComponents()) {
|
78
|
+
if (component.name === 'p2p') {
|
79
|
+
remotePeer = peerIdFromString(component.value ?? '');
|
80
|
+
}
|
81
|
+
}
|
82
|
+
if (remotePeer == null) {
|
83
|
+
throw new InvalidMultiaddrError('Remote peerId must be present in multiaddr');
|
84
|
+
}
|
85
|
+
return remotePeer;
|
86
|
+
}
|
75
87
|
//# sourceMappingURL=util.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAA;
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAmB,MAAM,YAAY,CAAA;AAK/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAC3E,OAAO,KAAK,EAAE,sCAAsC,EAAE,MAAM,gBAAgB,CAAA;AAG5E,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAU,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/I,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAA;IAClB,WAAW,EAAE,oBAAoB,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC1F,OAAO,EAAE,gBAAgB,CAAC,sCAAsC,CAAC,CAAA;CAClE;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,YAAY,CAAA;CAC7B;AAaD,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,cAAc,CAAE,YAAW,QAAQ;IAC7F,OAAO,CAAC,kBAAkB,CAAC,CAAW;IACtC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAuB;IAChD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAEvC,UAAU,EAAE,8BAA8B,EAAE,IAAI,EAAE,wBAAwB;IA4BjF,MAAM,CAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3C,OAAO,CAAC,iBAAiB;YAgCX,kBAAkB;IAmDhC,QAAQ,IAAK,SAAS,EAAE;IAYxB,mBAAmB,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAgC7C,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CA8B9B"}
|