@aztec/p2p 0.67.1 → 0.68.0

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 (203) hide show
  1. package/dest/bootstrap/bootstrap.js +2 -2
  2. package/dest/client/factory.d.ts +19 -0
  3. package/dest/client/factory.d.ts.map +1 -0
  4. package/dest/client/factory.js +40 -0
  5. package/dest/client/index.d.ts +1 -15
  6. package/dest/client/index.d.ts.map +1 -1
  7. package/dest/client/index.js +2 -37
  8. package/dest/client/p2p_client.d.ts +6 -6
  9. package/dest/client/p2p_client.d.ts.map +1 -1
  10. package/dest/client/p2p_client.js +12 -11
  11. package/dest/config.d.ts +1 -1
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +3 -3
  14. package/dest/errors/reqresp.error.d.ts +12 -1
  15. package/dest/errors/reqresp.error.d.ts.map +1 -1
  16. package/dest/errors/reqresp.error.js +15 -2
  17. package/dest/index.d.ts +2 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +3 -3
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +9 -0
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +171 -0
  25. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -0
  26. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -0
  27. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -0
  28. package/dest/mem_pools/interface.d.ts +4 -3
  29. package/dest/mem_pools/interface.d.ts.map +1 -1
  30. package/dest/mocks/index.d.ts +7 -6
  31. package/dest/mocks/index.d.ts.map +1 -1
  32. package/dest/mocks/index.js +8 -8
  33. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +8 -0
  34. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  35. package/dest/msg_validators/attestation_validator/attestation_validator.js +19 -0
  36. package/dest/msg_validators/attestation_validator/index.d.ts +2 -0
  37. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  38. package/dest/msg_validators/attestation_validator/index.js +2 -0
  39. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +8 -0
  40. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -0
  41. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +21 -0
  42. package/dest/msg_validators/block_proposal_validator/index.d.ts +2 -0
  43. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +1 -0
  44. package/dest/msg_validators/block_proposal_validator/index.js +2 -0
  45. package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +8 -0
  46. package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +1 -0
  47. package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +16 -0
  48. package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +2 -0
  49. package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +1 -0
  50. package/dest/msg_validators/epoch_proof_quote_validator/index.js +2 -0
  51. package/dest/msg_validators/index.d.ts +4 -0
  52. package/dest/msg_validators/index.d.ts.map +1 -0
  53. package/dest/msg_validators/index.js +4 -0
  54. package/dest/{tx_validator → msg_validators/tx_validator}/aggregate_tx_validator.d.ts +1 -1
  55. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  56. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +34 -0
  57. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  58. package/dest/{tx_validator → msg_validators/tx_validator}/data_validator.js +1 -1
  59. package/dest/{tx_validator → msg_validators/tx_validator}/double_spend_validator.d.ts +3 -2
  60. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  61. package/dest/msg_validators/tx_validator/double_spend_validator.js +56 -0
  62. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  63. package/dest/{tx_validator → msg_validators/tx_validator}/index.js +1 -1
  64. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  65. package/dest/{tx_validator → msg_validators/tx_validator}/metadata_validator.js +1 -1
  66. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  67. package/dest/msg_validators/tx_validator/tx_proof_validator.js +29 -0
  68. package/dest/services/data_store.d.ts.map +1 -0
  69. package/dest/services/data_store.js +188 -0
  70. package/dest/{service → services/discv5}/discV5_service.d.ts +2 -2
  71. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  72. package/dest/services/discv5/discV5_service.js +144 -0
  73. package/dest/services/dummy_service.d.ts.map +1 -0
  74. package/dest/{service → services}/dummy_service.js +1 -1
  75. package/dest/{service → services}/encoding.d.ts +5 -0
  76. package/dest/services/encoding.d.ts.map +1 -0
  77. package/dest/services/encoding.js +65 -0
  78. package/dest/services/index.d.ts +3 -0
  79. package/dest/services/index.d.ts.map +1 -0
  80. package/dest/services/index.js +3 -0
  81. package/dest/services/libp2p/libp2p_service.d.ts +221 -0
  82. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  83. package/dest/services/libp2p/libp2p_service.js +690 -0
  84. package/dest/services/peer-scoring/peer_scoring.d.ts +19 -0
  85. package/dest/services/peer-scoring/peer_scoring.d.ts.map +1 -0
  86. package/dest/services/peer-scoring/peer_scoring.js +55 -0
  87. package/dest/{service → services}/peer_manager.d.ts +5 -4
  88. package/dest/services/peer_manager.d.ts.map +1 -0
  89. package/dest/services/peer_manager.js +270 -0
  90. package/dest/services/reqresp/config.d.ts.map +1 -0
  91. package/dest/{service → services}/reqresp/config.js +1 -1
  92. package/dest/services/reqresp/handlers.d.ts.map +1 -0
  93. package/dest/{service → services}/reqresp/handlers.js +1 -1
  94. package/dest/services/reqresp/index.d.ts.map +1 -0
  95. package/dest/{service → services}/reqresp/index.js +1 -1
  96. package/dest/services/reqresp/interface.d.ts.map +1 -0
  97. package/dest/{service → services}/reqresp/interface.js +1 -1
  98. package/dest/services/reqresp/rate_limiter/index.d.ts.map +1 -0
  99. package/dest/{service → services}/reqresp/rate_limiter/index.js +1 -1
  100. package/dest/{service → services}/reqresp/rate_limiter/rate_limiter.d.ts +0 -5
  101. package/dest/services/reqresp/rate_limiter/rate_limiter.d.ts.map +1 -0
  102. package/dest/{service → services}/reqresp/rate_limiter/rate_limiter.js +7 -2
  103. package/dest/services/reqresp/rate_limiter/rate_limits.d.ts.map +1 -0
  104. package/dest/{service → services}/reqresp/rate_limiter/rate_limits.js +1 -1
  105. package/dest/{service → services}/reqresp/reqresp.d.ts +16 -0
  106. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  107. package/dest/services/reqresp/reqresp.js +279 -0
  108. package/dest/services/service.d.ts.map +1 -0
  109. package/dest/{service → services}/service.js +1 -1
  110. package/package.json +13 -10
  111. package/src/bootstrap/bootstrap.ts +1 -1
  112. package/src/client/factory.ts +97 -0
  113. package/src/client/index.ts +1 -73
  114. package/src/client/p2p_client.ts +28 -15
  115. package/src/config.ts +2 -2
  116. package/src/errors/reqresp.error.ts +15 -1
  117. package/src/index.ts +2 -2
  118. package/src/mem_pools/attestation_pool/attestation_pool.ts +10 -0
  119. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +237 -0
  120. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +153 -0
  121. package/src/mem_pools/interface.ts +5 -3
  122. package/src/mocks/index.ts +16 -10
  123. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -0
  124. package/src/msg_validators/attestation_validator/index.ts +1 -0
  125. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +29 -0
  126. package/src/msg_validators/block_proposal_validator/index.ts +1 -0
  127. package/src/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.ts +22 -0
  128. package/src/msg_validators/epoch_proof_quote_validator/index.ts +1 -0
  129. package/src/msg_validators/index.ts +3 -0
  130. package/src/{tx_validator → msg_validators/tx_validator}/aggregate_tx_validator.ts +5 -3
  131. package/src/{tx_validator → msg_validators/tx_validator}/double_spend_validator.ts +6 -8
  132. package/src/{service → services/discv5}/discV5_service.ts +3 -3
  133. package/src/{service → services}/encoding.ts +21 -3
  134. package/src/services/index.ts +2 -0
  135. package/src/{service → services/libp2p}/libp2p_service.ts +330 -85
  136. package/src/{service → services/peer-scoring}/peer_scoring.ts +6 -23
  137. package/src/{service → services}/peer_manager.ts +50 -3
  138. package/src/{service → services}/reqresp/rate_limiter/rate_limiter.ts +2 -1
  139. package/src/{service → services}/reqresp/reqresp.ts +83 -17
  140. package/dest/service/data_store.d.ts.map +0 -1
  141. package/dest/service/data_store.js +0 -188
  142. package/dest/service/discV5_service.d.ts.map +0 -1
  143. package/dest/service/discV5_service.js +0 -144
  144. package/dest/service/dummy_service.d.ts.map +0 -1
  145. package/dest/service/encoding.d.ts.map +0 -1
  146. package/dest/service/encoding.js +0 -49
  147. package/dest/service/index.d.ts +0 -3
  148. package/dest/service/index.d.ts.map +0 -1
  149. package/dest/service/index.js +0 -3
  150. package/dest/service/libp2p_service.d.ts +0 -136
  151. package/dest/service/libp2p_service.d.ts.map +0 -1
  152. package/dest/service/libp2p_service.js +0 -500
  153. package/dest/service/peer_manager.d.ts.map +0 -1
  154. package/dest/service/peer_manager.js +0 -214
  155. package/dest/service/peer_scoring.d.ts +0 -35
  156. package/dest/service/peer_scoring.d.ts.map +0 -1
  157. package/dest/service/peer_scoring.js +0 -72
  158. package/dest/service/reqresp/config.d.ts.map +0 -1
  159. package/dest/service/reqresp/handlers.d.ts.map +0 -1
  160. package/dest/service/reqresp/index.d.ts.map +0 -1
  161. package/dest/service/reqresp/interface.d.ts.map +0 -1
  162. package/dest/service/reqresp/rate_limiter/index.d.ts.map +0 -1
  163. package/dest/service/reqresp/rate_limiter/rate_limiter.d.ts.map +0 -1
  164. package/dest/service/reqresp/rate_limiter/rate_limits.d.ts.map +0 -1
  165. package/dest/service/reqresp/reqresp.d.ts.map +0 -1
  166. package/dest/service/reqresp/reqresp.js +0 -230
  167. package/dest/service/service.d.ts.map +0 -1
  168. package/dest/tx_validator/aggregate_tx_validator.d.ts.map +0 -1
  169. package/dest/tx_validator/aggregate_tx_validator.js +0 -32
  170. package/dest/tx_validator/data_validator.d.ts.map +0 -1
  171. package/dest/tx_validator/double_spend_validator.d.ts.map +0 -1
  172. package/dest/tx_validator/double_spend_validator.js +0 -56
  173. package/dest/tx_validator/index.d.ts.map +0 -1
  174. package/dest/tx_validator/metadata_validator.d.ts.map +0 -1
  175. package/dest/tx_validator/tx_proof_validator.d.ts.map +0 -1
  176. package/dest/tx_validator/tx_proof_validator.js +0 -29
  177. package/src/service/index.ts +0 -2
  178. /package/dest/{tx_validator → msg_validators/tx_validator}/data_validator.d.ts +0 -0
  179. /package/dest/{tx_validator → msg_validators/tx_validator}/index.d.ts +0 -0
  180. /package/dest/{tx_validator → msg_validators/tx_validator}/metadata_validator.d.ts +0 -0
  181. /package/dest/{tx_validator → msg_validators/tx_validator}/tx_proof_validator.d.ts +0 -0
  182. /package/dest/{service → services}/data_store.d.ts +0 -0
  183. /package/dest/{service → services}/dummy_service.d.ts +0 -0
  184. /package/dest/{service → services}/reqresp/config.d.ts +0 -0
  185. /package/dest/{service → services}/reqresp/handlers.d.ts +0 -0
  186. /package/dest/{service → services}/reqresp/index.d.ts +0 -0
  187. /package/dest/{service → services}/reqresp/interface.d.ts +0 -0
  188. /package/dest/{service → services}/reqresp/rate_limiter/index.d.ts +0 -0
  189. /package/dest/{service → services}/reqresp/rate_limiter/rate_limits.d.ts +0 -0
  190. /package/dest/{service → services}/service.d.ts +0 -0
  191. /package/src/{tx_validator → msg_validators/tx_validator}/data_validator.ts +0 -0
  192. /package/src/{tx_validator → msg_validators/tx_validator}/index.ts +0 -0
  193. /package/src/{tx_validator → msg_validators/tx_validator}/metadata_validator.ts +0 -0
  194. /package/src/{tx_validator → msg_validators/tx_validator}/tx_proof_validator.ts +0 -0
  195. /package/src/{service → services}/data_store.ts +0 -0
  196. /package/src/{service → services}/dummy_service.ts +0 -0
  197. /package/src/{service → services}/reqresp/config.ts +0 -0
  198. /package/src/{service → services}/reqresp/handlers.ts +0 -0
  199. /package/src/{service → services}/reqresp/index.ts +0 -0
  200. /package/src/{service → services}/reqresp/interface.ts +0 -0
  201. /package/src/{service → services}/reqresp/rate_limiter/index.ts +0 -0
  202. /package/src/{service → services}/reqresp/rate_limiter/rate_limits.ts +0 -0
  203. /package/src/{service → services}/service.ts +0 -0
