@brightchain/brightchain-api-lib 0.0.1

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 (586) hide show
  1. package/brightchain-api-lib/README.md +101 -0
  2. package/package.json +53 -0
  3. package/src/index.d.ts +88 -0
  4. package/src/index.d.ts.map +1 -0
  5. package/src/index.js +101 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts +71 -0
  8. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts.map +1 -0
  9. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js +119 -0
  10. package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js.map +1 -0
  11. package/src/lib/__tests__/fixtures/mocked-model.d.ts +90 -0
  12. package/src/lib/__tests__/fixtures/mocked-model.d.ts.map +1 -0
  13. package/src/lib/__tests__/fixtures/mocked-model.js +101 -0
  14. package/src/lib/__tests__/fixtures/mocked-model.js.map +1 -0
  15. package/src/lib/__tests__/helpers/application.mock.d.ts +5 -0
  16. package/src/lib/__tests__/helpers/application.mock.d.ts.map +1 -0
  17. package/src/lib/__tests__/helpers/application.mock.js +52 -0
  18. package/src/lib/__tests__/helpers/application.mock.js.map +1 -0
  19. package/src/lib/__tests__/helpers/model-mocks.mock.d.ts +43 -0
  20. package/src/lib/__tests__/helpers/model-mocks.mock.d.ts.map +1 -0
  21. package/src/lib/__tests__/helpers/model-mocks.mock.js +67 -0
  22. package/src/lib/__tests__/helpers/model-mocks.mock.js.map +1 -0
  23. package/src/lib/appConstants.d.ts +87 -0
  24. package/src/lib/appConstants.d.ts.map +1 -0
  25. package/src/lib/appConstants.js +25 -0
  26. package/src/lib/appConstants.js.map +1 -0
  27. package/src/lib/application-base.d.ts +39 -0
  28. package/src/lib/application-base.d.ts.map +1 -0
  29. package/src/lib/application-base.js +84 -0
  30. package/src/lib/application-base.js.map +1 -0
  31. package/src/lib/application.d.ts +14 -0
  32. package/src/lib/application.d.ts.map +1 -0
  33. package/src/lib/application.js +105 -0
  34. package/src/lib/application.js.map +1 -0
  35. package/src/lib/availability/availabilityMetrics.d.ts +241 -0
  36. package/src/lib/availability/availabilityMetrics.d.ts.map +1 -0
  37. package/src/lib/availability/availabilityMetrics.js +425 -0
  38. package/src/lib/availability/availabilityMetrics.js.map +1 -0
  39. package/src/lib/availability/availabilityService.d.ts +250 -0
  40. package/src/lib/availability/availabilityService.d.ts.map +1 -0
  41. package/src/lib/availability/availabilityService.js +593 -0
  42. package/src/lib/availability/availabilityService.js.map +1 -0
  43. package/src/lib/availability/blockRegistry.d.ts +141 -0
  44. package/src/lib/availability/blockRegistry.d.ts.map +1 -0
  45. package/src/lib/availability/blockRegistry.js +257 -0
  46. package/src/lib/availability/blockRegistry.js.map +1 -0
  47. package/src/lib/availability/configValidation.d.ts +72 -0
  48. package/src/lib/availability/configValidation.d.ts.map +1 -0
  49. package/src/lib/availability/configValidation.js +261 -0
  50. package/src/lib/availability/configValidation.js.map +1 -0
  51. package/src/lib/availability/discoveryProtocol.d.ts +160 -0
  52. package/src/lib/availability/discoveryProtocol.d.ts.map +1 -0
  53. package/src/lib/availability/discoveryProtocol.js +304 -0
  54. package/src/lib/availability/discoveryProtocol.js.map +1 -0
  55. package/src/lib/availability/gossipService.d.ts +158 -0
  56. package/src/lib/availability/gossipService.d.ts.map +1 -0
  57. package/src/lib/availability/gossipService.js +271 -0
  58. package/src/lib/availability/gossipService.js.map +1 -0
  59. package/src/lib/availability/heartbeatMonitor.d.ts +204 -0
  60. package/src/lib/availability/heartbeatMonitor.d.ts.map +1 -0
  61. package/src/lib/availability/heartbeatMonitor.js +375 -0
  62. package/src/lib/availability/heartbeatMonitor.js.map +1 -0
  63. package/src/lib/availability/index.d.ts +15 -0
  64. package/src/lib/availability/index.d.ts.map +1 -0
  65. package/src/lib/availability/index.js +18 -0
  66. package/src/lib/availability/index.js.map +1 -0
  67. package/src/lib/availability/reconciliationService.d.ts +237 -0
  68. package/src/lib/availability/reconciliationService.d.ts.map +1 -0
  69. package/src/lib/availability/reconciliationService.js +513 -0
  70. package/src/lib/availability/reconciliationService.js.map +1 -0
  71. package/src/lib/blocks/handle.d.ts +45 -0
  72. package/src/lib/blocks/handle.d.ts.map +1 -0
  73. package/src/lib/blocks/handle.js +221 -0
  74. package/src/lib/blocks/handle.js.map +1 -0
  75. package/src/lib/constants.d.ts +50 -0
  76. package/src/lib/constants.d.ts.map +1 -0
  77. package/src/lib/constants.js +58 -0
  78. package/src/lib/constants.js.map +1 -0
  79. package/src/lib/controllers/base.d.ts +50 -0
  80. package/src/lib/controllers/base.d.ts.map +1 -0
  81. package/src/lib/controllers/base.js +235 -0
  82. package/src/lib/controllers/base.js.map +1 -0
  83. package/src/lib/controllers/user.d.ts +9 -0
  84. package/src/lib/controllers/user.d.ts.map +1 -0
  85. package/src/lib/controllers/user.js +21 -0
  86. package/src/lib/controllers/user.js.map +1 -0
  87. package/src/lib/datastore/block-document-store-factory.d.ts +19 -0
  88. package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -0
  89. package/src/lib/datastore/block-document-store-factory.js +29 -0
  90. package/src/lib/datastore/block-document-store-factory.js.map +1 -0
  91. package/src/lib/datastore/block-document-store.d.ts +185 -0
  92. package/src/lib/datastore/block-document-store.d.ts.map +1 -0
  93. package/src/lib/datastore/block-document-store.js +590 -0
  94. package/src/lib/datastore/block-document-store.js.map +1 -0
  95. package/src/lib/datastore/document-model-adapter.d.ts +48 -0
  96. package/src/lib/datastore/document-model-adapter.d.ts.map +1 -0
  97. package/src/lib/datastore/document-model-adapter.js +178 -0
  98. package/src/lib/datastore/document-model-adapter.js.map +1 -0
  99. package/src/lib/datastore/document-store.d.ts +64 -0
  100. package/src/lib/datastore/document-store.d.ts.map +1 -0
  101. package/src/lib/datastore/document-store.js +3 -0
  102. package/src/lib/datastore/document-store.js.map +1 -0
  103. package/src/lib/datastore/memory-document-store.d.ts +6 -0
  104. package/src/lib/datastore/memory-document-store.d.ts.map +1 -0
  105. package/src/lib/datastore/memory-document-store.js +196 -0
  106. package/src/lib/datastore/memory-document-store.js.map +1 -0
  107. package/src/lib/documents/base.d.ts +5 -0
  108. package/src/lib/documents/base.d.ts.map +1 -0
  109. package/src/lib/documents/base.js +3 -0
  110. package/src/lib/documents/base.js.map +1 -0
  111. package/src/lib/documents/email-token.d.ts +8 -0
  112. package/src/lib/documents/email-token.d.ts.map +1 -0
  113. package/src/lib/documents/email-token.js +3 -0
  114. package/src/lib/documents/email-token.js.map +1 -0
  115. package/src/lib/documents/index.d.ts +7 -0
  116. package/src/lib/documents/index.d.ts.map +1 -0
  117. package/src/lib/documents/index.js +3 -0
  118. package/src/lib/documents/index.js.map +1 -0
  119. package/src/lib/documents/mnemonic.d.ts +8 -0
  120. package/src/lib/documents/mnemonic.d.ts.map +1 -0
  121. package/src/lib/documents/mnemonic.js +3 -0
  122. package/src/lib/documents/mnemonic.js.map +1 -0
  123. package/src/lib/documents/role.d.ts +8 -0
  124. package/src/lib/documents/role.d.ts.map +1 -0
  125. package/src/lib/documents/role.js +3 -0
  126. package/src/lib/documents/role.js.map +1 -0
  127. package/src/lib/documents/used-direct-login-token.d.ts +5 -0
  128. package/src/lib/documents/used-direct-login-token.d.ts.map +1 -0
  129. package/src/lib/documents/used-direct-login-token.js +3 -0
  130. package/src/lib/documents/used-direct-login-token.js.map +1 -0
  131. package/src/lib/documents/user-role.d.ts +8 -0
  132. package/src/lib/documents/user-role.d.ts.map +1 -0
  133. package/src/lib/documents/user-role.js +3 -0
  134. package/src/lib/documents/user-role.js.map +1 -0
  135. package/src/lib/documents/user.d.ts +13 -0
  136. package/src/lib/documents/user.d.ts.map +1 -0
  137. package/src/lib/documents/user.js +3 -0
  138. package/src/lib/documents/user.js.map +1 -0
  139. package/src/lib/enumerations/model-name.d.ts +30 -0
  140. package/src/lib/enumerations/model-name.d.ts.map +1 -0
  141. package/src/lib/enumerations/model-name.js +34 -0
  142. package/src/lib/enumerations/model-name.js.map +1 -0
  143. package/src/lib/enumerations/schema-collection.d.ts +30 -0
  144. package/src/lib/enumerations/schema-collection.d.ts.map +1 -0
  145. package/src/lib/enumerations/schema-collection.js +34 -0
  146. package/src/lib/enumerations/schema-collection.js.map +1 -0
  147. package/src/lib/enumerations/symmetric-error-type.d.ts +5 -0
  148. package/src/lib/enumerations/symmetric-error-type.d.ts.map +1 -0
  149. package/src/lib/enumerations/symmetric-error-type.js +9 -0
  150. package/src/lib/enumerations/symmetric-error-type.js.map +1 -0
  151. package/src/lib/environment.d.ts +23 -0
  152. package/src/lib/environment.d.ts.map +1 -0
  153. package/src/lib/environment.js +75 -0
  154. package/src/lib/environment.js.map +1 -0
  155. package/src/lib/errors/admin-role-not-found.d.ts +6 -0
  156. package/src/lib/errors/admin-role-not-found.d.ts.map +1 -0
  157. package/src/lib/errors/admin-role-not-found.js +14 -0
  158. package/src/lib/errors/admin-role-not-found.js.map +1 -0
  159. package/src/lib/errors/email-already-verified.d.ts +5 -0
  160. package/src/lib/errors/email-already-verified.d.ts.map +1 -0
  161. package/src/lib/errors/email-already-verified.js +11 -0
  162. package/src/lib/errors/email-already-verified.js.map +1 -0
  163. package/src/lib/errors/email-token-failed-to-send.d.ts +7 -0
  164. package/src/lib/errors/email-token-failed-to-send.d.ts.map +1 -0
  165. package/src/lib/errors/email-token-failed-to-send.js +14 -0
  166. package/src/lib/errors/email-token-failed-to-send.js.map +1 -0
  167. package/src/lib/errors/express-validation.d.ts +7 -0
  168. package/src/lib/errors/express-validation.d.ts.map +1 -0
  169. package/src/lib/errors/express-validation.js +14 -0
  170. package/src/lib/errors/express-validation.js.map +1 -0
  171. package/src/lib/errors/invalid-backup-code-version.d.ts +5 -0
  172. package/src/lib/errors/invalid-backup-code-version.d.ts.map +1 -0
  173. package/src/lib/errors/invalid-backup-code-version.js +12 -0
  174. package/src/lib/errors/invalid-backup-code-version.js.map +1 -0
  175. package/src/lib/errors/invalid-challenge-response.d.ts +5 -0
  176. package/src/lib/errors/invalid-challenge-response.d.ts.map +1 -0
  177. package/src/lib/errors/invalid-challenge-response.js +14 -0
  178. package/src/lib/errors/invalid-challenge-response.js.map +1 -0
  179. package/src/lib/errors/invalid-expired-token.d.ts +5 -0
  180. package/src/lib/errors/invalid-expired-token.d.ts.map +1 -0
  181. package/src/lib/errors/invalid-expired-token.js +13 -0
  182. package/src/lib/errors/invalid-expired-token.js.map +1 -0
  183. package/src/lib/errors/invalid-jwt-token.d.ts +5 -0
  184. package/src/lib/errors/invalid-jwt-token.d.ts.map +1 -0
  185. package/src/lib/errors/invalid-jwt-token.js +12 -0
  186. package/src/lib/errors/invalid-jwt-token.js.map +1 -0
  187. package/src/lib/errors/last-admin-error.d.ts +7 -0
  188. package/src/lib/errors/last-admin-error.d.ts.map +1 -0
  189. package/src/lib/errors/last-admin-error.js +16 -0
  190. package/src/lib/errors/last-admin-error.js.map +1 -0
  191. package/src/lib/errors/login-challenge-expired.d.ts +5 -0
  192. package/src/lib/errors/login-challenge-expired.d.ts.map +1 -0
  193. package/src/lib/errors/login-challenge-expired.js +14 -0
  194. package/src/lib/errors/login-challenge-expired.js.map +1 -0
  195. package/src/lib/errors/member-role-not-found.d.ts +7 -0
  196. package/src/lib/errors/member-role-not-found.d.ts.map +1 -0
  197. package/src/lib/errors/member-role-not-found.js +14 -0
  198. package/src/lib/errors/member-role-not-found.js.map +1 -0
  199. package/src/lib/errors/missing-validated-data.d.ts +8 -0
  200. package/src/lib/errors/missing-validated-data.d.ts.map +1 -0
  201. package/src/lib/errors/missing-validated-data.js +32 -0
  202. package/src/lib/errors/missing-validated-data.js.map +1 -0
  203. package/src/lib/errors/mnemonic-or-password-required.d.ts +5 -0
  204. package/src/lib/errors/mnemonic-or-password-required.d.ts.map +1 -0
  205. package/src/lib/errors/mnemonic-or-password-required.js +14 -0
  206. package/src/lib/errors/mnemonic-or-password-required.js.map +1 -0
  207. package/src/lib/errors/restricted.d.ts +5 -0
  208. package/src/lib/errors/restricted.d.ts.map +1 -0
  209. package/src/lib/errors/restricted.js +15 -0
  210. package/src/lib/errors/restricted.js.map +1 -0
  211. package/src/lib/errors/symmetric.d.ts +9 -0
  212. package/src/lib/errors/symmetric.d.ts.map +1 -0
  213. package/src/lib/errors/symmetric.js +24 -0
  214. package/src/lib/errors/symmetric.js.map +1 -0
  215. package/src/lib/errors/token-expired.d.ts +5 -0
  216. package/src/lib/errors/token-expired.d.ts.map +1 -0
  217. package/src/lib/errors/token-expired.js +12 -0
  218. package/src/lib/errors/token-expired.js.map +1 -0
  219. package/src/lib/errors/token-not-found.d.ts +8 -0
  220. package/src/lib/errors/token-not-found.d.ts.map +1 -0
  221. package/src/lib/errors/token-not-found.js +19 -0
  222. package/src/lib/errors/token-not-found.js.map +1 -0
  223. package/src/lib/errors/translatable-error-local.d.ts +7 -0
  224. package/src/lib/errors/translatable-error-local.d.ts.map +1 -0
  225. package/src/lib/errors/translatable-error-local.js +17 -0
  226. package/src/lib/errors/translatable-error-local.js.map +1 -0
  227. package/src/lib/errors/typed-error-local.d.ts +10 -0
  228. package/src/lib/errors/typed-error-local.d.ts.map +1 -0
  229. package/src/lib/errors/typed-error-local.js +24 -0
  230. package/src/lib/errors/typed-error-local.js.map +1 -0
  231. package/src/lib/factories/blockStoreFactory.d.ts +14 -0
  232. package/src/lib/factories/blockStoreFactory.d.ts.map +1 -0
  233. package/src/lib/factories/blockStoreFactory.js +18 -0
  234. package/src/lib/factories/blockStoreFactory.js.map +1 -0
  235. package/src/lib/interfaces/api-constants.d.ts +51 -0
  236. package/src/lib/interfaces/api-constants.d.ts.map +1 -0
  237. package/src/lib/interfaces/api-constants.js +13 -0
  238. package/src/lib/interfaces/api-constants.js.map +1 -0
  239. package/src/lib/interfaces/api-express-validation-error-response.d.ts +7 -0
  240. package/src/lib/interfaces/api-express-validation-error-response.d.ts.map +1 -0
  241. package/src/lib/interfaces/api-express-validation-error-response.js +3 -0
  242. package/src/lib/interfaces/api-express-validation-error-response.js.map +1 -0
  243. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts +6 -0
  244. package/src/lib/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
  245. package/src/lib/interfaces/api-mongo-validation-error-response.js +3 -0
  246. package/src/lib/interfaces/api-mongo-validation-error-response.js.map +1 -0
  247. package/src/lib/interfaces/application.d.ts +10 -0
  248. package/src/lib/interfaces/application.d.ts.map +1 -0
  249. package/src/lib/interfaces/application.js +3 -0
  250. package/src/lib/interfaces/application.js.map +1 -0
  251. package/src/lib/interfaces/authenticated-cipher.d.ts +10 -0
  252. package/src/lib/interfaces/authenticated-cipher.d.ts.map +1 -0
  253. package/src/lib/interfaces/authenticated-cipher.js +3 -0
  254. package/src/lib/interfaces/authenticated-cipher.js.map +1 -0
  255. package/src/lib/interfaces/authenticated-decipher.d.ts +9 -0
  256. package/src/lib/interfaces/authenticated-decipher.d.ts.map +1 -0
  257. package/src/lib/interfaces/authenticated-decipher.js +3 -0
  258. package/src/lib/interfaces/authenticated-decipher.js.map +1 -0
  259. package/src/lib/interfaces/backend-objects/email-token.d.ts +4 -0
  260. package/src/lib/interfaces/backend-objects/email-token.d.ts.map +1 -0
  261. package/src/lib/interfaces/backend-objects/email-token.js +3 -0
  262. package/src/lib/interfaces/backend-objects/email-token.js.map +1 -0
  263. package/src/lib/interfaces/backend-objects/request-user.d.ts +5 -0
  264. package/src/lib/interfaces/backend-objects/request-user.d.ts.map +1 -0
  265. package/src/lib/interfaces/backend-objects/request-user.js +3 -0
  266. package/src/lib/interfaces/backend-objects/request-user.js.map +1 -0
  267. package/src/lib/interfaces/backend-objects/role.d.ts +4 -0
  268. package/src/lib/interfaces/backend-objects/role.d.ts.map +1 -0
  269. package/src/lib/interfaces/backend-objects/role.js +3 -0
  270. package/src/lib/interfaces/backend-objects/role.js.map +1 -0
  271. package/src/lib/interfaces/backend-objects/user.d.ts +5 -0
  272. package/src/lib/interfaces/backend-objects/user.d.ts.map +1 -0
  273. package/src/lib/interfaces/backend-objects/user.js +3 -0
  274. package/src/lib/interfaces/backend-objects/user.js.map +1 -0
  275. package/src/lib/interfaces/bases/mnemonic.d.ts +4 -0
  276. package/src/lib/interfaces/bases/mnemonic.d.ts.map +1 -0
  277. package/src/lib/interfaces/bases/mnemonic.js +3 -0
  278. package/src/lib/interfaces/bases/mnemonic.js.map +1 -0
  279. package/src/lib/interfaces/bases/role.d.ts +4 -0
  280. package/src/lib/interfaces/bases/role.d.ts.map +1 -0
  281. package/src/lib/interfaces/bases/role.js +3 -0
  282. package/src/lib/interfaces/bases/role.js.map +1 -0
  283. package/src/lib/interfaces/bases/user-role.d.ts +4 -0
  284. package/src/lib/interfaces/bases/user-role.d.ts.map +1 -0
  285. package/src/lib/interfaces/bases/user-role.js +3 -0
  286. package/src/lib/interfaces/bases/user-role.js.map +1 -0
  287. package/src/lib/interfaces/bases/user.d.ts +5 -0
  288. package/src/lib/interfaces/bases/user.d.ts.map +1 -0
  289. package/src/lib/interfaces/bases/user.js +3 -0
  290. package/src/lib/interfaces/bases/user.js.map +1 -0
  291. package/src/lib/interfaces/checksum-config.d.ts +5 -0
  292. package/src/lib/interfaces/checksum-config.d.ts.map +1 -0
  293. package/src/lib/interfaces/checksum-config.js +3 -0
  294. package/src/lib/interfaces/checksum-config.js.map +1 -0
  295. package/src/lib/interfaces/discriminator-collections.d.ts +5 -0
  296. package/src/lib/interfaces/discriminator-collections.d.ts.map +1 -0
  297. package/src/lib/interfaces/discriminator-collections.js +3 -0
  298. package/src/lib/interfaces/discriminator-collections.js.map +1 -0
  299. package/src/lib/interfaces/ecies-consts.d.ts +88 -0
  300. package/src/lib/interfaces/ecies-consts.d.ts.map +1 -0
  301. package/src/lib/interfaces/ecies-consts.js +3 -0
  302. package/src/lib/interfaces/ecies-consts.js.map +1 -0
  303. package/src/lib/interfaces/environment-aws.d.ts +7 -0
  304. package/src/lib/interfaces/environment-aws.d.ts.map +1 -0
  305. package/src/lib/interfaces/environment-aws.js +3 -0
  306. package/src/lib/interfaces/environment-aws.js.map +1 -0
  307. package/src/lib/interfaces/environment-mongo.d.ts +76 -0
  308. package/src/lib/interfaces/environment-mongo.d.ts.map +1 -0
  309. package/src/lib/interfaces/environment-mongo.js +3 -0
  310. package/src/lib/interfaces/environment-mongo.js.map +1 -0
  311. package/src/lib/interfaces/environment.d.ts +28 -0
  312. package/src/lib/interfaces/environment.d.ts.map +1 -0
  313. package/src/lib/interfaces/environment.js +3 -0
  314. package/src/lib/interfaces/environment.js.map +1 -0
  315. package/src/lib/interfaces/jwt-sign-response.d.ts +12 -0
  316. package/src/lib/interfaces/jwt-sign-response.d.ts.map +1 -0
  317. package/src/lib/interfaces/jwt-sign-response.js +3 -0
  318. package/src/lib/interfaces/jwt-sign-response.js.map +1 -0
  319. package/src/lib/interfaces/member/member-with-mnemonic.d.ts +6 -0
  320. package/src/lib/interfaces/member/member-with-mnemonic.d.ts.map +1 -0
  321. package/src/lib/interfaces/member/member-with-mnemonic.js +3 -0
  322. package/src/lib/interfaces/member/member-with-mnemonic.js.map +1 -0
  323. package/src/lib/interfaces/member/operational.d.ts +36 -0
  324. package/src/lib/interfaces/member/operational.d.ts.map +1 -0
  325. package/src/lib/interfaces/member/operational.js +3 -0
  326. package/src/lib/interfaces/member/operational.js.map +1 -0
  327. package/src/lib/interfaces/mongo-errors.d.ts +9 -0
  328. package/src/lib/interfaces/mongo-errors.d.ts.map +1 -0
  329. package/src/lib/interfaces/mongo-errors.js +3 -0
  330. package/src/lib/interfaces/mongo-errors.js.map +1 -0
  331. package/src/lib/interfaces/multi-encrypted-message.d.ts +8 -0
  332. package/src/lib/interfaces/multi-encrypted-message.d.ts.map +1 -0
  333. package/src/lib/interfaces/multi-encrypted-message.js +3 -0
  334. package/src/lib/interfaces/multi-encrypted-message.js.map +1 -0
  335. package/src/lib/interfaces/multi-encrypted-parsed-header.d.ts +24 -0
  336. package/src/lib/interfaces/multi-encrypted-parsed-header.d.ts.map +1 -0
  337. package/src/lib/interfaces/multi-encrypted-parsed-header.js +3 -0
  338. package/src/lib/interfaces/multi-encrypted-parsed-header.js.map +1 -0
  339. package/src/lib/interfaces/pbkdf2-result.d.ts +6 -0
  340. package/src/lib/interfaces/pbkdf2-result.d.ts.map +1 -0
  341. package/src/lib/interfaces/pbkdf2-result.js +3 -0
  342. package/src/lib/interfaces/pbkdf2-result.js.map +1 -0
  343. package/src/lib/interfaces/request-user.d.ts +51 -0
  344. package/src/lib/interfaces/request-user.d.ts.map +1 -0
  345. package/src/lib/interfaces/request-user.js +3 -0
  346. package/src/lib/interfaces/request-user.js.map +1 -0
  347. package/src/lib/interfaces/responses/api-backup-codes-response.d.ts +11 -0
  348. package/src/lib/interfaces/responses/api-backup-codes-response.d.ts.map +1 -0
  349. package/src/lib/interfaces/responses/api-backup-codes-response.js +3 -0
  350. package/src/lib/interfaces/responses/api-backup-codes-response.js.map +1 -0
  351. package/src/lib/interfaces/responses/api-challenge-response.d.ts +11 -0
  352. package/src/lib/interfaces/responses/api-challenge-response.d.ts.map +1 -0
  353. package/src/lib/interfaces/responses/api-challenge-response.js +3 -0
  354. package/src/lib/interfaces/responses/api-challenge-response.js.map +1 -0
  355. package/src/lib/interfaces/responses/api-code-count-response.d.ts +11 -0
  356. package/src/lib/interfaces/responses/api-code-count-response.d.ts.map +1 -0
  357. package/src/lib/interfaces/responses/api-code-count-response.js +3 -0
  358. package/src/lib/interfaces/responses/api-code-count-response.js.map +1 -0
  359. package/src/lib/interfaces/responses/api-login-response.d.ts +20 -0
  360. package/src/lib/interfaces/responses/api-login-response.d.ts.map +1 -0
  361. package/src/lib/interfaces/responses/api-login-response.js +3 -0
  362. package/src/lib/interfaces/responses/api-login-response.js.map +1 -0
  363. package/src/lib/interfaces/responses/api-mnemonic-response.d.ts +11 -0
  364. package/src/lib/interfaces/responses/api-mnemonic-response.d.ts.map +1 -0
  365. package/src/lib/interfaces/responses/api-mnemonic-response.js +3 -0
  366. package/src/lib/interfaces/responses/api-mnemonic-response.js.map +1 -0
  367. package/src/lib/interfaces/responses/api-registration-response.d.ts +16 -0
  368. package/src/lib/interfaces/responses/api-registration-response.d.ts.map +1 -0
  369. package/src/lib/interfaces/responses/api-registration-response.js +3 -0
  370. package/src/lib/interfaces/responses/api-registration-response.js.map +1 -0
  371. package/src/lib/interfaces/responses/api-request-user-response.d.ts +12 -0
  372. package/src/lib/interfaces/responses/api-request-user-response.d.ts.map +1 -0
  373. package/src/lib/interfaces/responses/api-request-user-response.js +3 -0
  374. package/src/lib/interfaces/responses/api-request-user-response.js.map +1 -0
  375. package/src/lib/interfaces/responses/index.d.ts +9 -0
  376. package/src/lib/interfaces/responses/index.d.ts.map +1 -0
  377. package/src/lib/interfaces/responses/index.js +11 -0
  378. package/src/lib/interfaces/responses/index.js.map +1 -0
  379. package/src/lib/interfaces/schema.d.ts +28 -0
  380. package/src/lib/interfaces/schema.d.ts.map +1 -0
  381. package/src/lib/interfaces/schema.js +3 -0
  382. package/src/lib/interfaces/schema.js.map +1 -0
  383. package/src/lib/interfaces/server-init-result.d.ts +34 -0
  384. package/src/lib/interfaces/server-init-result.d.ts.map +1 -0
  385. package/src/lib/interfaces/server-init-result.js +3 -0
  386. package/src/lib/interfaces/server-init-result.js.map +1 -0
  387. package/src/lib/interfaces/single-encrypted-parsed-header.d.ts +35 -0
  388. package/src/lib/interfaces/single-encrypted-parsed-header.d.ts.map +1 -0
  389. package/src/lib/interfaces/single-encrypted-parsed-header.js +3 -0
  390. package/src/lib/interfaces/single-encrypted-parsed-header.js.map +1 -0
  391. package/src/lib/interfaces/status-code-response.d.ts +7 -0
  392. package/src/lib/interfaces/status-code-response.d.ts.map +1 -0
  393. package/src/lib/interfaces/status-code-response.js +3 -0
  394. package/src/lib/interfaces/status-code-response.js.map +1 -0
  395. package/src/lib/interfaces/symmetric-encryption-results.d.ts +5 -0
  396. package/src/lib/interfaces/symmetric-encryption-results.d.ts.map +1 -0
  397. package/src/lib/interfaces/symmetric-encryption-results.js +3 -0
  398. package/src/lib/interfaces/symmetric-encryption-results.js.map +1 -0
  399. package/src/lib/interfaces/token-user.d.ts +9 -0
  400. package/src/lib/interfaces/token-user.d.ts.map +1 -0
  401. package/src/lib/interfaces/token-user.js +3 -0
  402. package/src/lib/interfaces/token-user.js.map +1 -0
  403. package/src/lib/interfaces/wallet-seed.d.ts +7 -0
  404. package/src/lib/interfaces/wallet-seed.d.ts.map +1 -0
  405. package/src/lib/interfaces/wallet-seed.js +3 -0
  406. package/src/lib/interfaces/wallet-seed.js.map +1 -0
  407. package/src/lib/middlewares/cleanup-crypto.d.ts +7 -0
  408. package/src/lib/middlewares/cleanup-crypto.d.ts.map +1 -0
  409. package/src/lib/middlewares/cleanup-crypto.js +32 -0
  410. package/src/lib/middlewares/cleanup-crypto.js.map +1 -0
  411. package/src/lib/middlewares/index.d.ts +3 -0
  412. package/src/lib/middlewares/index.d.ts.map +1 -0
  413. package/src/lib/middlewares/index.js +10 -0
  414. package/src/lib/middlewares/index.js.map +1 -0
  415. package/src/lib/middlewares.d.ts +19 -0
  416. package/src/lib/middlewares.d.ts.map +1 -0
  417. package/src/lib/middlewares.js +95 -0
  418. package/src/lib/middlewares.js.map +1 -0
  419. package/src/lib/models/email-token.d.ts +47 -0
  420. package/src/lib/models/email-token.d.ts.map +1 -0
  421. package/src/lib/models/email-token.js +11 -0
  422. package/src/lib/models/email-token.js.map +1 -0
  423. package/src/lib/models/mnemonic.d.ts +26 -0
  424. package/src/lib/models/mnemonic.d.ts.map +1 -0
  425. package/src/lib/models/mnemonic.js +11 -0
  426. package/src/lib/models/mnemonic.js.map +1 -0
  427. package/src/lib/models/role.d.ts +23 -0
  428. package/src/lib/models/role.d.ts.map +1 -0
  429. package/src/lib/models/role.js +8 -0
  430. package/src/lib/models/role.js.map +1 -0
  431. package/src/lib/models/used-direct-login-token.d.ts +29 -0
  432. package/src/lib/models/used-direct-login-token.d.ts.map +1 -0
  433. package/src/lib/models/used-direct-login-token.js +11 -0
  434. package/src/lib/models/used-direct-login-token.js.map +1 -0
  435. package/src/lib/models/user-role.d.ts +59 -0
  436. package/src/lib/models/user-role.d.ts.map +1 -0
  437. package/src/lib/models/user-role.js +11 -0
  438. package/src/lib/models/user-role.js.map +1 -0
  439. package/src/lib/models/user.d.ts +132 -0
  440. package/src/lib/models/user.d.ts.map +1 -0
  441. package/src/lib/models/user.js +8 -0
  442. package/src/lib/models/user.js.map +1 -0
  443. package/src/lib/routers/api.d.ts +21 -0
  444. package/src/lib/routers/api.d.ts.map +1 -0
  445. package/src/lib/routers/api.js +41 -0
  446. package/src/lib/routers/api.js.map +1 -0
  447. package/src/lib/routers/app.d.ts +22 -0
  448. package/src/lib/routers/app.d.ts.map +1 -0
  449. package/src/lib/routers/app.js +131 -0
  450. package/src/lib/routers/app.js.map +1 -0
  451. package/src/lib/routers/base.d.ts +8 -0
  452. package/src/lib/routers/base.d.ts.map +1 -0
  453. package/src/lib/routers/base.js +12 -0
  454. package/src/lib/routers/base.js.map +1 -0
  455. package/src/lib/routers/messageRouter.d.ts +4 -0
  456. package/src/lib/routers/messageRouter.d.ts.map +1 -0
  457. package/src/lib/routers/messageRouter.js +81 -0
  458. package/src/lib/routers/messageRouter.js.map +1 -0
  459. package/src/lib/schemas/email-token.d.ts +44 -0
  460. package/src/lib/schemas/email-token.d.ts.map +1 -0
  461. package/src/lib/schemas/email-token.js +29 -0
  462. package/src/lib/schemas/email-token.js.map +1 -0
  463. package/src/lib/schemas/mnemonic.d.ts +22 -0
  464. package/src/lib/schemas/mnemonic.d.ts.map +1 -0
  465. package/src/lib/schemas/mnemonic.js +21 -0
  466. package/src/lib/schemas/mnemonic.js.map +1 -0
  467. package/src/lib/schemas/role.d.ts +21 -0
  468. package/src/lib/schemas/role.d.ts.map +1 -0
  469. package/src/lib/schemas/role.js +36 -0
  470. package/src/lib/schemas/role.js.map +1 -0
  471. package/src/lib/schemas/schema.d.ts +3 -0
  472. package/src/lib/schemas/schema.d.ts.map +1 -0
  473. package/src/lib/schemas/schema.js +74 -0
  474. package/src/lib/schemas/schema.js.map +1 -0
  475. package/src/lib/schemas/used-direct-login-token.d.ts +25 -0
  476. package/src/lib/schemas/used-direct-login-token.d.ts.map +1 -0
  477. package/src/lib/schemas/used-direct-login-token.js +14 -0
  478. package/src/lib/schemas/used-direct-login-token.js.map +1 -0
  479. package/src/lib/schemas/user-role.d.ts +55 -0
  480. package/src/lib/schemas/user-role.d.ts.map +1 -0
  481. package/src/lib/schemas/user-role.js +22 -0
  482. package/src/lib/schemas/user-role.js.map +1 -0
  483. package/src/lib/schemas/user.d.ts +129 -0
  484. package/src/lib/schemas/user.d.ts.map +1 -0
  485. package/src/lib/schemas/user.js +84 -0
  486. package/src/lib/schemas/user.js.map +1 -0
  487. package/src/lib/services/diskQuorumService.d.ts +55 -0
  488. package/src/lib/services/diskQuorumService.d.ts.map +1 -0
  489. package/src/lib/services/diskQuorumService.js +247 -0
  490. package/src/lib/services/diskQuorumService.js.map +1 -0
  491. package/src/lib/services/email.d.ts +27 -0
  492. package/src/lib/services/email.d.ts.map +1 -0
  493. package/src/lib/services/email.js +81 -0
  494. package/src/lib/services/email.js.map +1 -0
  495. package/src/lib/services/eventNotificationSystem.d.ts +46 -0
  496. package/src/lib/services/eventNotificationSystem.d.ts.map +1 -0
  497. package/src/lib/services/eventNotificationSystem.js +83 -0
  498. package/src/lib/services/eventNotificationSystem.js.map +1 -0
  499. package/src/lib/services/fec.d.ts +87 -0
  500. package/src/lib/services/fec.d.ts.map +1 -0
  501. package/src/lib/services/fec.js +256 -0
  502. package/src/lib/services/fec.js.map +1 -0
  503. package/src/lib/services/fecServiceFactory.d.ts +89 -0
  504. package/src/lib/services/fecServiceFactory.d.ts.map +1 -0
  505. package/src/lib/services/fecServiceFactory.js +154 -0
  506. package/src/lib/services/fecServiceFactory.js.map +1 -0
  507. package/src/lib/services/fecUsageExample.d.ts +33 -0
  508. package/src/lib/services/fecUsageExample.d.ts.map +1 -0
  509. package/src/lib/services/fecUsageExample.js +79 -0
  510. package/src/lib/services/fecUsageExample.js.map +1 -0
  511. package/src/lib/services/keyWrapping.d.ts +61 -0
  512. package/src/lib/services/keyWrapping.d.ts.map +1 -0
  513. package/src/lib/services/keyWrapping.js +297 -0
  514. package/src/lib/services/keyWrapping.js.map +1 -0
  515. package/src/lib/services/messageEventsWebSocketHandler.d.ts +15 -0
  516. package/src/lib/services/messageEventsWebSocketHandler.d.ts.map +1 -0
  517. package/src/lib/services/messageEventsWebSocketHandler.js +59 -0
  518. package/src/lib/services/messageEventsWebSocketHandler.js.map +1 -0
  519. package/src/lib/services/messagePassingService.d.ts +31 -0
  520. package/src/lib/services/messagePassingService.d.ts.map +1 -0
  521. package/src/lib/services/messagePassingService.js +88 -0
  522. package/src/lib/services/messagePassingService.js.map +1 -0
  523. package/src/lib/services/nativeRsFecService.d.ts +79 -0
  524. package/src/lib/services/nativeRsFecService.d.ts.map +1 -0
  525. package/src/lib/services/nativeRsFecService.js +295 -0
  526. package/src/lib/services/nativeRsFecService.js.map +1 -0
  527. package/src/lib/services/pbkdf2.d.ts +6 -0
  528. package/src/lib/services/pbkdf2.d.ts.map +1 -0
  529. package/src/lib/services/pbkdf2.js +31 -0
  530. package/src/lib/services/pbkdf2.js.map +1 -0
  531. package/src/lib/services/user.d.ts +10 -0
  532. package/src/lib/services/user.d.ts.map +1 -0
  533. package/src/lib/services/user.js +11 -0
  534. package/src/lib/services/user.js.map +1 -0
  535. package/src/lib/services/webSocketMessageServer.d.ts +53 -0
  536. package/src/lib/services/webSocketMessageServer.d.ts.map +1 -0
  537. package/src/lib/services/webSocketMessageServer.js +159 -0
  538. package/src/lib/services/webSocketMessageServer.js.map +1 -0
  539. package/src/lib/shared-types.d.ts +82 -0
  540. package/src/lib/shared-types.d.ts.map +1 -0
  541. package/src/lib/shared-types.js +6 -0
  542. package/src/lib/shared-types.js.map +1 -0
  543. package/src/lib/stores/availabilityAwareBlockStore.d.ts +287 -0
  544. package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -0
  545. package/src/lib/stores/availabilityAwareBlockStore.js +458 -0
  546. package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -0
  547. package/src/lib/stores/diskBlockAsyncStore.d.ts +212 -0
  548. package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -0
  549. package/src/lib/stores/diskBlockAsyncStore.js +803 -0
  550. package/src/lib/stores/diskBlockAsyncStore.js.map +1 -0
  551. package/src/lib/stores/diskBlockMetadataStore.d.ts +125 -0
  552. package/src/lib/stores/diskBlockMetadataStore.d.ts.map +1 -0
  553. package/src/lib/stores/diskBlockMetadataStore.js +347 -0
  554. package/src/lib/stores/diskBlockMetadataStore.js.map +1 -0
  555. package/src/lib/stores/diskBlockStore.d.ts +41 -0
  556. package/src/lib/stores/diskBlockStore.d.ts.map +1 -0
  557. package/src/lib/stores/diskBlockStore.js +87 -0
  558. package/src/lib/stores/diskBlockStore.js.map +1 -0
  559. package/src/lib/stores/diskBlockSyncStore.d.ts +12 -0
  560. package/src/lib/stores/diskBlockSyncStore.d.ts.map +1 -0
  561. package/src/lib/stores/diskBlockSyncStore.js +55 -0
  562. package/src/lib/stores/diskBlockSyncStore.js.map +1 -0
  563. package/src/lib/stores/diskCblStore.d.ts +30 -0
  564. package/src/lib/stores/diskCblStore.d.ts.map +1 -0
  565. package/src/lib/stores/diskCblStore.js +139 -0
  566. package/src/lib/stores/diskCblStore.js.map +1 -0
  567. package/src/lib/stores/diskMessageMetadataStore.d.ts +17 -0
  568. package/src/lib/stores/diskMessageMetadataStore.d.ts.map +1 -0
  569. package/src/lib/stores/diskMessageMetadataStore.js +214 -0
  570. package/src/lib/stores/diskMessageMetadataStore.js.map +1 -0
  571. package/src/lib/transforms/checksumTransform.d.ts +8 -0
  572. package/src/lib/transforms/checksumTransform.d.ts.map +1 -0
  573. package/src/lib/transforms/checksumTransform.js +22 -0
  574. package/src/lib/transforms/checksumTransform.js.map +1 -0
  575. package/src/lib/transforms/memoryWritableStream.d.ts +8 -0
  576. package/src/lib/transforms/memoryWritableStream.d.ts.map +1 -0
  577. package/src/lib/transforms/memoryWritableStream.js +20 -0
  578. package/src/lib/transforms/memoryWritableStream.js.map +1 -0
  579. package/src/lib/transforms/xorMultipleTransform.d.ts +12 -0
  580. package/src/lib/transforms/xorMultipleTransform.d.ts.map +1 -0
  581. package/src/lib/transforms/xorMultipleTransform.js +52 -0
  582. package/src/lib/transforms/xorMultipleTransform.js.map +1 -0
  583. package/src/lib/utils/type-converters.d.ts +10 -0
  584. package/src/lib/utils/type-converters.d.ts.map +1 -0
  585. package/src/lib/utils/type-converters.js +42 -0
  586. package/src/lib/utils/type-converters.js.map +1 -0
