@libp2p/webrtc 6.0.2 → 6.0.3-de2ad9ca5
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 +6 -6
- package/dist/index.min.js.map +3 -3
- package/dist/src/muxer.d.ts +8 -0
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +38 -15
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/private-to-private/initiate-connection.d.ts +1 -2
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
- package/dist/src/private-to-private/initiate-connection.js +5 -4
- package/dist/src/private-to-private/initiate-connection.js.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.js +4 -4
- package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -1
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +5 -3
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-public/listener.d.ts +1 -0
- package/dist/src/private-to-public/listener.d.ts.map +1 -1
- package/dist/src/private-to-public/listener.js +9 -4
- package/dist/src/private-to-public/listener.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +5 -3
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/private-to-public/utils/connect.d.ts +4 -4
- package/dist/src/private-to-public/utils/connect.d.ts.map +1 -1
- package/dist/src/private-to-public/utils/connect.js +7 -9
- package/dist/src/private-to-public/utils/connect.js.map +1 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.d.ts +6 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.d.ts.map +1 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js +15 -3
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.browser.js.map +1 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts +17 -2
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.d.ts.map +1 -1
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.js +18 -7
- package/dist/src/private-to-public/utils/get-rtcpeerconnection.js.map +1 -1
- package/dist/src/rtcpeerconnection-to-conn.d.ts +0 -1
- package/dist/src/rtcpeerconnection-to-conn.d.ts.map +1 -1
- package/dist/src/rtcpeerconnection-to-conn.js.map +1 -1
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +25 -17
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.js +1 -1
- package/dist/src/util.js.map +1 -1
- package/package.json +8 -8
- package/src/muxer.ts +50 -15
- package/src/private-to-private/initiate-connection.ts +6 -5
- package/src/private-to-private/signaling-stream-handler.ts +4 -4
- package/src/private-to-private/transport.ts +6 -4
- package/src/private-to-public/listener.ts +10 -4
- package/src/private-to-public/transport.ts +8 -3
- package/src/private-to-public/utils/connect.ts +11 -14
- package/src/private-to-public/utils/get-rtcpeerconnection.browser.ts +20 -3
- package/src/private-to-public/utils/get-rtcpeerconnection.ts +31 -8
- package/src/rtcpeerconnection-to-conn.ts +0 -1
- package/src/stream.ts +26 -18
- package/src/util.ts +1 -1
- package/dist/typedoc-urls.json +0 -14
@@ -8,7 +8,10 @@ import { isFirefox } from '../../util.js';
|
|
8
8
|
import { generateNoisePrologue } from './generate-noise-prologue.js';
|
9
9
|
import * as sdp from './sdp.js';
|
10
10
|
const CONNECTION_STATE_CHANGE_EVENT = isFirefox ? 'iceconnectionstatechange' : 'connectionstatechange';
|
11
|
-
|
11
|
+
function isServer(options, peerConnection) {
|
12
|
+
return options.role === 'server';
|
13
|
+
}
|
14
|
+
export async function connect(peerConnection, muxerFactory, ufrag, options) {
|
12
15
|
// create data channel for running the noise handshake. Once the data
|
13
16
|
// channel is opened, the listener will initiate the noise handshake. This
|
14
17
|
// is used to confirm the identity of the peer.
|
@@ -51,7 +54,7 @@ export async function connect(peerConnection, ufrag, options) {
|
|
51
54
|
await pEvent(handshakeDataChannel, 'open', options);
|
52
55
|
}
|
53
56
|
options.log.trace('%s handshake channel opened', options.role);
|
54
|
-
if (options
|
57
|
+
if (isServer(options, peerConnection)) {
|
55
58
|
// now that the connection has been opened, add the remote's certhash to
|
56
59
|
// it's multiaddr so we can complete the noise handshake
|
57
60
|
const remoteFingerprint = peerConnection.remoteFingerprint()?.value ?? '';
|
@@ -81,6 +84,7 @@ export async function connect(peerConnection, ufrag, options) {
|
|
81
84
|
// Creating the connection before completion of the noise
|
82
85
|
// handshake ensures that the stream opening callback is set up
|
83
86
|
const maConn = toMultiaddrConnection({
|
87
|
+
// @ts-expect-error types are broken
|
84
88
|
peerConnection,
|
85
89
|
remoteAddr: options.remoteAddr,
|
86
90
|
metrics: options.events,
|
@@ -93,7 +97,7 @@ export async function connect(peerConnection, ufrag, options) {
|
|
93
97
|
case 'disconnected':
|
94
98
|
case 'closed':
|
95
99
|
maConn.close().catch((err) => {
|
96
|
-
options.log.error('error closing connection', err);
|
100
|
+
options.log.error('error closing connection - %e', err);
|
97
101
|
maConn.abort(err);
|
98
102
|
});
|
99
103
|
break;
|
@@ -103,12 +107,6 @@ export async function connect(peerConnection, ufrag, options) {
|
|
103
107
|
});
|
104
108
|
// Track opened peer connection
|
105
109
|
options.events?.increment({ peer_connection: true });
|
106
|
-
const muxerFactory = new DataChannelMuxerFactory({
|
107
|
-
// @ts-expect-error https://github.com/murat-dogan/node-datachannel/pull/370
|
108
|
-
peerConnection,
|
109
|
-
metrics: options.events,
|
110
|
-
dataChannelOptions: options.dataChannel
|
111
|
-
});
|
112
110
|
if (options.role === 'client') {
|
113
111
|
// For outbound connections, the remote is expected to start the noise
|
114
112
|
// handshake. Therefore, we need to secure an inbound noise connection
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../../src/private-to-public/utils/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../../../src/private-to-public/utils/connect.ts"],"names":[],"mappings":"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"}
|
@@ -1,2 +1,7 @@
|
|
1
|
-
|
1
|
+
import { DataChannelMuxerFactory } from '../../muxer.ts';
|
2
|
+
import type { CreateDialerRTCPeerConnectionOptions } from './get-rtcpeerconnection.ts';
|
3
|
+
export declare function createDialerRTCPeerConnection(role: 'client' | 'server', ufrag: string, options?: CreateDialerRTCPeerConnectionOptions): Promise<{
|
4
|
+
peerConnection: RTCPeerConnection;
|
5
|
+
muxerFactory: DataChannelMuxerFactory;
|
6
|
+
}>;
|
2
7
|
//# sourceMappingURL=get-rtcpeerconnection.browser.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-rtcpeerconnection.browser.d.ts","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.browser.ts"],"names":[],"mappings":"AAAA,wBAAsB,6BAA6B,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,
|
1
|
+
{"version":3,"file":"get-rtcpeerconnection.browser.d.ts","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,KAAK,EAAE,oCAAoC,EAAE,MAAM,4BAA4B,CAAA;AAEtF,wBAAsB,6BAA6B,CAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,oCAAyC,GAAG,OAAO,CAAC;IAAE,cAAc,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAmCxO"}
|
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
import { DataChannelMuxerFactory } from "../../muxer.js";
|
2
|
+
export async function createDialerRTCPeerConnection(role, ufrag, options = {}) {
|
3
|
+
// @ts-expect-error options type is wrong
|
4
|
+
let certificate = options.certificate;
|
2
5
|
if (certificate == null) {
|
3
6
|
// ECDSA is preferred over RSA here. From our testing we find that P-256 elliptic
|
4
7
|
// curve is supported by Pion, webrtc-rs, as well as Chromium (P-228 and P-384
|
@@ -11,10 +14,19 @@ export async function createDialerRTCPeerConnection(role, ufrag, rtcConfiguratio
|
|
11
14
|
// hash: sdp.toSupportedHashFunction(hashName)
|
12
15
|
});
|
13
16
|
}
|
14
|
-
const rtcConfig = typeof rtcConfiguration === 'function' ? await rtcConfiguration() : rtcConfiguration;
|
15
|
-
|
17
|
+
const rtcConfig = typeof options.rtcConfiguration === 'function' ? await options.rtcConfiguration() : options.rtcConfiguration;
|
18
|
+
const peerConnection = new RTCPeerConnection({
|
16
19
|
...(rtcConfig ?? {}),
|
17
20
|
certificates: [certificate]
|
18
21
|
});
|
22
|
+
const muxerFactory = new DataChannelMuxerFactory({
|
23
|
+
peerConnection,
|
24
|
+
metrics: options.events,
|
25
|
+
dataChannelOptions: options.dataChannel
|
26
|
+
});
|
27
|
+
return {
|
28
|
+
peerConnection,
|
29
|
+
muxerFactory
|
30
|
+
};
|
19
31
|
}
|
20
32
|
//# sourceMappingURL=get-rtcpeerconnection.browser.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-rtcpeerconnection.browser.js","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.browser.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAE,IAAyB,EAAE,KAAa,EAAE,
|
1
|
+
{"version":3,"file":"get-rtcpeerconnection.browser.js","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAGxD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAE,IAAyB,EAAE,KAAa,EAAE,UAAgD,EAAE;IAC/I,yCAAyC;IACzC,IAAI,WAAW,GAAmB,OAAO,CAAC,WAAW,CAAA;IAErD,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;QACxB,iFAAiF;QACjF,8EAA8E;QAC9E,gFAAgF;QAChF,gCAAgC;QAChC,WAAW,GAAG,MAAM,iBAAiB,CAAC,mBAAmB,CAAC;YACxD,IAAI,EAAE,OAAO;YAEb,oEAAoE;YACpE,UAAU,EAAE,OAAO;YACnB,8CAA8C;SAC/C,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,OAAO,CAAC,gBAAgB,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAA;IAE9H,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC;QAC3C,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC,WAAW,CAAC;KAC5B,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC;QAC/C,cAAc;QACd,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,kBAAkB,EAAE,OAAO,CAAC,WAAW;KACxC,CAAC,CAAA;IAEF,OAAO;QACL,cAAc;QACd,YAAY;KACb,CAAA;AACH,CAAC"}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import { PeerConnection } from 'node-datachannel';
|
2
2
|
import { RTCPeerConnection } from 'node-datachannel/polyfill';
|
3
|
-
import
|
3
|
+
import { DataChannelMuxerFactory } from '../../muxer.ts';
|
4
|
+
import type { DataChannelOptions, TransportCertificate } from '../../index.js';
|
5
|
+
import type { CounterGroup } from '@libp2p/interface';
|
4
6
|
import type { CertificateFingerprint } from 'node-datachannel';
|
5
7
|
interface DirectRTCPeerConnectionInit extends RTCConfiguration {
|
6
8
|
ufrag: string;
|
@@ -14,6 +16,19 @@ export declare class DirectRTCPeerConnection extends RTCPeerConnection {
|
|
14
16
|
createAnswer(): Promise<globalThis.RTCSessionDescriptionInit | any>;
|
15
17
|
remoteFingerprint(): CertificateFingerprint;
|
16
18
|
}
|
17
|
-
export
|
19
|
+
export interface CreateDialerRTCPeerConnectionOptions {
|
20
|
+
rtcConfiguration?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>);
|
21
|
+
certificate?: TransportCertificate;
|
22
|
+
events?: CounterGroup;
|
23
|
+
dataChannel?: DataChannelOptions;
|
24
|
+
}
|
25
|
+
export declare function createDialerRTCPeerConnection(role: 'client', ufrag: string, options?: CreateDialerRTCPeerConnectionOptions): Promise<{
|
26
|
+
peerConnection: globalThis.RTCPeerConnection;
|
27
|
+
muxerFactory: DataChannelMuxerFactory;
|
28
|
+
}>;
|
29
|
+
export declare function createDialerRTCPeerConnection(role: 'server', ufrag: string, options?: CreateDialerRTCPeerConnectionOptions): Promise<{
|
30
|
+
peerConnection: DirectRTCPeerConnection;
|
31
|
+
muxerFactory: DataChannelMuxerFactory;
|
32
|
+
}>;
|
18
33
|
export {};
|
19
34
|
//# sourceMappingURL=get-rtcpeerconnection.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-rtcpeerconnection.d.ts","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;
|
1
|
+
{"version":3,"file":"get-rtcpeerconnection.d.ts","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AAExD,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAI9D,UAAU,2BAA4B,SAAQ,gBAAgB;IAC5D,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,cAAc,CAAA;CAC/B;AAED,qBAAa,uBAAwB,SAAQ,iBAAiB;IAC5D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;gBAEjB,IAAI,EAAE,2BAA2B;IAmBxC,WAAW,IAAK,OAAO,CAAC,UAAU,CAAC,yBAAyB,GAAG,GAAG,CAAC;IAYnE,YAAY,IAAK,OAAO,CAAC,UAAU,CAAC,yBAAyB,GAAG,GAAG,CAAC;IAY1E,iBAAiB,IAAK,sBAAsB;CAO7C;AAkBD,MAAM,WAAW,oCAAoC;IACnD,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC1F,WAAW,CAAC,EAAE,oBAAoB,CAAA;IAClC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC;AAED,wBAAsB,6BAA6B,CAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oCAAoC,GAAG,OAAO,CAAC;IAAE,cAAc,EAAE,UAAU,CAAC,iBAAiB,CAAC;IAAC,YAAY,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAAA;AACrO,wBAAsB,6BAA6B,CAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oCAAoC,GAAG,OAAO,CAAC;IAAE,cAAc,EAAE,uBAAuB,CAAC;IAAC,YAAY,EAAE,uBAAuB,CAAA;CAAE,CAAC,CAAA"}
|
@@ -2,6 +2,7 @@ import { Crypto } from '@peculiar/webcrypto';
|
|
2
2
|
import { PeerConnection } from 'node-datachannel';
|
3
3
|
import { RTCPeerConnection } from 'node-datachannel/polyfill';
|
4
4
|
import { DEFAULT_ICE_SERVERS, MAX_MESSAGE_SIZE } from '../../constants.js';
|
5
|
+
import { DataChannelMuxerFactory } from "../../muxer.js";
|
5
6
|
import { generateTransportCertificate } from './generate-certificates.js';
|
6
7
|
const crypto = new Crypto();
|
7
8
|
export class DirectRTCPeerConnection extends RTCPeerConnection {
|
@@ -64,8 +65,8 @@ function mapIceServers(iceServers) {
|
|
64
65
|
})
|
65
66
|
.flat() ?? [];
|
66
67
|
}
|
67
|
-
export async function createDialerRTCPeerConnection(role, ufrag,
|
68
|
-
if (certificate == null) {
|
68
|
+
export async function createDialerRTCPeerConnection(role, ufrag, options = {}) {
|
69
|
+
if (options.certificate == null) {
|
69
70
|
// ECDSA is preferred over RSA here. From our testing we find that P-256
|
70
71
|
// elliptic curve is supported by Pion, webrtc-rs, as well as Chromium
|
71
72
|
// (P-228 and P-384 was not supported in Chromium). We use the same hash
|
@@ -74,23 +75,33 @@ export async function createDialerRTCPeerConnection(role, ufrag, rtcConfiguratio
|
|
74
75
|
name: 'ECDSA',
|
75
76
|
namedCurve: 'P-256'
|
76
77
|
}, true, ['sign', 'verify']);
|
77
|
-
certificate = await generateTransportCertificate(keyPair, {
|
78
|
+
options.certificate = await generateTransportCertificate(keyPair, {
|
78
79
|
days: 365
|
79
80
|
});
|
80
81
|
}
|
81
|
-
const rtcConfig = typeof rtcConfiguration === 'function' ? await rtcConfiguration() : rtcConfiguration;
|
82
|
-
|
82
|
+
const rtcConfig = typeof options.rtcConfiguration === 'function' ? await options.rtcConfiguration() : options.rtcConfiguration;
|
83
|
+
const peerConnection = new DirectRTCPeerConnection({
|
83
84
|
...rtcConfig,
|
84
85
|
ufrag,
|
85
86
|
peerConnection: new PeerConnection(`${role}-${Date.now()}`, {
|
86
87
|
disableFingerprintVerification: true,
|
87
88
|
disableAutoNegotiation: true,
|
88
|
-
certificatePemFile: certificate.pem,
|
89
|
-
keyPemFile: certificate.privateKey,
|
89
|
+
certificatePemFile: options.certificate.pem,
|
90
|
+
keyPemFile: options.certificate.privateKey,
|
90
91
|
enableIceUdpMux: role === 'server',
|
91
92
|
maxMessageSize: MAX_MESSAGE_SIZE,
|
92
93
|
iceServers: mapIceServers(rtcConfig?.iceServers ?? DEFAULT_ICE_SERVERS.map(urls => ({ urls })))
|
93
94
|
})
|
94
95
|
});
|
96
|
+
const muxerFactory = new DataChannelMuxerFactory({
|
97
|
+
// @ts-expect-error https://github.com/murat-dogan/node-datachannel/pull/370
|
98
|
+
peerConnection,
|
99
|
+
metrics: options.events,
|
100
|
+
dataChannelOptions: options.dataChannel
|
101
|
+
});
|
102
|
+
return {
|
103
|
+
peerConnection,
|
104
|
+
muxerFactory
|
105
|
+
};
|
95
106
|
}
|
96
107
|
//# sourceMappingURL=get-rtcpeerconnection.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"get-rtcpeerconnection.js","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC1E,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAA;
|
1
|
+
{"version":3,"file":"get-rtcpeerconnection.js","sourceRoot":"","sources":["../../../../src/private-to-public/utils/get-rtcpeerconnection.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import type { RTCPeerConnection } from './webrtc/index.js';
|
2
1
|
import type { MultiaddrConnection } from '@libp2p/interface';
|
3
2
|
import type { AbstractMultiaddrConnectionInit } from '@libp2p/utils';
|
4
3
|
export interface RTCPeerConnectionMultiaddrConnectionInit extends Omit<AbstractMultiaddrConnectionInit, 'stream'> {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rtcpeerconnection-to-conn.d.ts","sourceRoot":"","sources":["../../src/rtcpeerconnection-to-conn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
1
|
+
{"version":3,"file":"rtcpeerconnection-to-conn.d.ts","sourceRoot":"","sources":["../../src/rtcpeerconnection-to-conn.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAC1E,OAAO,KAAK,EAAE,+BAA+B,EAAc,MAAM,eAAe,CAAA;AAGhF,MAAM,WAAW,wCAAyC,SAAQ,IAAI,CAAC,+BAA+B,EAAE,QAAQ,CAAC;IAC/G,cAAc,EAAE,iBAAiB,CAAA;CAClC;AAmDD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,MAAM,wCAAwC,KAAG,mBAEtF,CAAA"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rtcpeerconnection-to-conn.js","sourceRoot":"","sources":["../../src/rtcpeerconnection-to-conn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;
|
1
|
+
{"version":3,"file":"rtcpeerconnection-to-conn.js","sourceRoot":"","sources":["../../src/rtcpeerconnection-to-conn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAA;AAS3D,MAAM,oCAAqC,SAAQ,2BAA2B;IACpE,cAAc,CAAmB;IAEzC,YAAa,IAA8C;QACzD,KAAK,CAAC,IAAI,CAAC,CAAA;QAEX,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QAEzC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,eAAe,CAAA;QAExD,IAAI,CAAC,cAAc,CAAC,uBAAuB,GAAG,GAAG,EAAE;YACjD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kDAAkD,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,YAAY,CAAC,CAAA;YAErH,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;gBACnK,8CAA8C;gBAC9C,IAAI,CAAC,iBAAiB,EAAE,CAAA;gBAExB,uCAAuC;gBACvC,qFAAqF;gBACrF,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;YAC7B,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED,QAAQ,CAAE,IAAoB;QAC5B,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,WAAW,EAAE,IAAI;SAClB,CAAA;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAE,OAAsB;QACrC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;QAC3B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAA;IACnC,CAAC;IAED,SAAS;QACP,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAA;IAC7B,CAAC;IAED,SAAS;QACP,+BAA+B;IACjC,CAAC;IAED,UAAU;QACR,+BAA+B;IACjC,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAA8C,EAAuB,EAAE;IAC3G,OAAO,IAAI,oCAAoC,CAAC,IAAI,CAAC,CAAA;AACvD,CAAC,CAAA"}
|
package/dist/src/stream.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAK9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGnE,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,kBAAkB;IAC9E;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,qBAAa,YAAa,SAAQ,cAAc;IAC9C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,aAAa,CAAQ;gBAEhB,IAAI,EAAE,gBAAgB;
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAK9C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAI/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAGnE,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB,EAAE,kBAAkB;IAC9E;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,qBAAa,YAAa,SAAQ,cAAc;IAC9C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IAExC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,cAAc,CAAC,CAA4B;IACnD,OAAO,CAAC,aAAa,CAAQ;gBAEhB,IAAI,EAAE,gBAAgB;IAyFnC,aAAa,IAAK,IAAI;IAItB,YAAY,CAAE,IAAI,EAAE,cAAc,GAAG,IAAI;IAqBzC,QAAQ,CAAE,IAAI,EAAE,cAAc,GAAG,UAAU;IAsC3C,SAAS,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAUtB,cAAc,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBtD,aAAa,CAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,SAAS;IAwBjB,SAAS,IAAK,IAAI;IAIlB,UAAU,IAAK,IAAI;CAGpB;AAED,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D;;;;;OAKG;IACH,OAAO,EAAE,cAAc,CAAA;IAEvB;;OAEG;IACH,SAAS,EAAE,sBAAsB,CAAA;IAEjC;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,wBAAgB,YAAY,CAAE,OAAO,EAAE,mBAAmB,GAAG,YAAY,CASxE"}
|
package/dist/src/stream.js
CHANGED
@@ -57,22 +57,6 @@ export class WebRTCStream extends AbstractStream {
|
|
57
57
|
this.safeDispatchEvent('drain');
|
58
58
|
}
|
59
59
|
};
|
60
|
-
if (this.channel.readyState !== 'open') {
|
61
|
-
this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState);
|
62
|
-
pEvent(this.channel, 'open', {
|
63
|
-
rejectionEvents: [
|
64
|
-
'close',
|
65
|
-
'error'
|
66
|
-
]
|
67
|
-
})
|
68
|
-
.then(() => {
|
69
|
-
this.log('channel ready state is now "%s", dispatching drain', this.channel.readyState);
|
70
|
-
this.safeDispatchEvent('drain');
|
71
|
-
})
|
72
|
-
.catch(err => {
|
73
|
-
this.abort(err.error ?? err);
|
74
|
-
});
|
75
|
-
}
|
76
60
|
// pipe framed protobuf messages through a length prefixed decoder, and
|
77
61
|
// surface data from the `Message.message` field through a source.
|
78
62
|
Promise.resolve().then(async () => {
|
@@ -81,7 +65,7 @@ export class WebRTCStream extends AbstractStream {
|
|
81
65
|
}
|
82
66
|
})
|
83
67
|
.catch(err => {
|
84
|
-
this.log.error('error processing incoming data channel messages', err);
|
68
|
+
this.log.error('error processing incoming data channel messages - %e', err);
|
85
69
|
});
|
86
70
|
// close when both writable ends are closed or an error occurs
|
87
71
|
const cleanUpDatachannelOnClose = () => {
|
@@ -91,6 +75,25 @@ export class WebRTCStream extends AbstractStream {
|
|
91
75
|
}
|
92
76
|
};
|
93
77
|
this.addEventListener('close', cleanUpDatachannelOnClose);
|
78
|
+
// chrome can receive message events before the open even is fired - calling
|
79
|
+
// code needs to attach message event listeners before these events occur
|
80
|
+
// but we need to wait before sending any data so this has to be done async
|
81
|
+
if (this.channel.readyState !== 'open') {
|
82
|
+
this.log('channel ready state is "%s" and not "open", waiting for "open" event before sending data', this.channel.readyState);
|
83
|
+
pEvent(this.channel, 'open', {
|
84
|
+
rejectionEvents: [
|
85
|
+
'close',
|
86
|
+
'error'
|
87
|
+
]
|
88
|
+
})
|
89
|
+
.then(() => {
|
90
|
+
this.log('channel ready state is now "%s", dispatching drain', this.channel.readyState);
|
91
|
+
this.safeDispatchEvent('drain');
|
92
|
+
})
|
93
|
+
.catch(err => {
|
94
|
+
this.abort(err.error ?? err);
|
95
|
+
});
|
96
|
+
}
|
94
97
|
}
|
95
98
|
sendNewStream() {
|
96
99
|
// opening new streams is handled by WebRTC so this is a noop
|
@@ -158,8 +161,13 @@ export class WebRTCStream extends AbstractStream {
|
|
158
161
|
this._sendFlag(Message.Flag.FIN);
|
159
162
|
options?.signal?.throwIfAborted();
|
160
163
|
this.receivedFinAck = Promise.withResolvers();
|
164
|
+
// wait for either:
|
165
|
+
// 1. the FIN_ACK to be received
|
166
|
+
// 2. the datachannel to close
|
167
|
+
// 3. timeout
|
161
168
|
await Promise.any([
|
162
169
|
raceSignal(this.receivedFinAck.promise, options?.signal),
|
170
|
+
pEvent(this.channel, 'close'),
|
163
171
|
new Promise(resolve => {
|
164
172
|
AbortSignal.timeout(this.finAckTimeout)
|
165
173
|
.addEventListener('abort', () => {
|
package/dist/src/stream.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,cAAc,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClH,OAAO,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAkBrC,MAAM,OAAO,YAAa,SAAQ,cAAc;IAC9C;;OAEG;IACc,OAAO,CAAgB;IAExC;;;OAGG;IACc,YAAY,CAAsB;IAClC,iBAAiB,CAAQ;IAClC,cAAc,CAA6B;IAC3C,aAAa,CAAQ;IAE7B,YAAa,IAAsB;QACjC,KAAK,CAAC;YACJ,GAAG,IAAI;YACP,cAAc,EAAE,CAAC,IAAI,CAAC,cAAc,IAAI,gBAAgB,CAAC,GAAG,iBAAiB;SAC9E,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QAC3B,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,aAAa,CAAA;QACvC,IAAI,CAAC,YAAY,GAAG,QAAQ,EAAc,CAAA;QAC1C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,IAAI,mBAAmB,CAAA;QACtE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,uBAAuB,CAAA;QAElE,+BAA+B;QAC/B,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAA;YAElD,IAAI,CAAC,kBAAkB,EAAE,CAAA;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE;YAC7B,MAAM,GAAG,GAAI,GAAqB,CAAC,KAAK,CAAA;YAExC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uCAAuC,EAAE,GAAG,CAAC,CAAA;YAE5D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC,CAAA;QAED,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,KAAK,EAAE,KAAgC,EAAE,EAAE;YAClE,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC5D,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;YAEtB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;gBAC3C,OAAM;YACR,CAAC;YAED,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAClE,CAAC,CAAA;QAED,8DAA8D;QAC9D,IAAI,CAAC,OAAO,CAAC,0BAA0B,GAAG,CAAC,CAAA;QAE3C,IAAI,CAAC,OAAO,CAAC,mBAAmB,GAAG,GAAG,EAAE;YACtC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;YACjC,CAAC;QACH,CAAC,CAAA;QAED,
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/stream.ts"],"names":[],"mappings":"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"}
|
package/dist/src/util.js
CHANGED
@@ -63,7 +63,7 @@ export function drainAndClose(channel, direction, drainTimeout = DATA_CHANNEL_DR
|
|
63
63
|
}
|
64
64
|
})
|
65
65
|
.catch(err => {
|
66
|
-
options.log.error('error closing outbound stream', err);
|
66
|
+
options.log.error('error closing outbound stream - %e', err);
|
67
67
|
});
|
68
68
|
}
|
69
69
|
export function isPeerConnection(obj) {
|
package/dist/src/util.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@libp2p/webrtc",
|
3
|
-
"version": "6.0.
|
3
|
+
"version": "6.0.3-de2ad9ca5",
|
4
4
|
"description": "A libp2p transport using WebRTC connections",
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/transport-webrtc#readme",
|
@@ -45,13 +45,13 @@
|
|
45
45
|
},
|
46
46
|
"dependencies": {
|
47
47
|
"@chainsafe/is-ip": "^2.1.0",
|
48
|
-
"@libp2p/crypto": "
|
49
|
-
"@libp2p/interface": "
|
50
|
-
"@libp2p/interface-internal": "
|
51
|
-
"@libp2p/keychain": "
|
48
|
+
"@libp2p/crypto": "5.1.10-de2ad9ca5",
|
49
|
+
"@libp2p/interface": "3.0.0-de2ad9ca5",
|
50
|
+
"@libp2p/interface-internal": "3.0.2-de2ad9ca5",
|
51
|
+
"@libp2p/keychain": "6.0.2-de2ad9ca5",
|
52
52
|
"@chainsafe/libp2p-noise": "^17.0.0",
|
53
|
-
"@libp2p/peer-id": "
|
54
|
-
"@libp2p/utils": "
|
53
|
+
"@libp2p/peer-id": "6.0.1-de2ad9ca5",
|
54
|
+
"@libp2p/utils": "7.0.2-de2ad9ca5",
|
55
55
|
"@multiformats/multiaddr": "^13.0.1",
|
56
56
|
"@multiformats/multiaddr-matcher": "^3.0.1",
|
57
57
|
"@peculiar/webcrypto": "^1.5.0",
|
@@ -79,7 +79,7 @@
|
|
79
79
|
"uint8arrays": "^5.1.0"
|
80
80
|
},
|
81
81
|
"devDependencies": {
|
82
|
-
"@libp2p/logger": "
|
82
|
+
"@libp2p/logger": "6.0.2-de2ad9ca5",
|
83
83
|
"@types/sinon": "^17.0.4",
|
84
84
|
"aegir": "^47.0.22",
|
85
85
|
"any-signal": "^4.1.1",
|
package/src/muxer.ts
CHANGED
@@ -39,26 +39,44 @@ export class DataChannelMuxerFactory implements StreamMuxerFactory {
|
|
39
39
|
private readonly peerConnection: RTCPeerConnection
|
40
40
|
private readonly metrics?: CounterGroup
|
41
41
|
private readonly dataChannelOptions?: DataChannelOptions
|
42
|
+
private readonly earlyDataChannels: RTCDataChannel[]
|
42
43
|
|
43
44
|
constructor (init: DataChannelMuxerFactoryInit) {
|
45
|
+
this.onEarlyDataChannel = this.onEarlyDataChannel.bind(this)
|
46
|
+
|
44
47
|
this.peerConnection = init.peerConnection
|
45
48
|
this.metrics = init.metrics
|
46
49
|
this.protocol = init.protocol ?? MUXER_PROTOCOL
|
47
50
|
this.dataChannelOptions = init.dataChannelOptions ?? {}
|
51
|
+
this.peerConnection.addEventListener('datachannel', this.onEarlyDataChannel)
|
52
|
+
this.earlyDataChannels = []
|
53
|
+
}
|
54
|
+
|
55
|
+
private onEarlyDataChannel (evt: RTCDataChannelEvent): void {
|
56
|
+
this.earlyDataChannels.push(evt.channel)
|
48
57
|
}
|
49
58
|
|
50
59
|
createStreamMuxer (maConn: MultiaddrConnection): StreamMuxer {
|
60
|
+
this.peerConnection.removeEventListener('datachannel', this.onEarlyDataChannel)
|
61
|
+
|
51
62
|
return new DataChannelMuxer(maConn, {
|
52
63
|
peerConnection: this.peerConnection,
|
53
64
|
dataChannelOptions: this.dataChannelOptions,
|
54
65
|
metrics: this.metrics,
|
55
|
-
protocol: this.protocol
|
66
|
+
protocol: this.protocol,
|
67
|
+
earlyDataChannels: this.earlyDataChannels
|
56
68
|
})
|
57
69
|
}
|
58
70
|
}
|
59
71
|
|
60
72
|
export interface DataChannelMuxerInit extends DataChannelMuxerFactoryInit {
|
61
73
|
protocol: string
|
74
|
+
|
75
|
+
/**
|
76
|
+
* Incoming data channels that were opened by the remote before the peer
|
77
|
+
* connection was established
|
78
|
+
*/
|
79
|
+
earlyDataChannels: RTCDataChannel[]
|
62
80
|
}
|
63
81
|
|
64
82
|
export interface DataChannelMuxerComponents {
|
@@ -89,27 +107,44 @@ export class DataChannelMuxer extends AbstractStreamMuxer<WebRTCStream> implemen
|
|
89
107
|
* {@link https://developer.mozilla.org/en-US/docs/Web/API/RTCPeerConnection/datachannel_event}
|
90
108
|
*/
|
91
109
|
this.peerConnection.ondatachannel = ({ channel }) => {
|
92
|
-
this.
|
93
|
-
|
94
|
-
// 'init' channel is only used during connection establishment, it is
|
95
|
-
// closed by the initiator
|
96
|
-
if (channel.label === 'init') {
|
97
|
-
this.log.trace('closing init channel %d', channel.id)
|
98
|
-
channel.close()
|
110
|
+
this.onDataChannel(channel)
|
111
|
+
}
|
99
112
|
|
113
|
+
queueMicrotask(() => {
|
114
|
+
if (this.status !== 'open') {
|
115
|
+
init.earlyDataChannels.forEach(channel => {
|
116
|
+
channel.close()
|
117
|
+
})
|
100
118
|
return
|
101
119
|
}
|
102
120
|
|
103
|
-
|
104
|
-
|
105
|
-
...this.dataChannelOptions,
|
106
|
-
channel,
|
107
|
-
direction: 'inbound',
|
108
|
-
log: this.log
|
121
|
+
init.earlyDataChannels.forEach(channel => {
|
122
|
+
this.onDataChannel(channel)
|
109
123
|
})
|
124
|
+
})
|
125
|
+
}
|
126
|
+
|
127
|
+
private onDataChannel (channel: RTCDataChannel): void {
|
128
|
+
this.log('incoming datachannel with channel id %d, protocol %s and status %s', channel.id, channel.protocol, channel.readyState)
|
129
|
+
|
130
|
+
// 'init' channel is only used during connection establishment, it is
|
131
|
+
// closed by the initiator
|
132
|
+
if (channel.label === 'init') {
|
133
|
+
this.log.trace('closing init channel %d', channel.id)
|
134
|
+
channel.close()
|
110
135
|
|
111
|
-
|
136
|
+
return
|
112
137
|
}
|
138
|
+
|
139
|
+
const stream = createStream({
|
140
|
+
...this.streamOptions,
|
141
|
+
...this.dataChannelOptions,
|
142
|
+
channel,
|
143
|
+
direction: 'inbound',
|
144
|
+
log: this.log
|
145
|
+
})
|
146
|
+
|
147
|
+
this.onRemoteStream(stream)
|
113
148
|
}
|
114
149
|
|
115
150
|
async onCreateStream (options?: CreateStreamOptions): Promise<WebRTCStream> {
|
@@ -32,7 +32,7 @@ export interface ConnectOptions extends LoggerOptions, ProgressOptions<WebRTCDia
|
|
32
32
|
logger: ComponentLogger
|
33
33
|
}
|
34
34
|
|
35
|
-
export async function initiateConnection ({ rtcConfiguration, dataChannel, signal, metrics, multiaddr: ma, connectionManager, transportManager, log, logger, onProgress }: ConnectOptions): Promise<{ remoteAddress: Multiaddr, peerConnection: RTCPeerConnection, muxerFactory: DataChannelMuxerFactory }> {
|
35
|
+
export async function initiateConnection ({ rtcConfiguration, dataChannel, signal, metrics, multiaddr: ma, connectionManager, transportManager, log, logger, onProgress }: ConnectOptions): Promise<{ remoteAddress: Multiaddr, peerConnection: globalThis.RTCPeerConnection, muxerFactory: DataChannelMuxerFactory }> {
|
36
36
|
const { circuitAddress, targetPeer } = splitAddr(ma)
|
37
37
|
|
38
38
|
metrics?.dialerEvents.increment({ open: true })
|
@@ -128,7 +128,7 @@ export async function initiateConnection ({ rtcConfiguration, dataChannel, signa
|
|
128
128
|
|
129
129
|
// create an offer
|
130
130
|
const offerSdp = await peerConnection.createOffer().catch(err => {
|
131
|
-
log.error('could not execute createOffer', err)
|
131
|
+
log.error('could not execute createOffer - %e', err)
|
132
132
|
throw new SDPHandshakeFailedError('Failed to set createOffer')
|
133
133
|
})
|
134
134
|
|
@@ -143,7 +143,7 @@ export async function initiateConnection ({ rtcConfiguration, dataChannel, signa
|
|
143
143
|
|
144
144
|
// set offer as local description
|
145
145
|
await peerConnection.setLocalDescription(offerSdp).catch(err => {
|
146
|
-
log.error('could not execute setLocalDescription', err)
|
146
|
+
log.error('could not execute setLocalDescription - %e', err)
|
147
147
|
throw new SDPHandshakeFailedError('Failed to set localDescription')
|
148
148
|
})
|
149
149
|
|
@@ -164,7 +164,7 @@ export async function initiateConnection ({ rtcConfiguration, dataChannel, signa
|
|
164
164
|
|
165
165
|
const answerSdp = new RTCSessionDescription({ type: 'answer', sdp: answerMessage.data })
|
166
166
|
await peerConnection.setRemoteDescription(answerSdp).catch(err => {
|
167
|
-
log.error('could not execute setRemoteDescription', err)
|
167
|
+
log.error('could not execute setRemoteDescription - %e', err)
|
168
168
|
throw new SDPHandshakeFailedError('Failed to set remoteDescription')
|
169
169
|
})
|
170
170
|
|
@@ -209,11 +209,12 @@ export async function initiateConnection ({ rtcConfiguration, dataChannel, signa
|
|
209
209
|
|
210
210
|
return {
|
211
211
|
remoteAddress: ma,
|
212
|
+
// @ts-expect-error https://github.com/murat-dogan/node-datachannel/pull/370
|
212
213
|
peerConnection,
|
213
214
|
muxerFactory
|
214
215
|
}
|
215
216
|
} catch (err: any) {
|
216
|
-
log.error('outgoing signaling error', err)
|
217
|
+
log.error('outgoing signaling error - %e', err)
|
217
218
|
|
218
219
|
peerConnection.close()
|
219
220
|
stream.abort(err)
|