@@ -0,0 +1,19 @@
1
+ import { PeerErrorSeverity } from '@aztec/circuit-types';
2
+ import { type P2PConfig } from '../../config.js';
3
+ export declare class PeerScoring {
4
+ private scores;
5
+ private lastUpdateTime;
6
+ private decayInterval;
7
+ private decayFactor;
8
+ peerPenalties: {
9
+ [key in PeerErrorSeverity]: number;
10
+ };
11
+ constructor(config: P2PConfig);
12
+ updateScore(peerId: string, scoreDelta: number): number;
13
+ decayAllScores(): void;
14
+ getScore(peerId: string): number;
15
+ getStats(): {
16
+ medianScore: number;
17
+ };
18
+ }
19
+ //# sourceMappingURL=peer_scoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer_scoring.d.ts","sourceRoot":"","sources":["../../../src/services/peer-scoring/peer_scoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQjD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,WAAW,CAAO;IAC1B,aAAa,EAAE;SAAG,GAAG,IAAI,iBAAiB,GAAG,MAAM;KAAE,CAAC;gBAE1C,MAAM,EAAE,SAAS;IAY7B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAmBvD,cAAc,IAAI,IAAI;IActB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIhC,QAAQ,IAAI;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE;CAGpC"}
@@ -0,0 +1,55 @@
1
+ import { PeerErrorSeverity } from '@aztec/circuit-types';
2
+ import { median } from '@aztec/foundation/collection';
3
+ const DefaultPeerPenalties = {
4
+ [PeerErrorSeverity.LowToleranceError]: 50,
5
+ [PeerErrorSeverity.MidToleranceError]: 10,
6
+ [PeerErrorSeverity.HighToleranceError]: 2,
7
+ };
8
+ export class PeerScoring {
9
+ constructor(config) {
10
+ this.scores = new Map();
11
+ this.lastUpdateTime = new Map();
12
+ this.decayInterval = 1000 * 60; // 1 minute
13
+ this.decayFactor = 0.9;
14
+ const orderedValues = config.peerPenaltyValues?.sort((a, b) => a - b);
15
+ this.peerPenalties = {
16
+ [PeerErrorSeverity.HighToleranceError]: orderedValues?.[0] ?? DefaultPeerPenalties[PeerErrorSeverity.HighToleranceError],
17
+ [PeerErrorSeverity.MidToleranceError]: orderedValues?.[1] ?? DefaultPeerPenalties[PeerErrorSeverity.MidToleranceError],
18
+ [PeerErrorSeverity.LowToleranceError]: orderedValues?.[2] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError],
19
+ };
20
+ }
21
+ updateScore(peerId, scoreDelta) {
22
+ const currentTime = Date.now();
23
+ const lastUpdate = this.lastUpdateTime.get(peerId) || currentTime;
24
+ const timePassed = currentTime - lastUpdate;
25
+ const decayPeriods = Math.floor(timePassed / this.decayInterval);
26
+ let currentScore = this.scores.get(peerId) || 0;
27
+ // Apply decay
28
+ currentScore *= Math.pow(this.decayFactor, decayPeriods);
29
+ // Apply new score delta
30
+ currentScore += scoreDelta;
31
+ this.scores.set(peerId, currentScore);
32
+ this.lastUpdateTime.set(peerId, currentTime);
33
+ return currentScore;
34
+ }
35
+ decayAllScores() {
36
+ const currentTime = Date.now();
37
+ for (const [peerId, lastUpdate] of this.lastUpdateTime.entries()) {
38
+ const timePassed = currentTime - lastUpdate;
39
+ const decayPeriods = Math.floor(timePassed / this.decayInterval);
40
+ if (decayPeriods > 0) {
41
+ let score = this.scores.get(peerId) || 0;
42
+ score *= Math.pow(this.decayFactor, decayPeriods);
43
+ this.scores.set(peerId, score);
44
+ this.lastUpdateTime.set(peerId, currentTime);
45
+ }
46
+ }
47
+ }
48
+ getScore(peerId) {
49
+ return this.scores.get(peerId) || 0;
50
+ }
51
+ getStats() {
52
+ return { medianScore: median(Array.from(this.scores.values())) ?? 0 };
53
+ }
54
+ }
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItc2NvcmluZy9wZWVyX3Njb3JpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBSXRELE1BQU0sb0JBQW9CLEdBQUc7SUFDM0IsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUU7SUFDekMsQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUU7SUFDekMsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7Q0FDMUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxXQUFXO0lBT3RCLFlBQVksTUFBaUI7UUFOckIsV0FBTSxHQUF3QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLG1CQUFjLEdBQXdCLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEQsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVztRQUN0QyxnQkFBVyxHQUFHLEdBQUcsQ0FBQztRQUl4QixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxFQUNwQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRixDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLEVBQ25DLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJ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
@@ -1,18 +1,19 @@
1
- import { type PeerInfo } from '@aztec/circuit-types';
1
+ import { type PeerErrorSeverity, type PeerInfo } from '@aztec/circuit-types';
2
+ import { type Traceable, type Tracer } from '@aztec/telemetry-client';
2
3
  import { type PeerId } from '@libp2p/interface';
