@lodestar/reqresp 1.11.0-dev.df2f4d3f34 → 1.11.0-dev.e50877ff5d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/ReqResp.d.ts +1 -1
- package/lib/ReqResp.js +14 -17
- package/lib/ReqResp.js.map +1 -1
- package/lib/encodingStrategies/sszSnappy/decode.js +4 -11
- package/lib/encodingStrategies/sszSnappy/decode.js.map +1 -1
- package/lib/encodingStrategies/sszSnappy/encode.js +2 -2
- package/lib/encodingStrategies/sszSnappy/encode.js.map +1 -1
- package/lib/encodingStrategies/sszSnappy/snappyFrames/compress.js +1 -2
- package/lib/encodingStrategies/sszSnappy/snappyFrames/compress.js.map +1 -1
- package/lib/rate_limiter/ReqRespRateLimiter.d.ts +1 -1
- package/lib/rate_limiter/ReqRespRateLimiter.js +2 -4
- package/lib/rate_limiter/ReqRespRateLimiter.js.map +1 -1
- package/lib/request/errors.js +1 -1
- package/lib/request/errors.js.map +1 -1
- package/lib/request/index.d.ts +1 -1
- package/lib/request/index.js +9 -10
- package/lib/request/index.js.map +1 -1
- package/lib/response/index.d.ts +2 -2
- package/lib/response/index.js +5 -6
- package/lib/response/index.js.map +1 -1
- package/lib/types.d.ts +1 -1
- package/lib/utils/peerId.d.ts +1 -1
- package/package.json +12 -13
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
[](https://discord.gg/aMxzVcr)
|
|
4
4
|
[](https://github.com/ethereum/beacon-APIs/releases/tag/v2.1.0)
|
|
5
|
-

|
|
6
6
|

|
|
7
7
|
|
|
8
8
|
> This package is part of [ChainSafe's Lodestar](https://lodestar.chainsafe.io) project
|
package/lib/ReqResp.d.ts
CHANGED
package/lib/ReqResp.js
CHANGED
|
@@ -13,7 +13,6 @@ export const DEFAULT_PROTOCOL_PREFIX = "/eth2/beacon_chain/req";
|
|
|
13
13
|
*/
|
|
14
14
|
export class ReqResp {
|
|
15
15
|
constructor(modules, opts = {}) {
|
|
16
|
-
var _a;
|
|
17
16
|
this.opts = opts;
|
|
18
17
|
this.controller = new AbortController();
|
|
19
18
|
/** Tracks request and responses in a sequential counter */
|
|
@@ -27,7 +26,7 @@ export class ReqResp {
|
|
|
27
26
|
this.libp2p = modules.libp2p;
|
|
28
27
|
this.logger = modules.logger;
|
|
29
28
|
this.metrics = modules.metricsRegister ? getMetrics(modules.metricsRegister) : null;
|
|
30
|
-
this.protocolPrefix =
|
|
29
|
+
this.protocolPrefix = opts.protocolPrefix ?? DEFAULT_PROTOCOL_PREFIX;
|
|
31
30
|
this.rateLimiter = new ReqRespRateLimiter(opts);
|
|
32
31
|
}
|
|
33
32
|
/**
|
|
@@ -39,7 +38,7 @@ export class ReqResp {
|
|
|
39
38
|
registerDialOnlyProtocol(protocol, opts) {
|
|
40
39
|
const protocolID = this.formatProtocolID(protocol);
|
|
41
40
|
// libp2p will throw on error on duplicates, allow to overwrite behavior
|
|
42
|
-
if (
|
|
41
|
+
if (opts?.ignoreIfDuplicate && this.registeredProtocols.has(protocolID)) {
|
|
43
42
|
return;
|
|
44
43
|
}
|
|
45
44
|
this.registeredProtocols.set(protocolID, protocol);
|
|
@@ -95,10 +94,9 @@ export class ReqResp {
|
|
|
95
94
|
}
|
|
96
95
|
// Helper to reduce code duplication
|
|
97
96
|
async *sendRequest(peerId, method, versions, encoding, body) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const timer = (_d = this.metrics) === null || _d === void 0 ? void 0 : _d.outgoingRequestRoundtripTime.startTimer({ method });
|
|
97
|
+
const peerClient = this.opts.getPeerLogMetadata?.(peerId.toString());
|
|
98
|
+
this.metrics?.outgoingRequests.inc({ method });
|
|
99
|
+
const timer = this.metrics?.outgoingRequestRoundtripTime.startTimer({ method });
|
|
102
100
|
const protocols = [];
|
|
103
101
|
const protocolIDs = [];
|
|
104
102
|
for (const version of versions) {
|
|
@@ -114,31 +112,30 @@ export class ReqResp {
|
|
|
114
112
|
yield* sendRequest({ logger: this.logger, libp2p: this.libp2p, metrics: this.metrics, peerClient }, peerId, protocols, protocolIDs, body, this.controller.signal, this.opts, this.reqCount++);
|
|
115
113
|
}
|
|
116
114
|
catch (e) {
|
|
117
|
-
|
|
115
|
+
this.metrics?.outgoingErrors.inc({ method });
|
|
118
116
|
if (e instanceof RequestError) {
|
|
119
117
|
if (e.type.code === RequestErrorCode.DIAL_ERROR || e.type.code === RequestErrorCode.DIAL_TIMEOUT) {
|
|
120
|
-
|
|
118
|
+
this.metrics?.dialErrors.inc();
|
|
121
119
|
}
|
|
122
120
|
this.onOutgoingRequestError(peerId, method, e);
|
|
123
121
|
}
|
|
124
122
|
throw e;
|
|
125
123
|
}
|
|
126
124
|
finally {
|
|
127
|
-
timer
|
|
125
|
+
timer?.();
|
|
128
126
|
}
|
|
129
127
|
}
|
|
130
128
|
getRequestHandler(protocol, protocolID) {
|
|
131
129
|
return async ({ connection, stream }) => {
|
|
132
|
-
var _a, _b, _c, _d, _e, _f;
|
|
133
130
|
if (this.dialOnlyProtocols.get(protocolID)) {
|
|
134
131
|
throw new Error(`Received request on dial only protocol '${protocolID}'`);
|
|
135
132
|
}
|
|
136
133
|
const peerId = connection.remotePeer;
|
|
137
|
-
const peerClient =
|
|
134
|
+
const peerClient = this.opts.getPeerLogMetadata?.(peerId.toString());
|
|
138
135
|
const { method } = protocol;
|
|
139
|
-
|
|
140
|
-
const timer =
|
|
141
|
-
|
|
136
|
+
this.metrics?.incomingRequests.inc({ method });
|
|
137
|
+
const timer = this.metrics?.incomingRequestHandlerTime.startTimer({ method });
|
|
138
|
+
this.onIncomingRequest?.(peerId, protocol);
|
|
142
139
|
try {
|
|
143
140
|
await handleRequest({
|
|
144
141
|
logger: this.logger,
|
|
@@ -156,7 +153,7 @@ export class ReqResp {
|
|
|
156
153
|
// TODO: Do success peer scoring here
|
|
157
154
|
}
|
|
158
155
|
catch (err) {
|
|
159
|
-
|
|
156
|
+
this.metrics?.incomingErrors.inc({ method });
|
|
160
157
|
if (err instanceof RequestError) {
|
|
161
158
|
this.onIncomingRequestError(protocol, err);
|
|
162
159
|
}
|
|
@@ -164,7 +161,7 @@ export class ReqResp {
|
|
|
164
161
|
// Must not throw since this is an event handler
|
|
165
162
|
}
|
|
166
163
|
finally {
|
|
167
|
-
timer
|
|
164
|
+
timer?.();
|
|
168
165
|
}
|
|
169
166
|
};
|
|
170
167
|
}
|
package/lib/ReqResp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReqResp.js","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAK5C,OAAO,EAAC,UAAU,EAA2B,MAAM,cAAc,CAAC;AAClE,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAC;AAChG,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAUlD,OAAO,EAAC,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAC,kBAAkB,EAAC,MAAM,sCAAsC,CAAC;AAIxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,wBAAwB,CAAC;AAkBhE;;;;;GAKG;AACH,MAAM,OAAO,OAAO;IAoBlB,YACE,OAA+B,EACd,OAAoB,EAAE
|
|
1
|
+
{"version":3,"file":"ReqResp.js","sourceRoot":"","sources":["../src/ReqResp.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { decode as varintDecode, encodingLength as varintEncodingLength } from "uint8-varint";
|
|
2
2
|
import { Uint8ArrayList } from "uint8arraylist";
|
|
3
3
|
import { SnappyFramesUncompress } from "./snappyFrames/uncompress.js";
|
|
4
4
|
import { maxEncodedLen } from "./utils.js";
|
|
@@ -25,23 +25,16 @@ export async function readSszSnappyHeader(bufferedSource, type) {
|
|
|
25
25
|
if (buffer.length === 0) {
|
|
26
26
|
continue;
|
|
27
27
|
}
|
|
28
|
-
// Use Number.MAX_SAFE_INTEGER to guard against this check https://github.com/chrisdickinson/varint/pull/20
|
|
29
|
-
// On varint v6 if the number is > Number.MAX_SAFE_INTEGER `varint.decode` throws.
|
|
30
|
-
// Since MAX_VARINT_BYTES = 10, this will always be the case for the condition below.
|
|
31
|
-
// The check for MAX_VARINT_BYTES is kept for completeness
|
|
32
28
|
let sszDataLength;
|
|
33
29
|
try {
|
|
34
|
-
sszDataLength =
|
|
30
|
+
sszDataLength = varintDecode(buffer.subarray());
|
|
35
31
|
}
|
|
36
32
|
catch (e) {
|
|
37
33
|
throw new SszSnappyError({ code: SszSnappyErrorCode.INVALID_VARINT_BYTES_COUNT, bytes: Infinity });
|
|
38
34
|
}
|
|
39
35
|
// MUST validate: the unsigned protobuf varint used for the length-prefix MUST not be longer than 10 bytes
|
|
40
|
-
//
|
|
41
|
-
const varintBytes =
|
|
42
|
-
if (varintBytes === undefined || varintBytes > MAX_VARINT_BYTES || !(varintBytes > 0)) {
|
|
43
|
-
throw new SszSnappyError({ code: SszSnappyErrorCode.INVALID_VARINT_BYTES_COUNT, bytes: varintBytes !== null && varintBytes !== void 0 ? varintBytes : 0 });
|
|
44
|
-
}
|
|
36
|
+
// encodingLength function only returns 1-8 inclusive
|
|
37
|
+
const varintBytes = varintEncodingLength(sszDataLength);
|
|
45
38
|
buffer.consume(varintBytes);
|
|
46
39
|
// MUST validate: the length-prefix is within the expected size bounds derived from the payload SSZ type.
|
|
47
40
|
const minSize = type.minSize;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/encodingStrategies/sszSnappy/decode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"decode.js","sourceRoot":"","sources":["../../../src/encodingStrategies/sszSnappy/decode.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { encode as varintEncode } from "uint8-varint";
|
|
2
2
|
import { encodeSnappy } from "./snappyFrames/compress.js";
|
|
3
3
|
/**
|
|
4
4
|
* ssz_snappy encoding strategy writer.
|
|
@@ -13,7 +13,7 @@ export const writeSszSnappyPayload = encodeSszSnappy;
|
|
|
13
13
|
*/
|
|
14
14
|
export async function* encodeSszSnappy(bytes) {
|
|
15
15
|
// MUST encode the length of the raw SSZ bytes, encoded as an unsigned protobuf varint
|
|
16
|
-
yield Buffer.from(
|
|
16
|
+
yield Buffer.from(varintEncode(bytes.length));
|
|
17
17
|
// By first computing and writing the SSZ byte length, the SSZ encoder can then directly
|
|
18
18
|
// write the chunk contents to the stream. Snappy writer compresses frame by frame
|
|
19
19
|
yield* encodeSnappy(bytes);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/encodingStrategies/sszSnappy/encode.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"encode.js","sourceRoot":"","sources":["../../../src/encodingStrategies/sszSnappy/encode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,cAAc,CAAC;AACpD,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAgE,CAAC;AAEtG;;GAEG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CAAC,KAAa;IAClD,sFAAsF;IACtF,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE9C,wFAAwF;IACxF,kFAAkF;IAClF,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -10,9 +10,8 @@ import { ChunkType, IDENTIFIER_FRAME } from "./common.js";
|
|
|
10
10
|
*/
|
|
11
11
|
const UNCOMPRESSED_CHUNK_SIZE = 65536;
|
|
12
12
|
function checksum(value) {
|
|
13
|
-
var _a, _b;
|
|
14
13
|
const x = crc32c.calculate(value);
|
|
15
|
-
const result =
|
|
14
|
+
const result = Buffer.allocUnsafe?.(4) ?? Buffer.alloc(4);
|
|
16
15
|
// As defined in section 3 of https://github.com/google/snappy/blob/master/framing_format.txt
|
|
17
16
|
// And other implementations for reference:
|
|
18
17
|
// Go: https://github.com/golang/snappy/blob/2e65f85255dbc3072edf28d6b5b8efc472979f5a/snappy.go#L97
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../../src/encodingStrategies/sszSnappy/snappyFrames/compress.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAExD,sHAAsH;AAEtH;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,SAAS,QAAQ,CAAC,KAAa
|
|
1
|
+
{"version":3,"file":"compress.js","sourceRoot":"","sources":["../../../../src/encodingStrategies/sszSnappy/snappyFrames/compress.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,MAAM,MAAM,wBAAwB,CAAC;AAC5C,OAAO,EAAC,SAAS,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAExD,sHAAsH;AAEtH;;;;;GAKG;AACH,MAAM,uBAAuB,GAAG,KAAK,CAAC;AAEtC,SAAS,QAAQ,CAAC,KAAa;IAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1D,6FAA6F;IAC7F,2CAA2C;IAC3C,mGAAmG;IACnG,qHAAqH;IACrH,uFAAuF;IACvF,uEAAuE;IACvE,sCAAsC;IACtC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAElF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CAAC,KAAa;IAC/C,MAAM,gBAAgB,CAAC;IAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,uBAAuB,EAAE;QAC9D,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,uBAAuB,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC9C,IAAI,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE;YACpC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACnC,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBAChE,QAAQ,CAAC,KAAK,CAAC;gBACf,UAAU;aACX,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC9B,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,EAAE;gBACF,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;gBAClE,QAAQ,CAAC,KAAK,CAAC;gBACf,KAAK;aACN,CAAC,CAAC;SACJ;KACF;AACH,CAAC"}
|
|
@@ -5,13 +5,12 @@ const CHECK_DISCONNECTED_PEERS_INTERVAL_MS = 10 * 60 * 1000;
|
|
|
5
5
|
const DISCONNECTED_TIMEOUT_MS = 5 * 60 * 1000;
|
|
6
6
|
export class ReqRespRateLimiter {
|
|
7
7
|
constructor(opts) {
|
|
8
|
-
var _a;
|
|
9
8
|
this.opts = opts;
|
|
10
9
|
this.rateLimitersPerPeer = new Map();
|
|
11
10
|
this.rateLimitersTotal = new Map();
|
|
12
11
|
/** Interval to check lastSeenMessagesByPeer */
|
|
13
12
|
this.cleanupInterval = undefined;
|
|
14
|
-
this.rateLimitMultiplier =
|
|
13
|
+
this.rateLimitMultiplier = opts?.rateLimitMultiplier ?? 1;
|
|
15
14
|
this.lastSeenRequestsByPeer = new Map();
|
|
16
15
|
}
|
|
17
16
|
get enabled() {
|
|
@@ -35,7 +34,6 @@ export class ReqRespRateLimiter {
|
|
|
35
34
|
}
|
|
36
35
|
}
|
|
37
36
|
allows(peerId, protocolID, requestCount) {
|
|
38
|
-
var _a, _b;
|
|
39
37
|
if (!this.enabled) {
|
|
40
38
|
return true;
|
|
41
39
|
}
|
|
@@ -44,7 +42,7 @@ export class ReqRespRateLimiter {
|
|
|
44
42
|
const byPeer = this.rateLimitersPerPeer.get(protocolID);
|
|
45
43
|
const total = this.rateLimitersTotal.get(protocolID);
|
|
46
44
|
if ((byPeer && !byPeer.allows(peerIdStr, requestCount)) || (total && !total.allows(null, requestCount))) {
|
|
47
|
-
|
|
45
|
+
this.opts?.onRateLimit?.(peerId, protocolID);
|
|
48
46
|
return false;
|
|
49
47
|
}
|
|
50
48
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReqRespRateLimiter.js","sourceRoot":"","sources":["../../src/rate_limiter/ReqRespRateLimiter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAErD,0GAA0G;AAC1G,MAAM,oCAAoC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE5D,oEAAoE;AACpE,MAAM,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAI9C,MAAM,OAAO,kBAAkB;IAS7B,YAA6B,IAA6B
|
|
1
|
+
{"version":3,"file":"ReqRespRateLimiter.js","sourceRoot":"","sources":["../../src/rate_limiter/ReqRespRateLimiter.ts"],"names":[],"mappings":"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"}
|
package/lib/request/errors.js
CHANGED
|
@@ -34,7 +34,7 @@ export var RequestErrorCode;
|
|
|
34
34
|
export const REQUEST_ERROR_CLASS_NAME = "RequestError";
|
|
35
35
|
export class RequestError extends LodestarError {
|
|
36
36
|
constructor(type, message, stack) {
|
|
37
|
-
super(type, message
|
|
37
|
+
super(type, message ?? renderErrorMessage(type), stack);
|
|
38
38
|
}
|
|
39
39
|
static fromObject(obj) {
|
|
40
40
|
if (obj.className !== "RequestError") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAsB,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAC,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAN,IAAY,gBA6BX;AA7BD,WAAY,gBAAgB;IAC1B,mFAAmF;IACnF,4DAA4D;IAC5D,qEAAiD,CAAA;IACjD,+EAA2D,CAAA;IAC3D,yDAAyD;IACzD,+DAA2C,CAAA;IAC3C,iEAAiE;IACjE,uEAAmD,CAAA;IACnD,wEAAwE;IACxE,+EAA2D,CAAA;IAC3D,4DAA4D;IAC5D,+DAA2C,CAAA;IAC3C,uCAAuC;IACvC,2DAAuC,CAAA;IACvC,iEAAiE;IACjE,qEAAiD,CAAA;IACjD,8CAA8C;IAC9C,iEAA6C,CAAA;IAC7C,mFAAmF;IACnF,uEAAmD,CAAA;IACnD,iDAAiD;IACjD,mEAA+C,CAAA;IAC/C,iCAAiC;IACjC,+DAA2C,CAAA;IAC3C,gDAAgD;IAChD,+DAA2C,CAAA;IAC3C,2BAA2B;IAC3B,uEAAmD,CAAA;AACrD,CAAC,EA7BW,gBAAgB,KAAhB,gBAAgB,QA6B3B;AAkBD,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAEvD,MAAM,OAAO,YAAa,SAAQ,aAA+B;IAC/D,YAAY,IAAsB,EAAE,OAAgB,EAAE,KAAc;QAClE,KAAK,CAAC,IAAI,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAsB,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAC,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AAEnE,MAAM,CAAN,IAAY,gBA6BX;AA7BD,WAAY,gBAAgB;IAC1B,mFAAmF;IACnF,4DAA4D;IAC5D,qEAAiD,CAAA;IACjD,+EAA2D,CAAA;IAC3D,yDAAyD;IACzD,+DAA2C,CAAA;IAC3C,iEAAiE;IACjE,uEAAmD,CAAA;IACnD,wEAAwE;IACxE,+EAA2D,CAAA;IAC3D,4DAA4D;IAC5D,+DAA2C,CAAA;IAC3C,uCAAuC;IACvC,2DAAuC,CAAA;IACvC,iEAAiE;IACjE,qEAAiD,CAAA;IACjD,8CAA8C;IAC9C,iEAA6C,CAAA;IAC7C,mFAAmF;IACnF,uEAAmD,CAAA;IACnD,iDAAiD;IACjD,mEAA+C,CAAA;IAC/C,iCAAiC;IACjC,+DAA2C,CAAA;IAC3C,gDAAgD;IAChD,+DAA2C,CAAA;IAC3C,2BAA2B;IAC3B,uEAAmD,CAAA;AACrD,CAAC,EA7BW,gBAAgB,KAAhB,gBAAgB,QA6B3B;AAkBD,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;AAEvD,MAAM,OAAO,YAAa,SAAQ,aAA+B;IAC/D,YAAY,IAAsB,EAAE,OAAgB,EAAE,KAAc;QAClE,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAwB;QACxC,IAAI,GAAG,CAAC,SAAS,KAAK,cAAc,EAAE;YACpC,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;SACpF;QAED,OAAO,IAAI,YAAY,CAAC,GAAG,CAAC,IAAwB,EAAE,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAChF,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,iCAAiC,CAAC,CAAgB;IAChE,MAAM,EAAC,YAAY,EAAE,MAAM,EAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,MAAM,EAAE;QACd,KAAK,UAAU,CAAC,eAAe;YAC7B,OAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,EAAE,YAAY,EAAC,CAAC;QAChE,KAAK,UAAU,CAAC,YAAY;YAC1B,OAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,EAAE,YAAY,EAAC,CAAC;QAC7D,KAAK,UAAU,CAAC,oBAAoB;YAClC,OAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,EAAE,YAAY,EAAC,CAAC;QACrE;YACE,OAAO,EAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,EAAE,YAAY,EAAE,MAAM,EAAC,CAAC;KAC9E;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAsB;IAChD,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,gBAAgB,CAAC,eAAe,CAAC;QACtC,KAAK,gBAAgB,CAAC,YAAY,CAAC;QACnC,KAAK,gBAAgB,CAAC,oBAAoB,CAAC;QAC3C,KAAK,gBAAgB,CAAC,oBAAoB;YACxC,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC9C;YACE,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;AACH,CAAC"}
|
package/lib/request/index.d.ts
CHANGED
package/lib/request/index.js
CHANGED
|
@@ -23,18 +23,17 @@ export const DEFAULT_RESP_TIMEOUT = 10 * 1000; // 10 sec
|
|
|
23
23
|
* - The maximum number of requested chunks are read. Does not throw, returns read chunks only.
|
|
24
24
|
*/
|
|
25
25
|
export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peerId, protocols, protocolIDs, requestBody, signal, opts, requestId = 0) {
|
|
26
|
-
var _a, _b, _c, _d, _e;
|
|
27
26
|
if (protocols.length === 0) {
|
|
28
27
|
throw Error("sendRequest must set > 0 protocols");
|
|
29
28
|
}
|
|
30
|
-
const DIAL_TIMEOUT =
|
|
31
|
-
const REQUEST_TIMEOUT =
|
|
32
|
-
const TTFB_TIMEOUT =
|
|
33
|
-
const RESP_TIMEOUT =
|
|
29
|
+
const DIAL_TIMEOUT = opts?.dialTimeoutMs ?? DEFAULT_DIAL_TIMEOUT;
|
|
30
|
+
const REQUEST_TIMEOUT = opts?.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT;
|
|
31
|
+
const TTFB_TIMEOUT = opts?.ttfbTimeoutMs ?? DEFAULT_TTFB_TIMEOUT;
|
|
32
|
+
const RESP_TIMEOUT = opts?.respTimeoutMs ?? DEFAULT_RESP_TIMEOUT;
|
|
34
33
|
const peerIdStrShort = prettyPrintPeerId(peerId);
|
|
35
34
|
const { method, encoding, version } = protocols[0];
|
|
36
35
|
const logCtx = { method, version, encoding, client: peerClient, peer: peerIdStrShort, requestId };
|
|
37
|
-
if (signal
|
|
36
|
+
if (signal?.aborted) {
|
|
38
37
|
throw new ErrorAborted("sendRequest");
|
|
39
38
|
}
|
|
40
39
|
logger.debug("Req dialing peer", logCtx);
|
|
@@ -69,9 +68,9 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
|
|
|
69
68
|
}
|
|
70
69
|
});
|
|
71
70
|
// TODO: Does the TTFB timer start on opening stream or after receiving request
|
|
72
|
-
const timerTTFB = metrics
|
|
71
|
+
const timerTTFB = metrics?.outgoingResponseTTFB.startTimer({ method });
|
|
73
72
|
// Parse protocol selected by the responder
|
|
74
|
-
const protocolId =
|
|
73
|
+
const protocolId = stream.protocol ?? "unknown";
|
|
75
74
|
const protocol = protocolsMap.get(protocolId);
|
|
76
75
|
if (!protocol)
|
|
77
76
|
throw Error(`dialProtocol selected unknown protocolId ${protocolId}`);
|
|
@@ -126,7 +125,7 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
|
|
|
126
125
|
onFirstHeader() {
|
|
127
126
|
// On first byte, cancel the single use TTFB_TIMEOUT, and start RESP_TIMEOUT
|
|
128
127
|
clearTimeout(timeoutTTFB);
|
|
129
|
-
timerTTFB
|
|
128
|
+
timerTTFB?.();
|
|
130
129
|
restartRespTimeout();
|
|
131
130
|
},
|
|
132
131
|
onFirstResponseChunk() {
|
|
@@ -146,7 +145,7 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
|
|
|
146
145
|
// Necessary to call `stream.close()` since collectResponses() may break out of the source before exhausting it
|
|
147
146
|
// `stream.close()` libp2p-mplex will .end() the source (it-pushable instance)
|
|
148
147
|
// If collectResponses() exhausts the source, it-pushable.end() can be safely called multiple times
|
|
149
|
-
stream.close();
|
|
148
|
+
await stream.close();
|
|
150
149
|
}
|
|
151
150
|
}
|
|
152
151
|
catch (e) {
|
package/lib/request/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAI7B,OAAO,EAAC,YAAY,EAAU,WAAW,EAAE,YAAY,EAAC,MAAM,iBAAiB,CAAC;AAEhF,OAAO,EAAC,iBAAiB,EAAE,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAE,iCAAiC,EAAC,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,CAAC;AAExC,+HAA+H;AAC/H,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ;AACtD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ;AACzD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ;AACtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAoBxD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,WAAW,CAChC,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAqB,EACzD,MAAc,EACd,SAA0B,EAC1B,WAAqB,EACrB,WAAuB,EACvB,MAAoB,EACpB,IAAsB,EACtB,SAAS,GAAG,CAAC
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"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"}
|
package/lib/response/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PeerId } from "@libp2p/interface
|
|
2
|
-
import { Stream } from "@libp2p/interface
|
|
1
|
+
import { PeerId } from "@libp2p/interface/peer-id";
|
|
2
|
+
import { Stream } from "@libp2p/interface/connection";
|
|
3
3
|
import { Logger } from "@lodestar/utils";
|
|
4
4
|
import { Protocol } from "../types.js";
|
|
5
5
|
import { ReqRespRateLimiter } from "../rate_limiter/ReqRespRateLimiter.js";
|
package/lib/response/index.js
CHANGED
|
@@ -20,7 +20,7 @@ export const DEFAULT_REQUEST_TIMEOUT = 5 * 1000; // 5 sec
|
|
|
20
20
|
* 4b. On error, encode and write an error `<response_chunk>` and stop
|
|
21
21
|
*/
|
|
22
22
|
export async function handleRequest({ logger, metrics, stream, peerId, protocol, protocolID, rateLimiter, signal, requestId = 0, peerClient = "unknown", requestTimeoutMs, }) {
|
|
23
|
-
const REQUEST_TIMEOUT = requestTimeoutMs
|
|
23
|
+
const REQUEST_TIMEOUT = requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT;
|
|
24
24
|
const logCtx = { method: protocol.method, client: peerClient, peer: prettyPrintPeerId(peerId), requestId };
|
|
25
25
|
let responseError = null;
|
|
26
26
|
await pipe(
|
|
@@ -28,10 +28,9 @@ export async function handleRequest({ logger, metrics, stream, peerId, protocol,
|
|
|
28
28
|
// This syntax allows to recycle stream.sink to send success and error chunks without returning
|
|
29
29
|
// in case request whose body is a List fails at chunk_i > 0, without breaking out of the for..await..of
|
|
30
30
|
(async function* requestHandlerSource() {
|
|
31
|
-
var _a, _b, _c;
|
|
32
31
|
try {
|
|
33
32
|
// TODO: Does the TTFB timer start on opening stream or after receiving request
|
|
34
|
-
const timerTTFB = metrics
|
|
33
|
+
const timerTTFB = metrics?.outgoingResponseTTFB.startTimer({ method: protocol.method });
|
|
35
34
|
const requestBody = await withTimeout(() => pipe(stream.source, requestDecode(protocol)), REQUEST_TIMEOUT, signal).catch((e) => {
|
|
36
35
|
if (e instanceof TimeoutError) {
|
|
37
36
|
throw e; // Let outter catch {} re-type the error as SERVER_ERROR
|
|
@@ -42,7 +41,7 @@ export async function handleRequest({ logger, metrics, stream, peerId, protocol,
|
|
|
42
41
|
});
|
|
43
42
|
logger.debug("Req received", logCtx);
|
|
44
43
|
// Max count by request for byRange and byRoot
|
|
45
|
-
const requestCount =
|
|
44
|
+
const requestCount = protocol?.inboundRateLimits?.getRequestCount?.(requestBody) ?? 1;
|
|
46
45
|
if (!rateLimiter.allows(peerId, protocolID, requestCount)) {
|
|
47
46
|
throw new RequestError({ code: RequestErrorCode.REQUEST_RATE_LIMITED });
|
|
48
47
|
}
|
|
@@ -59,7 +58,7 @@ export async function handleRequest({ logger, metrics, stream, peerId, protocol,
|
|
|
59
58
|
responseEncodeSuccess(protocol, {
|
|
60
59
|
onChunk(chunkIndex) {
|
|
61
60
|
if (chunkIndex === 0)
|
|
62
|
-
timerTTFB
|
|
61
|
+
timerTTFB?.();
|
|
63
62
|
},
|
|
64
63
|
}));
|
|
65
64
|
}
|
|
@@ -74,7 +73,7 @@ export async function handleRequest({ logger, metrics, stream, peerId, protocol,
|
|
|
74
73
|
// If streak.sink throws, libp2p-mplex will close stream.source
|
|
75
74
|
// If `requestDecode()` throws the stream.source must be closed manually
|
|
76
75
|
// To ensure the stream.source it-pushable instance is always closed, stream.close() is called always
|
|
77
|
-
stream.close();
|
|
76
|
+
await stream.close();
|
|
78
77
|
// TODO: It may happen that stream.sink returns before returning stream.source first,
|
|
79
78
|
// so you never see "Resp received request" in the logs and the response ends without
|
|
80
79
|
// sending any chunk, triggering EMPTY_RESPONSE error on the requesting side
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/response/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAC;AAI7B,OAAO,EAAS,YAAY,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAC,mBAAmB,EAAE,qBAAqB,EAAC,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAC,UAAU,EAAC,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AAGpE,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAC,aAAa,EAAC,CAAC;AAEvB,+HAA+H;AAC/H,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,QAAQ;AAkBzD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,EACN,SAAS,GAAG,CAAC,EACb,UAAU,GAAG,SAAS,EACtB,gBAAgB,GACE;IAClB,MAAM,eAAe,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/response/index.ts"],"names":[],"mappings":"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"}
|
package/lib/types.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PeerId } from "@libp2p/interface
|
|
1
|
+
import { PeerId } from "@libp2p/interface/peer-id";
|
|
2
2
|
import { BeaconConfig, ForkDigestContext } from "@lodestar/config";
|
|
3
3
|
import { ForkName } from "@lodestar/params";
|
|
4
4
|
import { LodestarError } from "@lodestar/utils";
|
package/lib/utils/peerId.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.11.0-dev.
|
|
14
|
+
"version": "1.11.0-dev.e50877ff5d",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": {
|
|
17
17
|
".": {
|
|
@@ -55,25 +55,24 @@
|
|
|
55
55
|
},
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@chainsafe/fast-crc32c": "^4.1.1",
|
|
58
|
-
"@libp2p/interface
|
|
59
|
-
"@
|
|
60
|
-
"@lodestar/
|
|
61
|
-
"@lodestar/
|
|
62
|
-
"@lodestar/utils": "1.11.0-dev.df2f4d3f34",
|
|
58
|
+
"@libp2p/interface": "^0.1.1",
|
|
59
|
+
"@lodestar/config": "1.11.0-dev.e50877ff5d",
|
|
60
|
+
"@lodestar/params": "1.11.0-dev.e50877ff5d",
|
|
61
|
+
"@lodestar/utils": "1.11.0-dev.e50877ff5d",
|
|
63
62
|
"it-all": "^3.0.2",
|
|
64
63
|
"it-pipe": "^3.0.1",
|
|
65
64
|
"snappy": "^7.2.2",
|
|
66
65
|
"snappyjs": "^0.7.0",
|
|
67
|
-
"
|
|
68
|
-
"
|
|
66
|
+
"uint8-varint": "^2.0.1",
|
|
67
|
+
"uint8arraylist": "^2.4.3"
|
|
69
68
|
},
|
|
70
69
|
"devDependencies": {
|
|
71
|
-
"@lodestar/logger": "1.11.0-dev.
|
|
72
|
-
"@lodestar/types": "1.11.0-dev.
|
|
73
|
-
"libp2p": "0.
|
|
70
|
+
"@lodestar/logger": "1.11.0-dev.e50877ff5d",
|
|
71
|
+
"@lodestar/types": "1.11.0-dev.e50877ff5d",
|
|
72
|
+
"libp2p": "0.46.3"
|
|
74
73
|
},
|
|
75
74
|
"peerDependencies": {
|
|
76
|
-
"libp2p": "~0.
|
|
75
|
+
"libp2p": "~0.46.3"
|
|
77
76
|
},
|
|
78
77
|
"keywords": [
|
|
79
78
|
"ethereum",
|
|
@@ -83,5 +82,5 @@
|
|
|
83
82
|
"reqresp",
|
|
84
83
|
"blockchain"
|
|
85
84
|
],
|
|
86
|
-
"gitHead": "
|
|
85
|
+
"gitHead": "4a5b72db5f4d0f8fe3ff45d928d248fb5c2c7e57"
|
|
87
86
|
}
|