@@ -0,0 +1,803 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DiskBlockAsyncStore = void 0;
4
+ /* eslint-disable @typescript-eslint/no-explicit-any */
5
+ const brightchain_lib_1 = require("@brightchain/brightchain-lib");
6
+ const fs_1 = require("fs");
7
+ const promises_1 = require("fs/promises");
8
+ const path_1 = require("path");
9
+ const stream_1 = require("stream");
10
+ const checksumTransform_1 = require("../transforms/checksumTransform");
11
+ const memoryWritableStream_1 = require("../transforms/memoryWritableStream");
12
+ const xorMultipleTransform_1 = require("../transforms/xorMultipleTransform");
13
+ const diskBlockMetadataStore_1 = require("./diskBlockMetadataStore");
14
+ const diskBlockStore_1 = require("./diskBlockStore");
15
+ /**
16
+ * Parity block file extension pattern: {blockId}.p{index}
17
+ */
18
+ const PARITY_FILE_EXTENSION_PREFIX = '.p';
19
+ /**
20
+ * DiskBlockAsyncStore provides asynchronous operations for storing and retrieving blocks from disk.
21
+ * It supports raw block storage and XOR operations with stream-based data handling.
22
+ * Blocks are stored as raw data without metadata - their meaning is derived from CBLs.
23
+ *
24
+ * This implementation supports:
25
+ * - Core block operations (store, retrieve, delete)
26
+ * - Metadata management for tracking block lifecycle and access patterns
27
+ * - FEC (Forward Error Correction) operations using Reed-Solomon encoding
28
+ * - Replication tracking for distributed storage
29
+ */
30
+ class DiskBlockAsyncStore extends diskBlockStore_1.DiskBlockStore {
31
+ constructor(config) {
32
+ super(config);
33
+ /**
34
+ * Optional FEC service for parity generation and recovery.
35
+ * If not provided, FEC operations will return errors or no-ops.
36
+ */
37
+ this.fecService = null;
38
+ this.metadataStore = new diskBlockMetadataStore_1.DiskBlockMetadataStore(config.storePath, config.blockSize);
39
+ }
40
+ /**
41
+ * Set the FEC service for parity generation and recovery.
42
+ * @param fecService - The FEC service to use
43
+ */
44
+ setFecService(fecService) {
45
+ this.fecService = fecService;
46
+ }
47
+ /**
48
+ * Get the FEC service if available.
49
+ * @returns The FEC service or null if not available
50
+ */
51
+ getFecService() {
52
+ return this.fecService;
53
+ }
54
+ /**
55
+ * Get the metadata store.
56
+ * @returns The metadata store
57
+ */
58
+ getMetadataStore() {
59
+ return this.metadataStore;
60
+ }
61
+ /**
62
+ * Convert a key to hex string format.
63
+ * @param key - The key as Checksum or string
64
+ * @returns The key as hex string
65
+ */
66
+ keyToHex(key) {
67
+ return typeof key === 'string' ? key : key.toHex();
68
+ }
69
+ /**
70
+ * Convert a hex string to Checksum.
71
+ * @param hex - The hex string
72
+ * @returns The Checksum
73
+ */
74
+ hexToChecksum(hex) {
75
+ return brightchain_lib_1.Checksum.fromHex(hex);
76
+ }
77
+ /**
78
+ * Get the file path for a parity block.
79
+ * Parity files are stored alongside block files with .p{index} extension.
80
+ * @param blockId - The data block's checksum
81
+ * @param parityIndex - The parity block index (0-based)
82
+ * @returns The parity file path
83
+ */
84
+ parityPath(blockId, parityIndex) {
85
+ return this.blockPath(blockId) + PARITY_FILE_EXTENSION_PREFIX + parityIndex;
86
+ }
87
+ /**
88
+ * Check if a block exists
89
+ */
90
+ async has(key) {
91
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
92
+ const blockPath = this.blockPath(keyChecksum);
93
+ return (0, fs_1.existsSync)(blockPath);
94
+ }
95
+ /**
96
+ * Get a handle to a block
97
+ */
98
+ get(key) {
99
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
100
+ const blockPath = this.blockPath(keyChecksum);
101
+ // Read the block data synchronously to create the handle
102
+ // This matches the synchronous signature expected by IBlockStore.get
103
+ if (!(0, fs_1.existsSync)(blockPath)) {
104
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
105
+ KEY: keyChecksum.toHex(),
106
+ });
107
+ }
108
+ const data = (0, fs_1.readFileSync)(blockPath);
109
+ return (0, brightchain_lib_1.createBlockHandle)(brightchain_lib_1.RawDataBlock, this._blockSize, data, keyChecksum, true, // canRead
110
+ true);
111
+ }
112
+ /**
113
+ * Get a block's data
114
+ */
115
+ async getData(key) {
116
+ const keyHex = this.keyToHex(key);
117
+ const blockPath = this.blockPath(key);
118
+ if (!(0, fs_1.existsSync)(blockPath)) {
119
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
120
+ KEY: keyHex,
121
+ });
122
+ }
123
+ let data;
124
+ try {
125
+ data = await (0, promises_1.readFile)(blockPath);
126
+ }
127
+ catch {
128
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
129
+ KEY: keyHex,
130
+ });
131
+ }
132
+ if (data.length > this._blockSize) {
133
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.BlockFileSizeMismatch);
134
+ }
135
+ // Use file creation time as block creation time
136
+ const stats = await (0, promises_1.stat)(blockPath);
137
+ const dateCreated = stats.birthtime;
138
+ // Record access in metadata
139
+ if (this.metadataStore.has(keyHex)) {
140
+ await this.metadataStore.recordAccess(keyHex);
141
+ }
142
+ return new brightchain_lib_1.RawDataBlock(this._blockSize, data, dateCreated, key, brightchain_lib_1.BlockType.RawData, brightchain_lib_1.BlockDataType.EphemeralStructuredData, // Use EphemeralStructuredData as default
143
+ true, // canRead
144
+ true);
145
+ }
146
+ /**
147
+ * Delete a block's data (and associated parity blocks and metadata)
148
+ * @param key - The block's checksum
149
+ */
150
+ async deleteData(key) {
151
+ const keyHex = this.keyToHex(key);
152
+ const blockPath = this.blockPath(key);
153
+ if (!(0, fs_1.existsSync)(blockPath)) {
154
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound);
155
+ }
156
+ // Get metadata to find parity blocks
157
+ const metadata = await this.metadataStore.get(keyHex);
158
+ // Delete parity blocks first
159
+ if (metadata && metadata.parityBlockIds.length > 0) {
160
+ for (let i = 0; i < metadata.parityBlockIds.length; i++) {
161
+ const parityFilePath = this.parityPath(key, i);
162
+ if ((0, fs_1.existsSync)(parityFilePath)) {
163
+ try {
164
+ await (0, promises_1.unlink)(parityFilePath);
165
+ }
166
+ catch {
167
+ // Ignore errors deleting parity files
168
+ }
169
+ }
170
+ }
171
+ }
172
+ // Delete the block data
173
+ try {
174
+ await (0, promises_1.unlink)(blockPath);
175
+ }
176
+ catch (error) {
177
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.BlockDeletionFailed, undefined, {
178
+ ERROR: error instanceof Error ? error.message : String(error),
179
+ });
180
+ }
181
+ // Delete metadata (if exists)
182
+ if (this.metadataStore.has(keyHex)) {
183
+ try {
184
+ await this.metadataStore.delete(keyHex);
185
+ }
186
+ catch {
187
+ // Ignore errors deleting metadata
188
+ }
189
+ }
190
+ }
191
+ /**
192
+ * Store a block's data with optional durability settings
193
+ */
194
+ async setData(block, options) {
195
+ if (block.blockSize !== this._blockSize) {
196
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.BlockSizeMismatch);
197
+ }
198
+ const keyHex = this.keyToHex(block.idChecksum);
199
+ const blockPath = this.blockPath(block.idChecksum);
200
+ if ((0, fs_1.existsSync)(blockPath)) {
201
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.BlockPathAlreadyExists);
202
+ }
203
+ try {
204
+ block.validate();
205
+ }
206
+ catch {
207
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.BlockValidationFailed);
208
+ }
209
+ // Ensure block directory exists before writing
210
+ this.ensureBlockPath(block.idChecksum);
211
+ try {
212
+ await (0, promises_1.writeFile)(blockPath, Buffer.from(block.data));
213
+ }
214
+ catch (error) {
215
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.BlockDirectoryCreationFailed, undefined, {
216
+ ERROR: error instanceof Error ? error.message : String(error),
217
+ });
218
+ }
219
+ // Create metadata for the block
220
+ const metadata = (0, brightchain_lib_1.createDefaultBlockMetadata)(keyHex, block.data.length, keyHex, options);
221
+ await this.metadataStore.create(metadata);
222
+ // Generate parity blocks based on durability level
223
+ const durabilityLevel = options?.durabilityLevel ?? brightchain_lib_1.DurabilityLevel.Standard;
224
+ const parityCount = (0, brightchain_lib_1.getParityCountForDurability)(durabilityLevel);
225
+ if (parityCount > 0 && this.fecService) {
226
+ try {
227
+ await this.generateParityBlocks(block.idChecksum, parityCount);
228
+ }
229
+ catch {
230
+ // If parity generation fails, we still keep the block but log the issue
231
+ // The block will have no parity protection
232
+ }
233
+ }
234
+ }
235
+ /**
236
+ * XOR multiple blocks together
237
+ */
238
+ async xor(blocks, destBlockMetadata) {
239
+ if (!blocks.length) {
240
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.NoBlocksProvided);
241
+ }
242
+ return new Promise((resolve, reject) => {
243
+ // Create read streams from the full block data
244
+ const readStreams = blocks.map((block) => {
245
+ const data = block.fullData; // Use fullData to get padded content
246
+ const stream = new stream_1.Readable();
247
+ stream.push(Buffer.from(data));
248
+ stream.push(null);
249
+ return stream;
250
+ });
251
+ const xorStream = new xorMultipleTransform_1.XorMultipleTransformStream(readStreams);
252
+ const checksumStream = new checksumTransform_1.ChecksumTransform();
253
+ const writeStream = new memoryWritableStream_1.MemoryWritableStream();
254
+ // Set up pipeline
255
+ xorStream.pipe(checksumStream).pipe(writeStream);
256
+ // Handle stream ends
257
+ this.handleReadStreamEnds(readStreams, xorStream);
258
+ // Handle checksum calculation
259
+ checksumStream.on('checksum', (checksumBuffer) => {
260
+ try {
261
+ const block = new brightchain_lib_1.RawDataBlock(this._blockSize, writeStream.data, new Date(destBlockMetadata.dateCreated), checksumBuffer, brightchain_lib_1.BlockType.RawData, destBlockMetadata.dataType, // Use the metadata's dataType
262
+ true, // canRead
263
+ true);
264
+ resolve(block);
265
+ }
266
+ catch (error) {
267
+ reject(error);
268
+ }
269
+ finally {
270
+ this.cleanupStreams([
271
+ ...readStreams,
272
+ xorStream,
273
+ checksumStream,
274
+ writeStream,
275
+ ]);
276
+ }
277
+ });
278
+ // Handle errors
279
+ const handleError = (error) => {
280
+ this.cleanupStreams([
281
+ ...readStreams,
282
+ xorStream,
283
+ checksumStream,
284
+ writeStream,
285
+ ]);
286
+ reject(error);
287
+ };
288
+ readStreams.forEach((stream) => stream.on('error', handleError));
289
+ xorStream.on('error', handleError);
290
+ checksumStream.on('error', handleError);
291
+ writeStream.on('error', handleError);
292
+ });
293
+ }
294
+ /**
295
+ * Handle read stream ends
296
+ */
297
+ handleReadStreamEnds(readStreams, xorStream) {
298
+ let endedStreams = 0;
299
+ readStreams.forEach((readStream) => {
300
+ readStream.on('end', () => {
301
+ if (++endedStreams === readStreams.length) {
302
+ xorStream.end();
303
+ }
304
+ });
305
+ });
306
+ }
307
+ /**
308
+ * Clean up streams
309
+ */
310
+ cleanupStreams(streams) {
311
+ streams.forEach((stream) => {
312
+ try {
313
+ stream.destroy();
314
+ }
315
+ catch {
316
+ // Ignore errors during cleanup
317
+ }
318
+ });
319
+ }
320
+ /**
321
+ * Get random block checksums from the store
322
+ * @param count - Maximum number of blocks to return
323
+ * @returns Array of random block checksums
324
+ */
325
+ async getRandomBlocks(count) {
326
+ const blockSizeString = (0, brightchain_lib_1.blockSizeToSizeString)(this._blockSize);
327
+ const basePath = (0, path_1.join)(this._storePath, blockSizeString);
328
+ if (!(0, fs_1.existsSync)(basePath)) {
329
+ return [];
330
+ }
331
+ const blocks = [];
332
+ const firstLevelDirs = await (0, promises_1.readdir)(basePath);
333
+ // Randomly select first level directories until we have enough blocks
334
+ while (blocks.length < count && firstLevelDirs.length > 0) {
335
+ // Pick a random first level directory
336
+ const randomFirstIndex = Math.floor(Math.random() * firstLevelDirs.length);
337
+ const firstDir = firstLevelDirs[randomFirstIndex];
338
+ const firstLevelPath = (0, path_1.join)(basePath, firstDir);
339
+ if (!(0, fs_1.existsSync)(firstLevelPath)) {
340
+ // Remove invalid directory and continue
341
+ firstLevelDirs.splice(randomFirstIndex, 1);
342
+ continue;
343
+ }
344
+ // Get second level directories
345
+ const secondLevelDirs = await (0, promises_1.readdir)(firstLevelPath);
346
+ if (secondLevelDirs.length === 0) {
347
+ // Remove empty directory and continue
348
+ firstLevelDirs.splice(randomFirstIndex, 1);
349
+ continue;
350
+ }
351
+ // Pick a random second level directory
352
+ const randomSecondIndex = Math.floor(Math.random() * secondLevelDirs.length);
353
+ const secondDir = secondLevelDirs[randomSecondIndex];
354
+ const secondLevelPath = (0, path_1.join)(firstLevelPath, secondDir);
355
+ if (!(0, fs_1.existsSync)(secondLevelPath)) {
356
+ continue;
357
+ }
358
+ // Get block files (exclude metadata and parity files)
359
+ const blockFiles = (await (0, promises_1.readdir)(secondLevelPath)).filter((file) => !file.endsWith('.m.json') &&
360
+ !file.includes(PARITY_FILE_EXTENSION_PREFIX));
361
+ if (blockFiles.length === 0) {
362
+ continue;
363
+ }
364
+ // Pick a random block
365
+ const randomBlockIndex = Math.floor(Math.random() * blockFiles.length);
366
+ const blockFile = blockFiles[randomBlockIndex];
367
+ blocks.push(brightchain_lib_1.Checksum.fromHex(blockFile));
368
+ // Remove used directory if we still need more blocks
369
+ if (blocks.length < count) {
370
+ firstLevelDirs.splice(randomFirstIndex, 1);
371
+ }
372
+ }
373
+ return blocks;
374
+ }
375
+ /**
376
+ * Store raw data with a key (convenience method)
377
+ * Creates a RawDataBlock and stores it
378
+ */
379
+ async put(key, data, options) {
380
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
381
+ const block = new brightchain_lib_1.RawDataBlock(this._blockSize, data, new Date(), keyChecksum);
382
+ await this.setData(block, options);
383
+ }
384
+ /**
385
+ * Delete a block (convenience method, alias for deleteData)
386
+ */
387
+ async delete(key) {
388
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
389
+ await this.deleteData(keyChecksum);
390
+ }
391
+ // === Metadata Operations ===
392
+ /**
393
+ * Get metadata for a block
394
+ * @param key - The block's checksum or ID
395
+ * @returns The block's metadata, or null if not found
396
+ */
397
+ async getMetadata(key) {
398
+ const keyHex = this.keyToHex(key);
399
+ return this.metadataStore.get(keyHex);
400
+ }
401
+ /**
402
+ * Update metadata for a block
403
+ * @param key - The block's checksum or ID
404
+ * @param updates - Partial metadata updates to apply
405
+ */
406
+ async updateMetadata(key, updates) {
407
+ const keyHex = this.keyToHex(key);
408
+ if (!this.metadataStore.has(keyHex)) {
409
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
410
+ KEY: keyHex,
411
+ });
412
+ }
413
+ await this.metadataStore.update(keyHex, updates);
414
+ }
415
+ // === FEC/Durability Operations ===
416
+ /**
417
+ * Generate parity blocks for a data block using Reed-Solomon encoding.
418
+ * Parity blocks are stored as separate files: {blockId}.p0, {blockId}.p1, etc.
419
+ * @param key - The data block's checksum
420
+ * @param parityCount - Number of parity blocks to generate
421
+ * @returns Array of parity block checksums (as synthetic IDs)
422
+ * @throws FecError if FEC service is not available or encoding fails
423
+ */
424
+ async generateParityBlocks(key, parityCount) {
425
+ const keyHex = this.keyToHex(key);
426
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
427
+ // Check if FEC service is available
428
+ if (!this.fecService) {
429
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
430
+ ERROR: 'FEC service is not available',
431
+ });
432
+ }
433
+ // Check if block exists
434
+ const blockPath = this.blockPath(keyChecksum);
435
+ if (!(0, fs_1.existsSync)(blockPath)) {
436
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
437
+ KEY: keyHex,
438
+ });
439
+ }
440
+ // Check if FEC service is available in the environment
441
+ const isAvailable = await this.fecService.isAvailable();
442
+ if (!isAvailable) {
443
+ throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
444
+ ERROR: 'FEC service is not available in this environment',
445
+ });
446
+ }
447
+ // Read block data
448
+ const blockData = await (0, promises_1.readFile)(blockPath);
449
+ // Generate parity data
450
+ const parityData = await this.fecService.createParityData(blockData, parityCount);
451
+ // Store parity blocks as separate files
452
+ const parityBlockIds = [];
453
+ for (let i = 0; i < parityData.length; i++) {
454
+ const parityFilePath = this.parityPath(keyChecksum, i);
455
+ await (0, promises_1.writeFile)(parityFilePath, Buffer.from(parityData[i].data));
456
+ parityBlockIds.push(`${keyHex}.p${i}`);
457
+ }
458
+ // Update metadata with parity block IDs
459
+ if (this.metadataStore.has(keyHex)) {
460
+ await this.metadataStore.update(keyHex, { parityBlockIds });
461
+ }
462
+ // Return parity block IDs as Checksum (using hex encoding for synthetic IDs)
463
+ return parityBlockIds.map((id) => {
464
+ // For parity block IDs, we create a checksum from the hex-encoded ID string
465
+ // This is a synthetic ID, not a real checksum of data
466
+ const paddedHex = id.padEnd(64, '0').slice(0, 64);
467
+ return brightchain_lib_1.Checksum.fromHex(paddedHex);
468
+ });
469
+ }
470
+ /**
471
+ * Get parity block checksums for a data block.
472
+ * @param key - The data block's checksum or ID
473
+ * @returns Array of parity block checksums
474
+ */
475
+ async getParityBlocks(key) {
476
+ const keyHex = this.keyToHex(key);
477
+ // Get metadata to find parity block IDs
478
+ const metadata = await this.metadataStore.get(keyHex);
479
+ if (!metadata) {
480
+ return [];
481
+ }
482
+ // Return parity block IDs as Checksum
483
+ // Pad to 128 hex characters (64 bytes) for SHA3-512
484
+ return metadata.parityBlockIds.map((id) => {
485
+ const paddedHex = id.padEnd(128, '0').slice(0, 128);
486
+ return brightchain_lib_1.Checksum.fromHex(paddedHex);
487
+ });
488
+ }
489
+ /**
490
+ * Load parity data from disk for a block.
491
+ * @param key - The data block's checksum
492
+ * @returns Array of parity data objects
493
+ */
494
+ async loadParityData(key) {
495
+ const keyHex = this.keyToHex(key);
496
+ const metadata = await this.metadataStore.get(keyHex);
497
+ if (!metadata || metadata.parityBlockIds.length === 0) {
498
+ return [];
499
+ }
500
+ const parityData = [];
501
+ for (let i = 0; i < metadata.parityBlockIds.length; i++) {
502
+ const parityFilePath = this.parityPath(key, i);
503
+ if ((0, fs_1.existsSync)(parityFilePath)) {
504
+ const data = await (0, promises_1.readFile)(parityFilePath);
505
+ parityData.push({ data, index: i });
506
+ }
507
+ }
508
+ return parityData;
509
+ }
510
+ /**
511
+ * Attempt to recover a corrupted or missing block using parity data.
512
+ * @param key - The block's checksum or ID
513
+ * @returns Recovery result with the recovered block or error
514
+ */
515
+ async recoverBlock(key) {
516
+ const keyHex = this.keyToHex(key);
517
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
518
+ // Check if FEC service is available
519
+ if (!this.fecService) {
520
+ return {
521
+ success: false,
522
+ error: 'FEC service is not available',
523
+ };
524
+ }
525
+ // Check if FEC service is available in the environment
526
+ const isAvailable = await this.fecService.isAvailable();
527
+ if (!isAvailable) {
528
+ return {
529
+ success: false,
530
+ error: 'FEC service is not available in this environment',
531
+ };
532
+ }
533
+ // Get parity data from disk
534
+ const parityData = await this.loadParityData(keyChecksum);
535
+ if (parityData.length === 0) {
536
+ return {
537
+ success: false,
538
+ error: 'No parity data available for recovery',
539
+ };
540
+ }
541
+ // Get metadata for original size
542
+ const metadata = await this.metadataStore.get(keyHex);
543
+ if (!metadata) {
544
+ return {
545
+ success: false,
546
+ error: 'Block metadata not found',
547
+ };
548
+ }
549
+ try {
550
+ // Get corrupted data if block still exists
551
+ const blockPath = this.blockPath(keyChecksum);
552
+ let corruptedData = null;
553
+ if ((0, fs_1.existsSync)(blockPath)) {
554
+ corruptedData = await (0, promises_1.readFile)(blockPath);
555
+ }
556
+ // Attempt recovery
557
+ const result = await this.fecService.recoverFileData(corruptedData, parityData, metadata.size);
558
+ if (result.recovered) {
559
+ // Create a new block with recovered data
560
+ const recoveredBlock = new brightchain_lib_1.RawDataBlock(this._blockSize, new Uint8Array(result.data));
561
+ // Update the stored block on disk
562
+ await (0, promises_1.writeFile)(blockPath, Buffer.from(result.data));
563
+ return {
564
+ success: true,
565
+ recoveredBlock,
566
+ };
567
+ }
568
+ return {
569
+ success: false,
570
+ error: 'Recovery failed - insufficient parity data',
571
+ };
572
+ }
573
+ catch (error) {
574
+ return {
575
+ success: false,
576
+ error: error instanceof Error ? error.message : 'Unknown recovery error',
577
+ };
578
+ }
579
+ }
580
+ /**
581
+ * Verify block integrity against its parity data.
582
+ * @param key - The block's checksum or ID
583
+ * @returns True if the block data matches its parity data
584
+ */
585
+ async verifyBlockIntegrity(key) {
586
+ const _keyHex = this.keyToHex(key);
587
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
588
+ // Check if FEC service is available
589
+ if (!this.fecService) {
590
+ // Without FEC service, we can only verify the block exists
591
+ return this.has(key);
592
+ }
593
+ // Check if FEC service is available in the environment
594
+ const isAvailable = await this.fecService.isAvailable();
595
+ if (!isAvailable) {
596
+ // Without FEC service, we can only verify the block exists
597
+ return this.has(key);
598
+ }
599
+ // Check if block exists
600
+ const blockPath = this.blockPath(keyChecksum);
601
+ if (!(0, fs_1.existsSync)(blockPath)) {
602
+ return false;
603
+ }
604
+ // Get parity data from disk
605
+ const parityData = await this.loadParityData(keyChecksum);
606
+ if (parityData.length === 0) {
607
+ // No parity data - can only verify block exists
608
+ return true;
609
+ }
610
+ try {
611
+ const blockData = await (0, promises_1.readFile)(blockPath);
612
+ return await this.fecService.verifyFileIntegrity(blockData, parityData);
613
+ }
614
+ catch {
615
+ return false;
616
+ }
617
+ }
618
+ // === Replication Operations ===
619
+ /**
620
+ * Get blocks that are pending replication (status = Pending).
621
+ * @returns Array of block checksums pending replication
622
+ */
623
+ async getBlocksPendingReplication() {
624
+ const pendingBlocks = await this.metadataStore.findByReplicationStatus(brightchain_lib_1.ReplicationStatus.Pending);
625
+ return pendingBlocks
626
+ .filter((meta) => meta.targetReplicationFactor > 0)
627
+ .map((meta) => this.hexToChecksum(meta.blockId));
628
+ }
629
+ /**
630
+ * Get blocks that are under-replicated (status = UnderReplicated).
631
+ * @returns Array of block checksums that need additional replicas
632
+ */
633
+ async getUnderReplicatedBlocks() {
634
+ const underReplicatedBlocks = await this.metadataStore.findByReplicationStatus(brightchain_lib_1.ReplicationStatus.UnderReplicated);
635
+ return underReplicatedBlocks.map((meta) => this.hexToChecksum(meta.blockId));
636
+ }
637
+ /**
638
+ * Record that a block has been replicated to a node.
639
+ * @param key - The block's checksum or ID
640
+ * @param nodeId - The ID of the node that now holds a replica
641
+ */
642
+ async recordReplication(key, nodeId) {
643
+ const keyHex = this.keyToHex(key);
644
+ const metadata = await this.metadataStore.get(keyHex);
645
+ if (!metadata) {
646
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
647
+ KEY: keyHex,
648
+ });
649
+ }
650
+ // Add node to replica list if not already present
651
+ const replicaNodeIds = [...metadata.replicaNodeIds];
652
+ if (!replicaNodeIds.includes(nodeId)) {
653
+ replicaNodeIds.push(nodeId);
654
+ }
655
+ // Update replication status based on target factor
656
+ let replicationStatus = metadata.replicationStatus;
657
+ if (replicaNodeIds.length >= metadata.targetReplicationFactor) {
658
+ replicationStatus = brightchain_lib_1.ReplicationStatus.Replicated;
659
+ }
660
+ else if (replicaNodeIds.length > 0) {
661
+ replicationStatus = brightchain_lib_1.ReplicationStatus.UnderReplicated;
662
+ }
663
+ await this.metadataStore.update(keyHex, {
664
+ replicaNodeIds,
665
+ replicationStatus,
666
+ });
667
+ }
668
+ /**
669
+ * Record that a replica node is no longer available.
670
+ * @param key - The block's checksum or ID
671
+ * @param nodeId - The ID of the node that lost the replica
672
+ */
673
+ async recordReplicaLoss(key, nodeId) {
674
+ const keyHex = this.keyToHex(key);
675
+ const metadata = await this.metadataStore.get(keyHex);
676
+ if (!metadata) {
677
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
678
+ KEY: keyHex,
679
+ });
680
+ }
681
+ // Remove node from replica list
682
+ const replicaNodeIds = metadata.replicaNodeIds.filter((id) => id !== nodeId);
683
+ // Update replication status based on remaining replicas
684
+ let replicationStatus = metadata.replicationStatus;
685
+ if (metadata.targetReplicationFactor > 0) {
686
+ if (replicaNodeIds.length >= metadata.targetReplicationFactor) {
687
+ replicationStatus = brightchain_lib_1.ReplicationStatus.Replicated;
688
+ }
689
+ else if (replicaNodeIds.length > 0) {
690
+ replicationStatus = brightchain_lib_1.ReplicationStatus.UnderReplicated;
691
+ }
692
+ else {
693
+ replicationStatus = brightchain_lib_1.ReplicationStatus.Pending;
694
+ }
695
+ }
696
+ await this.metadataStore.update(keyHex, {
697
+ replicaNodeIds,
698
+ replicationStatus,
699
+ });
700
+ }
701
+ // === Block Expiration and Cleanup ===
702
+ /**
703
+ * Find all blocks that have expired (expiresAt is in the past).
704
+ * @returns Array of metadata for expired blocks
705
+ */
706
+ async findExpired() {
707
+ return this.metadataStore.findExpired();
708
+ }
709
+ /**
710
+ * Clean up expired blocks.
711
+ * This method identifies expired blocks and deletes them along with their
712
+ * parity blocks and metadata.
713
+ *
714
+ * @param cblChecker - Optional function to check if a block is referenced by a CBL.
715
+ * If provided, blocks referenced by active CBLs will not be deleted.
716
+ * @returns Object containing deleted block IDs and any errors encountered
717
+ */
718
+ async cleanupExpiredBlocks(cblChecker) {
719
+ const expiredBlocks = await this.findExpired();
720
+ const deletedBlockIds = [];
721
+ const errors = [];
722
+ for (const metadata of expiredBlocks) {
723
+ try {
724
+ // Check if block is referenced by a CBL
725
+ if (cblChecker) {
726
+ const isReferenced = await cblChecker(metadata.blockId);
727
+ if (isReferenced) {
728
+ // Skip deletion - block is still referenced
729
+ continue;
730
+ }
731
+ }
732
+ // Delete the block (this also deletes parity blocks and metadata)
733
+ const keyBuffer = this.hexToChecksum(metadata.blockId);
734
+ await this.deleteData(keyBuffer);
735
+ deletedBlockIds.push(metadata.blockId);
736
+ }
737
+ catch (error) {
738
+ errors.push({
739
+ blockId: metadata.blockId,
740
+ error: error instanceof Error ? error.message : String(error),
741
+ });
742
+ }
743
+ }
744
+ return { deletedBlockIds, errors };
745
+ }
746
+ // === XOR Brightening Operations ===
747
+ /**
748
+ * Brighten a block by XORing it with random blocks from the store.
749
+ * This is used to implement Owner-Free storage patterns where the
750
+ * original data cannot be reconstructed without all the random blocks.
751
+ *
752
+ * @param key - The source block's checksum or ID
753
+ * @param randomBlockCount - Number of random blocks to XOR with
754
+ * @returns Result containing the brightened block ID and the random block IDs used
755
+ * @throws StoreError if the source block is not found or insufficient random blocks are available
756
+ */
757
+ async brightenBlock(key, randomBlockCount) {
758
+ const keyHex = this.keyToHex(key);
759
+ const keyChecksum = typeof key === 'string' ? brightchain_lib_1.Checksum.fromHex(key) : key;
760
+ // Verify source block exists
761
+ const blockPath = this.blockPath(keyChecksum);
762
+ if (!(0, fs_1.existsSync)(blockPath)) {
763
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.KeyNotFound, undefined, {
764
+ KEY: keyHex,
765
+ });
766
+ }
767
+ // Get random blocks for XOR operation
768
+ const randomBlockChecksums = await this.getRandomBlocks(randomBlockCount);
769
+ // Check if we have enough random blocks
770
+ if (randomBlockChecksums.length < randomBlockCount) {
771
+ throw new brightchain_lib_1.StoreError(brightchain_lib_1.StoreErrorType.InsufficientRandomBlocks, undefined, {
772
+ REQUESTED: randomBlockCount.toString(),
773
+ AVAILABLE: randomBlockChecksums.length.toString(),
774
+ });
775
+ }
776
+ // Get the source block handle
777
+ const sourceBlockHandle = this.get(keyChecksum);
778
+ // Get handles for all random blocks
779
+ const randomBlockHandles = randomBlockChecksums.map((checksum) => this.get(checksum));
780
+ // Combine source block with random blocks for XOR operation
781
+ const allBlockHandles = [sourceBlockHandle, ...randomBlockHandles];
782
+ // Create metadata for the brightened block
783
+ const destBlockMetadata = new brightchain_lib_1.BlockMetadata(this._blockSize, brightchain_lib_1.BlockType.RawData, brightchain_lib_1.BlockDataType.EphemeralStructuredData, this._blockSize, // lengthWithoutPadding - use full block size for XOR result
784
+ new Date());
785
+ // Perform XOR operation using the existing xor method
786
+ const brightenedBlock = await this.xor(allBlockHandles, destBlockMetadata);
787
+ const brightenedBlockId = brightenedBlock.idChecksum.toHex();
788
+ // Store the brightened block if it doesn't already exist
789
+ const brightenedBlockExists = await this.has(brightenedBlockId);
790
+ if (!brightenedBlockExists) {
791
+ await this.setData(brightenedBlock);
792
+ }
793
+ // Get the random block IDs as hex strings
794
+ const randomBlockIds = randomBlockChecksums.map((checksum) => checksum.toHex());
795
+ return {
796
+ brightenedBlockId,
797
+ randomBlockIds,
798
+ originalBlockId: keyHex,
799
+ };
800
+ }
801
+ }
802
+ exports.DiskBlockAsyncStore = DiskBlockAsyncStore;
803
+ //# sourceMappingURL=diskBlockAsyncStore.js.map