@libp2p/circuit-relay-v2 2.1.3-e99e8f448 → 2.1.4
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 +2 -2
- package/dist/src/constants.d.ts +4 -2
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +5 -2
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +52 -50
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/transport/discovery.js +1 -1
- package/dist/src/transport/discovery.js.map +1 -1
- package/dist/src/transport/index.d.ts +2 -2
- package/dist/src/transport/index.d.ts.map +1 -1
- package/dist/src/transport/listener.d.ts.map +1 -1
- package/dist/src/transport/listener.js +23 -22
- package/dist/src/transport/listener.js.map +1 -1
- package/dist/src/transport/reservation-store.d.ts +4 -3
- package/dist/src/transport/reservation-store.d.ts.map +1 -1
- package/dist/src/transport/reservation-store.js +79 -40
- package/dist/src/transport/reservation-store.js.map +1 -1
- package/dist/typedoc-urls.json +23 -0
- package/package.json +10 -11
- package/src/constants.ts +7 -2
- package/src/index.ts +2 -2
- package/src/server/index.ts +54 -53
- package/src/transport/discovery.ts +1 -1
- package/src/transport/index.ts +2 -2
- package/src/transport/listener.ts +28 -25
- package/src/transport/reservation-store.ts +105 -47
@@ -1,11 +1,10 @@
|
|
1
|
-
import {
|
1
|
+
import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface';
|
2
2
|
import { PeerMap } from '@libp2p/peer-collections';
|
3
3
|
import { createBloomFilter } from '@libp2p/utils/filters';
|
4
4
|
import { PeerQueue } from '@libp2p/utils/peer-queue';
|
5
5
|
import { multiaddr } from '@multiformats/multiaddr';
|
6
6
|
import { pbStream } from 'it-protobuf-stream';
|
7
|
-
import {
|
8
|
-
import { DEFAULT_MAX_RESERVATION_QUEUE_LENGTH, DEFAULT_RESERVATION_COMPLETION_TIMEOUT, DEFAULT_RESERVATION_CONCURRENCY, RELAY_TAG, RELAY_V2_HOP_CODEC } from '../constants.js';
|
7
|
+
import { DEFAULT_MAX_RESERVATION_QUEUE_LENGTH, DEFAULT_RESERVATION_COMPLETION_TIMEOUT, DEFAULT_RESERVATION_CONCURRENCY, KEEP_ALIVE_TAG, RELAY_TAG, RELAY_V2_HOP_CODEC } from '../constants.js';
|
9
8
|
import { HopMessage, Status } from '../pb/index.js';
|
10
9
|
import { getExpirationMilliseconds } from '../utils.js';
|
11
10
|
// allow refreshing a relay reservation if it will expire in the next 10 minutes
|
@@ -48,11 +47,19 @@ export class ReservationStore extends TypedEventEmitter {
|
|
48
47
|
metricName: 'libp2p_relay_reservation_queue',
|
49
48
|
metrics: components.metrics
|
50
49
|
});
|
51
|
-
//
|
52
|
-
//
|
53
|
-
// for new relays
|
54
|
-
this.events.addEventListener('
|
55
|
-
this
|
50
|
+
// reservations are only valid while we are still connected to the relay.
|
51
|
+
// if we had a reservation opened via that connection, remove it and maybe
|
52
|
+
// trigger a search for new relays
|
53
|
+
this.events.addEventListener('connection:close', (evt) => {
|
54
|
+
const reservation = [...this.reservations.values()]
|
55
|
+
.find(reservation => reservation.connection === evt.detail.id);
|
56
|
+
if (reservation == null) {
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
this.#removeReservation(evt.detail.remotePeer, reservation)
|
60
|
+
.catch(err => {
|
61
|
+
this.log('could not remove relay %p - %e', evt.detail, err);
|
62
|
+
});
|
56
63
|
});
|
57
64
|
}
|
58
65
|
isStarted() {
|
@@ -62,10 +69,32 @@ export class ReservationStore extends TypedEventEmitter {
|
|
62
69
|
this.started = true;
|
63
70
|
}
|
64
71
|
afterStart() {
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
72
|
+
// remove old relay tags
|
73
|
+
void Promise.resolve()
|
74
|
+
.then(async () => {
|
75
|
+
const relayPeers = await this.peerStore.all({
|
76
|
+
filters: [(peer) => {
|
77
|
+
return peer.tags.has(RELAY_TAG);
|
78
|
+
}]
|
79
|
+
});
|
80
|
+
this.log('removing tag from %d old relays', relayPeers.length);
|
81
|
+
// remove old relay tag and redial
|
82
|
+
await Promise.all(relayPeers.map(async (peer) => {
|
83
|
+
await this.peerStore.merge(peer.id, {
|
84
|
+
tags: {
|
85
|
+
[RELAY_TAG]: undefined,
|
86
|
+
[KEEP_ALIVE_TAG]: undefined
|
87
|
+
}
|
88
|
+
});
|
89
|
+
}));
|
90
|
+
if (this.reservations.size < this.maxDiscoveredRelays) {
|
91
|
+
this.log('not enough relays %d/%d', this.reservations.size, this.maxDiscoveredRelays);
|
92
|
+
this.safeDispatchEvent('relay:not-enough-relays', {});
|
93
|
+
}
|
94
|
+
})
|
95
|
+
.catch(err => {
|
96
|
+
this.log.error(err);
|
97
|
+
});
|
69
98
|
}
|
70
99
|
stop() {
|
71
100
|
this.reserveQueue.clear();
|
@@ -83,34 +112,34 @@ export class ReservationStore extends TypedEventEmitter {
|
|
83
112
|
*/
|
84
113
|
async addRelay(peerId, type) {
|
85
114
|
if (this.peerId.equals(peerId)) {
|
86
|
-
this.log('not trying to use self as relay');
|
115
|
+
this.log.trace('not trying to use self as relay');
|
87
116
|
return;
|
88
117
|
}
|
89
118
|
if (this.reserveQueue.size > this.maxReservationQueueLength) {
|
90
|
-
this.log('not adding potential relay peer %p as the queue is full', peerId);
|
119
|
+
this.log.trace('not adding potential relay peer %p as the queue is full', peerId);
|
91
120
|
return;
|
92
121
|
}
|
93
122
|
if (this.reserveQueue.has(peerId)) {
|
94
|
-
this.log('potential relay peer %p is already in the reservation queue', peerId);
|
123
|
+
this.log.trace('potential relay peer %p is already in the reservation queue', peerId);
|
95
124
|
return;
|
96
125
|
}
|
97
126
|
if (this.relayFilter.has(peerId.toMultihash().bytes)) {
|
98
|
-
this.log('potential relay peer %p has failed previously, not trying again', peerId);
|
127
|
+
this.log.trace('potential relay peer %p has failed previously, not trying again', peerId);
|
99
128
|
return;
|
100
129
|
}
|
101
|
-
this.log('try to reserve relay slot with %p', peerId);
|
130
|
+
this.log.trace('try to reserve relay slot with %p', peerId);
|
102
131
|
await this.reserveQueue.add(async () => {
|
103
132
|
const start = Date.now();
|
104
133
|
try {
|
105
134
|
// allow refresh of an existing reservation if it is about to expire
|
106
135
|
const existingReservation = this.reservations.get(peerId);
|
107
136
|
if (existingReservation != null) {
|
108
|
-
if (getExpirationMilliseconds(existingReservation.reservation.expire) > REFRESH_WINDOW) {
|
109
|
-
this.log('already have reservation
|
137
|
+
if (this.connectionManager.getConnections(peerId).map(conn => conn.id).includes(existingReservation.connection) && getExpirationMilliseconds(existingReservation.reservation.expire) > REFRESH_WINDOW) {
|
138
|
+
this.log('already have relay reservation with %p but we are still connected and it does not expire soon', peerId);
|
110
139
|
return;
|
111
140
|
}
|
112
|
-
|
113
|
-
this
|
141
|
+
this.log('already have relay reservation with %p but the original connection is no longer open', peerId);
|
142
|
+
await this.#removeReservation(peerId, existingReservation);
|
114
143
|
}
|
115
144
|
if (type === 'discovered' && [...this.reservations.values()].reduce((acc, curr) => {
|
116
145
|
if (curr.type === 'discovered') {
|
@@ -118,7 +147,7 @@ export class ReservationStore extends TypedEventEmitter {
|
|
118
147
|
}
|
119
148
|
return acc;
|
120
149
|
}, 0) >= this.maxDiscoveredRelays) {
|
121
|
-
this.log('already have enough discovered relays');
|
150
|
+
this.log.trace('already have enough discovered relays');
|
122
151
|
return;
|
123
152
|
}
|
124
153
|
const signal = AbortSignal.timeout(this.reservationCompletionTimeout);
|
@@ -147,7 +176,8 @@ export class ReservationStore extends TypedEventEmitter {
|
|
147
176
|
this.reservations.set(peerId, {
|
148
177
|
timeout,
|
149
178
|
reservation,
|
150
|
-
type
|
179
|
+
type,
|
180
|
+
connection: connection.id
|
151
181
|
});
|
152
182
|
// ensure we don't close the connection to the relay
|
153
183
|
await this.peerStore.merge(peerId, {
|
@@ -156,7 +186,7 @@ export class ReservationStore extends TypedEventEmitter {
|
|
156
186
|
value: 1,
|
157
187
|
ttl: expiration
|
158
188
|
},
|
159
|
-
[
|
189
|
+
[KEEP_ALIVE_TAG]: {
|
160
190
|
value: 1,
|
161
191
|
ttl: expiration
|
162
192
|
}
|
@@ -193,6 +223,11 @@ export class ReservationStore extends TypedEventEmitter {
|
|
193
223
|
reservationCount() {
|
194
224
|
return this.reservations.size;
|
195
225
|
}
|
226
|
+
async cancelReservations() {
|
227
|
+
await Promise.all([...this.reservations.entries()].map(async ([peerId, reservation]) => {
|
228
|
+
await this.#removeReservation(peerId, reservation);
|
229
|
+
}));
|
230
|
+
}
|
196
231
|
async #createReservation(connection, options) {
|
197
232
|
options.signal?.throwIfAborted();
|
198
233
|
this.log('requesting reservation from %p', connection.remotePeer);
|
@@ -213,21 +248,22 @@ export class ReservationStore extends TypedEventEmitter {
|
|
213
248
|
await stream.close(options);
|
214
249
|
}
|
215
250
|
}
|
216
|
-
if (response.status === Status.OK &&
|
251
|
+
if (response.status === Status.OK && response.reservation != null) {
|
217
252
|
// check that the returned relay has the relay address - this can be
|
218
253
|
// omitted when requesting a reservation from a go-libp2p relay we
|
219
254
|
// already have a reservation on
|
220
|
-
|
221
|
-
|
255
|
+
const addresses = new Set();
|
256
|
+
addresses.add(connection.remoteAddr.toString());
|
222
257
|
for (const buf of response.reservation.addrs) {
|
223
|
-
|
224
|
-
|
225
|
-
|
258
|
+
let ma = multiaddr(buf);
|
259
|
+
if (ma.getPeerId() == null) {
|
260
|
+
ma = ma.encapsulate(`/p2p/${connection.remotePeer}`);
|
226
261
|
}
|
262
|
+
// TODO: workaround for https://github.com/libp2p/go-libp2p/issues/3003
|
263
|
+
ma = multiaddr(ma.toString().replace(`/p2p/${connection.remotePeer}/p2p/${connection.remotePeer}`, `/p2p/${connection.remotePeer}`));
|
264
|
+
addresses.add(ma.toString());
|
227
265
|
}
|
228
|
-
|
229
|
-
response.reservation.addrs.push(relayAddressBytes);
|
230
|
-
}
|
266
|
+
response.reservation.addrs = [...addresses].map(str => multiaddr(str).bytes);
|
231
267
|
return response.reservation;
|
232
268
|
}
|
233
269
|
const errMsg = `reservation failed with status ${response.status ?? 'undefined'}`;
|
@@ -237,14 +273,17 @@ export class ReservationStore extends TypedEventEmitter {
|
|
237
273
|
/**
|
238
274
|
* Remove listen relay
|
239
275
|
*/
|
240
|
-
#
|
241
|
-
|
242
|
-
|
243
|
-
return;
|
244
|
-
}
|
245
|
-
this.log('connection to relay %p closed, removing reservation from local store', peerId);
|
246
|
-
clearTimeout(existingReservation.timeout);
|
276
|
+
async #removeReservation(peerId, reservation) {
|
277
|
+
this.log('removing relay reservation with %p from local store', peerId);
|
278
|
+
clearTimeout(reservation.timeout);
|
247
279
|
this.reservations.delete(peerId);
|
280
|
+
// untag the relay
|
281
|
+
await this.peerStore.merge(peerId, {
|
282
|
+
tags: {
|
283
|
+
[RELAY_TAG]: undefined,
|
284
|
+
[KEEP_ALIVE_TAG]: undefined
|
285
|
+
}
|
286
|
+
});
|
248
287
|
this.safeDispatchEvent('relay:removed', { detail: peerId });
|
249
288
|
if (this.reservations.size < this.maxDiscoveredRelays) {
|
250
289
|
this.log('not enough relays %d/%d', this.reservations.size, this.maxDiscoveredRelays);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"reservation-store.js","sourceRoot":"","sources":["../../../src/transport/reservation-store.ts"],"names":[],"mappings":"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"}
|
1
|
+
{"version":3,"file":"reservation-store.js","sourceRoot":"","sources":["../../../src/transport/reservation-store.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
{
|
2
|
+
"codec": "https://libp2p.github.io/js-libp2p/functions/_libp2p_circuit_relay_v2.Limit.codec.html",
|
3
|
+
"decode": "https://libp2p.github.io/js-libp2p/functions/_libp2p_circuit_relay_v2.Limit.decode.html",
|
4
|
+
"encode": "https://libp2p.github.io/js-libp2p/functions/_libp2p_circuit_relay_v2.Limit.encode.html",
|
5
|
+
"CircuitRelayServerComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayServerComponents.html",
|
6
|
+
"CircuitRelayServerInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayServerInit.html",
|
7
|
+
"CircuitRelayService": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayService.html",
|
8
|
+
".:CircuitRelayService": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayService.html",
|
9
|
+
"CircuitRelayServiceEvents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayServiceEvents.html",
|
10
|
+
".:CircuitRelayServiceEvents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayServiceEvents.html",
|
11
|
+
"CircuitRelayTransportComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayTransportComponents.html",
|
12
|
+
"CircuitRelayTransportInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.CircuitRelayTransportInit.html",
|
13
|
+
"Limit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.Limit-1.html",
|
14
|
+
"RelayDiscoveryComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.RelayDiscoveryComponents.html",
|
15
|
+
"RelayReservation": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.RelayReservation.html",
|
16
|
+
".:RelayReservation": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.RelayReservation.html",
|
17
|
+
"ServerReservationStoreInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.ServerReservationStoreInit.html",
|
18
|
+
"TransportReservationStoreInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_circuit_relay_v2.TransportReservationStoreInit.html",
|
19
|
+
"RELAY_V2_HOP_CODEC": "https://libp2p.github.io/js-libp2p/variables/_libp2p_circuit_relay_v2.RELAY_V2_HOP_CODEC.html",
|
20
|
+
"RELAY_V2_STOP_CODEC": "https://libp2p.github.io/js-libp2p/variables/_libp2p_circuit_relay_v2.RELAY_V2_STOP_CODEC.html",
|
21
|
+
"circuitRelayServer": "https://libp2p.github.io/js-libp2p/functions/_libp2p_circuit_relay_v2.circuitRelayServer.html",
|
22
|
+
"circuitRelayTransport": "https://libp2p.github.io/js-libp2p/functions/_libp2p_circuit_relay_v2.circuitRelayTransport.html"
|
23
|
+
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@libp2p/circuit-relay-v2",
|
3
|
-
"version": "2.1.
|
3
|
+
"version": "2.1.4",
|
4
4
|
"description": "Implementation of Circuit Relay v2",
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/transport-circuit-relay-v2#readme",
|
@@ -52,19 +52,18 @@
|
|
52
52
|
"doc-check": "aegir doc-check"
|
53
53
|
},
|
54
54
|
"dependencies": {
|
55
|
-
"@libp2p/interface": "2.1.
|
56
|
-
"@libp2p/interface-internal": "2.0.
|
57
|
-
"@libp2p/peer-collections": "6.0.
|
58
|
-
"@libp2p/peer-id": "5.0.
|
59
|
-
"@libp2p/peer-record": "8.0.
|
60
|
-
"@libp2p/utils": "6.1.
|
55
|
+
"@libp2p/interface": "^2.1.3",
|
56
|
+
"@libp2p/interface-internal": "^2.0.8",
|
57
|
+
"@libp2p/peer-collections": "^6.0.8",
|
58
|
+
"@libp2p/peer-id": "^5.0.5",
|
59
|
+
"@libp2p/peer-record": "^8.0.8",
|
60
|
+
"@libp2p/utils": "^6.1.1",
|
61
61
|
"@multiformats/mafmt": "^12.1.6",
|
62
62
|
"@multiformats/multiaddr": "^12.2.3",
|
63
63
|
"any-signal": "^4.1.1",
|
64
64
|
"it-protobuf-stream": "^1.1.3",
|
65
65
|
"it-stream-types": "^2.0.1",
|
66
66
|
"multiformats": "^13.1.0",
|
67
|
-
"p-defer": "^4.0.1",
|
68
67
|
"progress-events": "^1.0.0",
|
69
68
|
"protons-runtime": "^5.4.0",
|
70
69
|
"race-signal": "^1.0.2",
|
@@ -72,9 +71,9 @@
|
|
72
71
|
"uint8arrays": "^5.1.0"
|
73
72
|
},
|
74
73
|
"devDependencies": {
|
75
|
-
"@libp2p/crypto": "5.0.
|
76
|
-
"@libp2p/interface-compliance-tests": "6.1.
|
77
|
-
"@libp2p/logger": "5.1.
|
74
|
+
"@libp2p/crypto": "^5.0.5",
|
75
|
+
"@libp2p/interface-compliance-tests": "^6.1.6",
|
76
|
+
"@libp2p/logger": "^5.1.1",
|
78
77
|
"aegir": "^44.0.1",
|
79
78
|
"delay": "^6.0.0",
|
80
79
|
"it-drain": "^3.0.7",
|
package/src/constants.ts
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
import { KEEP_ALIVE } from '@libp2p/interface'
|
2
|
+
|
1
3
|
const second = 1000
|
2
4
|
const minute = 60 * second
|
3
5
|
|
@@ -27,9 +29,9 @@ export const DEFAULT_MAX_RESERVATION_TTL = 2 * 60 * minute
|
|
27
29
|
export const DEFAULT_RESERVATION_CONCURRENCY = 1
|
28
30
|
|
29
31
|
/**
|
30
|
-
* How long to wait for a reservation attempt to
|
32
|
+
* How long to wait for a reservation attempt to finish
|
31
33
|
*/
|
32
|
-
export const DEFAULT_RESERVATION_COMPLETION_TIMEOUT =
|
34
|
+
export const DEFAULT_RESERVATION_COMPLETION_TIMEOUT = 2000
|
33
35
|
|
34
36
|
/**
|
35
37
|
* How long to let the reservation attempt queue to grow
|
@@ -40,6 +42,9 @@ export const RELAY_SOURCE_TAG = 'circuit-relay-source'
|
|
40
42
|
|
41
43
|
export const RELAY_TAG = 'circuit-relay-relay'
|
42
44
|
|
45
|
+
export const KEEP_ALIVE_TAG = `${KEEP_ALIVE}-circuit-relay`
|
46
|
+
export const KEEP_ALIVE_SOURCE_TAG = `${KEEP_ALIVE}-circuit-relay-source`
|
47
|
+
|
43
48
|
// circuit v2 connection limits
|
44
49
|
// https://github.com/libp2p/go-libp2p/blob/master/p2p/protocol/circuitv2/relay/resources.go#L61-L66
|
45
50
|
|
package/src/index.ts
CHANGED
@@ -64,10 +64,10 @@ export interface CircuitRelayService extends TypedEventEmitter<CircuitRelayServi
|
|
64
64
|
|
65
65
|
export { circuitRelayServer } from './server/index.js'
|
66
66
|
export type { CircuitRelayServerInit, CircuitRelayServerComponents } from './server/index.js'
|
67
|
-
export type { ReservationStoreInit } from './server/reservation-store.js'
|
67
|
+
export type { ReservationStoreInit as ServerReservationStoreInit } from './server/reservation-store.js'
|
68
68
|
export { circuitRelayTransport } from './transport/index.js'
|
69
69
|
export type { RelayDiscoveryComponents } from './transport/discovery.js'
|
70
|
-
export type {
|
70
|
+
export type { ReservationStoreInit as TransportReservationStoreInit } from './transport/reservation-store.js'
|
71
71
|
export type { CircuitRelayTransportInit, CircuitRelayTransportComponents } from './transport/index.js'
|
72
72
|
|
73
73
|
export {
|
package/src/server/index.ts
CHANGED
@@ -4,10 +4,10 @@ import { RecordEnvelope } from '@libp2p/peer-record'
|
|
4
4
|
import { type Multiaddr, multiaddr } from '@multiformats/multiaddr'
|
5
5
|
import { pbStream, type ProtobufStream } from 'it-protobuf-stream'
|
6
6
|
import * as Digest from 'multiformats/hashes/digest'
|
7
|
-
import pDefer from 'p-defer'
|
8
7
|
import {
|
9
8
|
CIRCUIT_PROTO_CODE,
|
10
9
|
DEFAULT_HOP_TIMEOUT,
|
10
|
+
KEEP_ALIVE_SOURCE_TAG,
|
11
11
|
MAX_CONNECTIONS,
|
12
12
|
RELAY_SOURCE_TAG,
|
13
13
|
RELAY_V2_HOP_CODEC,
|
@@ -18,7 +18,7 @@ import { createLimitedRelay } from '../utils.js'
|
|
18
18
|
import { ReservationStore, type ReservationStoreInit } from './reservation-store.js'
|
19
19
|
import { ReservationVoucherRecord } from './reservation-voucher.js'
|
20
20
|
import type { CircuitRelayService, RelayReservation } from '../index.js'
|
21
|
-
import type { ComponentLogger, Logger, Connection, Stream, ConnectionGater, PeerId, PeerStore, Startable, PrivateKey, Metrics } from '@libp2p/interface'
|
21
|
+
import type { ComponentLogger, Logger, Connection, Stream, ConnectionGater, PeerId, PeerStore, Startable, PrivateKey, Metrics, AbortOptions } from '@libp2p/interface'
|
22
22
|
import type { AddressManager, ConnectionManager, IncomingStreamData, Registrar } from '@libp2p/interface-internal'
|
23
23
|
import type { PeerMap } from '@libp2p/peer-collections'
|
24
24
|
|
@@ -175,17 +175,13 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
175
175
|
async onHop ({ connection, stream }: IncomingStreamData): Promise<void> {
|
176
176
|
this.log('received circuit v2 hop protocol stream from %p', connection.remotePeer)
|
177
177
|
|
178
|
-
const
|
179
|
-
|
180
|
-
|
181
|
-
}, this.hopTimeout)
|
178
|
+
const options = {
|
179
|
+
signal: AbortSignal.timeout(this.hopTimeout)
|
180
|
+
}
|
182
181
|
const pbstr = pbStream(stream)
|
183
182
|
|
184
183
|
try {
|
185
|
-
const request: HopMessage = await
|
186
|
-
pbstr.pb(HopMessage).read(),
|
187
|
-
hopTimeoutPromise.promise
|
188
|
-
])
|
184
|
+
const request: HopMessage = await pbstr.pb(HopMessage).read(options)
|
189
185
|
|
190
186
|
if (request?.type == null) {
|
191
187
|
throw new Error('request was invalid, could not read from stream')
|
@@ -193,31 +189,26 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
193
189
|
|
194
190
|
this.log('received', request.type)
|
195
191
|
|
196
|
-
await
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
}),
|
202
|
-
hopTimeoutPromise.promise
|
203
|
-
])
|
192
|
+
await this.handleHopProtocol({
|
193
|
+
connection,
|
194
|
+
stream: pbstr,
|
195
|
+
request
|
196
|
+
}, options)
|
204
197
|
} catch (err: any) {
|
205
198
|
this.log.error('error while handling hop', err)
|
206
199
|
await pbstr.pb(HopMessage).write({
|
207
200
|
type: HopMessage.Type.STATUS,
|
208
201
|
status: Status.MALFORMED_MESSAGE
|
209
|
-
})
|
202
|
+
}, options)
|
210
203
|
stream.abort(err)
|
211
|
-
} finally {
|
212
|
-
clearTimeout(timeout)
|
213
204
|
}
|
214
205
|
}
|
215
206
|
|
216
|
-
async handleHopProtocol ({ stream, request, connection }: HopProtocolOptions): Promise<void> {
|
207
|
+
async handleHopProtocol ({ stream, request, connection }: HopProtocolOptions, options: AbortOptions): Promise<void> {
|
217
208
|
this.log('received hop message')
|
218
209
|
switch (request.type) {
|
219
|
-
case HopMessage.Type.RESERVE: await this.handleReserve({ stream, request, connection }); break
|
220
|
-
case HopMessage.Type.CONNECT: await this.handleConnect({ stream, request, connection }); break
|
210
|
+
case HopMessage.Type.RESERVE: await this.handleReserve({ stream, request, connection }, options); break
|
211
|
+
case HopMessage.Type.CONNECT: await this.handleConnect({ stream, request, connection }, options); break
|
221
212
|
default: {
|
222
213
|
this.log.error('invalid hop request type %s via peer %p', request.type, connection.remotePeer)
|
223
214
|
await stream.pb(HopMessage).write({ type: HopMessage.Type.STATUS, status: Status.UNEXPECTED_MESSAGE })
|
@@ -225,37 +216,38 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
225
216
|
}
|
226
217
|
}
|
227
218
|
|
228
|
-
async handleReserve ({ stream,
|
219
|
+
async handleReserve ({ stream, connection }: HopProtocolOptions, options: AbortOptions): Promise<void> {
|
229
220
|
const hopstr = stream.pb(HopMessage)
|
230
221
|
this.log('hop reserve request from %p', connection.remotePeer)
|
231
222
|
|
232
223
|
if (isRelayAddr(connection.remoteAddr)) {
|
233
224
|
this.log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer)
|
234
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED })
|
225
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED }, options)
|
235
226
|
return
|
236
227
|
}
|
237
228
|
|
238
229
|
if ((await this.connectionGater.denyInboundRelayReservation?.(connection.remotePeer)) === true) {
|
239
230
|
this.log.error('reservation for %p denied by connection gater', connection.remotePeer)
|
240
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED })
|
231
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED }, options)
|
241
232
|
return
|
242
233
|
}
|
243
234
|
|
244
235
|
const result = this.reservationStore.reserve(connection.remotePeer, connection.remoteAddr)
|
245
236
|
|
246
|
-
if (result.status !== Status.OK) {
|
247
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: result.status })
|
248
|
-
return
|
249
|
-
}
|
250
|
-
|
251
237
|
try {
|
238
|
+
if (result.status !== Status.OK) {
|
239
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: result.status }, options)
|
240
|
+
return
|
241
|
+
}
|
242
|
+
|
252
243
|
// tag relay target peer
|
253
244
|
// result.expire is non-null if `ReservationStore.reserve` returns with status == OK
|
254
245
|
if (result.expire != null) {
|
255
246
|
const ttl = (result.expire * 1000) - Date.now()
|
256
247
|
await this.peerStore.merge(connection.remotePeer, {
|
257
248
|
tags: {
|
258
|
-
[RELAY_SOURCE_TAG]: { value: 1, ttl }
|
249
|
+
[RELAY_SOURCE_TAG]: { value: 1, ttl },
|
250
|
+
[KEEP_ALIVE_SOURCE_TAG]: { value: 1, ttl }
|
259
251
|
}
|
260
252
|
})
|
261
253
|
}
|
@@ -265,11 +257,22 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
265
257
|
status: Status.OK,
|
266
258
|
reservation: await this.makeReservation(connection.remotePeer, BigInt(result.expire ?? 0)),
|
267
259
|
limit: this.reservationStore.get(connection.remotePeer)?.limit
|
268
|
-
})
|
260
|
+
}, options)
|
269
261
|
this.log('sent confirmation response to %s', connection.remotePeer)
|
270
262
|
} catch (err) {
|
271
|
-
this.log.error('failed to send confirmation response to %p', connection.remotePeer, err)
|
263
|
+
this.log.error('failed to send confirmation response to %p - %e', connection.remotePeer, err)
|
272
264
|
this.reservationStore.removeReservation(connection.remotePeer)
|
265
|
+
|
266
|
+
try {
|
267
|
+
await this.peerStore.merge(connection.remotePeer, {
|
268
|
+
tags: {
|
269
|
+
[RELAY_SOURCE_TAG]: undefined,
|
270
|
+
[KEEP_ALIVE_SOURCE_TAG]: undefined
|
271
|
+
}
|
272
|
+
})
|
273
|
+
} catch (err) {
|
274
|
+
this.log.error('failed to untag relay source peer %p - %e', connection.remotePeer, err)
|
275
|
+
}
|
273
276
|
}
|
274
277
|
}
|
275
278
|
|
@@ -300,12 +303,12 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
300
303
|
}
|
301
304
|
}
|
302
305
|
|
303
|
-
async handleConnect ({ stream, request, connection }: HopProtocolOptions): Promise<void> {
|
306
|
+
async handleConnect ({ stream, request, connection }: HopProtocolOptions, options: AbortOptions): Promise<void> {
|
304
307
|
const hopstr = stream.pb(HopMessage)
|
305
308
|
|
306
309
|
if (isRelayAddr(connection.remoteAddr)) {
|
307
310
|
this.log.error('relay reservation over circuit connection denied for peer: %p', connection.remotePeer)
|
308
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED })
|
311
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED }, options)
|
309
312
|
return
|
310
313
|
}
|
311
314
|
|
@@ -323,19 +326,19 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
323
326
|
dstPeer = peerIdFromMultihash(Digest.decode(request.peer.id))
|
324
327
|
} catch (err) {
|
325
328
|
this.log.error('invalid hop connect request via peer %p %s', connection.remotePeer, err)
|
326
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.MALFORMED_MESSAGE })
|
329
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.MALFORMED_MESSAGE }, options)
|
327
330
|
return
|
328
331
|
}
|
329
332
|
|
330
333
|
if (!this.reservationStore.hasReservation(dstPeer)) {
|
331
334
|
this.log.error('hop connect denied for destination peer %p not having a reservation for %p with status %s', dstPeer, connection.remotePeer, Status.NO_RESERVATION)
|
332
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION })
|
335
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION }, options)
|
333
336
|
return
|
334
337
|
}
|
335
338
|
|
336
339
|
if ((await this.connectionGater.denyOutboundRelayedConnection?.(connection.remotePeer, dstPeer)) === true) {
|
337
340
|
this.log.error('hop connect for %p to %p denied by connection gater', connection.remotePeer, dstPeer)
|
338
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED })
|
341
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.PERMISSION_DENIED }, options)
|
339
342
|
return
|
340
343
|
}
|
341
344
|
|
@@ -343,7 +346,7 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
343
346
|
|
344
347
|
if (connections.length === 0) {
|
345
348
|
this.log('hop connect denied for destination peer %p not having a connection for %p as there is no destination connection', dstPeer, connection.remotePeer)
|
346
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION })
|
349
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.NO_RESERVATION }, options)
|
347
350
|
return
|
348
351
|
}
|
349
352
|
|
@@ -360,11 +363,11 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
360
363
|
},
|
361
364
|
limit
|
362
365
|
}
|
363
|
-
})
|
366
|
+
}, options)
|
364
367
|
|
365
368
|
if (destinationStream == null) {
|
366
369
|
this.log.error('failed to open stream to destination peer %p', destinationConnection?.remotePeer)
|
367
|
-
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.CONNECTION_FAILED })
|
370
|
+
await hopstr.write({ type: HopMessage.Type.STATUS, status: Status.CONNECTION_FAILED }, options)
|
368
371
|
return
|
369
372
|
}
|
370
373
|
|
@@ -372,7 +375,7 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
372
375
|
type: HopMessage.Type.STATUS,
|
373
376
|
status: Status.OK,
|
374
377
|
limit
|
375
|
-
})
|
378
|
+
}, options)
|
376
379
|
const sourceStream = stream.unwrap()
|
377
380
|
|
378
381
|
this.log('connection from %p to %p established - merging streams', connection.remotePeer, dstPeer)
|
@@ -385,29 +388,27 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
385
388
|
/**
|
386
389
|
* Send a STOP request to the target peer that the dialing peer wants to contact
|
387
390
|
*/
|
388
|
-
async stopHop ({
|
389
|
-
connection,
|
390
|
-
request
|
391
|
-
}: StopOptions): Promise<Stream | undefined> {
|
391
|
+
async stopHop ({ connection, request }: StopOptions, options: AbortOptions): Promise<Stream | undefined> {
|
392
392
|
this.log('starting circuit relay v2 stop request to %s', connection.remotePeer)
|
393
393
|
const stream = await connection.newStream([RELAY_V2_STOP_CODEC], {
|
394
394
|
maxOutboundStreams: this.maxOutboundStopStreams,
|
395
|
-
runOnLimitedConnection: true
|
395
|
+
runOnLimitedConnection: true,
|
396
|
+
...options
|
396
397
|
})
|
397
398
|
const pbstr = pbStream(stream)
|
398
399
|
const stopstr = pbstr.pb(StopMessage)
|
399
|
-
await stopstr.write(request)
|
400
|
+
await stopstr.write(request, options)
|
400
401
|
let response
|
401
402
|
|
402
403
|
try {
|
403
|
-
response = await stopstr.read()
|
404
|
+
response = await stopstr.read(options)
|
404
405
|
} catch (err) {
|
405
406
|
this.log.error('error parsing stop message response from %p', connection.remotePeer)
|
406
407
|
}
|
407
408
|
|
408
409
|
if (response == null) {
|
409
410
|
this.log.error('could not read response from %p', connection.remotePeer)
|
410
|
-
await stream.close()
|
411
|
+
await stream.close(options)
|
411
412
|
return
|
412
413
|
}
|
413
414
|
|
@@ -417,7 +418,7 @@ class CircuitRelayServer extends TypedEventEmitter<RelayServerEvents> implements
|
|
417
418
|
}
|
418
419
|
|
419
420
|
this.log('stop request failed with code %d', response.status)
|
420
|
-
await stream.close()
|
421
|
+
await stream.close(options)
|
421
422
|
}
|
422
423
|
|
423
424
|
get reservations (): PeerMap<RelayReservation> {
|