@libp2p/webrtc 4.0.8 → 4.0.9
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 +12 -12
- package/dist/src/private-to-private/initiate-connection.d.ts.map +1 -1
- package/dist/src/private-to-private/initiate-connection.js +8 -15
- package/dist/src/private-to-private/initiate-connection.js.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.d.ts.map +1 -1
- package/dist/src/private-to-private/signaling-stream-handler.js +16 -32
- 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 +2 -1
- package/dist/src/private-to-private/transport.js.map +1 -1
- package/dist/src/private-to-private/util.d.ts +1 -3
- package/dist/src/private-to-private/util.d.ts.map +1 -1
- package/dist/src/private-to-private/util.js +16 -25
- package/dist/src/private-to-private/util.js.map +1 -1
- package/package.json +6 -7
- package/src/private-to-private/initiate-connection.ts +8 -17
- package/src/private-to-private/signaling-stream-handler.ts +19 -43
- package/src/private-to-private/transport.ts +2 -1
- package/src/private-to-private/util.ts +19 -28
|
@@ -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":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAElF,OAAO,EAAiC,KAAK,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAE3F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,KAAK,EAAE,aAAa,EAAc,MAAM,mBAAmB,CAAA;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AACzG,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAExD,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,gBAAgB,CAAC,EAAE,gBAAgB,CAAA;IACnC,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAChD,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,cAAc,EAAE,iBAAiB,CAAA;IACjC,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;CACjC;AAED,wBAAsB,kBAAkB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,GAAG,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAA;CAAE,CAAC,CAmJ7L"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface';
|
|
2
2
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
3
3
|
import { pbStream } from 'it-protobuf-stream';
|
|
4
|
-
import pDefer, {} from 'p-defer';
|
|
5
4
|
import { RTCSessionDescription } from '../webrtc/index.js';
|
|
6
5
|
import { Message } from './pb/message.js';
|
|
7
6
|
import { SIGNALING_PROTO_ID, splitAddr } from './transport.js';
|
|
8
|
-
import { readCandidatesUntilConnected
|
|
7
|
+
import { readCandidatesUntilConnected } from './util.js';
|
|
9
8
|
export async function initiateConnection({ peerConnection, signal, metrics, multiaddr: ma, connectionManager, transportManager, log }) {
|
|
10
9
|
const { baseAddr } = splitAddr(ma);
|
|
11
10
|
metrics?.dialerEvents.increment({ open: true });
|
|
@@ -37,14 +36,7 @@ export async function initiateConnection({ peerConnection, signal, metrics, mult
|
|
|
37
36
|
runOnTransientConnection: true
|
|
38
37
|
});
|
|
39
38
|
const messageStream = pbStream(stream).pb(Message);
|
|
40
|
-
const connectedPromise = pDefer();
|
|
41
|
-
const sdpAbortedListener = () => {
|
|
42
|
-
connectedPromise.reject(new CodeError('SDP handshake aborted', 'ERR_SDP_HANDSHAKE_ABORTED'));
|
|
43
|
-
};
|
|
44
39
|
try {
|
|
45
|
-
resolveOnConnected(peerConnection, connectedPromise);
|
|
46
|
-
// reject the connectedPromise if the signal aborts
|
|
47
|
-
signal?.addEventListener('abort', sdpAbortedListener);
|
|
48
40
|
// we create the channel so that the RTCPeerConnection has a component for
|
|
49
41
|
// which to collect candidates. The label is not relevant to connection
|
|
50
42
|
// initiation but can be useful for debugging
|
|
@@ -68,10 +60,13 @@ export async function initiateConnection({ peerConnection, signal, metrics, mult
|
|
|
68
60
|
});
|
|
69
61
|
};
|
|
70
62
|
peerConnection.onicecandidateerror = (event) => {
|
|
71
|
-
log('initiator ICE candidate error', event);
|
|
63
|
+
log.error('initiator ICE candidate error', event);
|
|
72
64
|
};
|
|
73
65
|
// create an offer
|
|
74
|
-
const offerSdp = await peerConnection.createOffer()
|
|
66
|
+
const offerSdp = await peerConnection.createOffer().catch(err => {
|
|
67
|
+
log.error('could not execute createOffer', err);
|
|
68
|
+
throw new CodeError('Failed to set createOffer', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
69
|
+
});
|
|
75
70
|
log.trace('initiator send SDP offer %s', offerSdp.sdp);
|
|
76
71
|
// write the offer to the stream
|
|
77
72
|
await messageStream.write({ type: Message.Type.SDP_OFFER, data: offerSdp.sdp }, {
|
|
@@ -87,7 +82,7 @@ export async function initiateConnection({ peerConnection, signal, metrics, mult
|
|
|
87
82
|
signal
|
|
88
83
|
});
|
|
89
84
|
if (answerMessage.type !== Message.Type.SDP_ANSWER) {
|
|
90
|
-
throw new CodeError('
|
|
85
|
+
throw new CodeError('Remote should send an SDP answer', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
91
86
|
}
|
|
92
87
|
log.trace('initiator receive SDP answer %s', answerMessage.data);
|
|
93
88
|
const answerSdp = new RTCSessionDescription({ type: 'answer', sdp: answerMessage.data });
|
|
@@ -96,7 +91,7 @@ export async function initiateConnection({ peerConnection, signal, metrics, mult
|
|
|
96
91
|
throw new CodeError('Failed to set remoteDescription', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
97
92
|
});
|
|
98
93
|
log.trace('initiator read candidates until connected');
|
|
99
|
-
await readCandidatesUntilConnected(
|
|
94
|
+
await readCandidatesUntilConnected(peerConnection, messageStream, {
|
|
100
95
|
direction: 'initiator',
|
|
101
96
|
signal,
|
|
102
97
|
log
|
|
@@ -118,8 +113,6 @@ export async function initiateConnection({ peerConnection, signal, metrics, mult
|
|
|
118
113
|
throw err;
|
|
119
114
|
}
|
|
120
115
|
finally {
|
|
121
|
-
// remove event listeners
|
|
122
|
-
signal?.removeEventListener('abort', sdpAbortedListener);
|
|
123
116
|
peerConnection.onicecandidate = null;
|
|
124
117
|
peerConnection.onicecandidateerror = null;
|
|
125
118
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initiate-connection.js","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"initiate-connection.js","sourceRoot":"","sources":["../../../src/private-to-private/initiate-connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signaling-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"signaling-stream-handler.d.ts","sourceRoot":"","sources":["../../../src/private-to-private/signaling-stream-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnE,OAAO,EAAE,KAAK,iBAAiB,EAAyB,MAAM,oBAAoB,CAAA;AAGlF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAEpE,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,cAAc,EAAE,iBAAiB,CAAA;IACjC,MAAM,EAAE,WAAW,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,wBAAsB,oBAAoB,CAAE,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,EAAE,kBAAkB,GAAG,OAAO,CAAC;IAAE,aAAa,EAAE,SAAS,CAAA;CAAE,CAAC,CA0F1J"}
|
|
@@ -1,40 +1,31 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface';
|
|
2
2
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
3
3
|
import { pbStream } from 'it-protobuf-stream';
|
|
4
|
-
import pDefer, {} from 'p-defer';
|
|
5
4
|
import { RTCSessionDescription } from '../webrtc/index.js';
|
|
6
5
|
import { Message } from './pb/message.js';
|
|
7
|
-
import { readCandidatesUntilConnected
|
|
6
|
+
import { readCandidatesUntilConnected } from './util.js';
|
|
8
7
|
export async function handleIncomingStream({ peerConnection, stream, signal, connection, log }) {
|
|
9
8
|
log.trace('new inbound signaling stream');
|
|
10
9
|
const messageStream = pbStream(stream).pb(Message);
|
|
11
10
|
try {
|
|
12
|
-
const connectedPromise = pDefer();
|
|
13
|
-
const answerSentPromise = pDefer();
|
|
14
|
-
signal.onabort = () => {
|
|
15
|
-
connectedPromise.reject(new CodeError('Timed out while trying to connect', 'ERR_TIMEOUT'));
|
|
16
|
-
};
|
|
17
11
|
// candidate callbacks
|
|
18
12
|
peerConnection.onicecandidate = ({ candidate }) => {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
log.error('cannot set candidate since sending answer failed', err);
|
|
34
|
-
connectedPromise.reject(err);
|
|
13
|
+
// a null candidate means end-of-candidates, an empty string candidate
|
|
14
|
+
// means end-of-candidates for this generation, otherwise this should
|
|
15
|
+
// be a valid candidate object
|
|
16
|
+
// see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
|
|
17
|
+
const data = JSON.stringify(candidate?.toJSON() ?? null);
|
|
18
|
+
log.trace('recipient sending ICE candidate %s', data);
|
|
19
|
+
messageStream.write({
|
|
20
|
+
type: Message.Type.ICE_CANDIDATE,
|
|
21
|
+
data
|
|
22
|
+
}, {
|
|
23
|
+
signal
|
|
24
|
+
})
|
|
25
|
+
.catch(err => {
|
|
26
|
+
log.error('error sending ICE candidate', err);
|
|
35
27
|
});
|
|
36
28
|
};
|
|
37
|
-
resolveOnConnected(peerConnection, connectedPromise);
|
|
38
29
|
// read an SDP offer
|
|
39
30
|
const pbOffer = await messageStream.read({
|
|
40
31
|
signal
|
|
@@ -54,7 +45,6 @@ export async function handleIncomingStream({ peerConnection, stream, signal, con
|
|
|
54
45
|
// create and write an SDP answer
|
|
55
46
|
const answer = await peerConnection.createAnswer().catch(err => {
|
|
56
47
|
log.error('could not execute createAnswer', err);
|
|
57
|
-
answerSentPromise.reject(err);
|
|
58
48
|
throw new CodeError('Failed to create answer', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
59
49
|
});
|
|
60
50
|
log.trace('recipient send SDP answer %s', answer.sdp);
|
|
@@ -64,21 +54,15 @@ export async function handleIncomingStream({ peerConnection, stream, signal, con
|
|
|
64
54
|
});
|
|
65
55
|
await peerConnection.setLocalDescription(answer).catch(err => {
|
|
66
56
|
log.error('could not execute setLocalDescription', err);
|
|
67
|
-
answerSentPromise.reject(err);
|
|
68
57
|
throw new CodeError('Failed to set localDescription', 'ERR_SDP_HANDSHAKE_FAILED');
|
|
69
58
|
});
|
|
70
|
-
answerSentPromise.resolve();
|
|
71
59
|
log.trace('recipient read candidates until connected');
|
|
72
60
|
// wait until candidates are connected
|
|
73
|
-
await readCandidatesUntilConnected(
|
|
61
|
+
await readCandidatesUntilConnected(peerConnection, messageStream, {
|
|
74
62
|
direction: 'recipient',
|
|
75
63
|
signal,
|
|
76
64
|
log
|
|
77
65
|
});
|
|
78
|
-
log.trace('recipient connected, closing signaling stream');
|
|
79
|
-
await messageStream.unwrap().unwrap().close({
|
|
80
|
-
signal
|
|
81
|
-
});
|
|
82
66
|
}
|
|
83
67
|
catch (err) {
|
|
84
68
|
if (peerConnection.connectionState !== 'connected') {
|
|
@@ -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,mBAAmB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAkB,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,
|
|
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 +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,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;
|
|
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;IAoBjD,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,4 +1,4 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface';
|
|
1
|
+
import { CodeError, setMaxListeners } from '@libp2p/interface';
|
|
2
2
|
import { transportSymbol } from '@libp2p/interface';
|
|
3
3
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
4
4
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
@@ -26,6 +26,7 @@ export class WebRTCTransport {
|
|
|
26
26
|
this.init = init;
|
|
27
27
|
this.log = components.logger.forComponent('libp2p:webrtc');
|
|
28
28
|
this.shutdownController = new AbortController();
|
|
29
|
+
setMaxListeners(Infinity, this.shutdownController.signal);
|
|
29
30
|
if (components.metrics != null) {
|
|
30
31
|
this.metrics = {
|
|
31
32
|
dialerEvents: components.metrics.registerCounterGroup('libp2p_webrtc_dialer_events_total', {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/private-to-private/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,EAAgD,eAAe,EAAkK,MAAM,mBAAmB,CAAA;AACjQ,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAkB,MAAM,yBAAyB,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,iCAAiC,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAA;AAIpE,MAAM,gBAAgB,GAAG,SAAS,CAAA;AAClC,MAAM,uBAAuB,GAAG,cAAc,CAAA;AAC9C,MAAM,CAAC,MAAM,kBAAkB,GAAG,yBAAyB,CAAA;AAC3D,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAA;AA4B5C,MAAM,OAAO,eAAe;IAOP;IACA;IAPF,GAAG,CAAQ;IACpB,QAAQ,GAAG,KAAK,CAAA;IACP,OAAO,CAAyB;IAChC,kBAAkB,CAAiB;IAEpD,YACmB,UAAqC,EACrC,OAA4B,EAAE;QAD9B,eAAU,GAAV,UAAU,CAA2B;QACrC,SAAI,GAAJ,IAAI,CAA0B;QAE/C,IAAI,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,CAAA;QAC1D,IAAI,CAAC,kBAAkB,GAAG,IAAI,eAAe,EAAE,CAAA;QAC/C,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAEzD,IAAI,UAAU,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG;gBACb,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,mCAAmC,EAAE;oBACzF,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,6CAA6C;iBACpD,CAAC;gBACF,cAAc,EAAE,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,qCAAqC,EAAE;oBAC7F,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,+CAA+C;iBACtD,CAAC;aACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC,IAAwB,EAAE,EAAE;YACtF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC,CAAA;QACvI,CAAC,EAAE;YACD,wBAAwB,EAAE,IAAI;SAC/B,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;QAC5D,OAAO,EAAE,CAAA;QACT,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;IACvB,CAAC;IAED,cAAc,CAAE,OAA8B;QAC5C,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE;YAC7C,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;SAC5C,CAAC,CAAA;IACJ,CAAC;IAEQ,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,gBAAgB,CAAA;IAEvC,CAAC,eAAe,CAAC,GAAG,IAAI,CAAA;IAEjC,MAAM,CAAE,UAAuB;QAC7B,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAC7C,CAAC;IAED;;;;;;MAME;IACF,KAAK,CAAC,IAAI,CAAE,EAAa,EAAE,OAAoB;QAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;QAEzC,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxE,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE;YAChE,cAAc;YACd,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;SAC1C,CAAC,CAAA;QAEF,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,kBAAkB,CAAC;YACjD,cAAc;YACd,SAAS,EAAE,EAAE;YACb,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YACzC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB;YACpD,gBAAgB,EAAE,IAAI,CAAC,UAAU,CAAC,gBAAgB;YAClD,GAAG,EAAE,IAAI,CAAC,GAAG;SACd,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE;YAChE,cAAc;YACd,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE;YAC9B,UAAU,EAAE,aAAa;YACzB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY;SACpC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,UAAU,EAAE;YACpE,cAAc,EAAE,IAAI;YACpB,cAAc,EAAE,IAAI;YACpB,YAAY;SACb,CAAC,CAAA;QAEF,oCAAoC;QACpC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;QAEjD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,KAAK,CAAC,WAAW,CAAE,EAAE,UAAU,EAAE,MAAM,EAAsB;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,IAAI,0BAA0B,CAAC,CAAA;QACpG,MAAM,cAAc,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxE,MAAM,YAAY,GAAG,IAAI,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE;YAChE,cAAc;YACd,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;SAC1C,CAAC,CAAA;QAEF,IAAI,CAAC;YACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,oBAAoB,CAAC;gBACnD,cAAc;gBACd,UAAU;gBACV,MAAM;gBACN,MAAM;gBACN,GAAG,EAAE,IAAI,CAAC,GAAG;aACd,CAAC,CAAA;YAEF,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE;gBAChE,cAAc;gBACd,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC1C,UAAU,EAAE,aAAa;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,cAAc;aACtC,CAAC,CAAA;YAEF,oCAAoC;YACpC,IAAI,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAA;YAEjD,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE;gBACxD,cAAc,EAAE,IAAI;gBACpB,cAAc,EAAE,IAAI;gBACpB,YAAY;aACb,CAAC,CAAA;YAEF,oEAAoE;YACpE,MAAM,MAAM,CAAC,KAAK,CAAC;gBACjB,MAAM;aACP,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACjB,MAAM,GAAG,CAAA;QACX,CAAC;IACH,CAAC;IAEO,gBAAgB,CAAE,EAAqB,EAAE,UAAqC;QACpF,oCAAoC;QACpC,MAAM,gBAAgB,GAAG,GAAS,EAAE;YAClC,UAAU,CAAC,KAAK,EAAE;iBACf,KAAK,CAAC,GAAG,CAAC,EAAE;gBACX,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,2CAA2C,EAAE,GAAG,CAAC,CAAA;YAClE,CAAC,CAAC,CAAA;QACN,CAAC,CAAA;QAED,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QAE1E,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;IACJ,CAAC;CACF;AAED,MAAM,UAAU,SAAS,CAAE,EAAa;IACtC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAA;IACzD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,8CAA8C,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAClG,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,SAAS,CAAC,mDAAmD,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACvG,CAAC;IAED,yBAAyB;IACzB,IAAI,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAE7C,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS,EAAE,CAAA;IACnD,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,SAAS,CAAC,iCAAiC,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACrF,CAAC;IAED,MAAM,iBAAiB,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAA;IACnD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACvE,CAAC;IACD,IAAI,iBAAiB,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACrC,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,mBAAmB,EAAE,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,CAAA;AAChF,CAAC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { Message } from './pb/message.js';
|
|
2
2
|
import type { LoggerOptions, Stream } from '@libp2p/interface';
|
|
3
3
|
import type { AbortOptions, MessageStream } from 'it-protobuf-stream';
|
|
4
|
-
import type { DeferredPromise } from 'p-defer';
|
|
5
4
|
export interface ReadCandidatesOptions extends AbortOptions, LoggerOptions {
|
|
6
5
|
direction: string;
|
|
7
6
|
}
|
|
8
|
-
export declare const readCandidatesUntilConnected: (
|
|
9
|
-
export declare function resolveOnConnected(pc: RTCPeerConnection, promise: DeferredPromise<void>): void;
|
|
7
|
+
export declare const readCandidatesUntilConnected: (pc: RTCPeerConnection, stream: MessageStream<Message, Stream>, options: ReadCandidatesOptions) => Promise<void>;
|
|
10
8
|
//# 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,aAAa,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGrE,MAAM,WAAW,qBAAsB,SAAQ,YAAY,EAAE,aAAa;IACxE,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,eAAO,MAAM,4BAA4B,OAAc,iBAAiB,UAAU,cAAc,OAAO,EAAE,MAAM,CAAC,WAAW,qBAAqB,KAAG,QAAQ,IAAI,CAoD9J,CAAA"}
|
|
@@ -1,31 +1,20 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface';
|
|
2
|
-
import
|
|
3
|
-
import { anySignal } from 'any-signal';
|
|
2
|
+
import pDefer from 'p-defer';
|
|
4
3
|
import { isFirefox } from '../util.js';
|
|
5
4
|
import { RTCIceCandidate } from '../webrtc/index.js';
|
|
6
5
|
import { Message } from './pb/message.js';
|
|
7
|
-
export const readCandidatesUntilConnected = async (
|
|
8
|
-
// if we connect, stop trying to read from the stream
|
|
9
|
-
const controller = new AbortController();
|
|
10
|
-
connectedPromise.promise.then(() => {
|
|
11
|
-
controller.abort();
|
|
12
|
-
}, () => {
|
|
13
|
-
controller.abort();
|
|
14
|
-
});
|
|
15
|
-
const signal = anySignal([
|
|
16
|
-
controller.signal,
|
|
17
|
-
options.signal
|
|
18
|
-
]);
|
|
19
|
-
const abortListener = () => {
|
|
20
|
-
closeSource(stream.unwrap().unwrap().source, options.log);
|
|
21
|
-
};
|
|
22
|
-
signal.addEventListener('abort', abortListener);
|
|
6
|
+
export const readCandidatesUntilConnected = async (pc, stream, options) => {
|
|
23
7
|
try {
|
|
8
|
+
const connectedPromise = pDefer();
|
|
9
|
+
resolveOnConnected(pc, connectedPromise);
|
|
24
10
|
// read candidates until we are connected or we reach the end of the stream
|
|
25
11
|
while (true) {
|
|
12
|
+
// if we connect, stop trying to read from the stream
|
|
26
13
|
const message = await Promise.race([
|
|
27
14
|
connectedPromise.promise,
|
|
28
|
-
stream.read(
|
|
15
|
+
stream.read({
|
|
16
|
+
signal: options.signal
|
|
17
|
+
})
|
|
29
18
|
]);
|
|
30
19
|
// stream ended or we became connected
|
|
31
20
|
if (message == null) {
|
|
@@ -54,15 +43,17 @@ export const readCandidatesUntilConnected = async (connectedPromise, pc, stream,
|
|
|
54
43
|
}
|
|
55
44
|
catch (err) {
|
|
56
45
|
options.log.error('%s error parsing ICE candidate', options.direction, err);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
signal.clear();
|
|
46
|
+
if (options.signal?.aborted === true) {
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
61
49
|
}
|
|
62
50
|
};
|
|
63
|
-
|
|
51
|
+
function getConnectionState(pc) {
|
|
52
|
+
return isFirefox ? pc.iceConnectionState : pc.connectionState;
|
|
53
|
+
}
|
|
54
|
+
function resolveOnConnected(pc, promise) {
|
|
64
55
|
pc[isFirefox ? 'oniceconnectionstatechange' : 'onconnectionstatechange'] = (_) => {
|
|
65
|
-
switch (
|
|
56
|
+
switch (getConnectionState(pc)) {
|
|
66
57
|
case 'connected':
|
|
67
58
|
promise.resolve();
|
|
68
59
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/private-to-private/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": "4.0.
|
|
3
|
+
"version": "4.0.9",
|
|
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",
|
|
@@ -51,14 +51,13 @@
|
|
|
51
51
|
"dependencies": {
|
|
52
52
|
"@chainsafe/libp2p-noise": "^14.0.0",
|
|
53
53
|
"@libp2p/interface": "^1.0.1",
|
|
54
|
-
"@libp2p/interface-internal": "^1.0.
|
|
54
|
+
"@libp2p/interface-internal": "^1.0.2",
|
|
55
55
|
"@libp2p/logger": "^4.0.1",
|
|
56
56
|
"@libp2p/peer-id": "^4.0.1",
|
|
57
57
|
"@libp2p/utils": "^5.0.2",
|
|
58
58
|
"@multiformats/mafmt": "^12.1.6",
|
|
59
59
|
"@multiformats/multiaddr": "^12.1.10",
|
|
60
60
|
"@multiformats/multiaddr-matcher": "^1.1.0",
|
|
61
|
-
"any-signal": "^4.1.1",
|
|
62
61
|
"detect-browser": "^5.3.0",
|
|
63
62
|
"it-length-prefixed": "^9.0.3",
|
|
64
63
|
"it-pipe": "^3.0.1",
|
|
@@ -79,10 +78,10 @@
|
|
|
79
78
|
},
|
|
80
79
|
"devDependencies": {
|
|
81
80
|
"@chainsafe/libp2p-yamux": "^6.0.1",
|
|
82
|
-
"@libp2p/circuit-relay-v2": "^1.0.
|
|
83
|
-
"@libp2p/interface-compliance-tests": "^5.0.
|
|
81
|
+
"@libp2p/circuit-relay-v2": "^1.0.6",
|
|
82
|
+
"@libp2p/interface-compliance-tests": "^5.0.6",
|
|
84
83
|
"@libp2p/peer-id-factory": "^4.0.0",
|
|
85
|
-
"@libp2p/websockets": "^8.0.
|
|
84
|
+
"@libp2p/websockets": "^8.0.6",
|
|
86
85
|
"@types/sinon": "^17.0.0",
|
|
87
86
|
"aegir": "^41.0.2",
|
|
88
87
|
"delay": "^6.0.0",
|
|
@@ -90,7 +89,7 @@
|
|
|
90
89
|
"it-length": "^3.0.2",
|
|
91
90
|
"it-map": "^3.0.3",
|
|
92
91
|
"it-pair": "^2.0.6",
|
|
93
|
-
"libp2p": "^1.0.
|
|
92
|
+
"libp2p": "^1.0.9",
|
|
94
93
|
"p-retry": "^6.1.0",
|
|
95
94
|
"protons": "^7.3.0",
|
|
96
95
|
"sinon": "^17.0.0",
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface'
|
|
2
2
|
import { peerIdFromString } from '@libp2p/peer-id'
|
|
3
3
|
import { pbStream } from 'it-protobuf-stream'
|
|
4
|
-
import pDefer, { type DeferredPromise } from 'p-defer'
|
|
5
4
|
import { type RTCPeerConnection, RTCSessionDescription } from '../webrtc/index.js'
|
|
6
5
|
import { Message } from './pb/message.js'
|
|
7
6
|
import { SIGNALING_PROTO_ID, splitAddr, type WebRTCTransportMetrics } from './transport.js'
|
|
8
|
-
import { readCandidatesUntilConnected
|
|
7
|
+
import { readCandidatesUntilConnected } from './util.js'
|
|
9
8
|
import type { DataChannelOptions } from '../index.js'
|
|
10
9
|
import type { LoggerOptions, Connection } from '@libp2p/interface'
|
|
11
10
|
import type { ConnectionManager, IncomingStreamData, TransportManager } from '@libp2p/interface-internal'
|
|
@@ -65,17 +64,8 @@ export async function initiateConnection ({ peerConnection, signal, metrics, mul
|
|
|
65
64
|
})
|
|
66
65
|
|
|
67
66
|
const messageStream = pbStream(stream).pb(Message)
|
|
68
|
-
const connectedPromise: DeferredPromise<void> = pDefer()
|
|
69
|
-
const sdpAbortedListener = (): void => {
|
|
70
|
-
connectedPromise.reject(new CodeError('SDP handshake aborted', 'ERR_SDP_HANDSHAKE_ABORTED'))
|
|
71
|
-
}
|
|
72
67
|
|
|
73
68
|
try {
|
|
74
|
-
resolveOnConnected(peerConnection, connectedPromise)
|
|
75
|
-
|
|
76
|
-
// reject the connectedPromise if the signal aborts
|
|
77
|
-
signal?.addEventListener('abort', sdpAbortedListener)
|
|
78
|
-
|
|
79
69
|
// we create the channel so that the RTCPeerConnection has a component for
|
|
80
70
|
// which to collect candidates. The label is not relevant to connection
|
|
81
71
|
// initiation but can be useful for debugging
|
|
@@ -102,11 +92,14 @@ export async function initiateConnection ({ peerConnection, signal, metrics, mul
|
|
|
102
92
|
})
|
|
103
93
|
}
|
|
104
94
|
peerConnection.onicecandidateerror = (event) => {
|
|
105
|
-
log('initiator ICE candidate error', event)
|
|
95
|
+
log.error('initiator ICE candidate error', event)
|
|
106
96
|
}
|
|
107
97
|
|
|
108
98
|
// create an offer
|
|
109
|
-
const offerSdp = await peerConnection.createOffer()
|
|
99
|
+
const offerSdp = await peerConnection.createOffer().catch(err => {
|
|
100
|
+
log.error('could not execute createOffer', err)
|
|
101
|
+
throw new CodeError('Failed to set createOffer', 'ERR_SDP_HANDSHAKE_FAILED')
|
|
102
|
+
})
|
|
110
103
|
|
|
111
104
|
log.trace('initiator send SDP offer %s', offerSdp.sdp)
|
|
112
105
|
|
|
@@ -127,7 +120,7 @@ export async function initiateConnection ({ peerConnection, signal, metrics, mul
|
|
|
127
120
|
})
|
|
128
121
|
|
|
129
122
|
if (answerMessage.type !== Message.Type.SDP_ANSWER) {
|
|
130
|
-
throw new CodeError('
|
|
123
|
+
throw new CodeError('Remote should send an SDP answer', 'ERR_SDP_HANDSHAKE_FAILED')
|
|
131
124
|
}
|
|
132
125
|
|
|
133
126
|
log.trace('initiator receive SDP answer %s', answerMessage.data)
|
|
@@ -140,7 +133,7 @@ export async function initiateConnection ({ peerConnection, signal, metrics, mul
|
|
|
140
133
|
|
|
141
134
|
log.trace('initiator read candidates until connected')
|
|
142
135
|
|
|
143
|
-
await readCandidatesUntilConnected(
|
|
136
|
+
await readCandidatesUntilConnected(peerConnection, messageStream, {
|
|
144
137
|
direction: 'initiator',
|
|
145
138
|
signal,
|
|
146
139
|
log
|
|
@@ -164,8 +157,6 @@ export async function initiateConnection ({ peerConnection, signal, metrics, mul
|
|
|
164
157
|
stream.abort(err)
|
|
165
158
|
throw err
|
|
166
159
|
} finally {
|
|
167
|
-
// remove event listeners
|
|
168
|
-
signal?.removeEventListener('abort', sdpAbortedListener)
|
|
169
160
|
peerConnection.onicecandidate = null
|
|
170
161
|
peerConnection.onicecandidateerror = null
|
|
171
162
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interface'
|
|
2
2
|
import { multiaddr, type Multiaddr } from '@multiformats/multiaddr'
|
|
3
3
|
import { pbStream } from 'it-protobuf-stream'
|
|
4
|
-
import pDefer, { type DeferredPromise } from 'p-defer'
|
|
5
4
|
import { type RTCPeerConnection, RTCSessionDescription } from '../webrtc/index.js'
|
|
6
5
|
import { Message } from './pb/message.js'
|
|
7
|
-
import { readCandidatesUntilConnected
|
|
6
|
+
import { readCandidatesUntilConnected } from './util.js'
|
|
8
7
|
import type { Logger } from '@libp2p/interface'
|
|
9
8
|
import type { IncomingStreamData } from '@libp2p/interface-internal'
|
|
10
9
|
|
|
@@ -20,41 +19,27 @@ export async function handleIncomingStream ({ peerConnection, stream, signal, co
|
|
|
20
19
|
const messageStream = pbStream(stream).pb(Message)
|
|
21
20
|
|
|
22
21
|
try {
|
|
23
|
-
const connectedPromise: DeferredPromise<void> = pDefer()
|
|
24
|
-
const answerSentPromise: DeferredPromise<void> = pDefer()
|
|
25
|
-
|
|
26
|
-
signal.onabort = () => {
|
|
27
|
-
connectedPromise.reject(new CodeError('Timed out while trying to connect', 'ERR_TIMEOUT'))
|
|
28
|
-
}
|
|
29
|
-
|
|
30
22
|
// candidate callbacks
|
|
31
23
|
peerConnection.onicecandidate = ({ candidate }) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
(err) => {
|
|
50
|
-
log.error('cannot set candidate since sending answer failed', err)
|
|
51
|
-
connectedPromise.reject(err)
|
|
52
|
-
}
|
|
53
|
-
)
|
|
24
|
+
// a null candidate means end-of-candidates, an empty string candidate
|
|
25
|
+
// means end-of-candidates for this generation, otherwise this should
|
|
26
|
+
// be a valid candidate object
|
|
27
|
+
// see - https://www.w3.org/TR/webrtc/#rtcpeerconnectioniceevent
|
|
28
|
+
const data = JSON.stringify(candidate?.toJSON() ?? null)
|
|
29
|
+
|
|
30
|
+
log.trace('recipient sending ICE candidate %s', data)
|
|
31
|
+
|
|
32
|
+
messageStream.write({
|
|
33
|
+
type: Message.Type.ICE_CANDIDATE,
|
|
34
|
+
data
|
|
35
|
+
}, {
|
|
36
|
+
signal
|
|
37
|
+
})
|
|
38
|
+
.catch(err => {
|
|
39
|
+
log.error('error sending ICE candidate', err)
|
|
40
|
+
})
|
|
54
41
|
}
|
|
55
42
|
|
|
56
|
-
resolveOnConnected(peerConnection, connectedPromise)
|
|
57
|
-
|
|
58
43
|
// read an SDP offer
|
|
59
44
|
const pbOffer = await messageStream.read({
|
|
60
45
|
signal
|
|
@@ -79,7 +64,6 @@ export async function handleIncomingStream ({ peerConnection, stream, signal, co
|
|
|
79
64
|
// create and write an SDP answer
|
|
80
65
|
const answer = await peerConnection.createAnswer().catch(err => {
|
|
81
66
|
log.error('could not execute createAnswer', err)
|
|
82
|
-
answerSentPromise.reject(err)
|
|
83
67
|
throw new CodeError('Failed to create answer', 'ERR_SDP_HANDSHAKE_FAILED')
|
|
84
68
|
})
|
|
85
69
|
|
|
@@ -92,25 +76,17 @@ export async function handleIncomingStream ({ peerConnection, stream, signal, co
|
|
|
92
76
|
|
|
93
77
|
await peerConnection.setLocalDescription(answer).catch(err => {
|
|
94
78
|
log.error('could not execute setLocalDescription', err)
|
|
95
|
-
answerSentPromise.reject(err)
|
|
96
79
|
throw new CodeError('Failed to set localDescription', 'ERR_SDP_HANDSHAKE_FAILED')
|
|
97
80
|
})
|
|
98
81
|
|
|
99
|
-
answerSentPromise.resolve()
|
|
100
|
-
|
|
101
82
|
log.trace('recipient read candidates until connected')
|
|
102
83
|
|
|
103
84
|
// wait until candidates are connected
|
|
104
|
-
await readCandidatesUntilConnected(
|
|
85
|
+
await readCandidatesUntilConnected(peerConnection, messageStream, {
|
|
105
86
|
direction: 'recipient',
|
|
106
87
|
signal,
|
|
107
88
|
log
|
|
108
89
|
})
|
|
109
|
-
|
|
110
|
-
log.trace('recipient connected, closing signaling stream')
|
|
111
|
-
await messageStream.unwrap().unwrap().close({
|
|
112
|
-
signal
|
|
113
|
-
})
|
|
114
90
|
} catch (err: any) {
|
|
115
91
|
if (peerConnection.connectionState !== 'connected') {
|
|
116
92
|
log.error('error while handling signaling stream from peer %a', connection.remoteAddr, err)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface'
|
|
1
|
+
import { CodeError, 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'
|
|
@@ -56,6 +56,7 @@ export class WebRTCTransport implements Transport, Startable {
|
|
|
56
56
|
) {
|
|
57
57
|
this.log = components.logger.forComponent('libp2p:webrtc')
|
|
58
58
|
this.shutdownController = new AbortController()
|
|
59
|
+
setMaxListeners(Infinity, this.shutdownController.signal)
|
|
59
60
|
|
|
60
61
|
if (components.metrics != null) {
|
|
61
62
|
this.metrics = {
|