3
4
  import { type P2PConfig } from '../config.js';
4
5
  import { type PubSubLibp2p } from '../util.js';
5
- import { type PeerErrorSeverity } from './peer_scoring.js';
6
6
  import { type PeerDiscoveryService } from './service.js';
7
- export declare class PeerManager {
7
+ export declare class PeerManager implements Traceable {
8
8
  private libP2PNode;
9
9
  private peerDiscoveryService;
10
10
  private config;
11
+ readonly tracer: Tracer;
11
12
  private logger;
12
13
  private cachedPeers;
13
14
  private peerScoring;
14
15
  private heartbeatCounter;
15
- constructor(libP2PNode: PubSubLibp2p, peerDiscoveryService: PeerDiscoveryService, config: P2PConfig, logger?: import("@aztec/foundation/log").Logger);
16
+ constructor(libP2PNode: PubSubLibp2p, peerDiscoveryService: PeerDiscoveryService, config: P2PConfig, tracer: Tracer, logger?: import("@aztec/foundation/log").Logger);
16
17
  heartbeat(): void;
17
18
  penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity): void;
18
19
  getPeerScore(peerId: string): number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../src/services/peer_manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,MAAM,EAAa,MAAM,yBAAyB,CAAC;AAGjF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAYzD,qBAAa,WAAY,YAAW,SAAS;IAMzC,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,MAAM;aACE,MAAM,EAAE,MAAM;IAC9B,OAAO,CAAC,MAAM;IAThB,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,gBAAgB,CAAa;gBAG3B,UAAU,EAAE,YAAY,EACxB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,SAAS,EACT,MAAM,EAAE,MAAM,EACtB,MAAM,yCAAmC;IA8B5C,SAAS;IAMT,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB;IAOvD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIpC,QAAQ,CAAC,cAAc,UAAQ,GAAG,QAAQ,EAAE;IAiCnD;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsDhB;;;OAGG;YACW,oBAAoB;YA+CpB,QAAQ;IAoBtB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -0,0 +1,270 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { trackSpan } from '@aztec/telemetry-client';
4
+ import { inspect } from 'util';
5
+ import { PeerScoring } from './peer-scoring/peer_scoring.js';
6
+ const MAX_DIAL_ATTEMPTS = 3;
7
+ const MAX_CACHED_PEERS = 100;
8
+ let PeerManager = (() => {
9
+ var _a;
10
+ let _instanceExtraInitializers = [];
11
+ let _heartbeat_decorators;
12
+ return _a = class PeerManager {
13
+ constructor(libP2PNode, peerDiscoveryService, config, tracer, logger = createLogger('p2p:peer-manager')) {
14
+ this.libP2PNode = (__runInitializers(this, _instanceExtraInitializers), libP2PNode);
15
+ this.peerDiscoveryService = peerDiscoveryService;
16
+ this.config = config;
17
+ this.tracer = tracer;
18
+ this.logger = logger;
19
+ this.cachedPeers = new Map();
20
+ this.heartbeatCounter = 0;
21
+ this.peerScoring = new PeerScoring(config);
22
+ // Handle new established connections
23
+ this.libP2PNode.addEventListener('peer:connect', evt => {
24
+ const peerId = evt.detail;
25
+ if (this.peerDiscoveryService.isBootstrapPeer(peerId)) {
26
+ this.logger.verbose(`Connected to bootstrap peer ${peerId.toString()}`);
27
+ }
28
+ else {
29
+ this.logger.verbose(`Connected to transaction peer ${peerId.toString()}`);
30
+ }
31
+ });
32
+ // Handle lost connections
33
+ this.libP2PNode.addEventListener('peer:disconnect', evt => {
34
+ const peerId = evt.detail;
35
+ if (this.peerDiscoveryService.isBootstrapPeer(peerId)) {
36
+ this.logger.verbose(`Disconnected from bootstrap peer ${peerId.toString()}`);
37
+ }
38
+ else {
39
+ this.logger.verbose(`Disconnected from transaction peer ${peerId.toString()}`);
40
+ }
41
+ });
42
+ // Handle Discovered peers
43
+ this.peerDiscoveryService.on('peer:discovered', async (enr) => {
44
+ await this.handleDiscoveredPeer(enr);
45
+ });
46
+ }
47
+ heartbeat() {
48
+ this.heartbeatCounter++;
49
+ this.discover();
50
+ this.peerScoring.decayAllScores();
51
+ }
52
+ penalizePeer(peerId, penalty) {
53
+ const id = peerId.toString();
54
+ const penaltyValue = this.peerScoring.peerPenalties[penalty];
55
+ const newScore = this.peerScoring.updateScore(id, -penaltyValue);
56
+ this.logger.verbose(`Penalizing peer ${id} with ${penalty} (new score is ${newScore})`);
57
+ }
58
+ getPeerScore(peerId) {
59
+ return this.peerScoring.getScore(peerId);
60
+ }
61
+ getPeers(includePending = false) {
62
+ const connected = this.libP2PNode
63
+ .getPeers()
64
+ .map(peer => ({ id: peer.toString(), score: this.getPeerScore(peer.toString()), status: 'connected' }));
65
+ if (!includePending) {
66
+ return connected;
67
+ }
68
+ const dialQueue = this.libP2PNode
69
+ .getDialQueue()
70
+ .filter(peer => !!peer.peerId)
71
+ .map(peer => ({
72
+ id: peer.peerId.toString(),
73
+ status: 'dialing',
74
+ dialStatus: peer.status,
75
+ addresses: peer.multiaddrs.map(m => m.toString()),
76
+ }));
77
+ const cachedPeers = Array.from(this.cachedPeers.values())
78
+ .filter(peer => !dialQueue.some(dialPeer => dialPeer.id && peer.peerId.toString() === dialPeer.id.toString()))
79
+ .filter(peer => !connected.some(connPeer => connPeer.id.toString() === peer.peerId.toString()))
80
+ .map(peer => ({
81
+ status: 'cached',
82
+ id: peer.peerId.toString(),
83
+ addresses: [peer.multiaddrTcp.toString()],
84
+ dialAttempts: peer.dialAttempts,
85
+ enr: peer.enr.encodeTxt(),
86
+ }));
87
+ return [...connected, ...dialQueue, ...cachedPeers];
88
+ }
89
+ /**
90
+ * Discovers peers.
91
+ */
92
+ discover() {
93
+ // Get current connections
94
+ const connections = this.libP2PNode.getConnections();
95
+ // Calculate how many connections we're looking to make
96
+ const peersToConnect = this.config.maxPeerCount - connections.length;
97
+ const logLevel = this.heartbeatCounter % 60 === 0 ? 'info' : 'debug';
98
+ this.logger[logLevel](`Connected to ${connections.length} peers`, {
99
+ connections: connections.length,
100
+ maxPeerCount: this.config.maxPeerCount,
101
+ cachedPeers: this.cachedPeers.size,
102
+ ...this.peerScoring.getStats(),
103
+ });
104
+ // Exit if no peers to connect
105
+ if (peersToConnect <= 0) {
106
+ return;
107
+ }
108
+ const cachedPeersToDial = [];
109
+ const pendingDials = new Set(this.libP2PNode
110
+ .getDialQueue()
111
+ .map(pendingDial => pendingDial.peerId?.toString())
112
+ .filter(Boolean));
113
+ for (const [id, peerData] of this.cachedPeers.entries()) {
114
+ // if already dialling or connected to, remove from cache
115
+ if (pendingDials.has(id) || connections.some(conn => conn.remotePeer.equals(peerData.peerId))) {
116
+ this.cachedPeers.delete(id);
117
+ }
118
+ else {
119
+ // cachedPeersToDial.set(id, enr);
120
+ cachedPeersToDial.push(peerData);
121
+ }
122
+ }
123
+ // reverse to dial older entries first
124
+ cachedPeersToDial.reverse();
125
+ for (const peer of cachedPeersToDial) {
126
+ this.cachedPeers.delete(peer.peerId.toString());
127
+ void this.dialPeer(peer);
128
+ }
129
+ // if we need more peers, start randomNodesQuery
130
+ if (peersToConnect > 0) {
131
+ this.logger.trace(`Running random nodes query to connect to ${peersToConnect} peers`);
132
+ void this.peerDiscoveryService.runRandomNodesQuery();
133
+ }
134
+ }
135
+ /**
136
+ * Handles a discovered peer.
137
+ * @param enr - The discovered peer's ENR.
138
+ */
139
+ async handleDiscoveredPeer(enr) {
140
+ // TODO: Will be handling peer scoring here
141
+ // check if peer is already connected
142
+ const [peerId, multiaddrTcp] = await Promise.all([enr.peerId(), enr.getFullMultiaddr('tcp')]);
143
+ this.logger.trace(`Handling discovered peer ${peerId.toString()} at ${multiaddrTcp?.toString() ?? 'undefined address'}`);
144
+ // throw if no tcp addr in multiaddr
145
+ if (!multiaddrTcp) {
146
+ this.logger.debug(`No TCP address in discovered node's multiaddr ${enr.encodeTxt()}`);
147
+ return;
148
+ }
149
+ const connections = this.libP2PNode.getConnections();
150
+ if (connections.some(conn => conn.remotePeer.equals(peerId))) {
151
+ this.logger.trace(`Already connected to peer ${peerId.toString()}`);
152
+ return;
153
+ }
154
+ // check if peer is already in cache
155
+ const id = peerId.toString();
156
+ if (this.cachedPeers.has(id)) {
157
+ this.logger.trace(`Peer already in cache ${id}`);
158
+ return;
159
+ }
160
+ // create cached peer object
161
+ const cachedPeer = {
162
+ peerId,
163
+ enr,
164
+ multiaddrTcp,
165
+ dialAttempts: 0,
166
+ };
167
+ // Determine if we should dial immediately or not
168
+ if (this.shouldDialPeer()) {
169
+ void this.dialPeer(cachedPeer);
170
+ }
171
+ else {
172
+ this.logger.trace(`Caching peer ${id}`);
173
+ this.cachedPeers.set(id, cachedPeer);
174
+ // Prune set of cached peers
175
+ this.pruneCachedPeers();
176
+ }
177
+ }
178
+ async dialPeer(peer) {
179
+ const id = peer.peerId.toString();
180
+ await this.libP2PNode.peerStore.merge(peer.peerId, { multiaddrs: [peer.multiaddrTcp] });
181
+ this.logger.trace(`Dialing peer ${id}`);
182
+ try {
183
+ await this.libP2PNode.dial(peer.multiaddrTcp);
184
+ }
185
+ catch (error) {
186
+ peer.dialAttempts++;
187
+ if (peer.dialAttempts < MAX_DIAL_ATTEMPTS) {
188
+ this.logger.trace(`Failed to dial peer ${id} (attempt ${peer.dialAttempts})`, { error: inspect(error) });
189
+ this.cachedPeers.set(id, peer);
190
+ }
191
+ else {
192
+ formatLibp2pDialError(error);
193
+ this.logger.debug(`Failed to dial peer ${id} (dropping)`, { error: inspect(error) });
194
+ this.cachedPeers.delete(id);
195
+ }
196
+ }
197
+ }
198
+ shouldDialPeer() {
199
+ const connections = this.libP2PNode.getConnections().length;
200
+ if (connections >= this.config.maxPeerCount) {
201
+ this.logger.trace(`Not dialing peer due to max peer count of ${this.config.maxPeerCount} reached (${connections} current connections)`);
202
+ return false;
203
+ }
204
+ return true;
205
+ }
206
+ pruneCachedPeers() {
207
+ let peersToDelete = this.cachedPeers.size - MAX_CACHED_PEERS;
208
+ if (peersToDelete <= 0) {
209
+ return;
210
+ }
211
+ // Remove the oldest peers
212
+ for (const key of this.cachedPeers.keys()) {
213
+ this.cachedPeers.delete(key);
214
+ this.logger.trace(`Pruning peer ${key} from cache`);
215
+ peersToDelete--;
216
+ if (peersToDelete <= 0) {
217
+ break;
218
+ }
219
+ }
220
+ }
221
+ },
222
+ (() => {
223
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
224
+ _heartbeat_decorators = [trackSpan('PeerManager.heartbeat')];
225
+ __esDecorate(_a, null, _heartbeat_decorators, { kind: "method", name: "heartbeat", static: false, private: false, access: { has: obj => "heartbeat" in obj, get: obj => obj.heartbeat }, metadata: _metadata }, null, _instanceExtraInitializers);
226
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
227
+ })(),
228
+ _a;
229
+ })();
230
+ export { PeerManager };
231
+ /**
232
+ * copied from github.com/ChainSafe/lodestar
233
+ * libp2p errors with extremely noisy errors here, which are deeply nested taking 30-50 lines.
234
+ * Some known errors:
235
+ * ```
236
+ * Error: The operation was aborted
237
+ * Error: stream ended before 1 bytes became available
238
+ * Error: Error occurred during XX handshake: Error occurred while verifying signed payload: Peer ID doesn't match libp2p public key
239
+ * ```
240
+ *
241
+ * Also the error's message is not properly formatted, where the error message is indented and includes the full stack
242
+ * ```
243
+ * {
244
+ * emessage: '\n' +
245
+ * ' Error: stream ended before 1 bytes became available\n' +
246
+ * ' at /home/lion/Code/eth2.0/lodestar/node_modules/it-reader/index.js:37:9\n' +
247
+ * ' at runMicrotasks (<anonymous>)\n' +
248
+ * ' at decoder (/home/lion/Code/eth2.0/lodestar/node_modules/it-length-prefixed/src/decode.js:113:22)\n' +
249
+ * ' at first (/home/lion/Code/eth2.0/lodestar/node_modules/it-first/index.js:11:20)\n' +
250
+ * ' at Object.exports.read (/home/lion/Code/eth2.0/lodestar/node_modules/multistream-select/src/multistream.js:31:15)\n' +
251
+ * ' at module.exports (/home/lion/Code/eth2.0/lodestar/node_modules/multistream-select/src/select.js:21:19)\n' +
252
+ * ' at Upgrader._encryptOutbound (/home/lion/Code/eth2.0/lodestar/node_modules/libp2p/src/upgrader.js:397:36)\n' +
253
+ * ' at Upgrader.upgradeOutbound (/home/lion/Code/eth2.0/lodestar/node_modules/libp2p/src/upgrader.js:176:11)\n' +
254
+ * ' at ClassIsWrapper.dial (/home/lion/Code/eth2.0/lodestar/node_modules/libp2p-tcp/src/index.js:49:18)'
255
+ * }
256
+ * ```
257
+ *
258
+ * Tracking issue https://github.com/libp2p/js-libp2p/issues/996
259
+ */
260
+ function formatLibp2pDialError(e) {
261
+ const errorMessage = e.message.trim();
262
+ const newlineIndex = errorMessage.indexOf('\n');
263
+ e.message = newlineIndex !== -1 ? errorMessage.slice(0, newlineIndex) : errorMessage;
264
+ if (e.message.includes('The operation was aborted') ||
265
+ e.message.includes('stream ended before 1 bytes became available') ||
266
+ e.message.includes('The operation was aborted')) {
267
+ e.stack = undefined;
268
+ }
269
+ }
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBK0IsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFLakYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHN0QsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7SUFTaEIsV0FBVzs7OztzQkFBWCxXQUFXO1lBS3RCLFlBQ1UsVUFBd0IsRUFDeEIsb0JBQTBDLEVBQzFDLE1BQWlCLEVBQ1QsTUFBYyxFQUN0QixTQUFTLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztnQkFKekMsZUFBVSxJQU5ULG1EQUFXLEVBTVosVUFBVSxFQUFjO2dCQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO2dCQUMxQyxXQUFNLEdBQU4sTUFBTSxDQUFXO2dCQUNULFdBQU0sR0FBTixNQUFNLENBQVE7Z0JBQ3RCLFdBQU0sR0FBTixNQUFNLENBQW1DO2dCQVQzQyxnQkFBVyxHQUE0QixJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUVqRCxxQkFBZ0IsR0FBVyxDQUFDLENBQUM7Z0JBU25DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNDLHFDQUFxQztnQkFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0JBQ3JELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7b0JBQzFCLElBQUksSUFBSSxDQUFDLG9CQUFvQixD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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAsB,MAAM,0BAA0B,CAAC;AAElF,eAAO,MAAM,qCAAqC,OAAO,CAAC;AAC1D,eAAO,MAAM,kCAAkC,OAAO,CAAC;AAGvD,eAAO,MAAM,0BAA0B,EAAE,gBAGxC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,uBAAuB,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,0BAA0B,EAAE,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,gBAAgB,EAAE,aAAa,CAWlF,CAAC"}
@@ -18,4 +18,4 @@ export const p2pReqRespConfigMappings = {
18
18
  ...numberConfigHelper(DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS),
19
19
  },
20
20
  };
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2UvcmVxcmVzcC9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRWxGLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLElBQUksQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxJQUFJLENBQUM7QUFFdkQsb0JBQW9CO0FBQ3BCLE1BQU0sQ0FBQyxNQUFNLDBCQUEwQixHQUFxQjtJQUMxRCx1QkFBdUIsRUFBRSxrQ0FBa0M7SUFDM0QsMEJBQTBCLEVBQUUscUNBQXFDO0NBQ2xFLENBQUM7QUFjRixNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBa0Q7SUFDckYsdUJBQXVCLEVBQUU7UUFDdkIsR0FBRyxFQUFFLHdDQUF3QztRQUM3QyxXQUFXLEVBQUUsdURBQXVEO1FBQ3BFLEdBQUcsa0JBQWtCLENBQUMsa0NBQWtDLENBQUM7S0FDMUQ7SUFDRCwwQkFBMEIsRUFBRTtRQUMxQixHQUFHLEVBQUUsMkNBQTJDO1FBQ2hELFdBQVcsRUFBRSxrRUFBa0U7UUFDL0UsR0FBRyxrQkFBa0IsQ0FBQyxxQ0FBcUMsQ0FBQztLQUM3RDtDQUNGLENBQUMifQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBc0Isa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVsRixNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsSUFBSSxDQUFDO0FBRXZELG9CQUFvQjtBQUNwQixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBcUI7SUFDMUQsdUJBQXVCLEVBQUUsa0NBQWtDO0lBQzNELDBCQUEwQixFQUFFLHFDQUFxQztDQUNsRSxDQUFDO0FBY0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQWtEO0lBQ3JGLHVCQUF1QixFQUFFO1FBQ3ZCLEdBQUcsRUFBRSx3Q0FBd0M7UUFDN0MsV0FBVyxFQUFFLHVEQUF1RDtRQUNwRSxHQUFHLGtCQUFrQixDQUFDLGtDQUFrQyxDQUFDO0tBQzFEO0lBQ0QsMEJBQTBCLEVBQUU7UUFDMUIsR0FBRyxFQUFFLDJDQUEyQztRQUNoRCxXQUFXLEVBQUUsa0VBQWtFO1FBQy9FLEdBQUcsa0JBQWtCLENBQUMscUNBQXFDLENBQUM7S0FDN0Q7Q0FDRixDQUFDIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/handlers.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAExD"}
@@ -14,4 +14,4 @@ export function pingHandler(_msg) {
14
14
  export function statusHandler(_msg) {
15
15
  return Promise.resolve(Buffer.from('ok'));
16
16
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZS9yZXFyZXNwL2hhbmRsZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQVM7SUFDbkMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM5QyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBUztJQUNyQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMifQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9oYW5kbGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFTO0lBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLElBQVM7SUFDckMsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -3,4 +3,4 @@ export {};
3
3
  * Request Response protocol allows nodes to ask their peers for data
4
4
  * that they missed via the traditional gossip protocol.
5
5
  */
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZS9yZXFyZXNwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O0dBR0cifQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/interface.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,eAAO,MAAM,eAAe,4BAA4B,CAAC;AACzD,eAAO,MAAM,eAAe,wBAAwB,CAAC;AAGrD,MAAM,MAAM,kBAAkB,GAAG,OAAO,aAAa,GAAG,OAAO,eAAe,GAAG,OAAO,eAAe,CAAC;AAExG;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,SAAS,EAAE,cAAc,CAAC;IAC1B;;OAEG;IACH,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,wBAA8B,CAAC;AAEzD;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,kBAAkB,EAAE,yBAAyB,CAAC,CAAC;AAE/F,KAAK,iBAAiB,CAAC,iBAAiB,EAAE,QAAQ,IAAI,CACpD,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,4BAA4B,GAAG;KACxC,CAAC,IAAI,kBAAkB,GAAG,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;CACvD,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,4BAI7C,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG;KAC1B,CAAC,IAAI,kBAAkB,GAAG,mBAAmB,CAAC,GAAG,EAAE,GAAG,CAAC;CACzD,CAAC;AAUF;;GAEG;AACH,eAAO,MAAM,6BAA6B,EAAE,0BAI3C,CAAC;AAEF;;;GAGG;AACH,UAAU,mBAAmB,CAAC,GAAG,EAAE,GAAG;IACpC,OAAO,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IACrC;;OAEG;IACH,QAAQ,EAAE;QACR,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;QAC1B,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC;KACjC,CAAC;CACH;AAED;;;;;GAKG;AACH,qBAAa,iBAAiB;IACT,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;IAEjC,QAAQ;IAIR,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM;CAGjC;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,cAa5B,CAAC"}
@@ -62,4 +62,4 @@ export const subProtocolMap = {
62
62
  response: Tx,
63
63
  },
64
64
  };
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2UvcmVxcmVzcC9pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUlsRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyx1QkFBdUIsQ0FBQztBQUNyRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcseUJBQXlCLENBQUM7QUFDekQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHFCQUFxQixDQUFDO0FBeUNyRCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQWlCekQsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQWlDO0lBQzNFLENBQUMsYUFBYSxDQUFDLEVBQUUsYUFBYTtJQUM5QixDQUFDLGVBQWUsQ0FBQyxFQUFFLGFBQWE7SUFDaEMsQ0FBQyxlQUFlLENBQUMsRUFBRSxhQUFhO0NBQ2pDLENBQUM7QUFVRjs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLElBQVMsRUFBbUIsRUFBRTtJQUNwRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQStCO0lBQ3ZFLENBQUMsYUFBYSxDQUFDLEVBQUUsY0FBYztJQUMvQixDQUFDLGVBQWUsQ0FBQyxFQUFFLGNBQWM7SUFDakMsQ0FBQyxlQUFlLENBQUMsRUFBRSxjQUFjO0NBQ2xDLENBQUM7QUFpQkY7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8saUJBQWlCO0lBQzVCLFlBQW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQUcsQ0FBQztJQUVyQyxRQUFRO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQWM7UUFDOUIsT0FBTyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW1CO0lBQzVDLENBQUMsYUFBYSxDQUFDLEVBQUU7UUFDZixPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFFBQVEsRUFBRSxpQkFBaUI7S0FDNUI7SUFDRCxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxpQkFBaUI7UUFDMUIsUUFBUSxFQUFFLGlCQUFpQjtLQUM1QjtJQUNELENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDakIsT0FBTyxFQUFFLE1BQU07UUFDZixRQUFRLEVBQUUsRUFBRTtLQUNiO0NBQ0YsQ0FBQyJ9
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJbEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsdUJBQXVCLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLHlCQUF5QixDQUFDO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQztBQXlDckQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFpQnpELE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFpQztJQUMzRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGFBQWE7SUFDOUIsQ0FBQyxlQUFlLENBQUMsRUFBRSxhQUFhO0lBQ2hDLENBQUMsZUFBZSxDQUFDLEVBQUUsYUFBYTtDQUNqQyxDQUFDO0FBVUY7OztHQUdHO0FBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxJQUFTLEVBQW1CLEVBQUU7SUFDcEQsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUErQjtJQUN2RSxDQUFDLGFBQWEsQ0FBQyxFQUFFLGNBQWM7SUFDL0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxjQUFjO0lBQ2pDLENBQUMsZUFBZSxDQUFDLEVBQUUsY0FBYztDQUNsQyxDQUFDO0FBaUJGOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFtQixNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUFHLENBQUM7SUFFckMsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjO1FBQzlCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0Y7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFtQjtJQUM1QyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ2YsT0FBTyxFQUFFLGlCQUFpQjtRQUMxQixRQUFRLEVBQUUsaUJBQWlCO0tBQzVCO0lBQ0QsQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUNqQixPQUFPLEVBQUUsaUJBQWlCO1FBQzFCLFFBQVEsRUFBRSxpQkFBaUI7S0FDNUI7SUFDRCxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sRUFBRSxNQUFNO1FBQ2YsUUFBUSxFQUFFLEVBQUU7S0FDYjtDQUNGLENBQUMifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate_limiter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC"}
@@ -1,2 +1,2 @@
1
1
  export { RequestResponseRateLimiter } from './rate_limiter.js';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZS9yZXFyZXNwL3JhdGVfbGltaXRlci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQyJ9
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9yYXRlX2xpbWl0ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUMifQ==
@@ -1,8 +1,3 @@
1
- /**
2
- * @attribution Rate limiter approach implemented in the lodestar ethereum 2 client.
3
- * Rationale is that if it was good enough for them, then it should be good enough for us.
4
- * https://github.com/ChainSafe/lodestar
5
- */
6
1
  import { type PeerId } from '@libp2p/interface';
7
2
  import { type PeerManager } from '../../peer_manager.js';
8
3
  import { type ReqRespSubProtocol, type ReqRespSubProtocolRateLimits } from '../interface.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate_limiter.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate_limiter/rate_limiter.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAM7F;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAMnD,KAAK,IAAI,OAAO;CAWjB;AASD,aAAK,eAAe;IAClB,OAAO,IAAA;IACP,YAAY,IAAA;IACZ,UAAU,IAAA;CACX;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM;IAOhH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;IAwBtC,oBAAoB;CAQrB;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,0BAA0B;IAKzB,OAAO,CAAC,WAAW;IAJ/B,OAAO,CAAC,uBAAuB,CAAkD;IAEjF,OAAO,CAAC,eAAe,CAAyC;gBAE5C,WAAW,EAAE,WAAW,EAAE,UAAU,GAAE,4BAAkD;IAgB5G,KAAK;IAML,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAkB/D,oBAAoB;IAIpB;;OAEG;IACH,IAAI;CAGL"}
@@ -1,4 +1,9 @@
1
- import { PeerErrorSeverity } from '../../peer_scoring.js';
1
+ /**
2
+ * @attribution Rate limiter approach implemented in the lodestar ethereum 2 client.
3
+ * Rationale is that if it was good enough for them, then it should be good enough for us.
4
+ * https://github.com/ChainSafe/lodestar
5
+ */
6
+ import { PeerErrorSeverity } from '@aztec/circuit-types';
2
7
  import { DEFAULT_RATE_LIMITS } from './rate_limits.js';
3
8
  // Check for disconnected peers every 10 minutes
4
9
  const CHECK_DISCONNECTED_PEERS_INTERVAL_MS = 10 * 60 * 1000;
@@ -167,4 +172,4 @@ export class RequestResponseRateLimiter {
167
172
  clearInterval(this.cleanupInterval);
168
173
  }
169
174
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2UvcmVxcmVzcC9yYXRlX2xpbWl0ZXIvcmF0ZV9saW1pdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRTFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZELGdEQUFnRDtBQUNoRCxNQUFNLG9DQUFvQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBRTVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxPQUFPLGVBQWU7SUFRMUI7OztPQUdHO0lBQ0gsWUFBWSxVQUFrQixFQUFFLFdBQW1CO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0QsSUFBSSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQztZQUNsQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7Q0FDRjtBQVNELElBQUssZUFJSjtBQUpELFdBQUssZUFBZTtJQUNsQiwyREFBTyxDQUFB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
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvcmF0ZV9saW1pdGVyL3JhdGVfbGltaXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFNekQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsZ0RBQWdEO0FBQ2hELE1BQU0sb0NBQW9DLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFNUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLE9BQU8sZUFBZTtJQVExQjs7O09BR0c7SUFDSCxZQUFZLFVBQWtCLEVBQUUsV0FBbUI7UUFDakQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUs7UUFDSCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFdkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvRCxJQUFJLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGO0FBU0QsSUFBSyxlQUlKO0FBSkQsV0FBSyxlQUFlO0lB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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate_limits.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate_limiter/rate_limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,4BAA4B,EAAoC,MAAM,iBAAiB,CAAC;AAGrH,eAAO,MAAM,mBAAmB,EAAE,4BA+BjC,CAAC"}
@@ -32,4 +32,4 @@ export const DEFAULT_RATE_LIMITS = {
32
32
  },
33
33
  },
