@brightchain/brightchain-api-lib 0.14.0 → 0.16.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 (288) hide show
  1. package/package.json +5 -5
  2. package/src/browser.d.ts +13 -0
  3. package/src/browser.d.ts.map +1 -0
  4. package/src/browser.js +16 -0
  5. package/src/browser.js.map +1 -0
  6. package/src/index.d.ts +4 -1
  7. package/src/index.d.ts.map +1 -1
  8. package/src/index.js +6 -1
  9. package/src/index.js.map +1 -1
  10. package/src/lib/application-base.d.ts +8 -37
  11. package/src/lib/application-base.d.ts.map +1 -1
  12. package/src/lib/application-base.js +8 -80
  13. package/src/lib/application-base.js.map +1 -1
  14. package/src/lib/application.d.ts +37 -7
  15. package/src/lib/application.d.ts.map +1 -1
  16. package/src/lib/application.js +130 -118
  17. package/src/lib/application.js.map +1 -1
  18. package/src/lib/auth/aclEnforcedAvailability.d.ts +57 -0
  19. package/src/lib/auth/aclEnforcedAvailability.d.ts.map +1 -0
  20. package/src/lib/auth/aclEnforcedAvailability.js +87 -0
  21. package/src/lib/auth/aclEnforcedAvailability.js.map +1 -0
  22. package/src/lib/auth/aclEnforcedBlockStore.d.ts +66 -0
  23. package/src/lib/auth/aclEnforcedBlockStore.d.ts.map +1 -0
  24. package/src/lib/auth/aclEnforcedBlockStore.js +83 -0
  25. package/src/lib/auth/aclEnforcedBlockStore.js.map +1 -0
  26. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts +46 -0
  27. package/src/lib/auth/ecdsaNodeAuthenticator.d.ts.map +1 -0
  28. package/src/lib/auth/ecdsaNodeAuthenticator.js +110 -0
  29. package/src/lib/auth/ecdsaNodeAuthenticator.js.map +1 -0
  30. package/src/lib/auth/index.d.ts +7 -0
  31. package/src/lib/auth/index.d.ts.map +1 -0
  32. package/src/lib/auth/index.js +13 -0
  33. package/src/lib/auth/index.js.map +1 -0
  34. package/src/lib/auth/poolAclBootstrap.d.ts +36 -0
  35. package/src/lib/auth/poolAclBootstrap.d.ts.map +1 -0
  36. package/src/lib/auth/poolAclBootstrap.js +64 -0
  37. package/src/lib/auth/poolAclBootstrap.js.map +1 -0
  38. package/src/lib/auth/poolAclStore.d.ts +77 -0
  39. package/src/lib/auth/poolAclStore.d.ts.map +1 -0
  40. package/src/lib/auth/poolAclStore.js +189 -0
  41. package/src/lib/auth/poolAclStore.js.map +1 -0
  42. package/src/lib/auth/poolAclUpdater.d.ts +79 -0
  43. package/src/lib/auth/poolAclUpdater.d.ts.map +1 -0
  44. package/src/lib/auth/poolAclUpdater.js +144 -0
  45. package/src/lib/auth/poolAclUpdater.js.map +1 -0
  46. package/src/lib/availability/availabilityService.d.ts +2 -2
  47. package/src/lib/availability/availabilityService.d.ts.map +1 -1
  48. package/src/lib/availability/availabilityService.js +12 -5
  49. package/src/lib/availability/availabilityService.js.map +1 -1
  50. package/src/lib/availability/blockRegistry.d.ts +45 -3
  51. package/src/lib/availability/blockRegistry.d.ts.map +1 -1
  52. package/src/lib/availability/blockRegistry.js +123 -5
  53. package/src/lib/availability/blockRegistry.js.map +1 -1
  54. package/src/lib/availability/discoveryProtocol.d.ts +30 -1
  55. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -1
  56. package/src/lib/availability/discoveryProtocol.js +76 -0
  57. package/src/lib/availability/discoveryProtocol.js.map +1 -1
  58. package/src/lib/availability/gossipService.d.ts +45 -6
  59. package/src/lib/availability/gossipService.d.ts.map +1 -1
  60. package/src/lib/availability/gossipService.js +177 -5
  61. package/src/lib/availability/gossipService.js.map +1 -1
  62. package/src/lib/availability/reconciliationService.d.ts +88 -1
  63. package/src/lib/availability/reconciliationService.d.ts.map +1 -1
  64. package/src/lib/availability/reconciliationService.js +246 -48
  65. package/src/lib/availability/reconciliationService.js.map +1 -1
  66. package/src/lib/blockFetch/blockFetcher.d.ts +100 -0
  67. package/src/lib/blockFetch/blockFetcher.d.ts.map +1 -0
  68. package/src/lib/blockFetch/blockFetcher.js +279 -0
  69. package/src/lib/blockFetch/blockFetcher.js.map +1 -0
  70. package/src/lib/blockFetch/fetchQueue.d.ts +88 -0
  71. package/src/lib/blockFetch/fetchQueue.d.ts.map +1 -0
  72. package/src/lib/blockFetch/fetchQueue.js +204 -0
  73. package/src/lib/blockFetch/fetchQueue.js.map +1 -0
  74. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts +65 -0
  75. package/src/lib/blockFetch/httpBlockFetchTransport.d.ts.map +1 -0
  76. package/src/lib/blockFetch/httpBlockFetchTransport.js +104 -0
  77. package/src/lib/blockFetch/httpBlockFetchTransport.js.map +1 -0
  78. package/src/lib/blockFetch/index.d.ts +10 -0
  79. package/src/lib/blockFetch/index.d.ts.map +1 -0
  80. package/src/lib/blockFetch/index.js +13 -0
  81. package/src/lib/blockFetch/index.js.map +1 -0
  82. package/src/lib/constants.js +2 -2
  83. package/src/lib/constants.js.map +1 -1
  84. package/src/lib/controllers/api/blocks.d.ts.map +1 -1
  85. package/src/lib/controllers/api/blocks.js +290 -290
  86. package/src/lib/controllers/api/blocks.js.map +1 -1
  87. package/src/lib/controllers/api/brightpass.d.ts +72 -0
  88. package/src/lib/controllers/api/brightpass.d.ts.map +1 -0
  89. package/src/lib/controllers/api/brightpass.js +577 -0
  90. package/src/lib/controllers/api/brightpass.js.map +1 -0
  91. package/src/lib/controllers/api/channels.d.ts +122 -0
  92. package/src/lib/controllers/api/channels.d.ts.map +1 -0
  93. package/src/lib/controllers/api/channels.js +701 -0
  94. package/src/lib/controllers/api/channels.js.map +1 -0
  95. package/src/lib/controllers/api/conversations.d.ts +89 -0
  96. package/src/lib/controllers/api/conversations.d.ts.map +1 -0
  97. package/src/lib/controllers/api/conversations.js +259 -0
  98. package/src/lib/controllers/api/conversations.js.map +1 -0
  99. package/src/lib/controllers/api/emails.d.ts +122 -0
  100. package/src/lib/controllers/api/emails.d.ts.map +1 -0
  101. package/src/lib/controllers/api/emails.js +494 -0
  102. package/src/lib/controllers/api/emails.js.map +1 -0
  103. package/src/lib/controllers/api/energy.d.ts.map +1 -1
  104. package/src/lib/controllers/api/energy.js +93 -93
  105. package/src/lib/controllers/api/energy.js.map +1 -1
  106. package/src/lib/controllers/api/explodingMessages.d.ts +79 -0
  107. package/src/lib/controllers/api/explodingMessages.d.ts.map +1 -0
  108. package/src/lib/controllers/api/explodingMessages.js +378 -0
  109. package/src/lib/controllers/api/explodingMessages.js.map +1 -0
  110. package/src/lib/controllers/api/groups.d.ts +94 -0
  111. package/src/lib/controllers/api/groups.d.ts.map +1 -0
  112. package/src/lib/controllers/api/groups.js +484 -0
  113. package/src/lib/controllers/api/groups.js.map +1 -0
  114. package/src/lib/controllers/api/i18n.d.ts.map +1 -1
  115. package/src/lib/controllers/api/i18n.js +8 -8
  116. package/src/lib/controllers/api/i18n.js.map +1 -1
  117. package/src/lib/controllers/api/index.d.ts +6 -0
  118. package/src/lib/controllers/api/index.d.ts.map +1 -1
  119. package/src/lib/controllers/api/index.js +6 -0
  120. package/src/lib/controllers/api/index.js.map +1 -1
  121. package/src/lib/controllers/api/messages.d.ts.map +1 -1
  122. package/src/lib/controllers/api/messages.js +2 -1
  123. package/src/lib/controllers/api/messages.js.map +1 -1
  124. package/src/lib/controllers/api/quorum.d.ts.map +1 -1
  125. package/src/lib/controllers/api/quorum.js +483 -483
  126. package/src/lib/controllers/api/quorum.js.map +1 -1
  127. package/src/lib/controllers/api/sessions.d.ts.map +1 -1
  128. package/src/lib/controllers/api/sessions.js +8 -8
  129. package/src/lib/controllers/api/sessions.js.map +1 -1
  130. package/src/lib/controllers/api/sync.d.ts +38 -2
  131. package/src/lib/controllers/api/sync.d.ts.map +1 -1
  132. package/src/lib/controllers/api/sync.js +89 -0
  133. package/src/lib/controllers/api/sync.js.map +1 -1
  134. package/src/lib/controllers/api/user.d.ts.map +1 -1
  135. package/src/lib/controllers/api/user.js +180 -180
  136. package/src/lib/controllers/api/user.js.map +1 -1
  137. package/src/lib/controllers/crypto/gitController.d.ts +70 -0
  138. package/src/lib/controllers/crypto/gitController.d.ts.map +1 -0
  139. package/src/lib/controllers/crypto/gitController.js +306 -0
  140. package/src/lib/controllers/crypto/gitController.js.map +1 -0
  141. package/src/lib/controllers/crypto/index.d.ts +3 -0
  142. package/src/lib/controllers/crypto/index.d.ts.map +1 -0
  143. package/src/lib/controllers/crypto/index.js +6 -0
  144. package/src/lib/controllers/crypto/index.js.map +1 -0
  145. package/src/lib/controllers/crypto/walletController.d.ts +64 -0
  146. package/src/lib/controllers/crypto/walletController.d.ts.map +1 -0
  147. package/src/lib/controllers/crypto/walletController.js +260 -0
  148. package/src/lib/controllers/crypto/walletController.js.map +1 -0
  149. package/src/lib/controllers/identity/deviceController.d.ts +96 -0
  150. package/src/lib/controllers/identity/deviceController.d.ts.map +1 -0
  151. package/src/lib/controllers/identity/deviceController.js +355 -0
  152. package/src/lib/controllers/identity/deviceController.js.map +1 -0
  153. package/src/lib/controllers/identity/directoryController.d.ts +75 -0
  154. package/src/lib/controllers/identity/directoryController.d.ts.map +1 -0
  155. package/src/lib/controllers/identity/directoryController.js +288 -0
  156. package/src/lib/controllers/identity/directoryController.js.map +1 -0
  157. package/src/lib/controllers/identity/identityProofController.d.ts +94 -0
  158. package/src/lib/controllers/identity/identityProofController.d.ts.map +1 -0
  159. package/src/lib/controllers/identity/identityProofController.js +454 -0
  160. package/src/lib/controllers/identity/identityProofController.js.map +1 -0
  161. package/src/lib/controllers/identity/index.d.ts +4 -0
  162. package/src/lib/controllers/identity/index.d.ts.map +1 -0
  163. package/src/lib/controllers/identity/index.js +7 -0
  164. package/src/lib/controllers/identity/index.js.map +1 -0
  165. package/src/lib/controllers/index.d.ts +2 -0
  166. package/src/lib/controllers/index.d.ts.map +1 -1
  167. package/src/lib/controllers/index.js +2 -0
  168. package/src/lib/controllers/index.js.map +1 -1
  169. package/src/lib/encryption/encryptedMetadataService.d.ts +87 -0
  170. package/src/lib/encryption/encryptedMetadataService.d.ts.map +1 -0
  171. package/src/lib/encryption/encryptedMetadataService.js +224 -0
  172. package/src/lib/encryption/encryptedMetadataService.js.map +1 -0
  173. package/src/lib/encryption/encryptionAwareReplication.d.ts +76 -0
  174. package/src/lib/encryption/encryptionAwareReplication.d.ts.map +1 -0
  175. package/src/lib/encryption/encryptionAwareReplication.js +116 -0
  176. package/src/lib/encryption/encryptionAwareReplication.js.map +1 -0
  177. package/src/lib/encryption/errors.d.ts +49 -0
  178. package/src/lib/encryption/errors.d.ts.map +1 -0
  179. package/src/lib/encryption/errors.js +80 -0
  180. package/src/lib/encryption/errors.js.map +1 -0
  181. package/src/lib/encryption/index.d.ts +6 -0
  182. package/src/lib/encryption/index.d.ts.map +1 -0
  183. package/src/lib/encryption/index.js +9 -0
  184. package/src/lib/encryption/index.js.map +1 -0
  185. package/src/lib/encryption/poolEncryptionService.d.ts +94 -0
  186. package/src/lib/encryption/poolEncryptionService.d.ts.map +1 -0
  187. package/src/lib/encryption/poolEncryptionService.js +252 -0
  188. package/src/lib/encryption/poolEncryptionService.js.map +1 -0
  189. package/src/lib/encryption/poolKeyManager.d.ts +82 -0
  190. package/src/lib/encryption/poolKeyManager.d.ts.map +1 -0
  191. package/src/lib/encryption/poolKeyManager.js +156 -0
  192. package/src/lib/encryption/poolKeyManager.js.map +1 -0
  193. package/src/lib/environment.d.ts +3 -0
  194. package/src/lib/environment.d.ts.map +1 -1
  195. package/src/lib/environment.js +5 -0
  196. package/src/lib/environment.js.map +1 -1
  197. package/src/lib/interfaces/application.d.ts +7 -1
  198. package/src/lib/interfaces/application.d.ts.map +1 -1
  199. package/src/lib/interfaces/brightchain-init-result.d.ts +17 -0
  200. package/src/lib/interfaces/brightchain-init-result.d.ts.map +1 -0
  201. package/src/lib/interfaces/brightchain-init-result.js +9 -0
  202. package/src/lib/interfaces/brightchain-init-result.js.map +1 -0
  203. package/src/lib/interfaces/environment.d.ts +7 -1
  204. package/src/lib/interfaces/environment.d.ts.map +1 -1
  205. package/src/lib/interfaces/index.d.ts +1 -1
  206. package/src/lib/interfaces/index.d.ts.map +1 -1
  207. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts +12 -0
  208. package/src/lib/interfaces/requests/getBlockDataRequest.d.ts.map +1 -0
  209. package/src/lib/interfaces/{blockStore.js → requests/getBlockDataRequest.js} +1 -1
  210. package/src/lib/interfaces/requests/getBlockDataRequest.js.map +1 -0
  211. package/src/lib/interfaces/requests/index.d.ts +1 -0
  212. package/src/lib/interfaces/requests/index.d.ts.map +1 -1
  213. package/src/lib/routers/api.d.ts +54 -1
  214. package/src/lib/routers/api.d.ts.map +1 -1
  215. package/src/lib/routers/api.js +77 -0
  216. package/src/lib/routers/api.js.map +1 -1
  217. package/src/lib/routers/app.d.ts +22 -14
  218. package/src/lib/routers/app.d.ts.map +1 -1
  219. package/src/lib/routers/app.js +28 -116
  220. package/src/lib/routers/app.js.map +1 -1
  221. package/src/lib/services/blockStore.d.ts +5 -2
  222. package/src/lib/services/blockStore.d.ts.map +1 -1
  223. package/src/lib/services/blockStore.js +4 -0
  224. package/src/lib/services/blockStore.js.map +1 -1
  225. package/src/lib/services/brightpass/auditLogger.d.ts +77 -0
  226. package/src/lib/services/brightpass/auditLogger.d.ts.map +1 -0
  227. package/src/lib/services/brightpass/auditLogger.js +184 -0
  228. package/src/lib/services/brightpass/auditLogger.js.map +1 -0
  229. package/src/lib/services/brightpass/vaultEncryption.d.ts +82 -0
  230. package/src/lib/services/brightpass/vaultEncryption.d.ts.map +1 -0
  231. package/src/lib/services/brightpass/vaultEncryption.js +144 -0
  232. package/src/lib/services/brightpass/vaultEncryption.js.map +1 -0
  233. package/src/lib/services/brightpass.d.ts +294 -0
  234. package/src/lib/services/brightpass.d.ts.map +1 -0
  235. package/src/lib/services/brightpass.js +1260 -0
  236. package/src/lib/services/brightpass.js.map +1 -0
  237. package/src/lib/services/brightpass.property.helpers.d.ts +23 -0
  238. package/src/lib/services/brightpass.property.helpers.d.ts.map +1 -0
  239. package/src/lib/services/brightpass.property.helpers.js +113 -0
  240. package/src/lib/services/brightpass.property.helpers.js.map +1 -0
  241. package/src/lib/services/eventNotificationSystem.d.ts +69 -3
  242. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -1
  243. package/src/lib/services/eventNotificationSystem.js +200 -0
  244. package/src/lib/services/eventNotificationSystem.js.map +1 -1
  245. package/src/lib/services/expirationScheduler.d.ts +90 -0
  246. package/src/lib/services/expirationScheduler.d.ts.map +1 -0
  247. package/src/lib/services/expirationScheduler.js +131 -0
  248. package/src/lib/services/expirationScheduler.js.map +1 -0
  249. package/src/lib/services/fecUsageExample.d.ts +2 -2
  250. package/src/lib/services/index.d.ts +2 -0
  251. package/src/lib/services/index.d.ts.map +1 -1
  252. package/src/lib/services/index.js +2 -0
  253. package/src/lib/services/index.js.map +1 -1
  254. package/src/lib/services/paginationService.d.ts +18 -0
  255. package/src/lib/services/paginationService.d.ts.map +1 -0
  256. package/src/lib/services/paginationService.js +32 -0
  257. package/src/lib/services/paginationService.js.map +1 -0
  258. package/src/lib/services/presenceService.d.ts +76 -0
  259. package/src/lib/services/presenceService.d.ts.map +1 -0
  260. package/src/lib/services/presenceService.js +143 -0
  261. package/src/lib/services/presenceService.js.map +1 -0
  262. package/src/lib/services/wireConversationPromotion.d.ts +23 -0
  263. package/src/lib/services/wireConversationPromotion.d.ts.map +1 -0
  264. package/src/lib/services/wireConversationPromotion.js +26 -0
  265. package/src/lib/services/wireConversationPromotion.js.map +1 -0
  266. package/src/lib/stores/availabilityAwareBlockStore.d.ts +115 -10
  267. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -1
  268. package/src/lib/stores/availabilityAwareBlockStore.js +267 -23
  269. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -1
  270. package/src/lib/stores/diskBlockAsyncStore.d.ts +81 -2
  271. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -1
  272. package/src/lib/stores/diskBlockAsyncStore.js +297 -10
  273. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -1
  274. package/src/lib/upstream-stubs.d.ts +36 -0
  275. package/src/lib/upstream-stubs.d.ts.map +1 -0
  276. package/src/lib/upstream-stubs.js +43 -0
  277. package/src/lib/upstream-stubs.js.map +1 -0
  278. package/src/lib/utils/communicationValidation.d.ts +44 -0
  279. package/src/lib/utils/communicationValidation.d.ts.map +1 -0
  280. package/src/lib/utils/communicationValidation.js +291 -0
  281. package/src/lib/utils/communicationValidation.js.map +1 -0
  282. package/src/lib/utils/emailValidation.d.ts +19 -0
  283. package/src/lib/utils/emailValidation.d.ts.map +1 -0
  284. package/src/lib/utils/emailValidation.js +232 -0
  285. package/src/lib/utils/emailValidation.js.map +1 -0
  286. package/src/lib/interfaces/blockStore.d.ts +0 -7
  287. package/src/lib/interfaces/blockStore.d.ts.map +0 -1
  288. package/src/lib/interfaces/blockStore.js.map +0 -1
@@ -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
- // Exchange manifests
133
- const peerManifest = await this.manifestProvider.getPeerManifest(peerId, sinceTimestamp, this.config.manifestExchangeTimeoutMs);
134
- const localManifest = this.manifestProvider.getLocalManifest();
135
- // Find new blocks on peer
136
- const localBlockSet = new Set(localManifest.blockIds);
137
- const newBlocks = peerManifest.blockIds.filter((id) => !localBlockSet.has(id));
138
- let blocksDiscovered = 0;
139
- let blocksUpdated = 0;
140
- let conflictsResolved = 0;
141
- // Update location metadata for discovered blocks
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
- // Update sync vector
168
- this.updateSyncVector(peerId, new Date(), peerManifest.checksum);
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"}