@libp2p/webrtc 4.0.34 → 4.1.0-3b9cbf7d8
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.min.js +10 -10
- package/dist/src/private-to-private/initiate-connection.d.ts +9 -4
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
- package/dist/src/private-to-private/initiate-connection.js +17 -6
- package/dist/src/private-to-private/initiate-connection.js.map +1 -1
- package/dist/src/private-to-private/transport.d.ts +6 -3
- package/dist/src/private-to-private/transport.d.ts.map +1 -1
- package/dist/src/private-to-private/transport.js +24 -18
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js +4 -2
- package/dist/src/private-to-private/util.js.map +1 -1
- package/dist/src/private-to-public/transport.d.ts +6 -9
- package/dist/src/private-to-public/transport.d.ts.map +1 -1
- package/dist/src/private-to-public/transport.js +10 -10
- package/dist/src/private-to-public/transport.js.map +1 -1
- package/package.json +13 -12
- package/src/private-to-private/initiate-connection.ts +22 -8
- package/src/private-to-private/transport.ts +31 -23
- package/src/private-to-private/util.ts +5 -2
- package/src/private-to-public/transport.ts +15 -12
- package/dist/typedoc-urls.json +0 -8
@@ -1,4 +1,4 @@
|
|
1
|
-
import { CodeError, setMaxListeners } from '@libp2p/interface'
|
1
|
+
import { CodeError, serviceCapabilities, serviceDependencies, setMaxListeners } from '@libp2p/interface'
|
2
2
|
import { type CreateListenerOptions, type DialOptions, transportSymbol, type Transport, type Listener, type Upgrader, type ComponentLogger, type Logger, type Connection, type PeerId, type CounterGroup, type Metrics, type Startable } from '@libp2p/interface'
|
3
3
|
import { peerIdFromString } from '@libp2p/peer-id'
|
4
4
|
import { multiaddr, type Multiaddr } from '@multiformats/multiaddr'
|
@@ -19,7 +19,7 @@ export const SIGNALING_PROTO_ID = '/webrtc-signaling/0.0.1'
|
|
19
19
|
const INBOUND_CONNECTION_TIMEOUT = 30 * 1000
|
20
20
|
|
21
21
|
export interface WebRTCTransportInit {
|
22
|
-
rtcConfiguration?: RTCConfiguration
|
22
|
+
rtcConfiguration?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>)
|
23
23
|
dataChannel?: DataChannelOptions
|
24
24
|
|
25
25
|
/**
|
@@ -72,6 +72,19 @@ export class WebRTCTransport implements Transport, Startable {
|
|
72
72
|
}
|
73
73
|
}
|
74
74
|
|
75
|
+
readonly [transportSymbol] = true
|
76
|
+
|
77
|
+
readonly [Symbol.toStringTag] = '@libp2p/webrtc'
|
78
|
+
|
79
|
+
readonly [serviceCapabilities]: string[] = [
|
80
|
+
'@libp2p/transport'
|
81
|
+
]
|
82
|
+
|
83
|
+
readonly [serviceDependencies]: string[] = [
|
84
|
+
'@libp2p/identify',
|
85
|
+
'@libp2p/circuit-relay-v2-transport'
|
86
|
+
]
|
87
|
+
|
75
88
|
isStarted (): boolean {
|
76
89
|
return this._started
|
77
90
|
}
|
@@ -96,10 +109,6 @@ export class WebRTCTransport implements Transport, Startable {
|
|
96
109
|
})
|
97
110
|
}
|
98
111
|
|
99
|
-
readonly [Symbol.toStringTag] = '@libp2p/webrtc'
|
100
|
-
|
101
|
-
readonly [transportSymbol] = true
|
102
|
-
|
103
112
|
/**
|
104
113
|
* Filter check for all Multiaddrs that this transport can listen on
|
105
114
|
*/
|
@@ -124,20 +133,16 @@ export class WebRTCTransport implements Transport, Startable {
|
|
124
133
|
async dial (ma: Multiaddr, options: DialOptions): Promise<Connection> {
|
125
134
|
this.log.trace('dialing address: %a', ma)
|
126
135
|
|
127
|
-
const peerConnection =
|
128
|
-
|
129
|
-
|
130
|
-
dataChannelOptions: this.init.dataChannel
|
131
|
-
})
|
132
|
-
|
133
|
-
const { remoteAddress } = await initiateConnection({
|
134
|
-
peerConnection,
|
136
|
+
const { remoteAddress, peerConnection, muxerFactory } = await initiateConnection({
|
137
|
+
rtcConfiguration: typeof this.init.rtcConfiguration === 'function' ? await this.init.rtcConfiguration() : this.init.rtcConfiguration,
|
138
|
+
dataChannel: this.init.dataChannel,
|
135
139
|
multiaddr: ma,
|
136
140
|
dataChannelOptions: this.init.dataChannel,
|
137
141
|
signal: options.signal,
|
138
142
|
connectionManager: this.components.connectionManager,
|
139
143
|
transportManager: this.components.transportManager,
|
140
|
-
log: this.log
|
144
|
+
log: this.log,
|
145
|
+
logger: this.components.logger
|
141
146
|
})
|
142
147
|
|
143
148
|
const webRTCConn = new WebRTCMultiaddrConnection(this.components, {
|
@@ -161,7 +166,7 @@ export class WebRTCTransport implements Transport, Startable {
|
|
161
166
|
|
162
167
|
async _onProtocol ({ connection, stream }: IncomingStreamData): Promise<void> {
|
163
168
|
const signal = AbortSignal.timeout(this.init.inboundConnectionTimeout ?? INBOUND_CONNECTION_TIMEOUT)
|
164
|
-
const peerConnection = new RTCPeerConnection(this.init.rtcConfiguration)
|
169
|
+
const peerConnection = new RTCPeerConnection(typeof this.init.rtcConfiguration === 'function' ? await this.init.rtcConfiguration() : this.init.rtcConfiguration)
|
165
170
|
const muxerFactory = new DataChannelMuxerFactory(this.components, {
|
166
171
|
peerConnection,
|
167
172
|
dataChannelOptions: this.init.dataChannel
|
@@ -176,6 +181,11 @@ export class WebRTCTransport implements Transport, Startable {
|
|
176
181
|
log: this.log
|
177
182
|
})
|
178
183
|
|
184
|
+
// close the stream if SDP messages have been exchanged successfully
|
185
|
+
await stream.close({
|
186
|
+
signal
|
187
|
+
})
|
188
|
+
|
179
189
|
const webRTCConn = new WebRTCMultiaddrConnection(this.components, {
|
180
190
|
peerConnection,
|
181
191
|
timeline: { open: (new Date()).getTime() },
|
@@ -183,20 +193,18 @@ export class WebRTCTransport implements Transport, Startable {
|
|
183
193
|
metrics: this.metrics?.listenerEvents
|
184
194
|
})
|
185
195
|
|
186
|
-
// close the connection on shut down
|
187
|
-
this._closeOnShutdown(peerConnection, webRTCConn)
|
188
|
-
|
189
196
|
await this.components.upgrader.upgradeInbound(webRTCConn, {
|
190
197
|
skipEncryption: true,
|
191
198
|
skipProtection: true,
|
192
199
|
muxerFactory
|
193
200
|
})
|
194
201
|
|
195
|
-
// close the
|
196
|
-
|
197
|
-
signal
|
198
|
-
})
|
202
|
+
// close the connection on shut down
|
203
|
+
this._closeOnShutdown(peerConnection, webRTCConn)
|
199
204
|
} catch (err: any) {
|
205
|
+
this.log.error('incoming signalling error', err)
|
206
|
+
|
207
|
+
peerConnection.close()
|
200
208
|
stream.abort(err)
|
201
209
|
throw err
|
202
210
|
}
|
@@ -23,11 +23,14 @@ export const readCandidatesUntilConnected = async (pc: RTCPeerConnection, stream
|
|
23
23
|
connectedPromise.promise,
|
24
24
|
stream.read({
|
25
25
|
signal: options.signal
|
26
|
-
})
|
26
|
+
}).catch(() => {})
|
27
27
|
])
|
28
28
|
|
29
29
|
// stream ended or we became connected
|
30
30
|
if (message == null) {
|
31
|
+
// throw if we timed out
|
32
|
+
options.signal?.throwIfAborted()
|
33
|
+
|
31
34
|
break
|
32
35
|
}
|
33
36
|
|
@@ -48,7 +51,7 @@ export const readCandidatesUntilConnected = async (pc: RTCPeerConnection, stream
|
|
48
51
|
|
49
52
|
const candidate = new RTCIceCandidate(candidateInit)
|
50
53
|
|
51
|
-
options.log.trace('%s received new ICE candidate', options.direction,
|
54
|
+
options.log.trace('%s received new ICE candidate %o', options.direction, candidateInit)
|
52
55
|
|
53
56
|
try {
|
54
57
|
await pc.addIceCandidate(candidate)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { noise } from '@chainsafe/libp2p-noise'
|
2
|
-
import {
|
2
|
+
import { transportSymbol, serviceCapabilities } from '@libp2p/interface'
|
3
3
|
import * as p from '@libp2p/peer-id'
|
4
4
|
import { protocols } from '@multiformats/multiaddr'
|
5
5
|
import { WebRTCDirect } from '@multiformats/multiaddr-matcher'
|
@@ -16,6 +16,7 @@ import * as sdp from './sdp.js'
|
|
16
16
|
import { genUfrag } from './util.js'
|
17
17
|
import type { WebRTCDialOptions } from './options.js'
|
18
18
|
import type { DataChannelOptions } from '../index.js'
|
19
|
+
import type { CreateListenerOptions, Transport, Listener, ComponentLogger, Logger, Connection, CounterGroup, Metrics, PeerId } from '@libp2p/interface'
|
19
20
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
20
21
|
|
21
22
|
/**
|
@@ -51,6 +52,7 @@ export interface WebRTCMetrics {
|
|
51
52
|
}
|
52
53
|
|
53
54
|
export interface WebRTCTransportDirectInit {
|
55
|
+
rtcConfiguration?: RTCConfiguration | (() => RTCConfiguration | Promise<RTCConfiguration>)
|
54
56
|
dataChannel?: DataChannelOptions
|
55
57
|
}
|
56
58
|
|
@@ -73,6 +75,14 @@ export class WebRTCDirectTransport implements Transport {
|
|
73
75
|
}
|
74
76
|
}
|
75
77
|
|
78
|
+
readonly [transportSymbol] = true
|
79
|
+
|
80
|
+
readonly [Symbol.toStringTag] = '@libp2p/webrtc-direct'
|
81
|
+
|
82
|
+
readonly [serviceCapabilities]: string[] = [
|
83
|
+
'@libp2p/transport'
|
84
|
+
]
|
85
|
+
|
76
86
|
/**
|
77
87
|
* Dial a given multiaddr
|
78
88
|
*/
|
@@ -103,16 +113,6 @@ export class WebRTCDirectTransport implements Transport {
|
|
103
113
|
return this.listenFilter(multiaddrs)
|
104
114
|
}
|
105
115
|
|
106
|
-
/**
|
107
|
-
* Implement toString() for WebRTCTransport
|
108
|
-
*/
|
109
|
-
readonly [Symbol.toStringTag] = '@libp2p/webrtc-direct'
|
110
|
-
|
111
|
-
/**
|
112
|
-
* Symbol.for('@libp2p/transport')
|
113
|
-
*/
|
114
|
-
readonly [transportSymbol] = true
|
115
|
-
|
116
116
|
/**
|
117
117
|
* Connect to a peer using a multiaddr
|
118
118
|
*/
|
@@ -138,7 +138,10 @@ export class WebRTCDirectTransport implements Transport {
|
|
138
138
|
hash: sdp.toSupportedHashFunction(remoteCerthash.name)
|
139
139
|
} as any)
|
140
140
|
|
141
|
-
const peerConnection = new RTCPeerConnection({
|
141
|
+
const peerConnection = new RTCPeerConnection({
|
142
|
+
...(typeof this.init.rtcConfiguration === 'function' ? await this.init.rtcConfiguration() : this.init.rtcConfiguration ?? {}),
|
143
|
+
certificates: [certificate]
|
144
|
+
})
|
142
145
|
|
143
146
|
try {
|
144
147
|
// create data channel for running the noise handshake. Once the data channel is opened,
|
package/dist/typedoc-urls.json
DELETED
@@ -1,8 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"DataChannelOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_webrtc.DataChannelOptions.html",
|
3
|
-
".:DataChannelOptions": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_webrtc.DataChannelOptions.html",
|
4
|
-
"webRTC": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTC.html",
|
5
|
-
".:webRTC": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTC.html",
|
6
|
-
"webRTCDirect": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTCDirect.html",
|
7
|
-
".:webRTCDirect": "https://libp2p.github.io/js-libp2p/functions/_libp2p_webrtc.webRTCDirect.html"
|
8
|
-
}
|