@libp2p/webrtc 3.2.11 → 4.0.0-273d8177c
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 +1 -1
- package/dist/index.min.js +21 -21
- package/dist/src/error.d.ts +2 -2
- package/dist/src/error.d.ts.map +1 -1
- package/dist/src/error.js +1 -1
- package/dist/src/error.js.map +1 -1
- package/dist/src/index.d.ts +6 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/maconn.d.ts +8 -4
- package/dist/src/maconn.d.ts.map +1 -1
- package/dist/src/maconn.js +6 -6
- package/dist/src/maconn.js.map +1 -1
- package/dist/src/muxer.d.ts +13 -5
- package/dist/src/muxer.d.ts.map +1 -1
- package/dist/src/muxer.js +36 -7
- package/dist/src/muxer.js.map +1 -1
- package/dist/src/pb/message.js.map +1 -1
- package/dist/src/private-to-private/initiate-connection.d.ts +4 -5
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
- package/dist/src/private-to-private/initiate-connection.js +4 -5
- package/dist/src/private-to-private/initiate-connection.js.map +1 -1
- package/dist/src/private-to-private/listener.d.ts +3 -4
- package/dist/src/private-to-private/listener.d.ts.map +1 -1
- package/dist/src/private-to-private/listener.js +1 -1
- package/dist/src/private-to-private/listener.js.map +1 -1
- package/dist/src/private-to-private/pb/message.js.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.d.ts +4 -2
- package/dist/src/private-to-private/signaling-stream-handler.d.ts.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.js +4 -5
- package/dist/src/private-to-private/signaling-stream-handler.js.map +1 -1
- package/dist/src/private-to-private/transport.d.ts +5 -9
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +16 -14
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts +2 -2
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js +26 -41
- package/dist/src/private-to-private/util.js.map +1 -1
- package/dist/src/private-to-public/options.d.ts +1 -1
- package/dist/src/private-to-public/options.d.ts.map +1 -1
- package/dist/src/private-to-public/sdp.d.ts +2 -1
- package/dist/src/private-to-public/sdp.d.ts.map +1 -1
- package/dist/src/private-to-public/sdp.js +3 -6
- package/dist/src/private-to-public/sdp.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +4 -5
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +26 -15
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/dist/src/stream.d.ts +10 -4
- package/dist/src/stream.d.ts.map +1 -1
- package/dist/src/stream.js +19 -33
- package/dist/src/stream.js.map +1 -1
- package/dist/src/util.d.ts +2 -1
- package/dist/src/util.d.ts.map +1 -1
- package/dist/src/util.js +4 -6
- package/dist/src/util.js.map +1 -1
- package/dist/src/webrtc/rtc-data-channel.js.map +1 -1
- package/dist/src/webrtc/rtc-ice-candidate.js.map +1 -1
- package/dist/src/webrtc/rtc-peer-connection.js.map +1 -1
- package/package.json +27 -22
- package/src/error.ts +2 -2
- package/src/index.ts +7 -1
- package/src/maconn.ts +14 -10
- package/src/muxer.ts +57 -11
- package/src/private-to-private/initiate-connection.ts +7 -11
- package/src/private-to-private/listener.ts +3 -4
- package/src/private-to-private/signaling-stream-handler.ts +7 -7
- package/src/private-to-private/transport.ts +18 -22
- package/src/private-to-private/util.ts +30 -46
- package/src/private-to-public/options.ts +1 -1
- package/src/private-to-public/sdp.ts +4 -8
- package/src/private-to-public/transport.ts +27 -19
- package/src/stream.ts +27 -39
- package/src/util.ts +5 -7
- package/dist/typedoc-urls.json +0 -8
|
@@ -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,SAAS,EAAE,MAAM,
|
|
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,13 +1,7 @@
|
|
|
1
|
-
import { type CreateListenerOptions, type DialOptions,
|
|
1
|
+
import { type CreateListenerOptions, type DialOptions, transportSymbol, type Transport, type Listener, type Upgrader, type ComponentLogger, type Connection, type PeerId, type CounterGroup, type Metrics, type Startable } from '@libp2p/interface';
|
|
2
2
|
import { type Multiaddr } from '@multiformats/multiaddr';
|
|
3
3
|
import type { DataChannelOptions } from '../index.js';
|
|
4
|
-
import type {
|
|
5
|
-
import type { PeerId } from '@libp2p/interface/peer-id';
|
|
6
|
-
import type { CounterGroup, Metrics } from '@libp2p/interface/src/metrics/index.js';
|
|
7
|
-
import type { Startable } from '@libp2p/interface/startable';
|
|
8
|
-
import type { IncomingStreamData, Registrar } from '@libp2p/interface-internal/registrar';
|
|
9
|
-
import type { ConnectionManager } from '@libp2p/interface-internal/src/connection-manager/index.js';
|
|
10
|
-
import type { TransportManager } from '@libp2p/interface-internal/transport-manager';
|
|
4
|
+
import type { IncomingStreamData, Registrar, ConnectionManager, TransportManager } from '@libp2p/interface-internal';
|
|
11
5
|
export declare const SIGNALING_PROTO_ID = "/webrtc-signaling/0.0.1";
|
|
12
6
|
export interface WebRTCTransportInit {
|
|
13
7
|
rtcConfiguration?: RTCConfiguration;
|
|
@@ -25,6 +19,7 @@ export interface WebRTCTransportComponents {
|
|
|
25
19
|
transportManager: TransportManager;
|
|
26
20
|
connectionManager: ConnectionManager;
|
|
27
21
|
metrics?: Metrics;
|
|
22
|
+
logger: ComponentLogger;
|
|
28
23
|
}
|
|
29
24
|
export interface WebRTCTransportMetrics {
|
|
30
25
|
dialerEvents: CounterGroup;
|
|
@@ -33,6 +28,7 @@ export interface WebRTCTransportMetrics {
|
|
|
33
28
|
export declare class WebRTCTransport implements Transport, Startable {
|
|
34
29
|
private readonly components;
|
|
35
30
|
private readonly init;
|
|
31
|
+
private readonly log;
|
|
36
32
|
private _started;
|
|
37
33
|
private readonly metrics?;
|
|
38
34
|
private readonly shutdownController;
|
|
@@ -42,7 +38,7 @@ export declare class WebRTCTransport implements Transport, Startable {
|
|
|
42
38
|
stop(): Promise<void>;
|
|
43
39
|
createListener(options: CreateListenerOptions): Listener;
|
|
44
40
|
readonly [Symbol.toStringTag] = "@libp2p/webrtc";
|
|
45
|
-
readonly [
|
|
41
|
+
readonly [transportSymbol] = true;
|
|
46
42
|
filter(multiaddrs: Multiaddr[]): Multiaddr[];
|
|
47
43
|
dial(ma: Multiaddr, options: DialOptions): Promise<Connection>;
|
|
48
44
|
_onProtocol({ connection, stream }: IncomingStreamData): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,WAAW,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAe,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAEjQ,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAIpH,eAAO,MAAM,kBAAkB,4BAA4B,CAAA;AAG3D,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAEhC;;;OAGG;IACH,wBAAwB,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,iBAAiB,EAAE,iBAAiB,CAAA;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,YAAY,EAAE,YAAY,CAAA;IAC1B,cAAc,EAAE,YAAY,CAAA;CAC7B;AAED,qBAAa,eAAgB,YAAW,SAAS,EAAE,SAAS;IAOxD,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAiB;gBAGjC,UAAU,EAAE,yBAAyB,EACrC,IAAI,GAAE,mBAAwB;IAmBjD,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IASvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAM5B,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ;IAMzD,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAmB;IAEhD,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAO;IAEjC,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAWvC,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;IAsC/D,WAAW,CAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C7E,OAAO,CAAC,gBAAgB;CAezB;AAED,wBAAgB,SAAS,CAAE,EAAE,EAAE,SAAS,GAAG;IAAE,QAAQ,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA4BjF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
2
|
-
import {
|
|
3
|
-
import { logger } from '@libp2p/logger';
|
|
1
|
+
import { CodeError } from '@libp2p/interface';
|
|
2
|
+
import { transportSymbol } from '@libp2p/interface';
|
|
4
3
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
5
4
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
6
5
|
import { WebRTC } from '@multiformats/multiaddr-matcher';
|
|
@@ -11,7 +10,6 @@ import { cleanup, RTCPeerConnection } from '../webrtc/index.js';
|
|
|
11
10
|
import { initiateConnection } from './initiate-connection.js';
|
|
12
11
|
import { WebRTCPeerListener } from './listener.js';
|
|
13
12
|
import { handleIncomingStream } from './signaling-stream-handler.js';
|
|
14
|
-
const log = logger('libp2p:webrtc:peer');
|
|
15
13
|
const WEBRTC_TRANSPORT = '/webrtc';
|
|
16
14
|
const CIRCUIT_RELAY_TRANSPORT = '/p2p-circuit';
|
|
17
15
|
export const SIGNALING_PROTO_ID = '/webrtc-signaling/0.0.1';
|
|
@@ -19,12 +17,14 @@ const INBOUND_CONNECTION_TIMEOUT = 30 * 1000;
|
|
|
19
17
|
export class WebRTCTransport {
|
|
20
18
|
components;
|
|
21
19
|
init;
|
|
20
|
+
log;
|
|
22
21
|
_started = false;
|
|
23
22
|
metrics;
|
|
24
23
|
shutdownController;
|
|
25
24
|
constructor(components, init = {}) {
|
|
26
25
|
this.components = components;
|
|
27
26
|
this.init = init;
|
|
27
|
+
this.log = components.logger.forComponent('libp2p:webrtc');
|
|
28
28
|
this.shutdownController = new AbortController();
|
|
29
29
|
if (components.metrics != null) {
|
|
30
30
|
this.metrics = {
|
|
@@ -44,7 +44,7 @@ export class WebRTCTransport {
|
|
|
44
44
|
}
|
|
45
45
|
async start() {
|
|
46
46
|
await this.components.registrar.handle(SIGNALING_PROTO_ID, (data) => {
|
|
47
|
-
this._onProtocol(data).catch(err => { log.error('failed to handle incoming connect from %p', data.connection.remotePeer, err); });
|
|
47
|
+
this._onProtocol(data).catch(err => { this.log.error('failed to handle incoming connect from %p', data.connection.remotePeer, err); });
|
|
48
48
|
}, {
|
|
49
49
|
runOnTransientConnection: true
|
|
50
50
|
});
|
|
@@ -61,7 +61,7 @@ export class WebRTCTransport {
|
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
[Symbol.toStringTag] = '@libp2p/webrtc';
|
|
64
|
-
[
|
|
64
|
+
[transportSymbol] = true;
|
|
65
65
|
filter(multiaddrs) {
|
|
66
66
|
return multiaddrs.filter(WebRTC.exactMatch);
|
|
67
67
|
}
|
|
@@ -73,9 +73,9 @@ export class WebRTCTransport {
|
|
|
73
73
|
* <relay address>/p2p/<relay-peer>/p2p-circuit/webrtc/p2p/<destination-peer>
|
|
74
74
|
*/
|
|
75
75
|
async dial(ma, options) {
|
|
76
|
-
log.trace('dialing address: %a', ma);
|
|
76
|
+
this.log.trace('dialing address: %a', ma);
|
|
77
77
|
const peerConnection = new RTCPeerConnection(this.init.rtcConfiguration);
|
|
78
|
-
const muxerFactory = new DataChannelMuxerFactory({
|
|
78
|
+
const muxerFactory = new DataChannelMuxerFactory(this.components, {
|
|
79
79
|
peerConnection,
|
|
80
80
|
dataChannelOptions: this.init.dataChannel
|
|
81
81
|
});
|
|
@@ -85,9 +85,10 @@ export class WebRTCTransport {
|
|
|
85
85
|
dataChannelOptions: this.init.dataChannel,
|
|
86
86
|
signal: options.signal,
|
|
87
87
|
connectionManager: this.components.connectionManager,
|
|
88
|
-
transportManager: this.components.transportManager
|
|
88
|
+
transportManager: this.components.transportManager,
|
|
89
|
+
log: this.log
|
|
89
90
|
});
|
|
90
|
-
const webRTCConn = new WebRTCMultiaddrConnection({
|
|
91
|
+
const webRTCConn = new WebRTCMultiaddrConnection(this.components, {
|
|
91
92
|
peerConnection,
|
|
92
93
|
timeline: { open: Date.now() },
|
|
93
94
|
remoteAddr: remoteAddress,
|
|
@@ -105,7 +106,7 @@ export class WebRTCTransport {
|
|
|
105
106
|
async _onProtocol({ connection, stream }) {
|
|
106
107
|
const signal = AbortSignal.timeout(this.init.inboundConnectionTimeout ?? INBOUND_CONNECTION_TIMEOUT);
|
|
107
108
|
const peerConnection = new RTCPeerConnection(this.init.rtcConfiguration);
|
|
108
|
-
const muxerFactory = new DataChannelMuxerFactory({
|
|
109
|
+
const muxerFactory = new DataChannelMuxerFactory(this.components, {
|
|
109
110
|
peerConnection,
|
|
110
111
|
dataChannelOptions: this.init.dataChannel
|
|
111
112
|
});
|
|
@@ -114,9 +115,10 @@ export class WebRTCTransport {
|
|
|
114
115
|
peerConnection,
|
|
115
116
|
connection,
|
|
116
117
|
stream,
|
|
117
|
-
signal
|
|
118
|
+
signal,
|
|
119
|
+
log: this.log
|
|
118
120
|
});
|
|
119
|
-
const webRTCConn = new WebRTCMultiaddrConnection({
|
|
121
|
+
const webRTCConn = new WebRTCMultiaddrConnection(this.components, {
|
|
120
122
|
peerConnection,
|
|
121
123
|
timeline: { open: (new Date()).getTime() },
|
|
122
124
|
remoteAddr: remoteAddress,
|
|
@@ -144,7 +146,7 @@ export class WebRTCTransport {
|
|
|
144
146
|
const shutDownListener = () => {
|
|
145
147
|
webRTCConn.close()
|
|
146
148
|
.catch(err => {
|
|
147
|
-
log.error('could not close WebRTCMultiaddrConnection', err);
|
|
149
|
+
this.log.error('could not close WebRTCMultiaddrConnection', err);
|
|
148
150
|
});
|
|
149
151
|
};
|
|
150
152
|
this.shutdownController.signal.addEventListener('abort', shutDownListener);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Message } from './pb/message.js';
|
|
2
|
-
import type { Stream } from '@libp2p/interface
|
|
2
|
+
import type { LoggerOptions, Stream } from '@libp2p/interface';
|
|
3
3
|
import type { AbortOptions, MessageStream } from 'it-protobuf-stream';
|
|
4
4
|
import type { DeferredPromise } from 'p-defer';
|
|
5
|
-
export interface ReadCandidatesOptions extends AbortOptions {
|
|
5
|
+
export interface ReadCandidatesOptions extends AbortOptions, LoggerOptions {
|
|
6
6
|
direction: string;
|
|
7
7
|
}
|
|
8
8
|
export declare const readCandidatesUntilConnected: (connectedPromise: DeferredPromise<void>, pc: RTCPeerConnection, stream: MessageStream<Message, Stream>, options: ReadCandidatesOptions) => Promise<void>;
|
|
@@ -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":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,MAAM,WAAW,qBAAsB,SAAQ,YAAY,EAAE,aAAa;IACxE,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,4BAA4B,qBAA4B,gBAAgB,IAAI,CAAC,MAAM,iBAAiB,UAAU,cAAc,OAAO,EAAE,MAAM,CAAC,WAAW,qBAAqB,KAAG,QAAQ,IAAI,CAgEvM,CAAA;AAED,wBAAgB,kBAAkB,CAAE,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAe/F"}
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
2
|
-
import {
|
|
3
|
-
import { abortableSource } from 'abortable-iterator';
|
|
1
|
+
import { CodeError } from '@libp2p/interface';
|
|
2
|
+
import { closeSource } from '@libp2p/utils/close-source';
|
|
4
3
|
import { anySignal } from 'any-signal';
|
|
5
|
-
import * as lp from 'it-length-prefixed';
|
|
6
|
-
import { AbortError, raceSignal } from 'race-signal';
|
|
7
4
|
import { isFirefox } from '../util.js';
|
|
8
5
|
import { RTCIceCandidate } from '../webrtc/index.js';
|
|
9
6
|
import { Message } from './pb/message.js';
|
|
10
|
-
const log = logger('libp2p:webrtc:peer:util');
|
|
11
7
|
export const readCandidatesUntilConnected = async (connectedPromise, pc, stream, options) => {
|
|
12
8
|
// if we connect, stop trying to read from the stream
|
|
13
9
|
const controller = new AbortController();
|
|
@@ -20,63 +16,52 @@ export const readCandidatesUntilConnected = async (connectedPromise, pc, stream,
|
|
|
20
16
|
controller.signal,
|
|
21
17
|
options.signal
|
|
22
18
|
]);
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
}
|
|
19
|
+
const abortListener = () => {
|
|
20
|
+
closeSource(stream.unwrap().unwrap().source, options.log);
|
|
21
|
+
};
|
|
22
|
+
signal.addEventListener('abort', abortListener);
|
|
26
23
|
try {
|
|
27
24
|
// read candidates until we are connected or we reach the end of the stream
|
|
28
|
-
|
|
29
|
-
const message =
|
|
25
|
+
while (true) {
|
|
26
|
+
const message = await Promise.race([
|
|
27
|
+
connectedPromise.promise,
|
|
28
|
+
stream.read()
|
|
29
|
+
]);
|
|
30
|
+
// stream ended or we became connected
|
|
31
|
+
if (message == null) {
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
30
34
|
if (message.type !== Message.Type.ICE_CANDIDATE) {
|
|
31
35
|
throw new CodeError('ICE candidate message expected', 'ERR_NOT_ICE_CANDIDATE');
|
|
32
36
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
candidateInit = {
|
|
37
|
-
candidate: '',
|
|
38
|
-
sdpMid: '0',
|
|
39
|
-
sdpMLineIndex: 0
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
if (candidateInit === null) {
|
|
43
|
-
log.trace('end-of-candidates received');
|
|
44
|
-
candidateInit = {
|
|
45
|
-
candidate: null,
|
|
46
|
-
sdpMid: '0',
|
|
47
|
-
sdpMLineIndex: 0
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
// a null candidate means end-of-candidates
|
|
37
|
+
const candidateInit = JSON.parse(message.data ?? 'null');
|
|
38
|
+
// an empty string means this generation of candidates is complete, a null
|
|
39
|
+
// candidate means candidate gathering has finished
|
|
51
40
|
// see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
|
|
41
|
+
if (candidateInit === '' || candidateInit === null) {
|
|
42
|
+
options.log.trace('end-of-candidates received');
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
52
45
|
const candidate = new RTCIceCandidate(candidateInit);
|
|
53
|
-
log.trace('%s received new ICE candidate', options.direction, candidate);
|
|
46
|
+
options.log.trace('%s received new ICE candidate', options.direction, candidate);
|
|
54
47
|
try {
|
|
55
48
|
await pc.addIceCandidate(candidate);
|
|
56
49
|
}
|
|
57
50
|
catch (err) {
|
|
58
|
-
log.error('%s bad candidate received', options.direction, err);
|
|
51
|
+
options.log.error('%s bad candidate received', options.direction, candidateInit, err);
|
|
59
52
|
}
|
|
60
53
|
}
|
|
61
54
|
}
|
|
62
55
|
catch (err) {
|
|
63
|
-
log.error('%s error parsing ICE candidate', options.direction, err);
|
|
56
|
+
options.log.error('%s error parsing ICE candidate', options.direction, err);
|
|
64
57
|
}
|
|
65
58
|
finally {
|
|
59
|
+
signal.removeEventListener('abort', abortListener);
|
|
66
60
|
signal.clear();
|
|
67
61
|
}
|
|
68
|
-
if (options.signal?.aborted === true) {
|
|
69
|
-
throw new AbortError('Aborted while reading ICE candidates', 'ERR_ICE_CANDIDATES_READ_ABORTED');
|
|
70
|
-
}
|
|
71
|
-
// read all available ICE candidates, wait for connection state change
|
|
72
|
-
await raceSignal(connectedPromise.promise, options.signal, {
|
|
73
|
-
errorMessage: 'Aborted before connected',
|
|
74
|
-
errorCode: 'ERR_ABORTED_BEFORE_CONNECTED'
|
|
75
|
-
});
|
|
76
62
|
};
|
|
77
63
|
export function resolveOnConnected(pc, promise) {
|
|
78
64
|
pc[isFirefox ? 'oniceconnectionstatechange' : 'onconnectionstatechange'] = (_) => {
|
|
79
|
-
log.trace('receiver peerConnectionState state change: %s', pc.connectionState);
|
|
80
65
|
switch (isFirefox ? pc.iceConnectionState : pc.connectionState) {
|
|
81
66
|
case 'connected':
|
|
82
67
|
promise.resolve();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CreateListenerOptions, DialOptions } from '@libp2p/interface
|
|
1
|
+
import type { CreateListenerOptions, DialOptions } from '@libp2p/interface';
|
|
2
2
|
export interface WebRTCListenerOptions extends CreateListenerOptions {
|
|
3
3
|
}
|
|
4
4
|
export interface WebRTCDialOptions extends DialOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE3E,MAAM,WAAW,qBAAsB,SAAQ,qBAAqB;CAAG;AACvE,MAAM,WAAW,iBAAkB,SAAQ,WAAW;CAAG"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as multihashes from 'multihashes';
|
|
2
|
+
import type { LoggerOptions } from '@libp2p/interface';
|
|
2
3
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
3
4
|
import type { HashCode, HashName } from 'multihashes';
|
|
4
5
|
/**
|
|
5
6
|
* Get base2 | identity decoders
|
|
6
7
|
*/
|
|
7
8
|
export declare const mbdecoder: any;
|
|
8
|
-
export declare function getLocalFingerprint(pc: RTCPeerConnection): string | undefined;
|
|
9
|
+
export declare function getLocalFingerprint(pc: RTCPeerConnection, options: LoggerOptions): string | undefined;
|
|
9
10
|
export declare function getFingerprintFromSdp(sdp: string): string | undefined;
|
|
10
11
|
export declare function certhash(ma: Multiaddr): string;
|
|
11
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdp.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/sdp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sdp.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/sdp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,WAAW,MAAM,aAAa,CAAA;AAG1C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAErD;;GAEG;AAEH,eAAO,MAAM,SAAS,EAAE,GAAwE,CAAA;AAEhG,wBAAgB,mBAAmB,CAAE,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAwBtG;AAGD,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGtE;AAeD,wBAAgB,QAAQ,CAAE,EAAE,EAAE,SAAS,GAAG,MAAM,CAS/C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,CAGxH;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAE,EAAE,EAAE,SAAS,GAAG,MAAM,EAAE,CAWvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAE,IAAI,EAAE,WAAW,CAAC,QAAQ,GAAG,MAAM,CAW3E;AA2BD;;GAEG;AACH,wBAAgB,aAAa,CAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAKtF;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAE,IAAI,EAAE,yBAAyB,EAAE,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAShG"}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
|
-
import { logger } from '@libp2p/logger';
|
|
2
1
|
import { bases } from 'multiformats/basics';
|
|
3
2
|
import * as multihashes from 'multihashes';
|
|
4
3
|
import { inappropriateMultiaddr, invalidArgument, invalidFingerprint, unsupportedHashAlgorithm } from '../error.js';
|
|
5
4
|
import { CERTHASH_CODE } from './transport.js';
|
|
6
|
-
const log = logger('libp2p:webrtc:sdp');
|
|
7
5
|
/**
|
|
8
6
|
* Get base2 | identity decoders
|
|
9
7
|
*/
|
|
10
8
|
// @ts-expect-error - Not easy to combine these types.
|
|
11
9
|
export const mbdecoder = Object.values(bases).map(b => b.decoder).reduce((d, b) => d.or(b));
|
|
12
|
-
export function getLocalFingerprint(pc) {
|
|
10
|
+
export function getLocalFingerprint(pc, options) {
|
|
13
11
|
// try to fetch fingerprint from local certificate
|
|
14
12
|
const localCert = pc.getConfiguration().certificates?.at(0);
|
|
15
13
|
if (localCert == null || localCert.getFingerprints == null) {
|
|
16
|
-
log.trace('fetching fingerprint from local SDP');
|
|
14
|
+
options.log.trace('fetching fingerprint from local SDP');
|
|
17
15
|
const localDescription = pc.localDescription;
|
|
18
16
|
if (localDescription == null) {
|
|
19
17
|
return undefined;
|
|
20
18
|
}
|
|
21
19
|
return getFingerprintFromSdp(localDescription.sdp);
|
|
22
20
|
}
|
|
23
|
-
log.trace('fetching fingerprint from local certificate');
|
|
21
|
+
options.log.trace('fetching fingerprint from local certificate');
|
|
24
22
|
if (localCert.getFingerprints().length === 0) {
|
|
25
23
|
return undefined;
|
|
26
24
|
}
|
|
@@ -44,7 +42,6 @@ function ipv(ma) {
|
|
|
44
42
|
return proto.toUpperCase();
|
|
45
43
|
}
|
|
46
44
|
}
|
|
47
|
-
log('Warning: multiaddr does not appear to contain IP4 or IP6, defaulting to IP6', ma);
|
|
48
45
|
return 'IP6';
|
|
49
46
|
}
|
|
50
47
|
// Extract the certhash from a multiaddr
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdp.js","sourceRoot":"","sources":["../../../src/private-to-public/sdp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"sdp.js","sourceRoot":"","sources":["../../../src/private-to-public/sdp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import { type CreateListenerOptions,
|
|
1
|
+
import { type CreateListenerOptions, transportSymbol, type Transport, type Listener, type ComponentLogger, type Connection, type CounterGroup, type Metrics, type PeerId } from '@libp2p/interface';
|
|
2
2
|
import type { WebRTCDialOptions } from './options.js';
|
|
3
3
|
import type { DataChannelOptions } from '../index.js';
|
|
4
|
-
import type { Connection } from '@libp2p/interface/connection';
|
|
5
|
-
import type { CounterGroup, Metrics } from '@libp2p/interface/metrics';
|
|
6
|
-
import type { PeerId } from '@libp2p/interface/peer-id';
|
|
7
4
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
8
5
|
/**
|
|
9
6
|
* Created by converting the hexadecimal protocol code to an integer.
|
|
@@ -23,6 +20,7 @@ export declare const CERTHASH_CODE: number;
|
|
|
23
20
|
export interface WebRTCDirectTransportComponents {
|
|
24
21
|
peerId: PeerId;
|
|
25
22
|
metrics?: Metrics;
|
|
23
|
+
logger: ComponentLogger;
|
|
26
24
|
}
|
|
27
25
|
export interface WebRTCMetrics {
|
|
28
26
|
dialerEvents: CounterGroup;
|
|
@@ -31,6 +29,7 @@ export interface WebRTCTransportDirectInit {
|
|
|
31
29
|
dataChannel?: DataChannelOptions;
|
|
32
30
|
}
|
|
33
31
|
export declare class WebRTCDirectTransport implements Transport {
|
|
32
|
+
private readonly log;
|
|
34
33
|
private readonly metrics?;
|
|
35
34
|
private readonly components;
|
|
36
35
|
private readonly init;
|
|
@@ -54,7 +53,7 @@ export declare class WebRTCDirectTransport implements Transport {
|
|
|
54
53
|
/**
|
|
55
54
|
* Symbol.for('@libp2p/transport')
|
|
56
55
|
*/
|
|
57
|
-
readonly [
|
|
56
|
+
readonly [transportSymbol] = true;
|
|
58
57
|
/**
|
|
59
58
|
* Connect to a peer using a multiaddr
|
|
60
59
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/transport.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAe,KAAK,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAehN,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAOxD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,MAAwC,CAAA;AAElE;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,MAAmC,CAAA;AAE/D;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,YAAY,CAAA;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,WAAW,CAAC,EAAE,kBAAkB,CAAA;CACjC;AAED,qBAAa,qBAAsB,YAAW,SAAS;IACrD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiC;IAC5D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;gBACnC,UAAU,EAAE,+BAA+B,EAAE,IAAI,GAAE,yBAA8B;IAc9F;;OAEG;IACG,IAAI,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAM3E;;OAEG;IACH,cAAc,CAAE,OAAO,EAAE,qBAAqB,GAAG,QAAQ;IAIzD;;OAEG;IACH,MAAM,CAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAI7C;;OAEG;IACH,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,2BAA0B;IAEvD;;OAEG;IACH,QAAQ,CAAC,CAAC,eAAe,CAAC,QAAO;IAEjC;;OAEG;IACG,QAAQ,CAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC;IAsJ/E;;;OAGG;IACH,OAAO,CAAC,qBAAqB;CAoB9B"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { noise
|
|
2
|
-
import {
|
|
3
|
-
import { logger } from '@libp2p/logger';
|
|
1
|
+
import { noise } from '@chainsafe/libp2p-noise';
|
|
2
|
+
import { transportSymbol } from '@libp2p/interface';
|
|
4
3
|
import * as p from '@libp2p/peer-id';
|
|
5
4
|
import { protocols } from '@multiformats/multiaddr';
|
|
6
5
|
import { WebRTCDirect } from '@multiformats/multiaddr-matcher';
|
|
@@ -15,7 +14,6 @@ import { isFirefox } from '../util.js';
|
|
|
15
14
|
import { RTCPeerConnection } from '../webrtc/index.js';
|
|
16
15
|
import * as sdp from './sdp.js';
|
|
17
16
|
import { genUfrag } from './util.js';
|
|
18
|
-
const log = logger('libp2p:webrtc:transport');
|
|
19
17
|
/**
|
|
20
18
|
* The time to wait, in milliseconds, for the data channel handshake to complete
|
|
21
19
|
*/
|
|
@@ -33,10 +31,12 @@ export const WEBRTC_CODE = protocols('webrtc-direct').code;
|
|
|
33
31
|
*/
|
|
34
32
|
export const CERTHASH_CODE = protocols('certhash').code;
|
|
35
33
|
export class WebRTCDirectTransport {
|
|
34
|
+
log;
|
|
36
35
|
metrics;
|
|
37
36
|
components;
|
|
38
37
|
init;
|
|
39
38
|
constructor(components, init = {}) {
|
|
39
|
+
this.log = components.logger.forComponent('libp2p:webrtc-direct');
|
|
40
40
|
this.components = components;
|
|
41
41
|
this.init = init;
|
|
42
42
|
if (components.metrics != null) {
|
|
@@ -53,7 +53,7 @@ export class WebRTCDirectTransport {
|
|
|
53
53
|
*/
|
|
54
54
|
async dial(ma, options) {
|
|
55
55
|
const rawConn = await this._connect(ma, options);
|
|
56
|
-
log('dialing address: %a', ma);
|
|
56
|
+
this.log('dialing address: %a', ma);
|
|
57
57
|
return rawConn;
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
@@ -75,7 +75,7 @@ export class WebRTCDirectTransport {
|
|
|
75
75
|
/**
|
|
76
76
|
* Symbol.for('@libp2p/transport')
|
|
77
77
|
*/
|
|
78
|
-
[
|
|
78
|
+
[transportSymbol] = true;
|
|
79
79
|
/**
|
|
80
80
|
* Connect to a peer using a multiaddr
|
|
81
81
|
*/
|
|
@@ -106,7 +106,7 @@ export class WebRTCDirectTransport {
|
|
|
106
106
|
const handshakeDataChannel = peerConnection.createDataChannel('', { negotiated: true, id: 0 });
|
|
107
107
|
const handshakeTimeout = setTimeout(() => {
|
|
108
108
|
const error = `Data channel was never opened: state: ${handshakeDataChannel.readyState}`;
|
|
109
|
-
log.error(error);
|
|
109
|
+
this.log.error(error);
|
|
110
110
|
this.metrics?.dialerEvents.increment({ open_error: true });
|
|
111
111
|
reject(dataChannelError('data', error));
|
|
112
112
|
}, HANDSHAKE_TIMEOUT_MS);
|
|
@@ -119,7 +119,7 @@ export class WebRTCDirectTransport {
|
|
|
119
119
|
clearTimeout(handshakeTimeout);
|
|
120
120
|
const errorTarget = event.target?.toString() ?? 'not specified';
|
|
121
121
|
const error = `Error opening a data channel for handshaking: ${errorTarget}`;
|
|
122
|
-
log.error(error);
|
|
122
|
+
this.log.error(error);
|
|
123
123
|
// NOTE: We use unknown error here but this could potentially be considered a reset by some standards.
|
|
124
124
|
this.metrics?.dialerEvents.increment({ unknown_error: true });
|
|
125
125
|
reject(dataChannelError('data', error));
|
|
@@ -145,8 +145,13 @@ export class WebRTCDirectTransport {
|
|
|
145
145
|
const fingerprintsPrologue = this.generateNoisePrologue(peerConnection, remoteCerthash.code, ma);
|
|
146
146
|
// Since we use the default crypto interface and do not use a static key or early data,
|
|
147
147
|
// we pass in undefined for these parameters.
|
|
148
|
-
const
|
|
149
|
-
const wrappedChannel = createStream({
|
|
148
|
+
const connectionEncrypter = noise({ prologueBytes: fingerprintsPrologue })(this.components);
|
|
149
|
+
const wrappedChannel = createStream({
|
|
150
|
+
channel: handshakeDataChannel,
|
|
151
|
+
direction: 'inbound',
|
|
152
|
+
logger: this.components.logger,
|
|
153
|
+
...(this.init.dataChannel ?? {})
|
|
154
|
+
});
|
|
150
155
|
const wrappedDuplex = {
|
|
151
156
|
...wrappedChannel,
|
|
152
157
|
sink: wrappedChannel.sink.bind(wrappedChannel),
|
|
@@ -160,7 +165,7 @@ export class WebRTCDirectTransport {
|
|
|
160
165
|
};
|
|
161
166
|
// Creating the connection before completion of the noise
|
|
162
167
|
// handshake ensures that the stream opening callback is set up
|
|
163
|
-
const maConn = new WebRTCMultiaddrConnection({
|
|
168
|
+
const maConn = new WebRTCMultiaddrConnection(this.components, {
|
|
164
169
|
peerConnection,
|
|
165
170
|
remoteAddr: ma,
|
|
166
171
|
timeline: {
|
|
@@ -175,7 +180,7 @@ export class WebRTCDirectTransport {
|
|
|
175
180
|
case 'disconnected':
|
|
176
181
|
case 'closed':
|
|
177
182
|
maConn.close().catch((err) => {
|
|
178
|
-
log.error('error closing connection', err);
|
|
183
|
+
this.log.error('error closing connection', err);
|
|
179
184
|
}).finally(() => {
|
|
180
185
|
// Remove the event listener once the connection is closed
|
|
181
186
|
controller.abort();
|
|
@@ -187,10 +192,14 @@ export class WebRTCDirectTransport {
|
|
|
187
192
|
}, { signal });
|
|
188
193
|
// Track opened peer connection
|
|
189
194
|
this.metrics?.dialerEvents.increment({ peer_connection: true });
|
|
190
|
-
const muxerFactory = new DataChannelMuxerFactory(
|
|
195
|
+
const muxerFactory = new DataChannelMuxerFactory(this.components, {
|
|
196
|
+
peerConnection,
|
|
197
|
+
metrics: this.metrics?.dialerEvents,
|
|
198
|
+
dataChannelOptions: this.init.dataChannel
|
|
199
|
+
});
|
|
191
200
|
// For outbound connections, the remote is expected to start the noise handshake.
|
|
192
201
|
// Therefore, we need to secure an inbound noise connection from the remote.
|
|
193
|
-
await
|
|
202
|
+
await connectionEncrypter.secureInbound(myPeerId, wrappedDuplex, theirPeerId);
|
|
194
203
|
return await options.upgrader.upgradeOutbound(maConn, { skipProtection: true, skipEncryption: true, muxerFactory });
|
|
195
204
|
}
|
|
196
205
|
catch (err) {
|
|
@@ -206,7 +215,9 @@ export class WebRTCDirectTransport {
|
|
|
206
215
|
if (pc.getConfiguration().certificates?.length === 0) {
|
|
207
216
|
throw invalidArgument('no local certificate');
|
|
208
217
|
}
|
|
209
|
-
const localFingerprint = sdp.getLocalFingerprint(pc
|
|
218
|
+
const localFingerprint = sdp.getLocalFingerprint(pc, {
|
|
219
|
+
log: this.log
|
|
220
|
+
});
|
|
210
221
|
if (localFingerprint == null) {
|
|
211
222
|
throw invalidArgument('no local fingerprint found');
|
|
212
223
|
}
|