@aztec/p2p 0.74.0 → 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bootstrap/bootstrap.js +41 -29
- package/dest/client/factory.js +8 -10
- package/dest/client/index.js +0 -1
- package/dest/client/p2p_client.js +513 -507
- package/dest/config.js +44 -39
- package/dest/errors/reqresp.error.js +6 -10
- package/dest/index.js +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -2
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +64 -32
- package/dest/mem_pools/attestation_pool/index.js +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +22 -19
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +22 -26
- package/dest/mem_pools/attestation_pool/mocks.js +10 -6
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.js +1 -2
- package/dest/mem_pools/epoch_proof_quote_pool/index.js +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.js +5 -4
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.js +2 -3
- package/dest/mem_pools/index.js +1 -2
- package/dest/mem_pools/instrumentation.js +37 -42
- package/dest/mem_pools/interface.js +3 -2
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +127 -134
- package/dest/mem_pools/tx_pool/index.js +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.js +45 -43
- package/dest/mem_pools/tx_pool/priority.js +1 -3
- package/dest/mem_pools/tx_pool/tx_pool.js +3 -2
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +107 -37
- package/dest/mocks/index.js +47 -38
- package/dest/msg_validators/attestation_validator/attestation_validator.js +3 -3
- package/dest/msg_validators/attestation_validator/index.js +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +2 -2
- package/dest/msg_validators/block_proposal_validator/index.js +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.js +2 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.js +0 -1
- package/dest/msg_validators/index.js +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +9 -11
- package/dest/msg_validators/tx_validator/block_header_validator.js +17 -12
- package/dest/msg_validators/tx_validator/data_validator.js +41 -32
- package/dest/msg_validators/tx_validator/double_spend_validator.js +22 -14
- package/dest/msg_validators/tx_validator/index.js +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.js +29 -26
- package/dest/msg_validators/tx_validator/tx_proof_validator.js +17 -12
- package/dest/services/data_store.js +57 -57
- package/dest/services/discv5/discV5_service.js +31 -23
- package/dest/services/dummy_service.js +40 -58
- package/dest/services/encoding.js +10 -9
- package/dest/services/index.js +0 -1
- package/dest/services/libp2p/libp2p_service.js +709 -695
- package/dest/services/peer-manager/metrics.js +14 -7
- package/dest/services/peer-manager/peer_manager.js +340 -342
- package/dest/services/peer-manager/peer_scoring.js +20 -18
- package/dest/services/reqresp/config.js +4 -5
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +35 -28
- package/dest/services/reqresp/connection-sampler/connection_sampler.js +60 -59
- package/dest/services/reqresp/index.js +1 -3
- package/dest/services/reqresp/interface.js +25 -30
- package/dest/services/reqresp/metrics.js +23 -10
- package/dest/services/reqresp/protocols/block.js +1 -2
- package/dest/services/reqresp/protocols/goodbye.js +35 -40
- package/dest/services/reqresp/protocols/index.js +1 -3
- package/dest/services/reqresp/protocols/ping.js +1 -3
- package/dest/services/reqresp/protocols/status.js +1 -3
- package/dest/services/reqresp/protocols/tx.js +5 -8
- package/dest/services/reqresp/rate-limiter/index.js +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.js +42 -36
- package/dest/services/reqresp/rate-limiter/rate_limits.js +16 -17
- package/dest/services/reqresp/reqresp.js +461 -395
- package/dest/services/reqresp/status.js +51 -0
- package/dest/services/service.js +3 -4
- package/dest/services/types.js +16 -23
- package/dest/util.js +23 -34
- package/package.json +8 -8
- package/src/client/p2p_client.ts +159 -125
- package/src/mem_pools/index.ts +3 -3
- package/src/mem_pools/instrumentation.ts +3 -2
- package/src/services/reqresp/interface.ts +11 -0
- package/src/services/reqresp/rate-limiter/rate_limiter.ts +3 -1
- package/src/services/reqresp/rate-limiter/rate_limits.ts +2 -2
- package/src/services/reqresp/reqresp.ts +111 -24
- package/src/services/reqresp/status.ts +59 -0
- package/dest/bootstrap/bootstrap.d.ts +0 -38
- package/dest/bootstrap/bootstrap.d.ts.map +0 -1
- package/dest/client/factory.d.ts +0 -19
- package/dest/client/factory.d.ts.map +0 -1
- package/dest/client/index.d.ts +0 -3
- package/dest/client/index.d.ts.map +0 -1
- package/dest/client/p2p_client.d.ts +0 -321
- package/dest/client/p2p_client.d.ts.map +0 -1
- package/dest/config.d.ts +0 -171
- package/dest/config.d.ts.map +0 -1
- package/dest/errors/reqresp.error.d.ts +0 -28
- package/dest/errors/reqresp.error.d.ts.map +0 -1
- package/dest/index.d.ts +0 -9
- package/dest/index.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +0 -57
- package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +0 -3
- package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/index.d.ts +0 -3
- package/dest/mem_pools/attestation_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -22
- package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -17
- package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
- package/dest/mem_pools/attestation_pool/mocks.d.ts +0 -18
- package/dest/mem_pools/attestation_pool/mocks.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts +0 -7
- package/dest/mem_pools/epoch_proof_quote_pool/epoch_proof_quote_pool.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts +0 -4
- package/dest/mem_pools/epoch_proof_quote_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts +0 -12
- package/dest/mem_pools/epoch_proof_quote_pool/memory_epoch_proof_quote_pool.d.ts.map +0 -1
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts +0 -8
- package/dest/mem_pools/epoch_proof_quote_pool/test_utils.d.ts.map +0 -1
- package/dest/mem_pools/index.d.ts +0 -5
- package/dest/mem_pools/index.d.ts.map +0 -1
- package/dest/mem_pools/instrumentation.d.ts +0 -31
- package/dest/mem_pools/instrumentation.d.ts.map +0 -1
- package/dest/mem_pools/interface.d.ts +0 -13
- package/dest/mem_pools/interface.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -66
- package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/index.d.ts +0 -4
- package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
- package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/priority.d.ts +0 -8
- package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -66
- package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
- package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
- package/dest/mocks/index.d.ts +0 -54
- package/dest/mocks/index.d.ts.map +0 -1
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +0 -8
- package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +0 -1
- package/dest/msg_validators/attestation_validator/index.d.ts +0 -2
- package/dest/msg_validators/attestation_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
- package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
- package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
- package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts +0 -8
- package/dest/msg_validators/epoch_proof_quote_validator/epoch_proof_quote_validator.d.ts.map +0 -1
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts +0 -2
- package/dest/msg_validators/epoch_proof_quote_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/index.d.ts +0 -4
- package/dest/msg_validators/index.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +0 -7
- package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts +0 -11
- package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/data_validator.d.ts +0 -6
- package/dest/msg_validators/tx_validator/data_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -12
- package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/index.d.ts +0 -7
- package/dest/msg_validators/tx_validator/index.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts +0 -10
- package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +0 -1
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +0 -8
- package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +0 -1
- package/dest/services/data_store.d.ts +0 -27
- package/dest/services/data_store.d.ts.map +0 -1
- package/dest/services/discv5/discV5_service.d.ts +0 -36
- package/dest/services/discv5/discV5_service.d.ts.map +0 -1
- package/dest/services/dummy_service.d.ts +0 -82
- package/dest/services/dummy_service.d.ts.map +0 -1
- package/dest/services/encoding.d.ts +0 -31
- package/dest/services/encoding.d.ts.map +0 -1
- package/dest/services/index.d.ts +0 -3
- package/dest/services/index.d.ts.map +0 -1
- package/dest/services/libp2p/libp2p_service.d.ts +0 -225
- package/dest/services/libp2p/libp2p_service.d.ts.map +0 -1
- package/dest/services/peer-manager/metrics.d.ts +0 -12
- package/dest/services/peer-manager/metrics.d.ts.map +0 -1
- package/dest/services/peer-manager/peer_manager.d.ts +0 -76
- package/dest/services/peer-manager/peer_manager.d.ts.map +0 -1
- package/dest/services/peer-manager/peer_scoring.d.ts +0 -28
- package/dest/services/peer-manager/peer_scoring.d.ts.map +0 -1
- package/dest/services/reqresp/config.d.ts +0 -16
- package/dest/services/reqresp/config.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
- package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +0 -61
- package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +0 -1
- package/dest/services/reqresp/index.d.ts +0 -6
- package/dest/services/reqresp/index.d.ts.map +0 -1
- package/dest/services/reqresp/interface.d.ts +0 -107
- package/dest/services/reqresp/interface.d.ts.map +0 -1
- package/dest/services/reqresp/metrics.d.ts +0 -15
- package/dest/services/reqresp/metrics.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/block.d.ts +0 -4
- package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/goodbye.d.ts +0 -51
- package/dest/services/reqresp/protocols/goodbye.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/index.d.ts +0 -9
- package/dest/services/reqresp/protocols/index.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/ping.d.ts +0 -9
- package/dest/services/reqresp/protocols/ping.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/status.d.ts +0 -9
- package/dest/services/reqresp/protocols/status.d.ts.map +0 -1
- package/dest/services/reqresp/protocols/tx.d.ts +0 -13
- package/dest/services/reqresp/protocols/tx.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/index.d.ts +0 -2
- package/dest/services/reqresp/rate-limiter/index.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +0 -102
- package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +0 -1
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +0 -3
- package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +0 -1
- package/dest/services/reqresp/reqresp.d.ts +0 -161
- package/dest/services/reqresp/reqresp.d.ts.map +0 -1
- package/dest/services/service.d.ts +0 -85
- package/dest/services/service.d.ts.map +0 -1
- package/dest/services/types.d.ts +0 -38
- package/dest/services/types.d.ts.map +0 -1
- package/dest/util.d.ts +0 -53
- package/dest/util.d.ts.map +0 -1
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { type PeerId } from '@libp2p/interface';
|
|
2
|
-
import { type ConnectionSampler } from './connection_sampler.js';
|
|
3
|
-
/**
|
|
4
|
-
* Manages batches of peers for parallel request processing.
|
|
5
|
-
* Tracks active peers and provides deterministic peer assignment for requests.
|
|
6
|
-
*
|
|
7
|
-
* Example with 3 peers and 10 requests:
|
|
8
|
-
*
|
|
9
|
-
* Peers: [P1] [P2] [P3]
|
|
10
|
-
* ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
|
|
11
|
-
* Requests: 0,1,2,9 | 3,4,5 | 6,7,8
|
|
12
|
-
*
|
|
13
|
-
* Each peer handles a bucket of consecutive requests.
|
|
14
|
-
* If a peer fails, it is replaced while maintaining the same bucket.
|
|
15
|
-
*/
|
|
16
|
-
export declare class BatchConnectionSampler {
|
|
17
|
-
private readonly connectionSampler;
|
|
18
|
-
private readonly logger;
|
|
19
|
-
private readonly batch;
|
|
20
|
-
private readonly requestsPerPeer;
|
|
21
|
-
constructor(connectionSampler: ConnectionSampler, batchSize: number, maxPeers: number);
|
|
22
|
-
/**
|
|
23
|
-
* Gets the peer responsible for handling a specific request index
|
|
24
|
-
*
|
|
25
|
-
* @param index - The request index
|
|
26
|
-
* @returns The peer assigned to handle this request
|
|
27
|
-
*/
|
|
28
|
-
getPeerForRequest(index: number): PeerId | undefined;
|
|
29
|
-
/**
|
|
30
|
-
* Removes a peer and replaces it with a new one, maintaining the same position
|
|
31
|
-
* in the batch array to keep request distribution consistent
|
|
32
|
-
*
|
|
33
|
-
* @param peerId - The peer to remove and replace
|
|
34
|
-
*/
|
|
35
|
-
removePeerAndReplace(peerId: PeerId): void;
|
|
36
|
-
/**
|
|
37
|
-
* Gets the number of active peers
|
|
38
|
-
*/
|
|
39
|
-
get activePeerCount(): number;
|
|
40
|
-
/**
|
|
41
|
-
* Gets the number of requests each peer is assigned to handle
|
|
42
|
-
*/
|
|
43
|
-
get requestsPerBucket(): number;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=batch_connection_sampler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"batch_connection_sampler.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/connection-sampler/batch_connection_sampler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAsB;IAKrB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAJ9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwD;IAC/E,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAEZ,iBAAiB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAetG;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUpD;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAmB1C;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { type Libp2p, type PeerId, type Stream } from '@libp2p/interface';
|
|
2
|
-
export declare class RandomSampler {
|
|
3
|
-
random(max: number): number;
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* A class that samples peers from the libp2p node and returns a peer that we don't already have a connection open to.
|
|
7
|
-
* If we already have a connection open, we try to sample a different peer.
|
|
8
|
-
* We do this MAX_SAMPLE_ATTEMPTS times, if we still don't find a peer we just go for it.
|
|
9
|
-
*
|
|
10
|
-
* @dev Close must always be called on connections, else memory leak
|
|
11
|
-
*/
|
|
12
|
-
export declare class ConnectionSampler {
|
|
13
|
-
private readonly libp2p;
|
|
14
|
-
private readonly cleanupIntervalMs;
|
|
15
|
-
private readonly sampler;
|
|
16
|
-
private readonly logger;
|
|
17
|
-
private cleanupInterval;
|
|
18
|
-
private abortController;
|
|
19
|
-
private readonly activeConnectionsCount;
|
|
20
|
-
private readonly streams;
|
|
21
|
-
private dialQueue;
|
|
22
|
-
constructor(libp2p: Libp2p, cleanupIntervalMs?: number, // Default to 1 minute
|
|
23
|
-
sampler?: RandomSampler);
|
|
24
|
-
/**
|
|
25
|
-
* Stops the cleanup job and closes all active connections
|
|
26
|
-
*/
|
|
27
|
-
stop(): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
*
|
|
30
|
-
* @param excluding - The peers to exclude from the sampling
|
|
31
|
-
* This is to prevent sampling with replacement
|
|
32
|
-
* @returns
|
|
33
|
-
*/
|
|
34
|
-
getPeer(excluding?: Map<string, boolean>): PeerId | undefined;
|
|
35
|
-
/**
|
|
36
|
-
* Samples a batch of unique peers from the libp2p node, prioritizing peers without active connections
|
|
37
|
-
*
|
|
38
|
-
* @param numberToSample - The number of peers to sample
|
|
39
|
-
* @returns Array of unique sampled peers, prioritizing those without active connections
|
|
40
|
-
*/
|
|
41
|
-
samplePeersBatch(numberToSample: number): PeerId[];
|
|
42
|
-
/**
|
|
43
|
-
* Dials a protocol and returns the stream
|
|
44
|
-
*
|
|
45
|
-
* @param peerId - The peer id
|
|
46
|
-
* @param protocol - The protocol
|
|
47
|
-
* @returns The stream
|
|
48
|
-
*/
|
|
49
|
-
dialProtocol(peerId: PeerId, protocol: string): Promise<Stream>;
|
|
50
|
-
/**
|
|
51
|
-
* Closes a stream and updates the active connections count
|
|
52
|
-
*
|
|
53
|
-
* @param streamId - The stream id
|
|
54
|
-
*/
|
|
55
|
-
close(streamId: string): Promise<void>;
|
|
56
|
-
/**
|
|
57
|
-
* Cleans up stale connections that we have lost accounting for
|
|
58
|
-
*/
|
|
59
|
-
private cleanupStaleConnections;
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=connection_sampler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"connection_sampler.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/connection-sampler/connection_sampler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAS1E,qBAAa,aAAa;IACxB,MAAM,CAAC,GAAG,EAAE,MAAM;CAGnB;AAED;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAY1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAb1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkD;IACzE,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,eAAe,CAA0C;IAEjE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAkC;IACzE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAGnE,OAAO,CAAC,SAAS,CAAkC;gBAGhC,MAAM,EAAE,MAAM,EACd,iBAAiB,GAAE,MAAc,EAAE,sBAAsB;IACzD,OAAO,GAAE,aAAmC;IAO/D;;OAEG;IACG,IAAI;IAaV;;;;;OAKG;IACH,OAAO,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS;IA+B7D;;;;;OAKG;IACH,gBAAgB,CAAC,cAAc,EAAE,MAAM,GAAG,MAAM,EAAE;IAkClD;;;;;;OAMG;IACG,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBrE;;;;OAIG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB5C;;OAEG;YACW,uBAAuB;CAetC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/index.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import { type PeerId } from '@libp2p/interface';
|
|
4
|
-
export declare const PING_PROTOCOL = "/aztec/req/ping/0.1.0";
|
|
5
|
-
export declare const STATUS_PROTOCOL = "/aztec/req/status/0.1.0";
|
|
6
|
-
export declare const GOODBYE_PROTOCOL = "/aztec/req/goodbye/0.1.0";
|
|
7
|
-
export declare const TX_REQ_PROTOCOL = "/aztec/req/tx/0.1.0";
|
|
8
|
-
export declare const BLOCK_REQ_PROTOCOL = "/aztec/req/block/0.1.0";
|
|
9
|
-
export declare enum ReqRespSubProtocol {
|
|
10
|
-
PING = "/aztec/req/ping/0.1.0",
|
|
11
|
-
STATUS = "/aztec/req/status/0.1.0",
|
|
12
|
-
GOODBYE = "/aztec/req/goodbye/0.1.0",
|
|
13
|
-
TX = "/aztec/req/tx/0.1.0",
|
|
14
|
-
BLOCK = "/aztec/req/block/0.1.0"
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* A handler for a sub protocol
|
|
18
|
-
* The message will arrive as a buffer, and the handler must return a buffer
|
|
19
|
-
*/
|
|
20
|
-
export type ReqRespSubProtocolHandler = (peerId: PeerId, msg: Buffer) => Promise<Buffer>;
|
|
21
|
-
/**
|
|
22
|
-
* A type mapping from supprotocol to it's rate limits
|
|
23
|
-
*/
|
|
24
|
-
export type ReqRespSubProtocolRateLimits = Record<ReqRespSubProtocol, ProtocolRateLimitQuota>;
|
|
25
|
-
/**
|
|
26
|
-
* A rate limit quota
|
|
27
|
-
*/
|
|
28
|
-
export interface RateLimitQuota {
|
|
29
|
-
/**
|
|
30
|
-
* The time window in ms
|
|
31
|
-
*/
|
|
32
|
-
quotaTimeMs: number;
|
|
33
|
-
/**
|
|
34
|
-
* The number of requests allowed within the time window
|
|
35
|
-
*/
|
|
36
|
-
quotaCount: number;
|
|
37
|
-
}
|
|
38
|
-
export interface ProtocolRateLimitQuota {
|
|
39
|
-
/**
|
|
40
|
-
* The rate limit quota for a single peer
|
|
41
|
-
*/
|
|
42
|
-
peerLimit: RateLimitQuota;
|
|
43
|
-
/**
|
|
44
|
-
* The rate limit quota for the global peer set
|
|
45
|
-
*/
|
|
46
|
-
globalLimit: RateLimitQuota;
|
|
47
|
-
}
|
|
48
|
-
export declare const noopValidator: () => Promise<boolean>;
|
|
49
|
-
/**
|
|
50
|
-
* A type mapping from supprotocol to it's handling function
|
|
51
|
-
*/
|
|
52
|
-
export type ReqRespSubProtocolHandlers = Record<ReqRespSubProtocol, ReqRespSubProtocolHandler>;
|
|
53
|
-
type ResponseValidator<RequestIdentifier, Response> = (request: RequestIdentifier, response: Response, peerId: PeerId) => Promise<boolean>;
|
|
54
|
-
export type ReqRespSubProtocolValidators = {
|
|
55
|
-
[S in ReqRespSubProtocol]: ResponseValidator<any, any>;
|
|
56
|
-
};
|
|
57
|
-
export declare const DEFAULT_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators;
|
|
58
|
-
/**
|
|
59
|
-
* Sub protocol map determines the request and response types for each
|
|
60
|
-
* Req Resp protocol
|
|
61
|
-
*/
|
|
62
|
-
export type SubProtocolMap = {
|
|
63
|
-
[S in ReqRespSubProtocol]: RequestResponsePair<any, any>;
|
|
64
|
-
};
|
|
65
|
-
/**
|
|
66
|
-
* Default sub protocol handlers - this SHOULD be overwritten by the service,
|
|
67
|
-
*/
|
|
68
|
-
export declare const DEFAULT_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers;
|
|
69
|
-
/**
|
|
70
|
-
* The Request Response Pair interface defines the methods that each
|
|
71
|
-
* request response pair must implement
|
|
72
|
-
*/
|
|
73
|
-
interface RequestResponsePair<Req extends {
|
|
74
|
-
toBuffer(): Buffer;
|
|
75
|
-
}, Res> {
|
|
76
|
-
/**
|
|
77
|
-
* The request must implement the toBuffer method (generic serialisation)
|
|
78
|
-
*/
|
|
79
|
-
request: new (...args: any[]) => Req;
|
|
80
|
-
/**
|
|
81
|
-
* The response must implement the static fromBuffer method (generic serialisation)
|
|
82
|
-
*/
|
|
83
|
-
response: {
|
|
84
|
-
new (...args: any[]): Res;
|
|
85
|
-
fromBuffer(buffer: Buffer): Res;
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* RequestableBuffer is a wrapper around a buffer that allows it to be
|
|
90
|
-
* used in generic request response protocols
|
|
91
|
-
*
|
|
92
|
-
* An instance of the RequestResponsePair defined above
|
|
93
|
-
*/
|
|
94
|
-
export declare class RequestableBuffer {
|
|
95
|
-
buffer: Buffer;
|
|
96
|
-
constructor(buffer: Buffer);
|
|
97
|
-
toBuffer(): Buffer;
|
|
98
|
-
static fromBuffer(buffer: Buffer): RequestableBuffer;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* A mapping from each protocol to their request and response types
|
|
102
|
-
* This defines the request and response types for each sub protocol, used primarily
|
|
103
|
-
* as a type rather than an object
|
|
104
|
-
*/
|
|
105
|
-
export declare const subProtocolMap: SubProtocolMap;
|
|
106
|
-
export {};
|
|
107
|
-
//# sourceMappingURL=interface.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/interface.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAKhD,eAAO,MAAM,aAAa,0BAA0B,CAAC;AACrD,eAAO,MAAM,eAAe,4BAA4B,CAAC;AACzD,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAC3D,eAAO,MAAM,eAAe,wBAAwB,CAAC;AACrD,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAE3D,oBAAY,kBAAkB;IAC5B,IAAI,0BAAgB;IACpB,MAAM,4BAAkB;IACxB,OAAO,6BAAmB;IAC1B,EAAE,wBAAkB;IACpB,KAAK,2BAAqB;CAC3B;AAED;;;GAGG;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEzF;;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,4BAM7C,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,0BAM3C,CAAC;AAEF;;;GAGG;AACH,UAAU,mBAAmB,CAAC,GAAG,SAAS;IAAE,QAAQ,IAAI,MAAM,CAAA;CAAE,EAAE,GAAG;IACnE;;OAEG;IACH,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,cAqB5B,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
|
|
2
|
-
export declare class ReqRespMetrics {
|
|
3
|
-
readonly telemetryClient: TelemetryClient;
|
|
4
|
-
readonly tracer: Tracer;
|
|
5
|
-
private readonly sentRequests;
|
|
6
|
-
private readonly receivedRequests;
|
|
7
|
-
private readonly failedOutboundRequests;
|
|
8
|
-
private readonly failedInboundRequests;
|
|
9
|
-
constructor(telemetryClient: TelemetryClient, name?: string);
|
|
10
|
-
recordRequestSent(protocol: string): void;
|
|
11
|
-
recordRequestReceived(protocol: string): void;
|
|
12
|
-
recordRequestError(protocol: string): void;
|
|
13
|
-
recordResponseError(protocol: string): void;
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=metrics.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/metrics.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,MAAM,EAAsB,MAAM,yBAAyB,CAAC;AAEhG,qBAAa,cAAc;IASb,QAAQ,CAAC,eAAe,EAAE,eAAe;IARrD,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAgB;IAEjD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAgB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAgB;gBAEjC,eAAe,EAAE,eAAe,EAAE,IAAI,SAAY;IA4BhE,iBAAiB,CAAC,QAAQ,EAAE,MAAM;IAIlC,qBAAqB,CAAC,QAAQ,EAAE,MAAM;IAItC,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAInC,mBAAmB,CAAC,QAAQ,EAAE,MAAM;CAG5C"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/block.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,yBAAyB,CAO3F"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
import { type PeerId } from '@libp2p/interface';
|
|
4
|
-
import { type PeerManager } from '../../peer-manager/peer_manager.js';
|
|
5
|
-
import { type ReqRespSubProtocolHandler } from '../interface.js';
|
|
6
|
-
import { type ReqResp } from '../reqresp.js';
|
|
7
|
-
/**
|
|
8
|
-
* Enum defining the possible reasons for a goodbye message.
|
|
9
|
-
*/
|
|
10
|
-
export declare enum GoodByeReason {
|
|
11
|
-
/** The peer has shutdown, will be received whenever a peer's node is routinely stopped */
|
|
12
|
-
SHUTDOWN = 1,
|
|
13
|
-
/** Whenever the peer must disconnect due to maintaining max peers */
|
|
14
|
-
DISCONNECTED = 2,
|
|
15
|
-
/** The peer has a low score, will be received whenever a peer's score is low */
|
|
16
|
-
LOW_SCORE = 3,
|
|
17
|
-
/** The peer has been banned, will be received whenever a peer is banned */
|
|
18
|
-
BANNED = 4,
|
|
19
|
-
/** Wrong network / fork */
|
|
20
|
-
WRONG_NETWORK = 5,
|
|
21
|
-
/** Unknown reason */
|
|
22
|
-
UNKNOWN = 6
|
|
23
|
-
}
|
|
24
|
-
export declare function encodeGoodbyeReason(reason: GoodByeReason): Buffer;
|
|
25
|
-
export declare function decodeGoodbyeReason(buffer: Buffer): GoodByeReason;
|
|
26
|
-
/**
|
|
27
|
-
* Pretty prints the goodbye reason.
|
|
28
|
-
* @param reason - The goodbye reason.
|
|
29
|
-
* @returns The pretty printed goodbye reason.
|
|
30
|
-
*/
|
|
31
|
-
export declare function prettyGoodbyeReason(reason: GoodByeReason): string;
|
|
32
|
-
/**
|
|
33
|
-
* Handles a goodbye message request
|
|
34
|
-
*/
|
|
35
|
-
export declare class GoodbyeProtocolHandler {
|
|
36
|
-
private reqresp;
|
|
37
|
-
private logger;
|
|
38
|
-
constructor(reqresp: ReqResp);
|
|
39
|
-
sendGoodbye(peerId: PeerId, reason: GoodByeReason): Promise<void>;
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Handles the goodbye request. In request response, the goodbye request is handled by the peer manager.
|
|
43
|
-
*
|
|
44
|
-
* @dev Implemented as returning a function as the function is bound in the libp2p service, however
|
|
45
|
-
* its implementation is here to keep functionality together.
|
|
46
|
-
*
|
|
47
|
-
* @param peerManager - The peer manager.
|
|
48
|
-
* @returns A resolved promise with the goodbye response.
|
|
49
|
-
*/
|
|
50
|
-
export declare function reqGoodbyeHandler(peerManager: PeerManager): ReqRespSubProtocolHandler;
|
|
51
|
-
//# sourceMappingURL=goodbye.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"goodbye.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/goodbye.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAsB,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;GAEG;AACH,oBAAY,aAAa;IACvB,0FAA0F;IAC1F,QAAQ,IAAM;IACd,qEAAqE;IACrE,YAAY,IAAM;IAClB,gFAAgF;IAChF,SAAS,IAAM;IACf,2EAA2E;IAC3E,MAAM,IAAM;IACZ,2BAA2B;IAC3B,aAAa,IAAM;IACnB,qBAAqB;IACrB,OAAO,IAAM;CACd;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAEjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CASjE;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAgBjE;AAED;;GAEG;AACH,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,OAAO;IAF3B,OAAO,CAAC,MAAM,CAAwC;gBAElC,OAAO,EAAE,OAAO;IAEvB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ/E;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,yBAAyB,CASrF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
/**
|
|
4
|
-
* Handles the ping request.
|
|
5
|
-
* @param _msg - The ping request message.
|
|
6
|
-
* @returns A resolved promise with the pong response.
|
|
7
|
-
*/
|
|
8
|
-
export declare function pingHandler(_msg: any): Promise<Buffer>;
|
|
9
|
-
//# sourceMappingURL=ping.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/ping.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEtD"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
3
|
-
/**
|
|
4
|
-
* Handles the status request.
|
|
5
|
-
* @param _msg - The status request message.
|
|
6
|
-
* @returns A resolved promise with the ok response.
|
|
7
|
-
*/
|
|
8
|
-
export declare function statusHandler(_msg: any): Promise<Buffer>;
|
|
9
|
-
//# sourceMappingURL=status.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/status.ts"],"names":[],"mappings":";;AAAA;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAExD"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { type P2PClientType } from '@aztec/circuit-types';
|
|
2
|
-
import { type MemPools } from '../../../mem_pools/interface.js';
|
|
3
|
-
import { type ReqRespSubProtocolHandler } from '../interface.js';
|
|
4
|
-
/**
|
|
5
|
-
* We want to keep the logic of the req resp handler in this file, but we do not have a reference to the mempools here
|
|
6
|
-
* so we need to pass it in as a parameter.
|
|
7
|
-
*
|
|
8
|
-
* Handler for tx requests
|
|
9
|
-
* @param mempools - the mempools
|
|
10
|
-
* @returns the tx response message
|
|
11
|
-
*/
|
|
12
|
-
export declare function reqRespTxHandler<T extends P2PClientType>(mempools: MemPools<T>): ReqRespSubProtocolHandler;
|
|
13
|
-
//# sourceMappingURL=tx.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAK1D,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAEjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,aAAa,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,yBAAyB,CAY1G"}
|
|
@@ -1 +0,0 @@
|
|
|
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,102 +0,0 @@
|
|
|
1
|
-
import { type PeerId } from '@libp2p/interface';
|
|
2
|
-
import { type PeerScoring } from '../../peer-manager/peer_scoring.js';
|
|
3
|
-
import { type ReqRespSubProtocol, type ReqRespSubProtocolRateLimits } from '../interface.js';
|
|
4
|
-
/**
|
|
5
|
-
* GCRARateLimiter: A Generic Cell Rate Algorithm (GCRA) based rate limiter.
|
|
6
|
-
*
|
|
7
|
-
* How it works:
|
|
8
|
-
* 1. The rate limiter allows a certain number of operations (quotaCount) within a specified
|
|
9
|
-
* time interval (quotaTimeMs).
|
|
10
|
-
* 2. It uses a "virtual scheduling time" (VST) to determine when the next operation should be allowed.
|
|
11
|
-
* 3. When an operation is requested, the limiter checks if enough time has passed since the last
|
|
12
|
-
* allowed operation.
|
|
13
|
-
* 4. If sufficient time has passed, the operation is allowed, and the VST is updated.
|
|
14
|
-
* 5. If not enough time has passed, the operation is denied.
|
|
15
|
-
*
|
|
16
|
-
* The limiter also allows for short bursts of activity, as long as the overall rate doesn't exceed
|
|
17
|
-
* the specified quota over time.
|
|
18
|
-
*
|
|
19
|
-
* Usage example:
|
|
20
|
-
* ```
|
|
21
|
-
* const limiter = new GCRARateLimiter(100, 60000); // 100 operations per minute
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export declare class GCRARateLimiter {
|
|
25
|
-
private vst;
|
|
26
|
-
private readonly emissionInterval;
|
|
27
|
-
private readonly limitInterval;
|
|
28
|
-
/**
|
|
29
|
-
* @param quotaCount - The number of requests to allow over the limit interval
|
|
30
|
-
* @param quotaTimeMs - The time interval over which the quotaCount applies
|
|
31
|
-
*/
|
|
32
|
-
constructor(quotaCount: number, quotaTimeMs: number);
|
|
33
|
-
allow(): boolean;
|
|
34
|
-
}
|
|
35
|
-
declare enum RateLimitStatus {
|
|
36
|
-
Allowed = 0,
|
|
37
|
-
DeniedGlobal = 1,
|
|
38
|
-
DeniedPeer = 2
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* SubProtocolRateLimiter: A rate limiter for managing request rates on a per-peer and global basis for a specific subprotocol.
|
|
42
|
-
*
|
|
43
|
-
* This class provides a two-tier rate limiting system:
|
|
44
|
-
* 1. A global rate limit for all requests across all peers for this subprotocol.
|
|
45
|
-
* 2. Individual rate limits for each peer.
|
|
46
|
-
*
|
|
47
|
-
* How it works:
|
|
48
|
-
* - When a request comes in, it first checks against the global rate limit.
|
|
49
|
-
* - If the global limit allows, it then checks against the specific peer's rate limit.
|
|
50
|
-
* - The request is only allowed if both the global and peer-specific limits allow it.
|
|
51
|
-
* - It automatically creates and manages rate limiters for new peers as they make requests.
|
|
52
|
-
* - It periodically cleans up rate limiters for inactive peers to conserve memory.
|
|
53
|
-
*
|
|
54
|
-
* Note: Remember to call `start()` to begin the cleanup process and `stop()` when shutting down to clear the cleanup interval.
|
|
55
|
-
*/
|
|
56
|
-
export declare class SubProtocolRateLimiter {
|
|
57
|
-
private peerLimiters;
|
|
58
|
-
private globalLimiter;
|
|
59
|
-
private readonly peerQuotaCount;
|
|
60
|
-
private readonly peerQuotaTimeMs;
|
|
61
|
-
constructor(peerQuotaCount: number, peerQuotaTimeMs: number, globalQuotaCount: number, globalQuotaTimeMs: number);
|
|
62
|
-
allow(peerId: PeerId): RateLimitStatus;
|
|
63
|
-
cleanupInactivePeers(): void;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* RequestResponseRateLimiter.
|
|
67
|
-
*
|
|
68
|
-
* A rate limiter that is protocol aware, then peer aware.
|
|
69
|
-
* SubProtocols can have their own global / peer level rate limits.
|
|
70
|
-
*
|
|
71
|
-
* How it works:
|
|
72
|
-
* - Initializes with a set of rate limit configurations for different subprotocols.
|
|
73
|
-
* - Creates a separate SubProtocolRateLimiter for each configured subprotocol.
|
|
74
|
-
* - When a request comes in, it routes the rate limiting decision to the appropriate subprotocol limiter.
|
|
75
|
-
* - Peers who exceed their peer rate limits will be penalised by the peer manager.
|
|
76
|
-
*
|
|
77
|
-
* Usage:
|
|
78
|
-
* ```
|
|
79
|
-
* const peerManager = new PeerManager(...);
|
|
80
|
-
* const rateLimits = {
|
|
81
|
-
* subprotocol1: { peerLimit: { quotaCount: 10, quotaTimeMs: 1000 }, globalLimit: { quotaCount: 100, quotaTimeMs: 1000 } },
|
|
82
|
-
* subprotocol2: { peerLimit: { quotaCount: 5, quotaTimeMs: 1000 }, globalLimit: { quotaCount: 50, quotaTimeMs: 1000 } }
|
|
83
|
-
* };
|
|
84
|
-
* const limiter = new RequestResponseRateLimiter(peerManager, rateLimits);
|
|
85
|
-
*
|
|
86
|
-
* Note: Ensure to call `stop()` when shutting down to properly clean up all subprotocol limiters.
|
|
87
|
-
*/
|
|
88
|
-
export declare class RequestResponseRateLimiter {
|
|
89
|
-
private peerScoring;
|
|
90
|
-
private subProtocolRateLimiters;
|
|
91
|
-
private cleanupInterval;
|
|
92
|
-
constructor(peerScoring: PeerScoring, rateLimits?: ReqRespSubProtocolRateLimits);
|
|
93
|
-
start(): void;
|
|
94
|
-
allow(subProtocol: ReqRespSubProtocol, peerId: PeerId): boolean;
|
|
95
|
-
cleanupInactivePeers(): void;
|
|
96
|
-
/**
|
|
97
|
-
* Make sure to call destroy on each of the sub protocol rate limiters when cleaning up
|
|
98
|
-
*/
|
|
99
|
-
stop(): void;
|
|
100
|
-
}
|
|
101
|
-
export {};
|
|
102
|
-
//# sourceMappingURL=rate_limiter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
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,oCAAoC,CAAC;AACtE,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 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rate_limits.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGxF,eAAO,MAAM,mBAAmB,EAAE,4BAmDjC,CAAC"}
|