@lodestar/reqresp 1.41.0-dev.9fa839a030 → 1.41.0-dev.aeab9f930d

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.
Files changed (151) hide show
  1. package/README.md +1 -1
  2. package/lib/ReqResp.d.ts +3 -3
  3. package/lib/ReqResp.d.ts.map +1 -1
  4. package/lib/ReqResp.js +4 -4
  5. package/lib/ReqResp.js.map +1 -1
  6. package/lib/encoders/requestDecode.d.ts +2 -3
  7. package/lib/encoders/requestDecode.d.ts.map +1 -1
  8. package/lib/encoders/requestDecode.js +28 -11
  9. package/lib/encoders/requestDecode.js.map +1 -1
  10. package/lib/encoders/requestEncode.d.ts +1 -1
  11. package/lib/encoders/requestEncode.d.ts.map +1 -1
  12. package/lib/encoders/requestEncode.js +1 -1
  13. package/lib/encoders/requestEncode.js.map +1 -1
  14. package/lib/encoders/responseDecode.d.ts +10 -10
  15. package/lib/encoders/responseDecode.d.ts.map +1 -1
  16. package/lib/encoders/responseDecode.js +63 -60
  17. package/lib/encoders/responseDecode.js.map +1 -1
  18. package/lib/encoders/responseEncode.d.ts +2 -4
  19. package/lib/encoders/responseEncode.d.ts.map +1 -1
  20. package/lib/encoders/responseEncode.js +18 -24
  21. package/lib/encoders/responseEncode.js.map +1 -1
  22. package/lib/encodingStrategies/index.d.ts +4 -3
  23. package/lib/encodingStrategies/index.d.ts.map +1 -1
  24. package/lib/encodingStrategies/index.js +4 -4
  25. package/lib/encodingStrategies/index.js.map +1 -1
  26. package/lib/encodingStrategies/sszSnappy/decode.d.ts +5 -4
  27. package/lib/encodingStrategies/sszSnappy/decode.d.ts.map +1 -1
  28. package/lib/encodingStrategies/sszSnappy/decode.js +83 -52
  29. package/lib/encodingStrategies/sszSnappy/decode.js.map +1 -1
  30. package/lib/encodingStrategies/sszSnappy/encode.d.ts +2 -2
  31. package/lib/encodingStrategies/sszSnappy/encode.d.ts.map +1 -1
  32. package/lib/encodingStrategies/sszSnappy/encode.js +1 -1
  33. package/lib/encodingStrategies/sszSnappy/encode.js.map +1 -1
  34. package/lib/encodingStrategies/sszSnappy/errors.d.ts +0 -8
  35. package/lib/encodingStrategies/sszSnappy/errors.d.ts.map +1 -1
  36. package/lib/encodingStrategies/sszSnappy/errors.js +2 -3
  37. package/lib/encodingStrategies/sszSnappy/errors.js.map +1 -1
  38. package/lib/encodingStrategies/sszSnappy/index.d.ts +0 -1
  39. package/lib/encodingStrategies/sszSnappy/index.d.ts.map +1 -1
  40. package/lib/encodingStrategies/sszSnappy/index.js +0 -1
  41. package/lib/encodingStrategies/sszSnappy/index.js.map +1 -1
  42. package/lib/encodingStrategies/sszSnappy/utils.js.map +1 -1
  43. package/lib/interface.js +2 -1
  44. package/lib/interface.js.map +1 -1
  45. package/lib/metrics.d.ts +1 -7
  46. package/lib/metrics.d.ts.map +1 -1
  47. package/lib/metrics.js +1 -17
  48. package/lib/metrics.js.map +1 -1
  49. package/lib/rate_limiter/ReqRespRateLimiter.d.ts.map +1 -1
  50. package/lib/rate_limiter/ReqRespRateLimiter.js.map +1 -1
  51. package/lib/rate_limiter/rateLimiterGRCA.d.ts.map +1 -1
  52. package/lib/rate_limiter/rateLimiterGRCA.js.map +1 -1
  53. package/lib/rate_limiter/selfRateLimiter.d.ts.map +1 -1
  54. package/lib/rate_limiter/selfRateLimiter.js.map +1 -1
  55. package/lib/request/errors.d.ts +1 -7
  56. package/lib/request/errors.d.ts.map +1 -1
  57. package/lib/request/errors.js +3 -6
  58. package/lib/request/errors.js.map +1 -1
  59. package/lib/request/index.d.ts +0 -3
  60. package/lib/request/index.d.ts.map +1 -1
  61. package/lib/request/index.js +85 -70
  62. package/lib/request/index.js.map +1 -1
  63. package/lib/response/errors.d.ts.map +1 -1
  64. package/lib/response/errors.js +2 -1
  65. package/lib/response/errors.js.map +1 -1
  66. package/lib/response/index.d.ts +2 -2
  67. package/lib/response/index.d.ts.map +1 -1
  68. package/lib/response/index.js +46 -50
  69. package/lib/response/index.js.map +1 -1
  70. package/lib/types.d.ts +1 -2
  71. package/lib/types.d.ts.map +1 -1
  72. package/lib/types.js +7 -5
  73. package/lib/types.js.map +1 -1
  74. package/lib/utils/collectExactOne.js.map +1 -1
  75. package/lib/utils/collectMaxResponse.d.ts.map +1 -1
  76. package/lib/utils/collectMaxResponse.js +1 -2
  77. package/lib/utils/collectMaxResponse.js.map +1 -1
  78. package/lib/utils/errorMessage.d.ts +7 -2
  79. package/lib/utils/errorMessage.d.ts.map +1 -1
  80. package/lib/utils/errorMessage.js +23 -11
  81. package/lib/utils/errorMessage.js.map +1 -1
  82. package/lib/utils/index.d.ts +1 -3
  83. package/lib/utils/index.d.ts.map +1 -1
  84. package/lib/utils/index.js +1 -3
  85. package/lib/utils/index.js.map +1 -1
  86. package/lib/utils/peerId.js.map +1 -1
  87. package/lib/utils/protocolId.d.ts +2 -2
  88. package/lib/utils/protocolId.js +2 -2
  89. package/lib/utils/protocolId.js.map +1 -1
  90. package/lib/utils/snappyCommon.js +2 -1
  91. package/lib/utils/snappyCommon.js.map +1 -1
  92. package/lib/utils/snappyCompress.d.ts +1 -1
  93. package/lib/utils/snappyCompress.d.ts.map +1 -1
  94. package/lib/utils/snappyCompress.js +1 -1
  95. package/lib/utils/snappyCompress.js.map +1 -1
  96. package/lib/utils/snappyIndex.d.ts +1 -1
  97. package/lib/utils/snappyIndex.d.ts.map +1 -1
  98. package/lib/utils/snappyIndex.js +1 -1
  99. package/lib/utils/snappyIndex.js.map +1 -1
  100. package/lib/utils/snappyUncompress.d.ts +7 -11
  101. package/lib/utils/snappyUncompress.d.ts.map +1 -1
  102. package/lib/utils/snappyUncompress.js +68 -68
  103. package/lib/utils/snappyUncompress.js.map +1 -1
  104. package/lib/utils/stream.d.ts +6 -0
  105. package/lib/utils/stream.d.ts.map +1 -0
  106. package/lib/utils/stream.js +21 -0
  107. package/lib/utils/stream.js.map +1 -0
  108. package/package.json +16 -18
  109. package/src/ReqResp.ts +4 -4
  110. package/src/encoders/requestDecode.ts +32 -16
  111. package/src/encoders/requestEncode.ts +1 -1
  112. package/src/encoders/responseDecode.ts +68 -72
  113. package/src/encoders/responseEncode.ts +22 -31
  114. package/src/encodingStrategies/index.ts +8 -6
  115. package/src/encodingStrategies/sszSnappy/decode.ts +111 -53
  116. package/src/encodingStrategies/sszSnappy/encode.ts +2 -2
  117. package/src/encodingStrategies/sszSnappy/errors.ts +0 -4
  118. package/src/encodingStrategies/sszSnappy/index.ts +0 -1
  119. package/src/metrics.ts +1 -17
  120. package/src/request/errors.ts +1 -6
  121. package/src/request/index.ts +109 -86
  122. package/src/response/index.ts +55 -61
  123. package/src/types.ts +1 -3
  124. package/src/utils/collectMaxResponse.ts +1 -2
  125. package/src/utils/errorMessage.ts +24 -11
  126. package/src/utils/index.ts +1 -3
  127. package/src/utils/protocolId.ts +2 -2
  128. package/src/utils/snappyCompress.ts +1 -1
  129. package/src/utils/snappyIndex.ts +1 -1
  130. package/src/utils/snappyUncompress.ts +73 -75
  131. package/src/utils/stream.ts +34 -0
  132. package/lib/utils/abortableSource.d.ts +0 -12
  133. package/lib/utils/abortableSource.d.ts.map +0 -1
  134. package/lib/utils/abortableSource.js +0 -69
  135. package/lib/utils/abortableSource.js.map +0 -1
  136. package/lib/utils/bufferedSource.d.ts +0 -16
  137. package/lib/utils/bufferedSource.d.ts.map +0 -1
  138. package/lib/utils/bufferedSource.js +0 -40
  139. package/lib/utils/bufferedSource.js.map +0 -1
  140. package/lib/utils/onChunk.d.ts +0 -6
  141. package/lib/utils/onChunk.d.ts.map +0 -1
  142. package/lib/utils/onChunk.js +0 -13
  143. package/lib/utils/onChunk.js.map +0 -1
  144. package/lib/utils/snappy.d.ts +0 -3
  145. package/lib/utils/snappy.d.ts.map +0 -1
  146. package/lib/utils/snappy.js +0 -3
  147. package/lib/utils/snappy.js.map +0 -1
  148. package/src/utils/abortableSource.ts +0 -80
  149. package/src/utils/bufferedSource.ts +0 -46
  150. package/src/utils/onChunk.ts +0 -12
  151. package/src/utils/snappy.ts +0 -2
