@brightchain/brightchain-api-lib 0.14.0 → 0.15.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.
- package/package.json +5 -5
- package/src/index.d.ts +3 -0
- package/src/index.d.ts.map +1 -1
- package/src/index.js +5 -0
- package/src/index.js.map +1 -1
- package/src/lib/application.d.ts +1 -0
- package/src/lib/application.d.ts.map +1 -1
- package/src/lib/application.js +23 -0
- package/src/lib/application.js.map +1 -1
- package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
- package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
- package/src/lib/auth/aclEnforcedAvailability.js +87 -0
- package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
- package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
- package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
- package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
- package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
- package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
- package/src/lib/auth/index.d.ts +7 -0
- package/src/lib/auth/index.d.ts.map +1 -0
- package/src/lib/auth/index.js +13 -0
- package/src/lib/auth/index.js.map +1 -0
- package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
- package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
- package/src/lib/auth/poolAclBootstrap.js +64 -0
- package/src/lib/auth/poolAclBootstrap.js.map +1 -0
- package/src/lib/auth/poolAclStore.d.ts +77 -0
- package/src/lib/auth/poolAclStore.d.ts.map +1 -0
- package/src/lib/auth/poolAclStore.js +189 -0
- package/src/lib/auth/poolAclStore.js.map +1 -0
- package/src/lib/auth/poolAclUpdater.d.ts +79 -0
- package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
- package/src/lib/auth/poolAclUpdater.js +144 -0
- package/src/lib/auth/poolAclUpdater.js.map +1 -0
- package/src/lib/availability/availabilityService.d.ts +2 -2
- package/src/lib/availability/availabilityService.d.ts.map +1 -1
- package/src/lib/availability/availabilityService.js +12 -5
- package/src/lib/availability/availabilityService.js.map +1 -1
- package/src/lib/availability/blockRegistry.d.ts +45 -3
- package/src/lib/availability/blockRegistry.d.ts.map +1 -1
- package/src/lib/availability/blockRegistry.js +123 -5
- package/src/lib/availability/blockRegistry.js.map +1 -1
- package/src/lib/availability/discoveryProtocol.d.ts +30 -1
- package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
- package/src/lib/availability/discoveryProtocol.js +76 -0
- package/src/lib/availability/discoveryProtocol.js.map +1 -1
- package/src/lib/availability/gossipService.d.ts +45 -6
- package/src/lib/availability/gossipService.d.ts.map +1 -1
- package/src/lib/availability/gossipService.js +177 -5
- package/src/lib/availability/gossipService.js.map +1 -1
- package/src/lib/availability/reconciliationService.d.ts +88 -1
- package/src/lib/availability/reconciliationService.d.ts.map +1 -1
- package/src/lib/availability/reconciliationService.js +246 -48
- package/src/lib/availability/reconciliationService.js.map +1 -1
- package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
- package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
- package/src/lib/blockFetch/blockFetcher.js +279 -0
- package/src/lib/blockFetch/blockFetcher.js.map +1 -0
- package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
- package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
- package/src/lib/blockFetch/fetchQueue.js +204 -0
- package/src/lib/blockFetch/fetchQueue.js.map +1 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
- package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
- package/src/lib/blockFetch/index.d.ts +10 -0
- package/src/lib/blockFetch/index.d.ts.map +1 -0
- package/src/lib/blockFetch/index.js +13 -0
- package/src/lib/blockFetch/index.js.map +1 -0
- package/src/lib/controllers/api/brightpass.d.ts +72 -0
- package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
- package/src/lib/controllers/api/brightpass.js +577 -0
- package/src/lib/controllers/api/brightpass.js.map +1 -0
- package/src/lib/controllers/api/channels.d.ts +122 -0
- package/src/lib/controllers/api/channels.d.ts.map +1 -0
- package/src/lib/controllers/api/channels.js +701 -0
- package/src/lib/controllers/api/channels.js.map +1 -0
- package/src/lib/controllers/api/conversations.d.ts +89 -0
- package/src/lib/controllers/api/conversations.d.ts.map +1 -0
- package/src/lib/controllers/api/conversations.js +259 -0
- package/src/lib/controllers/api/conversations.js.map +1 -0
- package/src/lib/controllers/api/emails.d.ts +122 -0
- package/src/lib/controllers/api/emails.d.ts.map +1 -0
- package/src/lib/controllers/api/emails.js +494 -0
- package/src/lib/controllers/api/emails.js.map +1 -0
- package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
- package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
- package/src/lib/controllers/api/explodingMessages.js +378 -0
- package/src/lib/controllers/api/explodingMessages.js.map +1 -0
- package/src/lib/controllers/api/groups.d.ts +94 -0
- package/src/lib/controllers/api/groups.d.ts.map +1 -0
- package/src/lib/controllers/api/groups.js +484 -0
- package/src/lib/controllers/api/groups.js.map +1 -0
- package/src/lib/controllers/api/index.d.ts +6 -0
- package/src/lib/controllers/api/index.d.ts.map +1 -1
- package/src/lib/controllers/api/index.js +6 -0
- package/src/lib/controllers/api/index.js.map +1 -1
- package/src/lib/controllers/api/messages.d.ts.map +1 -1
- package/src/lib/controllers/api/messages.js +2 -1
- package/src/lib/controllers/api/messages.js.map +1 -1
- package/src/lib/controllers/api/sync.d.ts +38 -2
- package/src/lib/controllers/api/sync.d.ts.map +1 -1
- package/src/lib/controllers/api/sync.js +89 -0
- package/src/lib/controllers/api/sync.js.map +1 -1
- package/src/lib/controllers/crypto/gitController.d.ts +70 -0
- package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
- package/src/lib/controllers/crypto/gitController.js +306 -0
- package/src/lib/controllers/crypto/gitController.js.map +1 -0
- package/src/lib/controllers/crypto/index.d.ts +3 -0
- package/src/lib/controllers/crypto/index.d.ts.map +1 -0
- package/src/lib/controllers/crypto/index.js +6 -0
- package/src/lib/controllers/crypto/index.js.map +1 -0
- package/src/lib/controllers/crypto/walletController.d.ts +64 -0
- package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
- package/src/lib/controllers/crypto/walletController.js +260 -0
- package/src/lib/controllers/crypto/walletController.js.map +1 -0
- package/src/lib/controllers/identity/deviceController.d.ts +96 -0
- package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
- package/src/lib/controllers/identity/deviceController.js +355 -0
- package/src/lib/controllers/identity/deviceController.js.map +1 -0
- package/src/lib/controllers/identity/directoryController.d.ts +75 -0
- package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
- package/src/lib/controllers/identity/directoryController.js +288 -0
- package/src/lib/controllers/identity/directoryController.js.map +1 -0
- package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
- package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
- package/src/lib/controllers/identity/identityProofController.js +454 -0
- package/src/lib/controllers/identity/identityProofController.js.map +1 -0
- package/src/lib/controllers/identity/index.d.ts +4 -0
- package/src/lib/controllers/identity/index.d.ts.map +1 -0
- package/src/lib/controllers/identity/index.js +7 -0
- package/src/lib/controllers/identity/index.js.map +1 -0
- package/src/lib/controllers/index.d.ts +2 -0
- package/src/lib/controllers/index.d.ts.map +1 -1
- package/src/lib/controllers/index.js +2 -0
- package/src/lib/controllers/index.js.map +1 -1
- package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
- package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
- package/src/lib/encryption/encryptedMetadataService.js +224 -0
- package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
- package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
- package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
- package/src/lib/encryption/encryptionAwareReplication.js +116 -0
- package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
- package/src/lib/encryption/errors.d.ts +49 -0
- package/src/lib/encryption/errors.d.ts.map +1 -0
- package/src/lib/encryption/errors.js +80 -0
- package/src/lib/encryption/errors.js.map +1 -0
- package/src/lib/encryption/index.d.ts +6 -0
- package/src/lib/encryption/index.d.ts.map +1 -0
- package/src/lib/encryption/index.js +9 -0
- package/src/lib/encryption/index.js.map +1 -0
- package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
- package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
- package/src/lib/encryption/poolEncryptionService.js +252 -0
- package/src/lib/encryption/poolEncryptionService.js.map +1 -0
- package/src/lib/encryption/poolKeyManager.d.ts +82 -0
- package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
- package/src/lib/encryption/poolKeyManager.js +156 -0
- package/src/lib/encryption/poolKeyManager.js.map +1 -0
- package/src/lib/environment.d.ts +3 -0
- package/src/lib/environment.d.ts.map +1 -1
- package/src/lib/environment.js +5 -0
- package/src/lib/environment.js.map +1 -1
- package/src/lib/interfaces/environment.d.ts +7 -1
- package/src/lib/interfaces/environment.d.ts.map +1 -1
- package/src/lib/interfaces/index.d.ts +0 -1
- package/src/lib/interfaces/index.d.ts.map +1 -1
- package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
- package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
- package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
- package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
- package/src/lib/interfaces/requests/index.d.ts +1 -0
- package/src/lib/interfaces/requests/index.d.ts.map +1 -1
- package/src/lib/routers/api.d.ts +54 -1
- package/src/lib/routers/api.d.ts.map +1 -1
- package/src/lib/routers/api.js +77 -0
- package/src/lib/routers/api.js.map +1 -1
- package/src/lib/services/blockStore.d.ts +5 -2
- package/src/lib/services/blockStore.d.ts.map +1 -1
- package/src/lib/services/blockStore.js +4 -0
- package/src/lib/services/blockStore.js.map +1 -1
- package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
- package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
- package/src/lib/services/brightpass/auditLogger.js +184 -0
- package/src/lib/services/brightpass/auditLogger.js.map +1 -0
- package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
- package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
- package/src/lib/services/brightpass/vaultEncryption.js +144 -0
- package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
- package/src/lib/services/brightpass.d.ts +294 -0
- package/src/lib/services/brightpass.d.ts.map +1 -0
- package/src/lib/services/brightpass.js +1260 -0
- package/src/lib/services/brightpass.js.map +1 -0
- package/src/lib/services/eventNotificationSystem.d.ts +69 -3
- package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
- package/src/lib/services/eventNotificationSystem.js +200 -0
- package/src/lib/services/eventNotificationSystem.js.map +1 -1
- package/src/lib/services/expirationScheduler.d.ts +90 -0
- package/src/lib/services/expirationScheduler.d.ts.map +1 -0
- package/src/lib/services/expirationScheduler.js +131 -0
- package/src/lib/services/expirationScheduler.js.map +1 -0
- package/src/lib/services/fecUsageExample.d.ts +2 -2
- package/src/lib/services/index.d.ts +2 -0
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +2 -0
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/services/paginationService.d.ts +18 -0
- package/src/lib/services/paginationService.d.ts.map +1 -0
- package/src/lib/services/paginationService.js +32 -0
- package/src/lib/services/paginationService.js.map +1 -0
- package/src/lib/services/presenceService.d.ts +76 -0
- package/src/lib/services/presenceService.d.ts.map +1 -0
- package/src/lib/services/presenceService.js +143 -0
- package/src/lib/services/presenceService.js.map +1 -0
- package/src/lib/services/wireConversationPromotion.d.ts +23 -0
- package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
- package/src/lib/services/wireConversationPromotion.js +26 -0
- package/src/lib/services/wireConversationPromotion.js.map +1 -0
- package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
- package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
- package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
- package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
- package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
- package/src/lib/stores/diskBlockAsyncStore.js +297 -10
- package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
- package/src/lib/utils/communicationValidation.d.ts +44 -0
- package/src/lib/utils/communicationValidation.d.ts.map +1 -0
- package/src/lib/utils/communicationValidation.js +291 -0
- package/src/lib/utils/communicationValidation.js.map +1 -0
- package/src/lib/utils/emailValidation.d.ts +19 -0
- package/src/lib/utils/emailValidation.d.ts.map +1 -0
- package/src/lib/utils/emailValidation.js +232 -0
- package/src/lib/utils/emailValidation.js.map +1 -0
- package/src/lib/interfaces/blockStore.d.ts +0 -7
- package/src/lib/interfaces/blockStore.d.ts.map +0 -1
- package/src/lib/interfaces/blockStore.js.map +0 -1
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see Requirements 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8
|
|
9
9
|
*/
|
|
10
|
-
import { BlockManifest, IReconciliationService, PendingSyncItem, ReconciliationConfig, ReconciliationEventHandler, ReconciliationResult, SyncVectorEntry } from '@brightchain/brightchain-lib';
|
|
10
|
+
import { BlockManifest, CBLIndexManifest, ICBLIndexEntry, IReconciliationService, PendingSyncItem, PoolId, PoolScopedManifest, ReconciliationConfig, ReconciliationEventHandler, ReconciliationResult, SyncVectorEntry } from '@brightchain/brightchain-lib';
|
|
11
11
|
/**
|
|
12
12
|
* Interface for peer manifest operations.
|
|
13
13
|
* Abstracts network communication for reconciliation.
|
|
@@ -73,6 +73,77 @@ export interface IManifestProvider {
|
|
|
73
73
|
* @param nodeId - The node to check
|
|
74
74
|
*/
|
|
75
75
|
getBlockTimestamp(blockId: string, nodeId: string): Promise<Date | null>;
|
|
76
|
+
/**
|
|
77
|
+
* Get the local pool-scoped manifest.
|
|
78
|
+
* Returns undefined if the provider does not support pool-scoped manifests,
|
|
79
|
+
* in which case the flat manifest is used for backward compatibility.
|
|
80
|
+
*/
|
|
81
|
+
getLocalPoolScopedManifest?(): PoolScopedManifest;
|
|
82
|
+
/**
|
|
83
|
+
* Get pool-scoped manifest from a peer.
|
|
84
|
+
* Returns undefined if the peer does not support pool-scoped manifests.
|
|
85
|
+
*
|
|
86
|
+
* @param peerId - The peer to get manifest from
|
|
87
|
+
* @param sinceTimestamp - Optional timestamp to get changes since
|
|
88
|
+
* @param timeoutMs - Timeout in milliseconds
|
|
89
|
+
*/
|
|
90
|
+
getPeerPoolScopedManifest?(peerId: string, sinceTimestamp?: Date, timeoutMs?: number): Promise<PoolScopedManifest | undefined>;
|
|
91
|
+
/**
|
|
92
|
+
* Check if a pool has an active deletion tombstone locally.
|
|
93
|
+
*
|
|
94
|
+
* @param poolId - The pool ID to check
|
|
95
|
+
* @returns true if the pool has an active tombstone
|
|
96
|
+
*/
|
|
97
|
+
hasTombstone?(poolId: PoolId): boolean;
|
|
98
|
+
/**
|
|
99
|
+
* Store a block in a specific pool.
|
|
100
|
+
* Used during pool-scoped reconciliation to place synchronized blocks
|
|
101
|
+
* in the correct pool namespace.
|
|
102
|
+
*
|
|
103
|
+
* @param poolId - The pool to store the block in
|
|
104
|
+
* @param blockId - The block ID to store
|
|
105
|
+
* @param peerId - The peer the block was fetched from
|
|
106
|
+
* @param data - The block data (if available from the peer)
|
|
107
|
+
*/
|
|
108
|
+
storeBlockInPool?(poolId: PoolId, blockId: string, peerId: string, data?: Uint8Array): Promise<void>;
|
|
109
|
+
/**
|
|
110
|
+
* Update location metadata for a block with pool context.
|
|
111
|
+
*
|
|
112
|
+
* @param blockId - The block ID to update
|
|
113
|
+
* @param nodeId - The node ID that has the block
|
|
114
|
+
* @param timestamp - When the block was seen
|
|
115
|
+
* @param poolId - The pool the block belongs to
|
|
116
|
+
*/
|
|
117
|
+
updateBlockLocationWithPool?(blockId: string, nodeId: string, timestamp: Date, poolId: PoolId): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Get the local CBL index manifest for a specific pool.
|
|
120
|
+
* Returns undefined if the provider does not support CBL index reconciliation.
|
|
121
|
+
*
|
|
122
|
+
* @param poolId - The pool to get the CBL index manifest for
|
|
123
|
+
* @returns The local CBL index manifest, or undefined if not supported
|
|
124
|
+
* @see Requirements 8.4
|
|
125
|
+
*/
|
|
126
|
+
getLocalCBLIndexManifest?(poolId: PoolId): Promise<CBLIndexManifest | undefined>;
|
|
127
|
+
/**
|
|
128
|
+
* Get a peer's CBL index manifest for a specific pool.
|
|
129
|
+
* Returns undefined if the peer does not support CBL index reconciliation.
|
|
130
|
+
*
|
|
131
|
+
* @param peerId - The peer to get the manifest from
|
|
132
|
+
* @param poolId - The pool to get the CBL index manifest for
|
|
133
|
+
* @returns The peer's CBL index manifest, or undefined if not supported
|
|
134
|
+
* @see Requirements 8.4
|
|
135
|
+
*/
|
|
136
|
+
getPeerCBLIndexManifest?(peerId: string, poolId: PoolId): Promise<CBLIndexManifest | undefined>;
|
|
137
|
+
/**
|
|
138
|
+
* Fetch a full CBL index entry from a peer by magnet URL.
|
|
139
|
+
* Used during reconciliation to retrieve entries missing locally.
|
|
140
|
+
*
|
|
141
|
+
* @param peerId - The peer to fetch from
|
|
142
|
+
* @param magnetUrl - The magnet URL of the entry to fetch
|
|
143
|
+
* @returns The full CBL index entry, or null if not found
|
|
144
|
+
* @see Requirements 8.4
|
|
145
|
+
*/
|
|
146
|
+
fetchCBLIndexEntry?(peerId: string, magnetUrl: string): Promise<ICBLIndexEntry | null>;
|
|
76
147
|
}
|
|
77
148
|
/**
|
|
78
149
|
* Reconciliation Service Implementation
|
|
@@ -120,8 +191,24 @@ export declare class ReconciliationService implements IReconciliationService {
|
|
|
120
191
|
reconcile(peerIds: string[]): Promise<ReconciliationResult>;
|
|
121
192
|
/**
|
|
122
193
|
* Reconcile with a single peer.
|
|
194
|
+
* Uses pool-scoped manifests when the provider supports them,
|
|
195
|
+
* falling back to flat manifests for backward compatibility.
|
|
196
|
+
*
|
|
197
|
+
* @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
|
|
123
198
|
*/
|
|
124
199
|
private reconcileWithPeer;
|
|
200
|
+
/**
|
|
201
|
+
* Attempt pool-scoped reconciliation with a peer.
|
|
202
|
+
* Returns null if the provider doesn't support pool-scoped manifests.
|
|
203
|
+
*
|
|
204
|
+
* @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
|
|
205
|
+
*/
|
|
206
|
+
private tryPoolScopedReconciliation;
|
|
207
|
+
/**
|
|
208
|
+
* Reconcile with a peer using flat (non-pool-scoped) manifests.
|
|
209
|
+
* This is the original reconciliation logic, preserved for backward compatibility.
|
|
210
|
+
*/
|
|
211
|
+
private reconcileWithFlatManifest;
|
|
125
212
|
/**
|
|
126
213
|
* Resolve orphaned blocks by checking if any reconnected peers have them.
|
|
127
214
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconciliationService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"reconciliationService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,10 @@ class ReconciliationService {
|
|
|
63
63
|
let orphansResolved = 0;
|
|
64
64
|
let conflictsResolved = 0;
|
|
65
65
|
let peersReconciled = 0;
|
|
66
|
+
let totalCBLIndexEntriesMerged = 0;
|
|
67
|
+
// Aggregate pool stats and skipped pools across all peers
|
|
68
|
+
const aggregatedPoolStats = new Map();
|
|
69
|
+
const aggregatedSkippedPools = new Set();
|
|
66
70
|
// Emit start event
|
|
67
71
|
this.emitEvent({
|
|
68
72
|
type: 'reconciliation_started',
|
|
@@ -79,6 +83,29 @@ class ReconciliationService {
|
|
|
79
83
|
blocksDiscovered += result.blocksDiscovered;
|
|
80
84
|
blocksUpdated += result.blocksUpdated;
|
|
81
85
|
conflictsResolved += result.conflictsResolved;
|
|
86
|
+
// Merge per-peer pool stats
|
|
87
|
+
if (result.poolStats) {
|
|
88
|
+
for (const [poolId, stats] of result.poolStats) {
|
|
89
|
+
const existing = aggregatedPoolStats.get(poolId);
|
|
90
|
+
if (existing) {
|
|
91
|
+
existing.blocksDiscovered += stats.blocksDiscovered;
|
|
92
|
+
existing.blocksUpdated += stats.blocksUpdated;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
aggregatedPoolStats.set(poolId, { ...stats });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Merge per-peer skipped pools
|
|
100
|
+
if (result.skippedPools) {
|
|
101
|
+
for (const poolId of result.skippedPools) {
|
|
102
|
+
aggregatedSkippedPools.add(poolId);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Merge CBL index entries merged count
|
|
106
|
+
if (result.cblIndexEntriesMerged) {
|
|
107
|
+
totalCBLIndexEntriesMerged += result.cblIndexEntriesMerged;
|
|
108
|
+
}
|
|
82
109
|
}
|
|
83
110
|
else if (result.error) {
|
|
84
111
|
errors.push(result.error);
|
|
@@ -107,6 +134,18 @@ class ReconciliationService {
|
|
|
107
134
|
conflictsResolved,
|
|
108
135
|
errors,
|
|
109
136
|
duration: Date.now() - startTime,
|
|
137
|
+
// Include pool stats if any pool-scoped reconciliation occurred
|
|
138
|
+
...(aggregatedPoolStats.size > 0
|
|
139
|
+
? { poolStats: aggregatedPoolStats }
|
|
140
|
+
: {}),
|
|
141
|
+
// Include skipped pools if any were skipped
|
|
142
|
+
...(aggregatedSkippedPools.size > 0
|
|
143
|
+
? { skippedPools: Array.from(aggregatedSkippedPools) }
|
|
144
|
+
: {}),
|
|
145
|
+
// Include CBL index entries merged count if any were merged
|
|
146
|
+
...(totalCBLIndexEntriesMerged > 0
|
|
147
|
+
? { cblIndexEntriesMerged: totalCBLIndexEntriesMerged }
|
|
148
|
+
: {}),
|
|
110
149
|
};
|
|
111
150
|
// Emit completion event
|
|
112
151
|
this.emitEvent({
|
|
@@ -118,6 +157,10 @@ class ReconciliationService {
|
|
|
118
157
|
}
|
|
119
158
|
/**
|
|
120
159
|
* Reconcile with a single peer.
|
|
160
|
+
* Uses pool-scoped manifests when the provider supports them,
|
|
161
|
+
* falling back to flat manifests for backward compatibility.
|
|
162
|
+
*
|
|
163
|
+
* @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
|
|
121
164
|
*/
|
|
122
165
|
async reconcileWithPeer(peerId) {
|
|
123
166
|
this.emitEvent({
|
|
@@ -129,55 +172,19 @@ class ReconciliationService {
|
|
|
129
172
|
// Get sync vector for delta sync
|
|
130
173
|
const syncVector = this.getSyncVector(peerId);
|
|
131
174
|
const sinceTimestamp = syncVector?.lastSyncTimestamp;
|
|
132
|
-
//
|
|
133
|
-
const
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
for (const blockId of newBlocks) {
|
|
143
|
-
await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
|
|
144
|
-
blocksDiscovered++;
|
|
145
|
-
}
|
|
146
|
-
// Update location metadata for blocks we both have
|
|
147
|
-
const sharedBlocks = peerManifest.blockIds.filter((id) => localBlockSet.has(id));
|
|
148
|
-
for (const blockId of sharedBlocks) {
|
|
149
|
-
// Check for conflicts using last-write-wins
|
|
150
|
-
const localTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, this.manifestProvider.getLocalNodeId());
|
|
151
|
-
const peerTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, peerId);
|
|
152
|
-
if (localTimestamp && peerTimestamp) {
|
|
153
|
-
if (peerTimestamp > localTimestamp) {
|
|
154
|
-
// Peer has newer version - this is a conflict resolved by last-write-wins
|
|
155
|
-
this.emitEvent({
|
|
156
|
-
type: 'conflict_resolved',
|
|
157
|
-
timestamp: new Date(),
|
|
158
|
-
blockId,
|
|
159
|
-
winningNodeId: peerId,
|
|
160
|
-
});
|
|
161
|
-
conflictsResolved++;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
|
|
165
|
-
blocksUpdated++;
|
|
175
|
+
// Try pool-scoped reconciliation first
|
|
176
|
+
const poolScopedResult = await this.tryPoolScopedReconciliation(peerId, sinceTimestamp);
|
|
177
|
+
if (poolScopedResult) {
|
|
178
|
+
this.emitEvent({
|
|
179
|
+
type: 'peer_reconciliation_completed',
|
|
180
|
+
timestamp: new Date(),
|
|
181
|
+
peerId,
|
|
182
|
+
blocksDiscovered: poolScopedResult.blocksDiscovered,
|
|
183
|
+
});
|
|
184
|
+
return poolScopedResult;
|
|
166
185
|
}
|
|
167
|
-
//
|
|
168
|
-
this.
|
|
169
|
-
this.emitEvent({
|
|
170
|
-
type: 'peer_reconciliation_completed',
|
|
171
|
-
timestamp: new Date(),
|
|
172
|
-
peerId,
|
|
173
|
-
blocksDiscovered,
|
|
174
|
-
});
|
|
175
|
-
return {
|
|
176
|
-
success: true,
|
|
177
|
-
blocksDiscovered,
|
|
178
|
-
blocksUpdated,
|
|
179
|
-
conflictsResolved,
|
|
180
|
-
};
|
|
186
|
+
// Fall back to flat manifest reconciliation
|
|
187
|
+
return await this.reconcileWithFlatManifest(peerId, sinceTimestamp);
|
|
181
188
|
}
|
|
182
189
|
catch (error) {
|
|
183
190
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
@@ -199,6 +206,197 @@ class ReconciliationService {
|
|
|
199
206
|
};
|
|
200
207
|
}
|
|
201
208
|
}
|
|
209
|
+
/**
|
|
210
|
+
* Attempt pool-scoped reconciliation with a peer.
|
|
211
|
+
* Returns null if the provider doesn't support pool-scoped manifests.
|
|
212
|
+
*
|
|
213
|
+
* @see Requirements 3.1, 3.2, 3.3, 3.4, 3.6
|
|
214
|
+
*/
|
|
215
|
+
async tryPoolScopedReconciliation(peerId, sinceTimestamp) {
|
|
216
|
+
// Check if provider supports pool-scoped manifests
|
|
217
|
+
if (!this.manifestProvider.getLocalPoolScopedManifest ||
|
|
218
|
+
!this.manifestProvider.getPeerPoolScopedManifest) {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
const peerManifest = await this.manifestProvider.getPeerPoolScopedManifest(peerId, sinceTimestamp, this.config.manifestExchangeTimeoutMs);
|
|
222
|
+
// If peer doesn't support pool-scoped manifests, fall back
|
|
223
|
+
if (!peerManifest) {
|
|
224
|
+
return null;
|
|
225
|
+
}
|
|
226
|
+
const localManifest = this.manifestProvider.getLocalPoolScopedManifest();
|
|
227
|
+
const poolStats = new Map();
|
|
228
|
+
const skippedPools = [];
|
|
229
|
+
let totalBlocksDiscovered = 0;
|
|
230
|
+
let totalBlocksUpdated = 0;
|
|
231
|
+
let totalConflictsResolved = 0;
|
|
232
|
+
// Build a set of all local blocks per pool for efficient lookup
|
|
233
|
+
const localBlocksByPool = new Map();
|
|
234
|
+
for (const [poolId, blockIds] of localManifest.pools) {
|
|
235
|
+
localBlocksByPool.set(poolId, new Set(blockIds));
|
|
236
|
+
}
|
|
237
|
+
// Compare manifests per-pool (Req 3.1, 3.2)
|
|
238
|
+
for (const [poolId, peerBlockIds] of peerManifest.pools) {
|
|
239
|
+
// Skip pools with active deletion tombstones (Req 3.4)
|
|
240
|
+
if (this.manifestProvider.hasTombstone?.(poolId)) {
|
|
241
|
+
skippedPools.push(poolId);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const localBlockSet = localBlocksByPool.get(poolId) ?? new Set();
|
|
245
|
+
let poolDiscovered = 0;
|
|
246
|
+
let poolUpdated = 0;
|
|
247
|
+
// Find blocks the peer has that we don't in this pool
|
|
248
|
+
const missingBlocks = peerBlockIds.filter((blockId) => !localBlockSet.has(blockId));
|
|
249
|
+
// Store missing blocks in the correct pool (Req 3.2, 3.3)
|
|
250
|
+
for (const blockId of missingBlocks) {
|
|
251
|
+
if (this.manifestProvider.storeBlockInPool) {
|
|
252
|
+
await this.manifestProvider.storeBlockInPool(poolId, blockId, peerId);
|
|
253
|
+
}
|
|
254
|
+
// Update location metadata with pool context
|
|
255
|
+
if (this.manifestProvider.updateBlockLocationWithPool) {
|
|
256
|
+
await this.manifestProvider.updateBlockLocationWithPool(blockId, peerId, peerManifest.generatedAt, poolId);
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
|
|
260
|
+
}
|
|
261
|
+
poolDiscovered++;
|
|
262
|
+
}
|
|
263
|
+
// Update location metadata for shared blocks in this pool
|
|
264
|
+
const sharedBlocks = peerBlockIds.filter((blockId) => localBlockSet.has(blockId));
|
|
265
|
+
for (const blockId of sharedBlocks) {
|
|
266
|
+
// Check for conflicts using last-write-wins
|
|
267
|
+
const localTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, this.manifestProvider.getLocalNodeId());
|
|
268
|
+
const peerTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, peerId);
|
|
269
|
+
if (localTimestamp && peerTimestamp && peerTimestamp > localTimestamp) {
|
|
270
|
+
this.emitEvent({
|
|
271
|
+
type: 'conflict_resolved',
|
|
272
|
+
timestamp: new Date(),
|
|
273
|
+
blockId,
|
|
274
|
+
winningNodeId: peerId,
|
|
275
|
+
});
|
|
276
|
+
totalConflictsResolved++;
|
|
277
|
+
}
|
|
278
|
+
if (this.manifestProvider.updateBlockLocationWithPool) {
|
|
279
|
+
await this.manifestProvider.updateBlockLocationWithPool(blockId, peerId, peerManifest.generatedAt, poolId);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
|
|
283
|
+
}
|
|
284
|
+
poolUpdated++;
|
|
285
|
+
}
|
|
286
|
+
// Record per-pool stats (Req 3.6)
|
|
287
|
+
if (poolDiscovered > 0 || poolUpdated > 0) {
|
|
288
|
+
poolStats.set(poolId, {
|
|
289
|
+
blocksDiscovered: poolDiscovered,
|
|
290
|
+
blocksUpdated: poolUpdated,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
totalBlocksDiscovered += poolDiscovered;
|
|
294
|
+
totalBlocksUpdated += poolUpdated;
|
|
295
|
+
}
|
|
296
|
+
// === CBL Index Manifest Reconciliation (Req 8.4) ===
|
|
297
|
+
let totalCBLIndexEntriesMerged = 0;
|
|
298
|
+
if (this.manifestProvider.getLocalCBLIndexManifest &&
|
|
299
|
+
this.manifestProvider.getPeerCBLIndexManifest &&
|
|
300
|
+
this.manifestProvider.fetchCBLIndexEntry) {
|
|
301
|
+
// Exchange CBL index manifests for each pool in the peer's manifest
|
|
302
|
+
for (const [poolId] of peerManifest.pools) {
|
|
303
|
+
// Skip pools with active deletion tombstones
|
|
304
|
+
if (this.manifestProvider.hasTombstone?.(poolId)) {
|
|
305
|
+
continue;
|
|
306
|
+
}
|
|
307
|
+
try {
|
|
308
|
+
const peerCBLManifest = await this.manifestProvider.getPeerCBLIndexManifest(peerId, poolId);
|
|
309
|
+
if (!peerCBLManifest || peerCBLManifest.entries.length === 0) {
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
const localCBLManifest = await this.manifestProvider.getLocalCBLIndexManifest(poolId);
|
|
313
|
+
if (!localCBLManifest) {
|
|
314
|
+
continue;
|
|
315
|
+
}
|
|
316
|
+
// Find entries in the peer manifest that are missing locally
|
|
317
|
+
const localMagnetUrls = new Set(localCBLManifest.entries.map((e) => e.magnetUrl));
|
|
318
|
+
const missingEntries = peerCBLManifest.entries.filter((re) => !localMagnetUrls.has(re.magnetUrl));
|
|
319
|
+
// Fetch and merge missing entries
|
|
320
|
+
for (const missing of missingEntries) {
|
|
321
|
+
const fullEntry = await this.manifestProvider.fetchCBLIndexEntry(peerId, missing.magnetUrl);
|
|
322
|
+
if (fullEntry) {
|
|
323
|
+
totalCBLIndexEntriesMerged++;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
// CBL index reconciliation is best-effort; log and continue
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// Update sync vector
|
|
333
|
+
this.updateSyncVector(peerId, new Date(), peerManifest.checksum);
|
|
334
|
+
return {
|
|
335
|
+
success: true,
|
|
336
|
+
blocksDiscovered: totalBlocksDiscovered,
|
|
337
|
+
blocksUpdated: totalBlocksUpdated,
|
|
338
|
+
conflictsResolved: totalConflictsResolved,
|
|
339
|
+
poolStats,
|
|
340
|
+
skippedPools,
|
|
341
|
+
...(totalCBLIndexEntriesMerged > 0
|
|
342
|
+
? { cblIndexEntriesMerged: totalCBLIndexEntriesMerged }
|
|
343
|
+
: {}),
|
|
344
|
+
};
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Reconcile with a peer using flat (non-pool-scoped) manifests.
|
|
348
|
+
* This is the original reconciliation logic, preserved for backward compatibility.
|
|
349
|
+
*/
|
|
350
|
+
async reconcileWithFlatManifest(peerId, sinceTimestamp) {
|
|
351
|
+
// Exchange manifests
|
|
352
|
+
const peerManifest = await this.manifestProvider.getPeerManifest(peerId, sinceTimestamp, this.config.manifestExchangeTimeoutMs);
|
|
353
|
+
const localManifest = this.manifestProvider.getLocalManifest();
|
|
354
|
+
// Find new blocks on peer
|
|
355
|
+
const localBlockSet = new Set(localManifest.blockIds);
|
|
356
|
+
const newBlocks = peerManifest.blockIds.filter((id) => !localBlockSet.has(id));
|
|
357
|
+
let blocksDiscovered = 0;
|
|
358
|
+
let blocksUpdated = 0;
|
|
359
|
+
let conflictsResolved = 0;
|
|
360
|
+
// Update location metadata for discovered blocks
|
|
361
|
+
for (const blockId of newBlocks) {
|
|
362
|
+
await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
|
|
363
|
+
blocksDiscovered++;
|
|
364
|
+
}
|
|
365
|
+
// Update location metadata for blocks we both have
|
|
366
|
+
const sharedBlocks = peerManifest.blockIds.filter((id) => localBlockSet.has(id));
|
|
367
|
+
for (const blockId of sharedBlocks) {
|
|
368
|
+
// Check for conflicts using last-write-wins
|
|
369
|
+
const localTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, this.manifestProvider.getLocalNodeId());
|
|
370
|
+
const peerTimestamp = await this.manifestProvider.getBlockTimestamp(blockId, peerId);
|
|
371
|
+
if (localTimestamp && peerTimestamp) {
|
|
372
|
+
if (peerTimestamp > localTimestamp) {
|
|
373
|
+
this.emitEvent({
|
|
374
|
+
type: 'conflict_resolved',
|
|
375
|
+
timestamp: new Date(),
|
|
376
|
+
blockId,
|
|
377
|
+
winningNodeId: peerId,
|
|
378
|
+
});
|
|
379
|
+
conflictsResolved++;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
await this.manifestProvider.updateBlockLocation(blockId, peerId, peerManifest.generatedAt);
|
|
383
|
+
blocksUpdated++;
|
|
384
|
+
}
|
|
385
|
+
// Update sync vector
|
|
386
|
+
this.updateSyncVector(peerId, new Date(), peerManifest.checksum);
|
|
387
|
+
this.emitEvent({
|
|
388
|
+
type: 'peer_reconciliation_completed',
|
|
389
|
+
timestamp: new Date(),
|
|
390
|
+
peerId,
|
|
391
|
+
blocksDiscovered,
|
|
392
|
+
});
|
|
393
|
+
return {
|
|
394
|
+
success: true,
|
|
395
|
+
blocksDiscovered,
|
|
396
|
+
blocksUpdated,
|
|
397
|
+
conflictsResolved,
|
|
398
|
+
};
|
|
399
|
+
}
|
|
202
400
|
/**
|
|
203
401
|
* Resolve orphaned blocks by checking if any reconnected peers have them.
|
|
204
402
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reconciliationService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reconciliationService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview BlockFetcher Implementation
|
|
3
|
+
*
|
|
4
|
+
* Retrieves block data from remote nodes with:
|
|
5
|
+
* - Checksum verification
|
|
6
|
+
* - Retry logic with exponential backoff
|
|
7
|
+
* - Node health tracking (cooldown)
|
|
8
|
+
* - Pool-scoped storage via putInPool
|
|
9
|
+
* - Pool metadata validation (PoolMismatchError on mismatch)
|
|
10
|
+
*
|
|
11
|
+
* @see cross-node-eventual-consistency design, Section 9
|
|
12
|
+
* @see pool-scoped-whitening requirements 7.1, 7.2, 7.3, 7.4
|
|
13
|
+
*/
|
|
14
|
+
import { BlockFetcherConfig, BlockFetchResult, IAvailabilityService, IBlockFetcher, IBlockFetchTransport, IBlockStore, IFetchQueue, IGossipService, PoolId } from '@brightchain/brightchain-lib';
|
|
15
|
+
/**
|
|
16
|
+
* BlockFetcher retrieves blocks from remote nodes, verifies checksums,
|
|
17
|
+
* stores them in the correct pool, and validates pool metadata.
|
|
18
|
+
*
|
|
19
|
+
* Pool-scoped fetch behavior (Requirements 7.1–7.4):
|
|
20
|
+
* - When poolId is provided, fetched blocks are stored via putInPool(poolId, data)
|
|
21
|
+
* - The fetcher verifies that the block's metadata poolId matches the requested poolId
|
|
22
|
+
* - PoolMismatchError is thrown when metadata doesn't match
|
|
23
|
+
* - Tuple reconstruction callers pass the same poolId for all blocks
|
|
24
|
+
*/
|
|
25
|
+
export declare class BlockFetcher implements IBlockFetcher {
|
|
26
|
+
private readonly transport;
|
|
27
|
+
private readonly availabilityService;
|
|
28
|
+
private readonly store;
|
|
29
|
+
private readonly config;
|
|
30
|
+
private readonly gossipService?;
|
|
31
|
+
private readonly fetchQueue?;
|
|
32
|
+
private readonly nodeCooldowns;
|
|
33
|
+
private readonly checksumService;
|
|
34
|
+
private running;
|
|
35
|
+
/**
|
|
36
|
+
* Bound handler for gossip announcements, stored so we can unsubscribe in stop().
|
|
37
|
+
* Only set when proactiveFetchEnabled is true and gossipService is provided.
|
|
38
|
+
*/
|
|
39
|
+
private announcementHandler;
|
|
40
|
+
constructor(transport: IBlockFetchTransport, availabilityService: IAvailabilityService, store: IBlockStore, config?: BlockFetcherConfig, gossipService?: IGossipService | undefined, fetchQueue?: IFetchQueue | undefined);
|
|
41
|
+
/**
|
|
42
|
+
* Fetch a block from remote nodes and store it locally.
|
|
43
|
+
*
|
|
44
|
+
* The entire operation is bounded by `fetchTimeoutMs` (Req 1.6).
|
|
45
|
+
*
|
|
46
|
+
* When poolId is provided:
|
|
47
|
+
* 1. The block is stored in the specified pool via putInPool (Req 7.1)
|
|
48
|
+
* 2. After storage, the block's metadata poolId is verified against the requested poolId (Req 7.2)
|
|
49
|
+
* 3. If metadata doesn't match, the block is rejected with PoolMismatchError (Req 7.3)
|
|
50
|
+
*
|
|
51
|
+
* For tuple reconstruction, callers pass the same poolId for all blocks (Req 7.4).
|
|
52
|
+
*/
|
|
53
|
+
fetchBlock(blockId: string, poolId?: PoolId): Promise<BlockFetchResult>;
|
|
54
|
+
/**
|
|
55
|
+
* Core fetch logic: query locations, filter cooldowns, try nodes in order.
|
|
56
|
+
*/
|
|
57
|
+
private doFetchBlock;
|
|
58
|
+
/**
|
|
59
|
+
* Try fetching a block from a single node with retries.
|
|
60
|
+
* Returns a successful BlockFetchResult or null if all retries failed.
|
|
61
|
+
*/
|
|
62
|
+
private tryFetchFromNode;
|
|
63
|
+
/**
|
|
64
|
+
* Store a fetched block. When poolId is provided and the store supports pools,
|
|
65
|
+
* the block is stored in the specified pool via putInPool (Req 7.1).
|
|
66
|
+
* Otherwise falls back to the standard put method.
|
|
67
|
+
*/
|
|
68
|
+
private storeBlock;
|
|
69
|
+
/**
|
|
70
|
+
* Validate that the stored block's metadata poolId matches the requested poolId.
|
|
71
|
+
* Throws PoolMismatchError if there's a mismatch (Req 7.2, 7.3).
|
|
72
|
+
*/
|
|
73
|
+
private validatePoolMetadata;
|
|
74
|
+
/** Check if a node is currently available (not in cooldown) */
|
|
75
|
+
isNodeAvailable(nodeId: string): boolean;
|
|
76
|
+
/** Mark a node as unavailable for the configured cooldown period */
|
|
77
|
+
markNodeUnavailable(nodeId: string): void;
|
|
78
|
+
/** Get the current configuration */
|
|
79
|
+
getConfig(): BlockFetcherConfig;
|
|
80
|
+
/** Start the fetcher and subscribe to gossip announcements if proactive fetching is enabled */
|
|
81
|
+
start(): void;
|
|
82
|
+
/** Stop the fetcher, unsubscribe from gossip, and clean up */
|
|
83
|
+
stop(): void;
|
|
84
|
+
/** Whether the fetcher is currently running */
|
|
85
|
+
isRunning(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Handle a gossip announcement for proactive fetching.
|
|
88
|
+
* Checks if the block is already local; if not, enqueues a low-priority fetch.
|
|
89
|
+
*
|
|
90
|
+
* @see Requirements 6.1, 6.2
|
|
91
|
+
*/
|
|
92
|
+
private handleProactiveAnnouncement;
|
|
93
|
+
/**
|
|
94
|
+
* Race the fetch operation against fetchTimeoutMs (Req 1.6).
|
|
95
|
+
* Returns a FetchTimeoutError result if the timeout fires first.
|
|
96
|
+
*/
|
|
97
|
+
private withTimeout;
|
|
98
|
+
private sleep;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=blockFetcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blockFetcher.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/blockFetch/blockFetcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,kBAAkB,EAElB,gBAAgB,EAGhB,oBAAoB,EACpB,aAAa,EACb,oBAAoB,EACpB,WAAW,EACX,WAAW,EACX,cAAc,EAGd,MAAM,EAEP,MAAM,8BAA8B,CAAC;AAEtC;;;;;;;;;GASG;AACH,qBAAa,YAAa,YAAW,aAAa;IAY9C,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC;IAhB9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;IAChE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA0C;IAC1E,OAAO,CAAC,OAAO,CAAS;IAExB;;;OAGG;IACH,OAAO,CAAC,mBAAmB,CAAoC;gBAG5C,SAAS,EAAE,oBAAoB,EAC/B,mBAAmB,EAAE,oBAAoB,EACzC,KAAK,EAAE,WAAW,EAClB,MAAM,GAAE,kBAAiD,EACzD,aAAa,CAAC,EAAE,cAAc,YAAA,EAC9B,UAAU,CAAC,EAAE,WAAW,YAAA;IAG3C;;;;;;;;;;;OAWG;IACU,UAAU,CACrB,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,gBAAgB,CAAC;IAI5B;;OAEG;YACW,YAAY;IAsC1B;;;OAGG;YACW,gBAAgB;IAqE9B;;;;OAIG;YACW,UAAU;IAYxB;;;OAGG;YACW,oBAAoB;IAUlC,+DAA+D;IACxD,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAY/C,oEAAoE;IAC7D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhD,oCAAoC;IAC7B,SAAS,IAAI,kBAAkB;IAItC,+FAA+F;IACxF,KAAK,IAAI,IAAI;IAepB,8DAA8D;IACvD,IAAI,IAAI,IAAI;IASnB,+CAA+C;IACxC,SAAS,IAAI,OAAO;IAI3B;;;;;OAKG;YACW,2BAA2B;IA6BzC;;;OAGG;IACH,OAAO,CAAC,WAAW;IAmCnB,OAAO,CAAC,KAAK;CAGd"}
|