@libp2p/webrtc 5.1.1-cc7fcfe98 → 5.1.1-ff951f1a0
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.
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAUrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAG3E,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAU,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/I,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASxD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,YAAY,CAAA;CAC7B;
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAUrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAG3E,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAU,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC/I,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AASxD,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,QAAQ,CAAA;IAClB,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAA;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAA;IAC1F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,YAAY,CAAA;CAC7B;AAMD,qBAAa,oBAAqB,SAAQ,iBAAiB,CAAC,cAAc,CAAE,YAAW,QAAQ;IAC7F,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAuB;gBAEnC,UAAU,EAAE,8BAA8B,EAAE,IAAI,EAAE,wBAAwB;IAqBjF,MAAM,CAAE,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;YAuC7B,iBAAiB;YA2BjB,kBAAkB;IAgDhC,QAAQ,IAAK,SAAS,EAAE;IAIlB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;CAqB9B"}
|
@@ -32,7 +32,7 @@ export class WebRTCDirectListener extends TypedEventEmitter {
|
|
32
32
|
this.init = init;
|
33
33
|
this.components = components;
|
34
34
|
this.multiaddrs = [];
|
35
|
-
this.servers =
|
35
|
+
this.servers = {};
|
36
36
|
this.connections = new Map();
|
37
37
|
this.log = components.logger.forComponent('libp2p:webrtc-direct:listener');
|
38
38
|
this.certificate = init.certificates?.[0];
|
@@ -67,56 +67,38 @@ export class WebRTCDirectListener extends TypedEventEmitter {
|
|
67
67
|
// single mux listener. This is necessary because libjuice binds to all
|
68
68
|
// interfaces for a given port so we we need to key on just the port number
|
69
69
|
// not the host + the port number
|
70
|
-
|
71
|
-
|
72
|
-
// and there is already a wildcard port for this address family, start a new
|
73
|
-
// UDP mux server
|
74
|
-
const wildcardPorts = port === 0 && existingServer?.port === 0;
|
75
|
-
const sameAddressFamily = (existingServer?.isIPv4 === true && isIPv4(host)) || (existingServer?.isIPv6 === true && isIPv6(host));
|
76
|
-
if (existingServer == null || (wildcardPorts && sameAddressFamily)) {
|
77
|
-
existingServer = this.startUDPMuxServer(host, port);
|
78
|
-
this.servers.push(existingServer);
|
70
|
+
if (this.servers[port] == null) {
|
71
|
+
this.servers[port] = this.startUDPMuxServer(host, port);
|
79
72
|
}
|
80
|
-
const server = await
|
73
|
+
const server = await this.servers[port];
|
81
74
|
const address = server.address();
|
82
75
|
getNetworkAddresses(host, address.port, ipVersion).forEach((ma) => {
|
83
76
|
this.multiaddrs.push(multiaddr(`${ma}/webrtc-direct/certhash/${this.certificate?.certhash}`));
|
84
77
|
});
|
85
78
|
this.safeDispatchEvent('listening');
|
86
79
|
}
|
87
|
-
startUDPMuxServer(host, port) {
|
88
|
-
|
89
|
-
port
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
this.certificate = certificate;
|
110
|
-
}
|
111
|
-
}
|
112
|
-
return stunListener(host, port, this.log, (ufrag, remoteHost, remotePort) => {
|
113
|
-
this.incomingConnection(ufrag, remoteHost, remotePort)
|
114
|
-
.catch(err => {
|
115
|
-
this.log.error('error processing incoming STUN request', err);
|
116
|
-
});
|
117
|
-
});
|
118
|
-
})
|
119
|
-
};
|
80
|
+
async startUDPMuxServer(host, port) {
|
81
|
+
if (port === 0) {
|
82
|
+
// libjuice doesn't map 0 to a random free port so we have to do it
|
83
|
+
// ourselves
|
84
|
+
port = await getPort();
|
85
|
+
}
|
86
|
+
// ensure we have a certificate
|
87
|
+
if (this.certificate == null) {
|
88
|
+
const keyPair = await crypto.subtle.generateKey({
|
89
|
+
name: 'ECDSA',
|
90
|
+
namedCurve: 'P-256'
|
91
|
+
}, true, ['sign', 'verify']);
|
92
|
+
this.certificate = await generateTransportCertificate(keyPair, {
|
93
|
+
days: 365 * 10
|
94
|
+
});
|
95
|
+
}
|
96
|
+
return stunListener(host, port, this.log, (ufrag, remoteHost, remotePort) => {
|
97
|
+
this.incomingConnection(ufrag, remoteHost, remotePort)
|
98
|
+
.catch(err => {
|
99
|
+
this.log.error('error processing incoming STUN request', err);
|
100
|
+
});
|
101
|
+
});
|
120
102
|
}
|
121
103
|
async incomingConnection(ufrag, remoteHost, remotePort) {
|
122
104
|
const key = `${remoteHost}:${remotePort}:${ufrag}`;
|
@@ -168,8 +150,8 @@ export class WebRTCDirectListener extends TypedEventEmitter {
|
|
168
150
|
connection.close();
|
169
151
|
}
|
170
152
|
// stop all UDP mux listeners
|
171
|
-
await Promise.all(this.servers.map(async (p) => {
|
172
|
-
const server = await p
|
153
|
+
await Promise.all(Object.values(this.servers).map(async (p) => {
|
154
|
+
const server = await p;
|
173
155
|
await server.close();
|
174
156
|
}));
|
175
157
|
// RTCPeerConnections will be removed from the connections map when their
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,OAAO,MAAM,UAAU,CAAA;AAC9B,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAA;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAOvD,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAA;AAE3B;;GAEG;AACH,MAAM,oBAAoB,GAAG,MAAM,CAAA;AAsBnC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;AACrC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;AACrC,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;
|
1
|
+
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../../src/private-to-public/listener.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@libp2p/webrtc",
|
3
|
-
"version": "5.1.1-
|
3
|
+
"version": "5.1.1-ff951f1a0",
|
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",
|
@@ -54,10 +54,10 @@
|
|
54
54
|
"@chainsafe/is-ip": "^2.0.2",
|
55
55
|
"@chainsafe/libp2p-noise": "^16.0.0",
|
56
56
|
"@ipshipyard/node-datachannel": "^0.26.4",
|
57
|
-
"@libp2p/interface": "2.5.0-
|
58
|
-
"@libp2p/interface-internal": "2.3.1-
|
59
|
-
"@libp2p/peer-id": "5.0.12-
|
60
|
-
"@libp2p/utils": "6.5.1-
|
57
|
+
"@libp2p/interface": "2.5.0-ff951f1a0",
|
58
|
+
"@libp2p/interface-internal": "2.3.1-ff951f1a0",
|
59
|
+
"@libp2p/peer-id": "5.0.12-ff951f1a0",
|
60
|
+
"@libp2p/utils": "6.5.1-ff951f1a0",
|
61
61
|
"@multiformats/multiaddr": "^12.3.3",
|
62
62
|
"@multiformats/multiaddr-matcher": "^1.6.0",
|
63
63
|
"@peculiar/webcrypto": "^1.5.0",
|
@@ -83,9 +83,9 @@
|
|
83
83
|
"uint8arrays": "^5.1.0"
|
84
84
|
},
|
85
85
|
"devDependencies": {
|
86
|
-
"@libp2p/crypto": "5.0.11-
|
87
|
-
"@libp2p/interface-compliance-tests": "6.3.1-
|
88
|
-
"@libp2p/logger": "5.1.8-
|
86
|
+
"@libp2p/crypto": "5.0.11-ff951f1a0",
|
87
|
+
"@libp2p/interface-compliance-tests": "6.3.1-ff951f1a0",
|
88
|
+
"@libp2p/logger": "5.1.8-ff951f1a0",
|
89
89
|
"@types/sinon": "^17.0.3",
|
90
90
|
"aegir": "^45.0.5",
|
91
91
|
"delay": "^6.0.0",
|
@@ -47,15 +47,8 @@ const UDP_PROTOCOL = protocols('udp')
|
|
47
47
|
const IP4_PROTOCOL = protocols('ip4')
|
48
48
|
const IP6_PROTOCOL = protocols('ip6')
|
49
49
|
|
50
|
-
interface UDPMuxServer {
|
51
|
-
server: Promise<StunServer>
|
52
|
-
isIPv4: boolean
|
53
|
-
isIPv6: boolean
|
54
|
-
port: number
|
55
|
-
}
|
56
|
-
|
57
50
|
export class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> implements Listener {
|
58
|
-
private readonly servers:
|
51
|
+
private readonly servers: Record<number, Promise<StunServer>>
|
59
52
|
private readonly multiaddrs: Multiaddr[]
|
60
53
|
private certificate?: TransportCertificate
|
61
54
|
private readonly connections: Map<string, DirectRTCPeerConnection>
|
@@ -70,7 +63,7 @@ export class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> impl
|
|
70
63
|
this.init = init
|
71
64
|
this.components = components
|
72
65
|
this.multiaddrs = []
|
73
|
-
this.servers =
|
66
|
+
this.servers = {}
|
74
67
|
this.connections = new Map()
|
75
68
|
this.log = components.logger.forComponent('libp2p:webrtc-direct:listener')
|
76
69
|
this.certificate = init.certificates?.[0]
|
@@ -110,20 +103,11 @@ export class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> impl
|
|
110
103
|
// single mux listener. This is necessary because libjuice binds to all
|
111
104
|
// interfaces for a given port so we we need to key on just the port number
|
112
105
|
// not the host + the port number
|
113
|
-
|
114
|
-
|
115
|
-
// if the server has not been started yet, or the port is a wildcard port
|
116
|
-
// and there is already a wildcard port for this address family, start a new
|
117
|
-
// UDP mux server
|
118
|
-
const wildcardPorts = port === 0 && existingServer?.port === 0
|
119
|
-
const sameAddressFamily = (existingServer?.isIPv4 === true && isIPv4(host)) || (existingServer?.isIPv6 === true && isIPv6(host))
|
120
|
-
|
121
|
-
if (existingServer == null || (wildcardPorts && sameAddressFamily)) {
|
122
|
-
existingServer = this.startUDPMuxServer(host, port)
|
123
|
-
this.servers.push(existingServer)
|
106
|
+
if (this.servers[port] == null) {
|
107
|
+
this.servers[port] = this.startUDPMuxServer(host, port)
|
124
108
|
}
|
125
109
|
|
126
|
-
const server = await
|
110
|
+
const server = await this.servers[port]
|
127
111
|
const address = server.address()
|
128
112
|
|
129
113
|
getNetworkAddresses(host, address.port, ipVersion).forEach((ma) => {
|
@@ -133,43 +117,31 @@ export class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> impl
|
|
133
117
|
this.safeDispatchEvent('listening')
|
134
118
|
}
|
135
119
|
|
136
|
-
private startUDPMuxServer (host: string, port: number):
|
137
|
-
|
138
|
-
port
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
namedCurve: 'P-256'
|
154
|
-
}, true, ['sign', 'verify'])
|
155
|
-
|
156
|
-
const certificate = await generateTransportCertificate(keyPair, {
|
157
|
-
days: 365 * 10
|
158
|
-
})
|
159
|
-
|
160
|
-
if (this.certificate == null) {
|
161
|
-
this.certificate = certificate
|
162
|
-
}
|
163
|
-
}
|
164
|
-
|
165
|
-
return stunListener(host, port, this.log, (ufrag, remoteHost, remotePort) => {
|
166
|
-
this.incomingConnection(ufrag, remoteHost, remotePort)
|
167
|
-
.catch(err => {
|
168
|
-
this.log.error('error processing incoming STUN request', err)
|
169
|
-
})
|
170
|
-
})
|
171
|
-
})
|
120
|
+
private async startUDPMuxServer (host: string, port: number): Promise<StunServer> {
|
121
|
+
if (port === 0) {
|
122
|
+
// libjuice doesn't map 0 to a random free port so we have to do it
|
123
|
+
// ourselves
|
124
|
+
port = await getPort()
|
125
|
+
}
|
126
|
+
|
127
|
+
// ensure we have a certificate
|
128
|
+
if (this.certificate == null) {
|
129
|
+
const keyPair = await crypto.subtle.generateKey({
|
130
|
+
name: 'ECDSA',
|
131
|
+
namedCurve: 'P-256'
|
132
|
+
}, true, ['sign', 'verify'])
|
133
|
+
|
134
|
+
this.certificate = await generateTransportCertificate(keyPair, {
|
135
|
+
days: 365 * 10
|
136
|
+
})
|
172
137
|
}
|
138
|
+
|
139
|
+
return stunListener(host, port, this.log, (ufrag, remoteHost, remotePort) => {
|
140
|
+
this.incomingConnection(ufrag, remoteHost, remotePort)
|
141
|
+
.catch(err => {
|
142
|
+
this.log.error('error processing incoming STUN request', err)
|
143
|
+
})
|
144
|
+
})
|
173
145
|
}
|
174
146
|
|
175
147
|
private async incomingConnection (ufrag: string, remoteHost: string, remotePort: number): Promise<void> {
|
@@ -231,8 +203,8 @@ export class WebRTCDirectListener extends TypedEventEmitter<ListenerEvents> impl
|
|
231
203
|
|
232
204
|
// stop all UDP mux listeners
|
233
205
|
await Promise.all(
|
234
|
-
this.servers.map(async p => {
|
235
|
-
const server = await p
|
206
|
+
Object.values(this.servers).map(async p => {
|
207
|
+
const server = await p
|
236
208
|
await server.close()
|
237
209
|
})
|
238
210
|
)
|