@@ -19,13 +19,9 @@ export declare enum RequestErrorCode {
19
19
  REQUEST_TIMEOUT = "REQUEST_ERROR_REQUEST_TIMEOUT",
20
20
  /** Error when sending request to responder */
21
21
  REQUEST_ERROR = "REQUEST_ERROR_REQUEST_ERROR",
22
- /** Reponder did not deliver a full reponse before max maxTotalResponseTimeout() */
23
- RESPONSE_TIMEOUT = "REQUEST_ERROR_RESPONSE_TIMEOUT",
24
22
  /** A single-response method returned 0 chunks */
25
23
  EMPTY_RESPONSE = "REQUEST_ERROR_EMPTY_RESPONSE",
26
- /** Time to first byte timeout */
27
- TTFB_TIMEOUT = "REQUEST_ERROR_TTFB_TIMEOUT",
28
- /** Timeout between `<response_chunk>` exceed */
24
+ /** Response transfer timeout exceeded */
29
25
  RESP_TIMEOUT = "REQUEST_ERROR_RESP_TIMEOUT",
30
26
  /** Request rate limited */
31
27
  REQUEST_RATE_LIMITED = "REQUEST_ERROR_RATE_LIMITED",
@@ -64,8 +60,6 @@ type RequestErrorType = {
64
60
  error: Error;
65
61
  } | {
66
62
  code: RequestErrorCode.EMPTY_RESPONSE;
67
- } | {
68
- code: RequestErrorCode.TTFB_TIMEOUT;
69
63
  } | {
70
64
  code: RequestErrorCode.RESP_TIMEOUT;
71
65
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAa,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAEnD,oBAAY,gBAAgB;IAE1B,4DAA4D;IAC5D,eAAe,kCAAkC;IACjD,oBAAoB,uCAAuC;IAC3D,yDAAyD;IACzD,YAAY,+BAA+B;IAC3C,iEAAiE;IACjE,oBAAoB,+BAA+B;IACnD,wEAAwE;IACxE,oBAAoB,uCAAuC;IAC3D,4DAA4D;IAC5D,YAAY,+BAA+B;IAC3C,uCAAuC;IACvC,UAAU,6BAA6B;IACvC,iEAAiE;IACjE,eAAe,kCAAkC;IACjD,8CAA8C;IAC9C,aAAa,gCAAgC;IAC7C,mFAAmF;IACnF,gBAAgB,mCAAmC;IACnD,iDAAiD;IACjD,cAAc,iCAAiC;IAC/C,iCAAiC;IACjC,YAAY,+BAA+B;IAC3C,gDAAgD;IAChD,YAAY,+BAA+B;IAC3C,2BAA2B;IAC3B,oBAAoB,+BAA+B;IACnD,gCAAgC;IAChC,yBAAyB,oCAAoC;IAC7D,4BAA4B;IAC5B,iBAAiB,gCAAgC;IACjD,6CAA6C;IAC7C,iBAAiB,uCAAuC;CACzD;AAED,KAAK,gBAAgB,GACjB;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC9D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC3D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnG;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACjD;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAA;CAAC,GACxC;IAAC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACpD;IAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAA;CAAC,GACvC;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAA;CAAC,GAC7C;IAAC,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAA;CAAC,GAClD;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,GAC1C;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,CAAC;AAE/C,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD,qBAAa,YAAa,SAAQ,aAAa,CAAC,gBAAgB,CAAC;gBACnD,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAIpE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,YAAY;CAO1D;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAyBpF"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAa,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAEnD,oBAAY,gBAAgB;IAE1B,4DAA4D;IAC5D,eAAe,kCAAkC;IACjD,oBAAoB,uCAAuC;IAC3D,yDAAyD;IACzD,YAAY,+BAA+B;IAC3C,iEAAiE;IACjE,oBAAoB,+BAA+B;IACnD,wEAAwE;IACxE,oBAAoB,uCAAuC;IAC3D,4DAA4D;IAC5D,YAAY,+BAA+B;IAC3C,uCAAuC;IACvC,UAAU,6BAA6B;IACvC,iEAAiE;IACjE,eAAe,kCAAkC;IACjD,8CAA8C;IAC9C,aAAa,gCAAgC;IAC7C,iDAAiD;IACjD,cAAc,iCAAiC;IAC/C,yCAAyC;IACzC,YAAY,+BAA+B;IAC3C,2BAA2B;IAC3B,oBAAoB,+BAA+B;IACnD,gCAAgC;IAChC,yBAAyB,oCAAoC;IAC7D,4BAA4B;IAC5B,iBAAiB,gCAAgC;IACjD,6CAA6C;IAC7C,iBAAiB,uCAAuC;CACzD;AAED,KAAK,gBAAgB,GACjB;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC9D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GAC3D;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnE;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAC;IAAC,MAAM,EAAE,sBAAsB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAC,GACnG;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACjD;IAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,CAAA;CAAC,GACxC;IAAC,IAAI,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAC,GACpD;IAAC,IAAI,EAAE,gBAAgB,CAAC,cAAc,CAAA;CAAC,GACvC;IAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,CAAA;CAAC,GACrC;IAAC,IAAI,EAAE,gBAAgB,CAAC,oBAAoB,CAAA;CAAC,GAC7C;IAAC,IAAI,EAAE,gBAAgB,CAAC,yBAAyB,CAAA;CAAC,GAClD;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,GAC1C;IAAC,IAAI,EAAE,gBAAgB,CAAC,iBAAiB,CAAA;CAAC,CAAC;AAE/C,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD,qBAAa,YAAa,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAC/D,YAAY,IAAI,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAEnE;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,YAAY,CAMxD;CACF;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,aAAa,GAAG,gBAAgB,CAyBpF"}
@@ -1,6 +1,7 @@
1
1
  import { LodestarError } from "@lodestar/utils";
2
2
  import { RespStatus } from "../interface.js";
3
- export var RequestErrorCode;
3
+ export { RequestErrorCode };
4
+ var RequestErrorCode;
4
5
  (function (RequestErrorCode) {
5
6
  // Declaring specific values of RpcResponseStatusError for error clarity downstream
6
7
  /** `<response_chunk>` had `<result>` === INVALID_REQUEST */
@@ -20,13 +21,9 @@ export var RequestErrorCode;
20
21
  RequestErrorCode["REQUEST_TIMEOUT"] = "REQUEST_ERROR_REQUEST_TIMEOUT";
21
22
  /** Error when sending request to responder */
22
23
  RequestErrorCode["REQUEST_ERROR"] = "REQUEST_ERROR_REQUEST_ERROR";
23
- /** Reponder did not deliver a full reponse before max maxTotalResponseTimeout() */
24
- RequestErrorCode["RESPONSE_TIMEOUT"] = "REQUEST_ERROR_RESPONSE_TIMEOUT";
25
24
  /** A single-response method returned 0 chunks */
26
25
  RequestErrorCode["EMPTY_RESPONSE"] = "REQUEST_ERROR_EMPTY_RESPONSE";
27
- /** Time to first byte timeout */
28
- RequestErrorCode["TTFB_TIMEOUT"] = "REQUEST_ERROR_TTFB_TIMEOUT";
29
- /** Timeout between `<response_chunk>` exceed */
26
+ /** Response transfer timeout exceeded */
30
27
  RequestErrorCode["RESP_TIMEOUT"] = "REQUEST_ERROR_RESP_TIMEOUT";
31
28
  /** Request rate limited */
32
29
  RequestErrorCode["REQUEST_RATE_LIMITED"] = "REQUEST_ERROR_RATE_LIMITED";
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/request/errors.ts"],"names":[],"mappings":"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"}
@@ -7,15 +7,12 @@ import { RequestError, RequestErrorCode } from "./errors.js";
7
7
  export { RequestError, RequestErrorCode };
8
8
  export declare const DEFAULT_DIAL_TIMEOUT: number;
9
9
  export declare const DEFAULT_REQUEST_TIMEOUT: number;
10
- export declare const DEFAULT_TTFB_TIMEOUT: number;
11
10
  export declare const DEFAULT_RESP_TIMEOUT: number;
12
11
  export interface SendRequestOpts {
13
12
  /** The maximum time for complete response transfer. */
14
13
  respTimeoutMs?: number;
15
14
  /** Non-spec timeout from sending request until write stream closed by responder */
16
15
  requestTimeoutMs?: number;
17
- /** The maximum time to wait for first byte of request response (time-to-first-byte). */
18
- ttfbTimeoutMs?: number;
19
16
  /** Non-spec timeout from dialing protocol until stream opened */
20
17
  dialTimeoutMs?: number;
21
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAEzC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAe,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAGhF,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,CAAC;AAGxC,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAChD,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAuB,WAAW,CAChC,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAC,EAAE,kBAAkB,EACzD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,EAAE,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,eAAe,EACtB,SAAS,SAAI,GACZ,aAAa,CAAC,gBAAgB,CAAC,CAqKjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACzC,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAe,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAGhF,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAC,aAAa,EAAE,gBAAgB,EAAC,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAoC,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,CAAC;AAGxC,eAAO,MAAM,oBAAoB,QAAW,CAAC;AAC7C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAChD,eAAO,MAAM,oBAAoB,QAAY,CAAC;AAyD9C,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAuB,WAAW,CAChC,EAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAC,EAAE,kBAAkB,EACzD,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,aAAa,EAAE,EAC1B,WAAW,EAAE,MAAM,EAAE,EACrB,WAAW,EAAE,UAAU,EACvB,MAAM,CAAC,EAAE,WAAW,EACpB,IAAI,CAAC,EAAE,eAAe,EACtB,SAAS,SAAI,GACZ,aAAa,CAAC,gBAAgB,CAAC,CAyIjC"}
@@ -1,16 +1,57 @@
1
- import { pipe } from "it-pipe";
2
1
  import { ErrorAborted, TimeoutError, withTimeout } from "@lodestar/utils";
3
2
  import { requestEncode } from "../encoders/requestEncode.js";
4
3
  import { responseDecode } from "../encoders/responseDecode.js";
5
4
  import { ResponseError } from "../response/index.js";
6
- import { abortableSource, prettyPrintPeerId } from "../utils/index.js";
5
+ import { prettyPrintPeerId, sendChunks } from "../utils/index.js";
7
6
  import { RequestError, RequestErrorCode, responseStatusErrorToRequestError } from "./errors.js";
8
7
  export { RequestError, RequestErrorCode };
9
- // Default spec values from https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/phase0/p2p-interface.md#configuration
8
+ // https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/p2p-interface.md#the-reqresp-domain
10
9
  export const DEFAULT_DIAL_TIMEOUT = 5 * 1000; // 5 sec
11
10
  export const DEFAULT_REQUEST_TIMEOUT = 5 * 1000; // 5 sec
12
- export const DEFAULT_TTFB_TIMEOUT = 5 * 1000; // 5 sec
13
11
  export const DEFAULT_RESP_TIMEOUT = 10 * 1000; // 10 sec
12
+ function getStreamNotFullyConsumedError() {
13
+ return new Error("ReqResp stream was not fully consumed");
14
+ }
15
+ function scheduleStreamAbortIfNotClosed(stream, timeoutMs) {
16
+ const onClose = () => {
17
+ clearTimeout(timeout);
18
+ };
19
+ const timeout = setTimeout(() => {
20
+ stream.removeEventListener("close", onClose);
21
+ if (stream.status === "open" && stream.remoteWriteStatus === "writable") {
22
+ stream.abort(getStreamNotFullyConsumedError());
23
+ }
24
+ }, timeoutMs);
25
+ stream.addEventListener("close", onClose, { once: true });
26
+ }
27
+ function createRespSignal(signal, timeoutMs) {
28
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
29
+ const signals = signal ? [signal, timeoutSignal] : [timeoutSignal];
30
+ const controller = new AbortController();
31
+ const clear = () => {
32
+ for (const entry of signals) {
33
+ entry.removeEventListener("abort", onAbort);
34
+ }
35
+ };
36
+ const onAbort = () => {
37
+ if (controller.signal.aborted) {
38
+ return;
39
+ }
40
+ const reason = signals.find((entry) => entry.aborted)?.reason;
41
+ controller.abort(reason);
42
+ clear();
43
+ };
44
+ for (const entry of signals) {
45
+ if (entry.aborted) {
46
+ onAbort();
47
+ break;
48
+ }
49
+ entry.addEventListener("abort", onAbort);
50
+ }
51
+ const respSignal = controller.signal;
52
+ respSignal.clear = clear;
53
+ return respSignal;
54
+ }
14
55
  /**
15
56
  * Sends ReqResp request to a peer. Throws on error. Logs each step of the request lifecycle.
16
57
  *
@@ -28,7 +69,6 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
28
69
  }
29
70
  const DIAL_TIMEOUT = opts?.dialTimeoutMs ?? DEFAULT_DIAL_TIMEOUT;
30
71
  const REQUEST_TIMEOUT = opts?.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT;
31
- const TTFB_TIMEOUT = opts?.ttfbTimeoutMs ?? DEFAULT_TTFB_TIMEOUT;
32
72
  const RESP_TIMEOUT = opts?.respTimeoutMs ?? DEFAULT_RESP_TIMEOUT;
33
73
  const peerIdStrShort = prettyPrintPeerId(peerId);
34
74
  const { method, encoding, version } = protocols[0];
@@ -42,16 +82,6 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
42
82
  // On stream negotiation `libp2p.dialProtocol` will pick the available protocol and return
43
83
  // the picked protocol in `connection.protocol`
44
84
  const protocolsMap = new Map(protocols.map((protocol, i) => [protocolIDs[i], protocol]));
45
- // As of October 2020 we can't rely on libp2p.dialProtocol timeout to work so
46
- // this function wraps the dialProtocol promise with an extra timeout
47
- //
48
- // > The issue might be: you add the peer's addresses to the AddressBook,
49
- // which will result in autoDial to kick in and dial your peer. In parallel,
50
- // you do a manual dial and it will wait for the previous one without using
51
- // the abort signal:
52
- //
53
- // https://github.com/ChainSafe/lodestar/issues/1597#issuecomment-703394386
54
- // DIAL_TIMEOUT: Non-spec timeout from dialing protocol until stream opened
55
85
  const stream = await withTimeout(async (timeoutAndParentSignal) => {
56
86
  const protocolIds = Array.from(protocolsMap.keys());
57
87
  const conn = await libp2p.dialProtocol(peerId, protocolIds, { signal: timeoutAndParentSignal });
@@ -65,8 +95,6 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
65
95
  throw new RequestError({ code: RequestErrorCode.DIAL_ERROR, error: e });
66
96
  });
67
97
  metrics?.outgoingOpenedStreams?.inc({ method });
68
- // TODO: Does the TTFB timer start on opening stream or after receiving request
69
- const timerTTFB = metrics?.outgoingResponseTTFB.startTimer({ method });
70
98
  // Parse protocol selected by the responder
71
99
  const protocolId = stream.protocol ?? "unknown";
72
100
  const protocol = protocolsMap.get(protocolId);
@@ -76,11 +104,12 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
76
104
  logCtx.version = protocol.version;
77
105
  logger.debug("Req sending request", logCtx);
78
106
  // Spec: The requester MUST close the write side of the stream once it finishes writing the request message
79
- // Impl: stream.sink is closed automatically by js-libp2p-mplex when piped source is exhausted
80
107
  // REQUEST_TIMEOUT: Non-spec timeout from sending request until write stream closed by responder
81
- // Note: libp2p.stop() will close all connections, so not necessary to abort this pipe on parent stop
82
- await withTimeout(() => pipe(requestEncode(protocol, requestBody), stream.sink), REQUEST_TIMEOUT, signal).catch((e) => {
83
- // Must close the stream read side (stream.source) manually AND the write side
108
+ // Note: libp2p.stop() will close all connections, so not necessary to abort this send on parent stop
109
+ await withTimeout(async (timeoutAndParentSignal) => {
110
+ await sendChunks(stream, requestEncode(protocol, requestBody), timeoutAndParentSignal);
111
+ await stream.close({ signal: timeoutAndParentSignal });
112
+ }, REQUEST_TIMEOUT, signal).catch((e) => {
84
113
  stream.abort(e);
85
114
  if (e instanceof TimeoutError) {
86
115
  throw new RequestError({ code: RequestErrorCode.REQUEST_TIMEOUT });
@@ -93,62 +122,48 @@ export async function* sendRequest({ logger, libp2p, metrics, peerClient }, peer
93
122
  if (protocol.ignoreResponse) {
94
123
  return;
95
124
  }
96
- // - TTFB_TIMEOUT: The requester MUST wait a maximum of TTFB_TIMEOUT for the first response byte to arrive
97
- // - RESP_TIMEOUT: Requester allows a further RESP_TIMEOUT for each subsequent response_chunk
98
- // - Max total timeout: This timeout is not required by the spec. It may not be necessary, but it's kept as
99
- // safe-guard to close. streams in case of bugs on other timeout mechanisms.
100
- const ttfbTimeoutController = new AbortController();
101
- const respTimeoutController = new AbortController();
102
- let timeoutRESP = null;
103
- const timeoutTTFB = setTimeout(() => {
104
- // If we abort on first byte delay, don't need to abort for response delay
105
- if (timeoutRESP)
106
- clearTimeout(timeoutRESP);
107
- ttfbTimeoutController.abort();
108
- }, TTFB_TIMEOUT);
109
- const restartRespTimeout = () => {
110
- if (timeoutRESP)
111
- clearTimeout(timeoutRESP);
112
- timeoutRESP = setTimeout(() => respTimeoutController.abort(), RESP_TIMEOUT);
113
- };
125
+ // RESP_TIMEOUT: Maximum time for complete response transfer
126
+ const respSignal = createRespSignal(signal, RESP_TIMEOUT);
127
+ let responseError = null;
128
+ let responseFullyConsumed = false;
114
129
  try {
115
- // Note: libp2p.stop() will close all connections, so not necessary to abort this pipe on parent stop
116
- yield* pipe(abortableSource(stream.source, [
117
- {
118
- signal: ttfbTimeoutController.signal,
119
- getError: () => new RequestError({ code: RequestErrorCode.TTFB_TIMEOUT }),
120
- },
121
- {
122
- signal: respTimeoutController.signal,
123
- getError: () => new RequestError({ code: RequestErrorCode.RESP_TIMEOUT }),
124
- },
125
- ]),
126
- // Transforms `Buffer` chunks to yield `ResponseBody` chunks
127
- responseDecode(protocol, {
128
- onFirstHeader() {
129
- // On first byte, cancel the single use TTFB_TIMEOUT, and start RESP_TIMEOUT
130
- clearTimeout(timeoutTTFB);
131
- timerTTFB?.();
132
- restartRespTimeout();
133
- },
134
- onFirstResponseChunk() {
135
- // On <response_chunk>, cancel this chunk's RESP_TIMEOUT and start next's
136
- restartRespTimeout();
137
- },
138
- }));
130
+ yield* responseDecode(protocol, stream, {
131
+ signal: respSignal,
132
+ getError: () => signal?.aborted ? new ErrorAborted("sendRequest") : new RequestError({ code: RequestErrorCode.RESP_TIMEOUT }),
133
+ });
134
+ responseFullyConsumed = true;
139
135
  // NOTE: Only log once per request to verbose, intermediate steps to debug
140
136
  // NOTE: Do not log the response, logs get extremely cluttered
141
137
  // NOTE: add double space after "Req " to align log with the "Resp " log
142
138
  logger.verbose("Req done", logCtx);
143
139
  }
140
+ catch (e) {
141
+ responseError = e;
142
+ throw e;
143
+ }
144
144
  finally {
145
- clearTimeout(timeoutTTFB);
146
- if (timeoutRESP !== null)
147
- clearTimeout(timeoutRESP);
148
- // Necessary to call `stream.close()` since collectResponses() may break out of the source before exhausting it
149
- // `stream.close()` libp2p-mplex will .end() the source (it-pushable instance)
150
- // If collectResponses() exhausts the source, it-pushable.end() can be safely called multiple times
151
- await stream.close();
145
+ // On decode/timeout failures abort immediately so mplex can reclaim stream state.
146
+ // On normal early consumer exit, close gracefully to avoid stream-id desync with peers.
147
+ if (responseError !== null || signal?.aborted) {
148
+ stream.abort(responseError ?? new ErrorAborted("sendRequest"));
149
+ }
150
+ else {
151
+ await stream.close().catch((e) => {
152
+ stream.abort(e);
153
+ });
154
+ if (!responseFullyConsumed) {
155
+ // Stop buffering unread inbound data after caller exits early.
156
+ // mplex does not support propagating closeRead to the remote, so still
157
+ // abort later if the remote never closes write.
158
+ await stream.closeRead().catch(() => {
159
+ // Ignore closeRead errors - close/abort path below will reclaim stream.
160
+ });
161
+ if (stream.remoteWriteStatus === "writable") {
162
+ scheduleStreamAbortIfNotClosed(stream, RESP_TIMEOUT);
163
+ }
164
+ }
165
+ }
166
+ respSignal.clear();
152
167
  metrics?.outgoingClosedStreams?.inc({ method });
153
168
  logger.verbose("Req stream closed", logCtx);
154
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/request/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,YAAY,EAAU,YAAY,EAAE,WAAW,EAAC,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAC,aAAa,EAAC,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAC,cAAc,EAAC,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAC,aAAa,EAAC,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAE,iCAAiC,EAAC,MAAM,aAAa,CAAC;AAE9F,OAAO,EAAC,YAAY,EAAE,gBAAgB,EAAC,CAAC;AAExC,2GAA2G;AAC3G,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,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;AAExD,SAAS,8BAA8B,GAAU;IAC/C,OAAO,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;AAAA,CAC3D;AAED,SAAS,8BAA8B,CAAC,MAAc,EAAE,SAAiB,EAAQ;IAC/E,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC;QAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;IAAA,CACvB,CAAC;IAEF,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC;QAC/B,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;YACxE,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,CAAC;QACjD,CAAC;IAAA,CACF,EAAE,SAAS,CAAC,CAAC;IAEd,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAC,IAAI,EAAE,IAAI,EAAC,CAAC,CAAC;AAAA,CACzD;AAID,SAAS,gBAAgB,CAAC,MAA+B,EAAE,SAAiB,EAAmB;IAC7F,MAAM,aAAa,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,GAAS,EAAE,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,KAAK,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;IAAA,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,GAAS,EAAE,CAAC;QAC1B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAC9D,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,KAAK,EAAE,CAAC;IAAA,CACT,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,MAAM;QACR,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAyB,CAAC;IACxD,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;IAEzB,OAAO,UAAU,CAAC;AAAA,CACnB;AAkBD;;;;;;;;;;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,EACoB;IACjC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,EAAE,aAAa,IAAI,oBAAoB,CAAC;IACjE,MAAM,eAAe,GAAG,IAAI,EAAE,gBAAgB,IAAI,uBAAuB,CAAC;IAC1E,MAAM,YAAY,GAAG,IAAI,EAAE,aAAa,IAAI,oBAAoB,CAAC;IAEjE,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,EAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,EAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAC,CAAC;IAEhG,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;IAE1C,IAAI,CAAC;QACH,sFAAsF;QACtF,0FAA0F;QAC1F,+CAA+C;QAC/C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAwB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QAEhH,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,EAAC,MAAM,EAAE,sBAAsB,EAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,IAAI;gBAAE,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC;QAAA,CACb,EACD,YAAY,EACZ,MAAM,CACP,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,YAAY,CAAC,EAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,EAAC,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,IAAI,YAAY,CAAC,EAAC,IAAI,EAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAC,CAAC,CAAC;QAAA,CACvE,CAAC,CAAC;QAEH,OAAO,EAAE,qBAAqB,EAAE,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;QAE9C,2CAA2C;QAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC;QAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ;YAAE,MAAM,KAAK,CAAC,4CAA4C,UAAU,EAAE,CAAC,CAAC;QAErF,mDAAmD;QACnD,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;QAElC,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;QAE7C,2GAA2G;QAE3G,gGAAgG;QAChG,qGAAqG;QACrG,MAAM,WAAW,CACf,KAAK,EAAE,sBAAsB,EAAE,EAAE,CAAC;YAChC,MAAM,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,sBAAsB,CAAC,CAAC;YACvF,MAAM,MAAM,CAAC,KAAK,CAAC,EAAC,MAAM,EAAE,sBAAsB,EAAC,CAAC,CAAC;QAAA,CACtD,EACD,eAAe,EACf,MAAM,CACP,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;YAEzB,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;gBAC9B,MAAM,IAAI,YAAY,CAAC,EAAC,IAAI,EAAE,gBAAgB,CAAC,eAAe,EAAC,CAAC,CAAC;YACnE,CAAC;YACD,MAAM,IAAI,YAAY,CAAC,EAAC,IAAI,EAAE,gBAAgB,CAAC,aAAa,EAAE,KAAK,EAAE,CAAU,EAAC,CAAC,CAAC;QAAA,CACnF,CAAC,CAAC;QAEH,MAAM,CAAC,KAAK,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QAE1C,sGAAsG;QACtG,4DAA4D;QAC5D,IAAI,QAAQ,CAAC,cAAc,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,4DAA4D;QAC5D,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAE1D,IAAI,aAAa,GAAiB,IAAI,CAAC;QACvC,IAAI,qBAAqB,GAAG,KAAK,CAAC;QAElC,IAAI,CAAC;YACH,KAAK,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE;gBACtC,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,GAAG,EAAE,CACb,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,EAAC,IAAI,EAAE,gBAAgB,CAAC,YAAY,EAAC,CAAC;aAC9G,CAAC,CAAC;YACH,qBAAqB,GAAG,IAAI,CAAC;YAE7B,0EAA0E;YAC1E,8DAA8D;YAC9D,yEAAyE;YACzE,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,aAAa,GAAG,CAAU,CAAC;YAC3B,MAAM,CAAC,CAAC;QACV,CAAC;gBAAS,CAAC;YACT,kFAAkF;YAClF,wFAAwF;YACxF,IAAI,aAAa,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAChC,MAAM,CAAC,KAAK,CAAC,CAAU,CAAC,CAAC;gBAAA,CAC1B,CAAC,CAAC;gBAEH,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC3B,+DAA+D;oBAC/D,uEAAuE;oBACvE,gDAAgD;oBAChD,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;wBACnC,wEAAwE;oBADpC,CAErC,CAAC,CAAC;oBAEH,IAAI,MAAM,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;wBAC5C,8BAA8B,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO,EAAE,qBAAqB,EAAE,GAAG,CAAC,EAAC,MAAM,EAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,CAAU,CAAC,CAAC;QAEjD,IAAI,CAAC,YAAY,aAAa,EAAE,CAAC;YAC/B,MAAM,IAAI,YAAY,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,CAAC,CAAC;IACV,CAAC;AAAA,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/response/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAC,UAAU,EAAE,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AAEnE,KAAK,2BAA2B,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AAE3E,oBAAY,iBAAiB;IAC3B,qBAAqB,0BAA0B;CAChD;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD;;;GAGG;AACH,qBAAa,aAAc,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAChE,MAAM,EAAE,2BAA2B,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;gBACT,MAAM,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAOrF,WAAW,IAAI,qBAAqB;IAOpC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,aAAa;CAW3D"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/response/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,qBAAqB,EAAE,mBAAmB,EAAC,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAC,UAAU,EAAE,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AAEnE,KAAK,2BAA2B,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AAE3E,oBAAY,iBAAiB;IAC3B,qBAAqB,0BAA0B;CAChD;AAED,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD;;;GAGG;AACH,qBAAa,aAAc,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IAChE,MAAM,EAAE,2BAA2B,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,MAAM,EAAE,2BAA2B,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAKpF;IAED,WAAW,IAAI,qBAAqB,CAKnC;IAED,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,mBAAmB,GAAG,aAAa,CAUzD;CACF"}
@@ -1,6 +1,7 @@
1
1
  import { LodestarError } from "@lodestar/utils";
2
2
  import { RespStatus } from "../interface.js";
3
- export var ResponseErrorCode;
3
+ export { ResponseErrorCode };
4
+ var ResponseErrorCode;
4
5
  (function (ResponseErrorCode) {
5
6
  ResponseErrorCode["RESPONSE_STATUS_ERROR"] = "RESPONSE_STATUS_ERROR";
6
7
  })(ResponseErrorCode || (ResponseErrorCode = {}));
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/response/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAA6C,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAC,UAAU,EAAyB,MAAM,iBAAiB,CAAC;AAInE,MAAM,CAAN,IAAY,iBAEX;AAFD,WAAY,iBAAiB;IAC3B,oEAA+C,CAAA;AACjD,CAAC,EAFW,iBAAiB,KAAjB,iBAAiB,QAE5B;AAQD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,aAA+B;IAChE,MAAM,CAA8B;IACpC,YAAY,CAAS;IACrB,YAAY,MAAmC,EAAE,YAAoB,EAAE,KAAc;QACnF,MAAM,IAAI,GAAG,EAAC,IAAI,EAAE,iBAAiB,CAAC,qBAAqB,EAAE,MAAM,EAAE,YAAY,EAAC,CAAC;QACnF,KAAK,CAAC,IAAI,EAAE,kBAAkB,UAAU,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED,WAAW;QACT,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAAwB;QACxC,IAAI,GAAG,CAAC,SAAS,KAAK,yBAAyB,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,IAAI,aAAa,CACtB,GAAG,CAAC,IAAI,CAAC,MAAqC,EAC9C,GAAG,CAAC,IAAI,CAAC,YAAsB,EAC/B,GAAG,CAAC,KAAK,CACV,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/response/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAA6C,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAC,UAAU,EAAyB,MAAM,iBAAiB,CAAC;SAIvD,iBAAiB;AAA7B,IAAY,iBAEX;AAFD,WAAY,iBAAiB;IAC3B,oEAA+C,CAAA;AAAC,CAClD,EAFY,iBAAiB,KAAjB,iBAAiB,QAE5B;AAQD,MAAM,CAAC,MAAM,yBAAyB,GAAG,eAAe,CAAC;AAEzD;;;GAGG;AACH,MAAM,OAAO,aAAc,SAAQ,aAA+B;IAChE,MAAM,CAA8B;IACpC,YAAY,CAAS;IACrB,YAAY,MAAmC,EAAE,YAAoB,EAAE,KAAc,EAAE;QACrF,MAAM,IAAI,GAAG,EAAC,IAAI,EAAE,iBAAiB,CAAC,qBAAqB,EAAE,MAAM,EAAE,YAAY,EAAC,CAAC;QACnF,KAAK,CAAC,IAAI,EAAE,kBAAkB,UAAU,CAAC,MAAM,CAAC,KAAK,YAAY,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IAAA,CAClC;IAED,WAAW,GAA0B;QACnC,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,YAAY;SAChC,CAAC;IAAA,CACH;IAED,MAAM,CAAC,UAAU,CAAC,GAAwB,EAAiB;QACzD,IAAI,GAAG,CAAC,SAAS,KAAK,yBAAyB,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,mDAAmD,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,IAAI,aAAa,CACtB,GAAG,CAAC,IAAI,CAAC,MAAqC,EAC9C,GAAG,CAAC,IAAI,CAAC,YAAsB,EAC/B,GAAG,CAAC,KAAK,CACV,CAAC;IAAA,CACH;CACF"}
@@ -18,7 +18,7 @@ export interface HandleRequestOpts {
18
18
  requestId?: number;
19
19
  /** Peer client type for logging and metrics: 'prysm' | 'lighthouse' */
20
20
  peerClient?: string;
21
- /** Non-spec timeout from sending request until write stream closed by responder */
21
+ /** Timeout for reading the incoming request payload */
22
22
  requestTimeoutMs?: number;
23
23
  }
24
24
  /**
@@ -31,5 +31,5 @@ export interface HandleRequestOpts {
31
31
  * 4a. Encode and write `<response_chunks>` to peer
32
32
  * 4b. On error, encode and write an error `<response_chunk>` and stop
33
33
  */
34
- export declare function handleRequest({ logger, metrics, stream, peerId, protocol, protocolID, rateLimiter, signal, requestId, peerClient, requestTimeoutMs, }: HandleRequestOpts): Promise<void>;
34
+ export declare function handleRequest({ logger, metrics, stream, peerId, protocol, protocolID, rateLimiter, signal, requestId, peerClient, requestTimeoutMs }: HandleRequestOpts): Promise<void>;
35
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/response/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAC,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAIlE,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAErD,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAC,aAAa,EAAC,CAAC;AAGvB,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,EACN,SAAa,EACb,UAAsB,EACtB,gBAAgB,GACjB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFnC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/response/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAE,MAAM,EAAC,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAC,MAAM,EAA4B,MAAM,iBAAiB,CAAC;AAIlE,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AACtC,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,QAAQ,EAAiB,MAAM,aAAa,CAAC;AAErD,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAC,aAAa,EAAC,CAAC;AAGvB,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAEhD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,kBAAkB,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,EAClC,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,EACN,SAAa,EACb,UAAsB,EACtB,gBAAgB,EACjB,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFnC"}
@@ -1,13 +1,12 @@
1
- import { pipe } from "it-pipe";
2
1
  import { TimeoutError, withTimeout } from "@lodestar/utils";
3
2
  import { requestDecode } from "../encoders/requestDecode.js";
4
3
  import { responseEncodeError, responseEncodeSuccess } from "../encoders/responseEncode.js";
5
4
  import { RespStatus } from "../interface.js";
6
5
  import { RequestError, RequestErrorCode } from "../request/errors.js";
7
- import { prettyPrintPeerId } from "../utils/index.js";
6
+ import { prettyPrintPeerId, sendChunks } from "../utils/index.js";
8
7
  import { ResponseError } from "./errors.js";
9
8
  export { ResponseError };
10
- // Default spec values from https://github.com/ethereum/consensus-specs/blob/v1.2.0/specs/phase0/p2p-interface.md#configuration
9
+ // https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/p2p-interface.md#the-reqresp-domain
11
10
  export const DEFAULT_REQUEST_TIMEOUT = 5 * 1000; // 5 sec
12
11
  /**
13
12
  * Handles a ReqResp request from a peer. Throws on error. Logs each step of the response lifecycle.
@@ -30,57 +29,54 @@ export async function handleRequest({ logger, metrics, stream, peerId, protocol,
30
29
  };
31
30
  metrics?.incomingOpenedStreams.inc({ method: protocol.method });
32
31
  let responseError = null;
33
- await pipe(
34
- // Yields success chunks and error chunks in the same generator
35
- // This syntax allows to recycle stream.sink to send success and error chunks without returning
36
- // in case request whose body is a List fails at chunk_i > 0, without breaking out of the for..await..of
37
- (async function* requestHandlerSource() {
38
- try {
39
- // TODO: Does the TTFB timer start on opening stream or after receiving request
40
- const timerTTFB = metrics?.outgoingResponseTTFB.startTimer({ method: protocol.method });
41
- const requestBody = await withTimeout(() => pipe(stream.source, requestDecode(protocol)), REQUEST_TIMEOUT, signal).catch((e) => {
42
- if (e instanceof TimeoutError) {
43
- throw e; // Let outter catch (_e) {} re-type the error as SERVER_ERROR
32
+ let streamSendError = null;
33
+ try {
34
+ // Yields success chunks and error chunks in the same generator
35
+ // This syntax allows to recycle stream to send success and error chunks without returning
36
+ // in case request whose body is a List fails at chunk_i > 0, without breaking out of the for..await..of
37
+ await sendChunks(stream, (async function* requestHandlerSource() {
38
+ try {
39
+ const requestBody = await withTimeout((timeoutAndParentSignal) => requestDecode(protocol, stream, timeoutAndParentSignal), REQUEST_TIMEOUT, signal).catch((e) => {
40
+ if (e instanceof TimeoutError) {
41
+ throw e; // Let outer catch re-type the error as SERVER_ERROR
42
+ }
43
+ throw new ResponseError(RespStatus.INVALID_REQUEST, e.message);
44
+ });
45
+ logger.debug("Req received", logCtx);
46
+ // Max count by request for byRange and byRoot
47
+ const requestCount = protocol?.inboundRateLimits?.getRequestCount?.(requestBody) ?? 1;
48
+ if (!rateLimiter.allows(peerId, protocolID, requestCount)) {
49
+ throw new RequestError({ code: RequestErrorCode.REQUEST_RATE_LIMITED });
44
50
  }
45
- throw new ResponseError(RespStatus.INVALID_REQUEST, e.message);
46
- });
47
- logger.debug("Req received", logCtx);
48
- // Max count by request for byRange and byRoot
49
- const requestCount = protocol?.inboundRateLimits?.getRequestCount?.(requestBody) ?? 1;
50
- if (!rateLimiter.allows(peerId, protocolID, requestCount)) {
51
- throw new RequestError({ code: RequestErrorCode.REQUEST_RATE_LIMITED });
51
+ const requestChunk = {
52
+ data: requestBody,
53
+ version: protocol.version,
54
+ };
55
+ yield* responseEncodeSuccess(protocol, protocol.handler(requestChunk, peerId, peerClient));
56
+ }
57
+ catch (e) {
58
+ const status = e instanceof ResponseError ? e.status : RespStatus.SERVER_ERROR;
59
+ yield* responseEncodeError(protocol, status, e.message);
60
+ responseError = e;
52
61
  }
53
- const requestChunk = {
54
- data: requestBody,
55
- version: protocol.version,
56
- };
57
- yield* pipe(
58
- // TODO: Debug the reason for type conversion here
59
- protocol.handler(requestChunk, peerId, peerClient),
60
- // NOTE: Do not log the resp chunk contents, logs get extremely cluttered
61
- // Note: Not logging on each chunk since after 1 year it hasn't add any value when debugging
62
- // onChunk(() => logger.debug("Resp sending chunk", logCtx)),
63
- responseEncodeSuccess(protocol, {
64
- onChunk(chunkIndex) {
65
- if (chunkIndex === 0)
66
- timerTTFB?.();
67
- },
68
- }));
62
+ })(), signal);
63
+ }
64
+ catch (e) {
65
+ streamSendError = e;
66
+ throw e;
67
+ }
68
+ finally {
69
+ if (streamSendError) {
70
+ stream.abort(streamSendError);
69
71
  }
70
- catch (e) {
71
- const status = e instanceof ResponseError ? e.status : RespStatus.SERVER_ERROR;
72
- yield* responseEncodeError(protocol, status, e.message);
73
- // Should not throw an error here or libp2p-mplex throws with 'AbortError: stream reset'
74
- // throw e;
75
- responseError = e;
72
+ else {
73
+ await stream.close().catch((e) => {
74
+ stream.abort(e);
75
+ });
76
76
  }
77
- })(), stream.sink);
78
- // If streak.sink throws, libp2p-mplex will close stream.source
79
- // If `requestDecode()` throws the stream.source must be closed manually
80
- // To ensure the stream.source it-pushable instance is always closed, stream.close() is called always
81
- await stream.close();
82
- metrics?.incomingClosedStreams.inc({ method: protocol.method });
83
- // TODO: It may happen that stream.sink returns before returning stream.source first,
77
+ metrics?.incomingClosedStreams.inc({ method: protocol.method });
78
+ }
79
+ // TODO: It may happen that the response write completes before the request is fully read,
84
80
  // so you never see "Resp received request" in the logs and the response ends without
85
81
  // sending any chunk, triggering EMPTY_RESPONSE error on the requesting side
86
82
  // It has only happened when doing a request too fast upon immediate connection on inbound peer
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/response/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/response/index.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -3,10 +3,9 @@ import { BeaconConfig, ForkBoundary } from "@lodestar/config";
3
3
  import { ForkName } from "@lodestar/params";
4
4
  import { LodestarError } from "@lodestar/utils";
5
5
  import { RateLimiterQuota } from "./rate_limiter/rateLimiterGRCA.js";
6
- export declare const protocolPrefix = "/eth2/beacon_chain/req";
7
6
  /**
8
7
  * Available request/response encoding strategies:
9
- * https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#encoding-strategies
8
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/p2p-interface.md#encoding-strategies
10
9
  */
11
10
  export declare enum Encoding {
12
11
  SSZ_SNAPPY = "ssz_snappy"
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/types.js CHANGED
@@ -1,22 +1,24 @@
1
1
  import { LodestarError } from "@lodestar/utils";
2
- export const protocolPrefix = "/eth2/beacon_chain/req";
2
+ export { Encoding };
3
3
  /**
4
4
  * Available request/response encoding strategies:
5
- * https://github.com/ethereum/consensus-specs/blob/v1.1.10/specs/phase0/p2p-interface.md#encoding-strategies
5
+ * https://github.com/ethereum/consensus-specs/blob/v1.6.1/specs/phase0/p2p-interface.md#encoding-strategies
6
6
  */
7
- export var Encoding;
7
+ var Encoding;
8
8
  (function (Encoding) {
9
9
  Encoding["SSZ_SNAPPY"] = "ssz_snappy";
10
10
  })(Encoding || (Encoding = {}));
11
11
  export const CONTEXT_BYTES_FORK_DIGEST_LENGTH = 4;
12
- export var ContextBytesType;
12
+ export { ContextBytesType };
13
+ var ContextBytesType;
13
14
  (function (ContextBytesType) {
14
15
  /** 0 bytes chunk, can be ignored */
15
16
  ContextBytesType[ContextBytesType["Empty"] = 0] = "Empty";
16
17
  /** A fixed-width 4 byte <context-bytes>, set to the ForkDigest matching the chunk: compute_fork_digest(fork_version, genesis_validators_root) */
17
18
  ContextBytesType[ContextBytesType["ForkDigest"] = 1] = "ForkDigest";
18
19
  })(ContextBytesType || (ContextBytesType = {}));
19
- export var LightClientServerErrorCode;
20
+ export { LightClientServerErrorCode };
21
+ var LightClientServerErrorCode;
20
22
  (function (LightClientServerErrorCode) {
21
23
  LightClientServerErrorCode["RESOURCE_UNAVAILABLE"] = "RESOURCE_UNAVAILABLE";
22
24
  })(LightClientServerErrorCode || (LightClientServerErrorCode = {}));