34
34
  };
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZS9yZXFyZXNwL3JhdGVfbGltaXRlci9yYXRlX2xpbWl0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFxQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFckgsNENBQTRDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFpQztJQUMvRCxDQUFDLGFBQWEsQ0FBQyxFQUFFO1FBQ2YsU0FBUyxFQUFFO1lBQ1QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLENBQUM7U0FDZDtRQUNELFdBQVcsRUFBRTtZQUNYLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1NBQ2Y7S0FDRjtJQUNELENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDakIsU0FBUyxFQUFFO1lBQ1QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLENBQUM7U0FDZDtRQUNELFdBQVcsRUFBRTtZQUNYLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1NBQ2Y7S0FDRjtJQUNELENBQUMsZUFBZSxDQUFDLEVBQUU7UUFDakIsU0FBUyxFQUFFO1lBQ1QsV0FBVyxFQUFFLElBQUk7WUFDakIsVUFBVSxFQUFFLENBQUM7U0FDZDtRQUNELFdBQVcsRUFBRTtZQUNYLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxFQUFFO1NBQ2Y7S0FDRjtDQUNGLENBQUMifQ==
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9yYXRlX2xpbWl0ZXIvcmF0ZV9saW1pdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBcUMsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJILDRDQUE0QztBQUM1QyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBaUM7SUFDL0QsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNmLFNBQVMsRUFBRTtZQUNULFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxDQUFDO1NBQ2Q7UUFDRCxXQUFXLEVBQUU7WUFDWCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsRUFBRTtTQUNmO0tBQ0Y7SUFDRCxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2pCLFNBQVMsRUFBRTtZQUNULFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxDQUFDO1NBQ2Q7UUFDRCxXQUFXLEVBQUU7WUFDWCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsRUFBRTtTQUNmO0tBQ0Y7SUFDRCxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ2pCLFNBQVMsRUFBRTtZQUNULFdBQVcsRUFBRSxJQUFJO1lBQ2pCLFVBQVUsRUFBRSxDQUFDO1NBQ2Q7UUFDRCxXQUFXLEVBQUU7WUFDWCxXQUFXLEVBQUUsSUFBSTtZQUNqQixVQUFVLEVBQUUsRUFBRTtTQUNmO0tBQ0Y7Q0FDRixDQUFDIn0=
@@ -29,6 +29,7 @@ export declare class ReqResp {
29
29
  private subProtocolHandlers;
30
30
  private subProtocolValidators;
31
31
  private rateLimiter;
32
+ private snappyTransform;
32
33
  constructor(config: P2PReqRespConfig, libp2p: Libp2p, peerManager: PeerManager);
33
34
  /**
34
35
  * Start the reqresp service
@@ -93,6 +94,21 @@ export declare class ReqResp {
93
94
  * the stream is closed on the requester's end and sender (us) updates its peer score
94
95
  */
95
96
  sendRequestToPeer(peerId: PeerId, subProtocol: ReqRespSubProtocol, payload: Buffer): Promise<Buffer | undefined>;
97
+ /**
98
+ * Handle a response error
99
+ *
100
+ * ReqResp errors are punished differently depending on the severity of the offense
101
+ *
102
+ * @param e - The error
103
+ * @param peerId - The peer id
104
+ * @param subProtocol - The sub protocol
105
+ * @returns If the error is non pubishable, then undefined is returned, otherwise the peer is penalized
106
+ */
107
+ private handleResponseError;
108
+ /**
109
+ * Categorize the error and log it.
110
+ */
111
+ private categorizeError;
96
112
  /**
97
113
  * Read a message returned from a stream into a single buffer
98
114
  */
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAA2B,KAAK,MAAM,EAAe,MAAM,mBAAmB,CAAC;AAEtF,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC;AASrC,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,gBAAgB,CAAC;AAGxB;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAO;IAcoB,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAAE,OAAO,CAAC,WAAW;IAb5F,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,uBAAuB,CAAS;IACxC,OAAO,CAAC,0BAA0B,CAAS;IAG3C,OAAO,CAAC,mBAAmB,CAA6D;IACxF,OAAO,CAAC,qBAAqB,CAAiE;IAE9F,OAAO,CAAC,WAAW,CAA6B;IAEhD,OAAO,CAAC,eAAe,CAAkB;gBAE7B,MAAM,EAAE,gBAAgB,EAAqB,MAAM,EAAE,MAAM,EAAU,WAAW,EAAE,WAAW;IAUzG;;OAEG;IACG,KAAK,CAAC,mBAAmB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,4BAA4B;IAWhH;;OAEG;IACG,IAAI;IAiBV;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACG,WAAW,CAAC,WAAW,SAAS,kBAAkB,EACtD,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,GAC5D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAuC7E;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,iBAAiB,CACrB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA8B9B;;;;;;;;;OASG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;OAEG;YACW,WAAW;IASzB;;;;;;;;;;;;;;;OAeG;YACW,aAAa;CA+B5B"}