@brightchain/brightchain-lib 0.21.1 → 0.23.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 (328) hide show
  1. package/README.md +66 -0
  2. package/package.json +2 -2
  3. package/src/browser.d.ts +2 -0
  4. package/src/browser.d.ts.map +1 -1
  5. package/src/browser.js +4 -1
  6. package/src/browser.js.map +1 -1
  7. package/src/lib/blocks/index.d.ts +1 -0
  8. package/src/lib/blocks/index.d.ts.map +1 -1
  9. package/src/lib/blocks/index.js +1 -0
  10. package/src/lib/blocks/index.js.map +1 -1
  11. package/src/lib/blocks/tcbl/index.d.ts +7 -0
  12. package/src/lib/blocks/tcbl/index.d.ts.map +1 -0
  13. package/src/lib/blocks/tcbl/index.js +10 -0
  14. package/src/lib/blocks/tcbl/index.js.map +1 -0
  15. package/src/lib/blocks/tcbl/manifestSerializer.d.ts +79 -0
  16. package/src/lib/blocks/tcbl/manifestSerializer.d.ts.map +1 -0
  17. package/src/lib/blocks/tcbl/manifestSerializer.js +258 -0
  18. package/src/lib/blocks/tcbl/manifestSerializer.js.map +1 -0
  19. package/src/lib/blocks/tcbl/tcbl.d.ts +190 -0
  20. package/src/lib/blocks/tcbl/tcbl.d.ts.map +1 -0
  21. package/src/lib/blocks/tcbl/tcbl.js +263 -0
  22. package/src/lib/blocks/tcbl/tcbl.js.map +1 -0
  23. package/src/lib/blocks/tcbl/tcblAttachmentUtils.d.ts +49 -0
  24. package/src/lib/blocks/tcbl/tcblAttachmentUtils.d.ts.map +1 -0
  25. package/src/lib/blocks/tcbl/tcblAttachmentUtils.js +126 -0
  26. package/src/lib/blocks/tcbl/tcblAttachmentUtils.js.map +1 -0
  27. package/src/lib/blocks/tcbl/tcblBuilder.d.ts +89 -0
  28. package/src/lib/blocks/tcbl/tcblBuilder.d.ts.map +1 -0
  29. package/src/lib/blocks/tcbl/tcblBuilder.js +180 -0
  30. package/src/lib/blocks/tcbl/tcblBuilder.js.map +1 -0
  31. package/src/lib/blocks/tcbl/tcblReader.d.ts +126 -0
  32. package/src/lib/blocks/tcbl/tcblReader.d.ts.map +1 -0
  33. package/src/lib/blocks/tcbl/tcblReader.js +224 -0
  34. package/src/lib/blocks/tcbl/tcblReader.js.map +1 -0
  35. package/src/lib/blocks/tcbl/tcblValidator.d.ts +56 -0
  36. package/src/lib/blocks/tcbl/tcblValidator.d.ts.map +1 -0
  37. package/src/lib/blocks/tcbl/tcblValidator.js +100 -0
  38. package/src/lib/blocks/tcbl/tcblValidator.js.map +1 -0
  39. package/src/lib/constants.d.ts +5 -1
  40. package/src/lib/constants.d.ts.map +1 -1
  41. package/src/lib/constants.js +4 -0
  42. package/src/lib/constants.js.map +1 -1
  43. package/src/lib/documents/member/memberDocument.d.ts +3 -3
  44. package/src/lib/documents/member/memberDocument.d.ts.map +1 -1
  45. package/src/lib/documents/member/memberDocument.js +2 -2
  46. package/src/lib/documents/member/memberDocument.js.map +1 -1
  47. package/src/lib/documents/member/memberHydration.js +3 -3
  48. package/src/lib/documents/member/memberHydration.js.map +1 -1
  49. package/src/lib/documents/member/memberOperational.d.ts.map +1 -1
  50. package/src/lib/documents/member/memberOperational.js +2 -2
  51. package/src/lib/documents/member/memberOperational.js.map +1 -1
  52. package/src/lib/documents/member/memberProfileHydration.js +4 -4
  53. package/src/lib/documents/member/memberProfileHydration.js.map +1 -1
  54. package/src/lib/ecies-config.js +1 -1
  55. package/src/lib/ecies-config.js.map +1 -1
  56. package/src/lib/enumeration-translations/blockType.d.ts.map +1 -1
  57. package/src/lib/enumeration-translations/blockType.js +16 -0
  58. package/src/lib/enumeration-translations/blockType.js.map +1 -1
  59. package/src/lib/enumerations/blockType.d.ts +12 -0
  60. package/src/lib/enumerations/blockType.d.ts.map +1 -1
  61. package/src/lib/enumerations/blockType.js +14 -0
  62. package/src/lib/enumerations/blockType.js.map +1 -1
  63. package/src/lib/enumerations/brightChainStrings.d.ts +12 -0
  64. package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -1
  65. package/src/lib/enumerations/brightChainStrings.js +13 -0
  66. package/src/lib/enumerations/brightChainStrings.js.map +1 -1
  67. package/src/lib/enumerations/index.d.ts +1 -0
  68. package/src/lib/enumerations/index.d.ts.map +1 -1
  69. package/src/lib/enumerations/index.js +2 -0
  70. package/src/lib/enumerations/index.js.map +1 -1
  71. package/src/lib/enumerations/tcblErrorType.d.ts +34 -0
  72. package/src/lib/enumerations/tcblErrorType.d.ts.map +1 -0
  73. package/src/lib/enumerations/tcblErrorType.js +38 -0
  74. package/src/lib/enumerations/tcblErrorType.js.map +1 -0
  75. package/src/lib/errors/index.d.ts +4 -0
  76. package/src/lib/errors/index.d.ts.map +1 -1
  77. package/src/lib/errors/index.js +7 -0
  78. package/src/lib/errors/index.js.map +1 -1
  79. package/src/lib/errors/tcblError.d.ts +30 -0
  80. package/src/lib/errors/tcblError.d.ts.map +1 -0
  81. package/src/lib/errors/tcblError.js +53 -0
  82. package/src/lib/errors/tcblError.js.map +1 -0
  83. package/src/lib/errors/typeGuards.d.ts +19 -0
  84. package/src/lib/errors/typeGuards.d.ts.map +1 -1
  85. package/src/lib/errors/typeGuards.js +22 -0
  86. package/src/lib/errors/typeGuards.js.map +1 -1
  87. package/src/lib/i18n/strings/englishUs.d.ts.map +1 -1
  88. package/src/lib/i18n/strings/englishUs.js +13 -0
  89. package/src/lib/i18n/strings/englishUs.js.map +1 -1
  90. package/src/lib/i18n/strings/french.d.ts.map +1 -1
  91. package/src/lib/i18n/strings/french.js +13 -0
  92. package/src/lib/i18n/strings/french.js.map +1 -1
  93. package/src/lib/i18n/strings/german.d.ts.map +1 -1
  94. package/src/lib/i18n/strings/german.js +13 -0
  95. package/src/lib/i18n/strings/german.js.map +1 -1
  96. package/src/lib/i18n/strings/japanese.d.ts.map +1 -1
  97. package/src/lib/i18n/strings/japanese.js +13 -0
  98. package/src/lib/i18n/strings/japanese.js.map +1 -1
  99. package/src/lib/i18n/strings/mandarin.d.ts.map +1 -1
  100. package/src/lib/i18n/strings/mandarin.js +13 -0
  101. package/src/lib/i18n/strings/mandarin.js.map +1 -1
  102. package/src/lib/i18n/strings/spanish.d.ts.map +1 -1
  103. package/src/lib/i18n/strings/spanish.js +13 -0
  104. package/src/lib/i18n/strings/spanish.js.map +1 -1
  105. package/src/lib/i18n/strings/ukrainian.d.ts.map +1 -1
  106. package/src/lib/i18n/strings/ukrainian.js +13 -0
  107. package/src/lib/i18n/strings/ukrainian.js.map +1 -1
  108. package/src/lib/interfaces/aliasRecord.d.ts +3 -5
  109. package/src/lib/interfaces/aliasRecord.d.ts.map +1 -1
  110. package/src/lib/interfaces/auditLogEntry.d.ts +7 -6
  111. package/src/lib/interfaces/auditLogEntry.d.ts.map +1 -1
  112. package/src/lib/interfaces/availability/availabilityService.d.ts +12 -11
  113. package/src/lib/interfaces/availability/availabilityService.d.ts.map +1 -1
  114. package/src/lib/interfaces/availability/availabilityService.js.map +1 -1
  115. package/src/lib/interfaces/availability/blockRegistry.d.ts +8 -7
  116. package/src/lib/interfaces/availability/blockRegistry.d.ts.map +1 -1
  117. package/src/lib/interfaces/availability/discoveryProtocol.d.ts +6 -5
  118. package/src/lib/interfaces/availability/discoveryProtocol.d.ts.map +1 -1
  119. package/src/lib/interfaces/availability/discoveryProtocol.js.map +1 -1
  120. package/src/lib/interfaces/availability/gossipService.d.ts +16 -15
  121. package/src/lib/interfaces/availability/gossipService.d.ts.map +1 -1
  122. package/src/lib/interfaces/availability/gossipService.js.map +1 -1
  123. package/src/lib/interfaces/availability/locationRecord.d.ts +2 -1
  124. package/src/lib/interfaces/availability/locationRecord.d.ts.map +1 -1
  125. package/src/lib/interfaces/availability/locationRecord.js.map +1 -1
  126. package/src/lib/interfaces/availability/reconciliationService.d.ts +5 -4
  127. package/src/lib/interfaces/availability/reconciliationService.d.ts.map +1 -1
  128. package/src/lib/interfaces/availability/reconciliationService.js.map +1 -1
  129. package/src/lib/interfaces/blockFetch/blockFetcher.d.ts +2 -1
  130. package/src/lib/interfaces/blockFetch/blockFetcher.d.ts.map +1 -1
  131. package/src/lib/interfaces/blockFetch/blockFetcher.js.map +1 -1
  132. package/src/lib/interfaces/branded/primitives/blockId.d.ts +13 -0
  133. package/src/lib/interfaces/branded/primitives/blockId.d.ts.map +1 -1
  134. package/src/lib/interfaces/branded/primitives/blockId.js +13 -0
  135. package/src/lib/interfaces/branded/primitives/blockId.js.map +1 -1
  136. package/src/lib/interfaces/brightpass/vaultEntry.d.ts +2 -1
  137. package/src/lib/interfaces/brightpass/vaultEntry.d.ts.map +1 -1
  138. package/src/lib/interfaces/brightpass/vaultMetadata.d.ts +2 -1
  139. package/src/lib/interfaces/brightpass/vaultMetadata.d.ts.map +1 -1
  140. package/src/lib/interfaces/chainedAuditLogEntry.d.ts +3 -2
  141. package/src/lib/interfaces/chainedAuditLogEntry.d.ts.map +1 -1
  142. package/src/lib/interfaces/contentWithIdentity.d.ts +3 -3
  143. package/src/lib/interfaces/contentWithIdentity.d.ts.map +1 -1
  144. package/src/lib/interfaces/identityRecoveryRecord.d.ts +5 -7
  145. package/src/lib/interfaces/identityRecoveryRecord.d.ts.map +1 -1
  146. package/src/lib/interfaces/index.d.ts +1 -0
  147. package/src/lib/interfaces/index.d.ts.map +1 -1
  148. package/src/lib/interfaces/member/memberDto.d.ts +4 -4
  149. package/src/lib/interfaces/member/memberDto.d.ts.map +1 -1
  150. package/src/lib/interfaces/messaging/attachmentMetadata.d.ts +2 -1
  151. package/src/lib/interfaces/messaging/attachmentMetadata.d.ts.map +1 -1
  152. package/src/lib/interfaces/messaging/emailDelivery.d.ts +3 -2
  153. package/src/lib/interfaces/messaging/emailDelivery.d.ts.map +1 -1
  154. package/src/lib/interfaces/messaging/emailDelivery.js.map +1 -1
  155. package/src/lib/interfaces/messaging/emailMetadata.d.ts +7 -3
  156. package/src/lib/interfaces/messaging/emailMetadata.d.ts.map +1 -1
  157. package/src/lib/interfaces/messaging/emailMetadata.js.map +1 -1
  158. package/src/lib/interfaces/messaging/messageMetadata.d.ts +12 -6
  159. package/src/lib/interfaces/messaging/messageMetadata.d.ts.map +1 -1
  160. package/src/lib/interfaces/messaging/messageMetadataStore.d.ts +17 -10
  161. package/src/lib/interfaces/messaging/messageMetadataStore.d.ts.map +1 -1
  162. package/src/lib/interfaces/messaging/mimePart.d.ts +2 -1
  163. package/src/lib/interfaces/messaging/mimePart.d.ts.map +1 -1
  164. package/src/lib/interfaces/messaging/mimePart.js.map +1 -1
  165. package/src/lib/interfaces/proposal.d.ts +26 -10
  166. package/src/lib/interfaces/proposal.d.ts.map +1 -1
  167. package/src/lib/interfaces/quorumDocumentMetadata.d.ts +2 -2
  168. package/src/lib/interfaces/quorumDocumentMetadata.d.ts.map +1 -1
  169. package/src/lib/interfaces/quorumEpoch.d.ts +3 -5
  170. package/src/lib/interfaces/quorumEpoch.d.ts.map +1 -1
  171. package/src/lib/interfaces/readOnlyDataObjectDto.d.ts +2 -2
  172. package/src/lib/interfaces/readOnlyDataObjectDto.d.ts.map +1 -1
  173. package/src/lib/interfaces/redistributionJournalEntry.d.ts +4 -4
  174. package/src/lib/interfaces/redistributionJournalEntry.d.ts.map +1 -1
  175. package/src/lib/interfaces/responses/getBlock.d.ts +2 -1
  176. package/src/lib/interfaces/responses/getBlock.d.ts.map +1 -1
  177. package/src/lib/interfaces/responses/index.d.ts +1 -0
  178. package/src/lib/interfaces/responses/index.d.ts.map +1 -1
  179. package/src/lib/interfaces/responses/memberProfileData.d.ts +51 -0
  180. package/src/lib/interfaces/responses/memberProfileData.d.ts.map +1 -0
  181. package/src/lib/interfaces/responses/memberProfileData.js +3 -0
  182. package/src/lib/interfaces/responses/memberProfileData.js.map +1 -0
  183. package/src/lib/interfaces/responses/replicateBlockResponse.d.ts +2 -1
  184. package/src/lib/interfaces/responses/replicateBlockResponse.d.ts.map +1 -1
  185. package/src/lib/interfaces/responses/storeBlock.d.ts +2 -1
  186. package/src/lib/interfaces/responses/storeBlock.d.ts.map +1 -1
  187. package/src/lib/interfaces/services/contentIngestion.d.ts +3 -3
  188. package/src/lib/interfaces/services/contentIngestion.d.ts.map +1 -1
  189. package/src/lib/interfaces/services/expirationScheduler.d.ts +2 -2
  190. package/src/lib/interfaces/services/expirationScheduler.d.ts.map +1 -1
  191. package/src/lib/interfaces/services/identitySealingPipeline.d.ts +3 -3
  192. package/src/lib/interfaces/services/identitySealingPipeline.d.ts.map +1 -1
  193. package/src/lib/interfaces/services/identityValidator.d.ts +2 -2
  194. package/src/lib/interfaces/services/identityValidator.d.ts.map +1 -1
  195. package/src/lib/interfaces/services/operatorPrompt.d.ts +4 -4
  196. package/src/lib/interfaces/services/operatorPrompt.d.ts.map +1 -1
  197. package/src/lib/interfaces/services/quorumDatabase.d.ts +9 -9
  198. package/src/lib/interfaces/services/quorumDatabase.d.ts.map +1 -1
  199. package/src/lib/interfaces/services/quorumService.d.ts +23 -22
  200. package/src/lib/interfaces/services/quorumService.d.ts.map +1 -1
  201. package/src/lib/interfaces/services/quorumStateMachine.d.ts +6 -6
  202. package/src/lib/interfaces/services/quorumStateMachine.d.ts.map +1 -1
  203. package/src/lib/interfaces/services/redistributionConfig.d.ts +2 -2
  204. package/src/lib/interfaces/services/redistributionConfig.d.ts.map +1 -1
  205. package/src/lib/interfaces/storage/blockMetadata.d.ts +7 -6
  206. package/src/lib/interfaces/storage/blockMetadata.d.ts.map +1 -1
  207. package/src/lib/interfaces/storage/blockMetadata.js.map +1 -1
  208. package/src/lib/interfaces/storage/blockMetadataStore.d.ts +5 -4
  209. package/src/lib/interfaces/storage/blockMetadataStore.d.ts.map +1 -1
  210. package/src/lib/interfaces/storage/cblIndex.d.ts +5 -4
  211. package/src/lib/interfaces/storage/cblIndex.d.ts.map +1 -1
  212. package/src/lib/interfaces/storage/cblIndex.js.map +1 -1
  213. package/src/lib/interfaces/storage/cblWhitening.d.ts +9 -8
  214. package/src/lib/interfaces/storage/cblWhitening.d.ts.map +1 -1
  215. package/src/lib/interfaces/tcbl/index.d.ts +5 -0
  216. package/src/lib/interfaces/tcbl/index.d.ts.map +1 -0
  217. package/src/lib/interfaces/tcbl/index.js +3 -0
  218. package/src/lib/interfaces/tcbl/index.js.map +1 -0
  219. package/src/lib/interfaces/tcbl/tcblArchiveOptions.d.ts +21 -0
  220. package/src/lib/interfaces/tcbl/tcblArchiveOptions.d.ts.map +1 -0
  221. package/src/lib/interfaces/tcbl/tcblArchiveOptions.js +12 -0
  222. package/src/lib/interfaces/tcbl/tcblArchiveOptions.js.map +1 -0
  223. package/src/lib/interfaces/tcbl/tcblEntryDescriptor.d.ts +25 -0
  224. package/src/lib/interfaces/tcbl/tcblEntryDescriptor.d.ts.map +1 -0
  225. package/src/lib/interfaces/tcbl/tcblEntryDescriptor.js +10 -0
  226. package/src/lib/interfaces/tcbl/tcblEntryDescriptor.js.map +1 -0
  227. package/src/lib/interfaces/tcbl/tcblEntryInput.d.ts +21 -0
  228. package/src/lib/interfaces/tcbl/tcblEntryInput.d.ts.map +1 -0
  229. package/src/lib/interfaces/tcbl/tcblEntryInput.js +10 -0
  230. package/src/lib/interfaces/tcbl/tcblEntryInput.js.map +1 -0
  231. package/src/lib/interfaces/tcbl/tcblManifest.d.ts +28 -0
  232. package/src/lib/interfaces/tcbl/tcblManifest.d.ts.map +1 -0
  233. package/src/lib/interfaces/tcbl/tcblManifest.js +11 -0
  234. package/src/lib/interfaces/tcbl/tcblManifest.js.map +1 -0
  235. package/src/lib/interfaces/vote.d.ts +5 -9
  236. package/src/lib/interfaces/vote.d.ts.map +1 -1
  237. package/src/lib/quorum.d.ts +4 -4
  238. package/src/lib/quorum.d.ts.map +1 -1
  239. package/src/lib/quorum.js +1 -1
  240. package/src/lib/quorum.js.map +1 -1
  241. package/src/lib/quorumDataRecord.d.ts +4 -4
  242. package/src/lib/quorumDataRecord.d.ts.map +1 -1
  243. package/src/lib/quorumDataRecord.js +3 -3
  244. package/src/lib/quorumDataRecord.js.map +1 -1
  245. package/src/lib/quorumDataRecordDto.d.ts +5 -5
  246. package/src/lib/quorumDataRecordDto.d.ts.map +1 -1
  247. package/src/lib/schemas/messaging/messageMetadataSchema.d.ts.map +1 -1
  248. package/src/lib/schemas/messaging/messageMetadataSchema.js +1 -1
  249. package/src/lib/schemas/messaging/messageMetadataSchema.js.map +1 -1
  250. package/src/lib/schemas/quorumDocument.d.ts +1 -1
  251. package/src/lib/schemas/quorumDocument.d.ts.map +1 -1
  252. package/src/lib/schemas/quorumDocument.js +1 -1
  253. package/src/lib/schemas/quorumDocument.js.map +1 -1
  254. package/src/lib/services/aliasRegistry.d.ts +3 -3
  255. package/src/lib/services/aliasRegistry.d.ts.map +1 -1
  256. package/src/lib/services/aliasRegistry.js +2 -3
  257. package/src/lib/services/aliasRegistry.js.map +1 -1
  258. package/src/lib/services/auditLogService.d.ts +3 -3
  259. package/src/lib/services/auditLogService.d.ts.map +1 -1
  260. package/src/lib/services/auditLogService.js.map +1 -1
  261. package/src/lib/services/blockCapacity.service.d.ts.map +1 -1
  262. package/src/lib/services/blockCapacity.service.js +3 -1
  263. package/src/lib/services/blockCapacity.service.js.map +1 -1
  264. package/src/lib/services/blockFormatService.d.ts +13 -0
  265. package/src/lib/services/blockFormatService.d.ts.map +1 -1
  266. package/src/lib/services/blockFormatService.js +24 -0
  267. package/src/lib/services/blockFormatService.js.map +1 -1
  268. package/src/lib/services/communication/explodingMessageService.js +7 -7
  269. package/src/lib/services/communication/explodingMessageService.js.map +1 -1
  270. package/src/lib/services/identity/memberIdentityProofService.js +2 -2
  271. package/src/lib/services/identity/memberIdentityProofService.js.map +1 -1
  272. package/src/lib/services/identity/memberPaperKeyService.js +5 -5
  273. package/src/lib/services/identity/memberPaperKeyService.js.map +1 -1
  274. package/src/lib/services/identitySealingPipeline.d.ts +2 -2
  275. package/src/lib/services/identitySealingPipeline.d.ts.map +1 -1
  276. package/src/lib/services/identitySealingPipeline.js.map +1 -1
  277. package/src/lib/services/identityValidator.d.ts +1 -1
  278. package/src/lib/services/identityValidator.d.ts.map +1 -1
  279. package/src/lib/services/identityValidator.js +1 -1
  280. package/src/lib/services/identityValidator.js.map +1 -1
  281. package/src/lib/services/index.d.ts +1 -0
  282. package/src/lib/services/index.d.ts.map +1 -1
  283. package/src/lib/services/index.js +1 -0
  284. package/src/lib/services/index.js.map +1 -1
  285. package/src/lib/services/memberStore.d.ts.map +1 -1
  286. package/src/lib/services/memberStore.js +7 -6
  287. package/src/lib/services/memberStore.js.map +1 -1
  288. package/src/lib/services/messaging/emailMessageService.d.ts.map +1 -1
  289. package/src/lib/services/messaging/emailMessageService.js +2 -1
  290. package/src/lib/services/messaging/emailMessageService.js.map +1 -1
  291. package/src/lib/services/messaging/emailParser.d.ts.map +1 -1
  292. package/src/lib/services/messaging/emailParser.js.map +1 -1
  293. package/src/lib/services/messaging/gossipRetryService.d.ts +3 -2
  294. package/src/lib/services/messaging/gossipRetryService.d.ts.map +1 -1
  295. package/src/lib/services/messaging/gossipRetryService.js.map +1 -1
  296. package/src/lib/services/messaging/messageCBLService.d.ts.map +1 -1
  297. package/src/lib/services/messaging/messageCBLService.js +2 -1
  298. package/src/lib/services/messaging/messageCBLService.js.map +1 -1
  299. package/src/lib/services/quorumService.d.ts +16 -16
  300. package/src/lib/services/quorumService.d.ts.map +1 -1
  301. package/src/lib/services/quorumService.js +72 -39
  302. package/src/lib/services/quorumService.js.map +1 -1
  303. package/src/lib/services/quorumStateMachine.d.ts +7 -7
  304. package/src/lib/services/quorumStateMachine.d.ts.map +1 -1
  305. package/src/lib/services/quorumStateMachine.js +31 -24
  306. package/src/lib/services/quorumStateMachine.js.map +1 -1
  307. package/src/lib/services/sealing.service.d.ts +4 -4
  308. package/src/lib/services/sealing.service.d.ts.map +1 -1
  309. package/src/lib/services/sealing.service.js +2 -2
  310. package/src/lib/services/sealing.service.js.map +1 -1
  311. package/src/lib/stores/energyAccountStore.d.ts.map +1 -1
  312. package/src/lib/stores/energyAccountStore.js.map +1 -1
  313. package/src/lib/stores/energyLedger.d.ts.map +1 -1
  314. package/src/lib/stores/energyLedger.js.map +1 -1
  315. package/src/lib/stores/memoryBlockMetadataStore.d.ts +6 -5
  316. package/src/lib/stores/memoryBlockMetadataStore.d.ts.map +1 -1
  317. package/src/lib/stores/memoryBlockMetadataStore.js.map +1 -1
  318. package/src/lib/stores/memoryBlockStore.d.ts.map +1 -1
  319. package/src/lib/stores/memoryBlockStore.js +38 -22
  320. package/src/lib/stores/memoryBlockStore.js.map +1 -1
  321. package/src/lib/stores/memoryCblStore.d.ts.map +1 -1
  322. package/src/lib/stores/memoryCblStore.js +14 -3
  323. package/src/lib/stores/memoryCblStore.js.map +1 -1
  324. package/src/lib/stores/messaging/memoryMessageMetadataStore.d.ts.map +1 -1
  325. package/src/lib/stores/messaging/memoryMessageMetadataStore.js.map +1 -1
  326. package/src/lib/stores/pooledMemoryBlockStore.d.ts.map +1 -1
  327. package/src/lib/stores/pooledMemoryBlockStore.js +19 -8
  328. package/src/lib/stores/pooledMemoryBlockStore.js.map +1 -1
package/README.md CHANGED
@@ -354,6 +354,72 @@ const capacity = cblService.calculateCBLAddressCapacity(
354
354
  console.log(`CBL can hold ${capacity} block references`);
355
355
  ```
356
356
 
357
+ ### TCBL Archives (Tarball CBL)
358
+
359
+ TCBL is a tarball-like archive format built on top of CBL. It bundles multiple files into a single block with a manifest, supporting optional bzip2 compression and external ECIES encryption via the `EncryptedBlock` wrapper.
360
+
361
+ #### Building a TCBL Archive
362
+
363
+ ```typescript
364
+ import {
365
+ TcblBuilder,
366
+ TcblReader,
367
+ BlockSize,
368
+ } from '@brightchain/brightchain-lib';
369
+
370
+ // Create a builder
371
+ const builder = new TcblBuilder(creator, BlockSize.Small, blockStore);
372
+
373
+ // Add entries
374
+ await builder.addEntry({
375
+ fileName: 'readme.txt',
376
+ mimeType: 'text/plain',
377
+ data: new TextEncoder().encode('Hello, TCBL!'),
378
+ });
379
+ await builder.addEntry({
380
+ fileName: 'config.json',
381
+ mimeType: 'application/json',
382
+ data: new TextEncoder().encode('{"key": "value"}'),
383
+ });
384
+
385
+ // Build the archive (with optional compression)
386
+ const tcblBlock = await builder.build();
387
+ ```
388
+
389
+ #### Reading a TCBL Archive
390
+
391
+ ```typescript
392
+ // Open the archive for reading
393
+ const reader = new TcblReader(tcblBlock, blockStore);
394
+ await reader.open();
395
+
396
+ // List entries without extracting data
397
+ const entries = reader.listEntries();
398
+ for (const entry of entries) {
399
+ console.log(`${entry.fileName} (${entry.mimeType}, ${entry.originalDataLength} bytes)`);
400
+ }
401
+
402
+ // Extract by name or index
403
+ const data = await reader.getEntryByName('readme.txt');
404
+ const firstEntry = await reader.getEntryByIndex(0);
405
+ ```
406
+
407
+ #### Compression and Encryption
408
+
409
+ ```typescript
410
+ // Enable bzip2 compression
411
+ const builder = new TcblBuilder(creator, BlockSize.Small, blockStore, undefined, {
412
+ compress: true,
413
+ });
414
+
415
+ // For encryption, wrap the completed TCBL in an EncryptedBlock
416
+ const tcbl = await builder.build();
417
+ const encrypted = await EncryptedBlockCreator.from(
418
+ tcbl,
419
+ recipientPublicKeys,
420
+ );
421
+ ```
422
+
357
423
  ### Service Provider Pattern
358
424
 
359
425
  BrightChain uses a service provider pattern for dependency injection:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brightchain/brightchain-lib",
3
- "version": "0.21.1",
3
+ "version": "0.23.0",
4
4
  "description": "BrightChain core library - browser-compatible blockchain storage",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -41,7 +41,7 @@
41
41
  "author": "Digital Defiance",
42
42
  "license": "MIT",
43
43
  "dependencies": {
44
- "@digitaldefiance/ecies-lib": "^4.19.6",
44
+ "@digitaldefiance/ecies-lib": "^4.19.13",
45
45
  "@digitaldefiance/i18n-lib": "^4.6.4",
46
46
  "@noble/hashes": "^1.4.0",
47
47
  "nat-pmp": "^1.0.0",
package/src/browser.d.ts CHANGED
@@ -10,6 +10,8 @@ export { XorLengthMismatchError, constantTimeXor, constantTimeXorMultiple, } fro
10
10
  export { ServiceProvider } from './lib/services/service.provider';
11
11
  export { initializeBrightChain } from './lib/init';
12
12
  export { Checksum } from './lib/types/checksum';
13
+ export { asBlockId } from './lib/interfaces/branded/primitives/blockId';
14
+ export type { BlockId } from './lib/interfaces/branded/primitives/blockId';
13
15
  export { CBLService } from './lib/services/cblService';
14
16
  export { ChecksumService } from './lib/services/checksum.service';
15
17
  export { MessageCBLService } from './lib/services/messaging/messageCBLService';
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../brightchain-lib/src/browser.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAG/E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACnF,YAAY,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGrF,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../brightchain-lib/src/browser.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mCAAmC,CAAC;AAClD,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAGlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AACxE,YAAY,EAAE,OAAO,EAAE,MAAM,6CAA6C,CAAC;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAG/E,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACnF,YAAY,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAGrF,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,uCAAuC,CAAC"}
package/src/browser.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Minimal browser-compatible exports
3
3
  // Only exports core functionality that works without Node.js modules
4
4
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.MessagePriority = exports.MessageEncryptionScheme = exports.DeliveryStatus = exports.MessageCBLService = exports.ChecksumService = exports.CBLService = exports.Checksum = exports.initializeBrightChain = exports.ServiceProvider = exports.constantTimeXorMultiple = exports.constantTimeXor = exports.XorLengthMismatchError = exports.RawDataBlock = exports.isBlockHandle = exports.createBlockHandle = exports.BaseBlock = void 0;
5
+ exports.MessagePriority = exports.MessageEncryptionScheme = exports.DeliveryStatus = exports.MessageCBLService = exports.ChecksumService = exports.CBLService = exports.asBlockId = exports.Checksum = exports.initializeBrightChain = exports.ServiceProvider = exports.constantTimeXorMultiple = exports.constantTimeXor = exports.XorLengthMismatchError = exports.RawDataBlock = exports.isBlockHandle = exports.createBlockHandle = exports.BaseBlock = void 0;
6
6
  const tslib_1 = require("tslib");
7
7
  tslib_1.__exportStar(require("./lib/brightChain"), exports);
8
8
  tslib_1.__exportStar(require("./lib/enumerations/blockSize"), exports);
@@ -31,6 +31,9 @@ Object.defineProperty(exports, "initializeBrightChain", { enumerable: true, get:
31
31
  // Export Checksum type for working with block IDs
32
32
  var checksum_1 = require("./lib/types/checksum");
33
33
  Object.defineProperty(exports, "Checksum", { enumerable: true, get: function () { return checksum_1.Checksum; } });
34
+ // Export BlockId branded type and helpers
35
+ var blockId_1 = require("./lib/interfaces/branded/primitives/blockId");
36
+ Object.defineProperty(exports, "asBlockId", { enumerable: true, get: function () { return blockId_1.asBlockId; } });
34
37
  // Export services
35
38
  var cblService_1 = require("./lib/services/cblService");
36
39
  Object.defineProperty(exports, "CBLService", { enumerable: true, get: function () { return cblService_1.CBLService; } });
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../brightchain-lib/src/browser.ts"],"names":[],"mappings":";AAAA,qCAAqC;AACrC,qEAAqE;;;;AAErE,4DAAkC;AAClC,uEAA6C;AAC7C,4EAAkD;AAClD,8EAAoD;AACpD,wEAA8C;AAE9C,qCAAqC;AACrC,0CAA8C;AAArC,iGAAA,SAAS,OAAA;AAClB,8CAI6B;AAH3B,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AAGf,gDAAoD;AAA3C,uGAAA,YAAY,OAAA;AAErB,0DAA0D;AAC1D,+DAIqC;AAHnC,yHAAA,sBAAsB,OAAA;AACtB,kHAAA,eAAe,OAAA;AACf,0HAAA,uBAAuB,OAAA;AAGzB,4CAA4C;AAC5C,oEAAkE;AAAzD,mHAAA,eAAe,OAAA;AAExB,4CAA4C;AAC5C,mCAAmD;AAA1C,6GAAA,qBAAqB,OAAA;AAE9B,kDAAkD;AAClD,iDAAgD;AAAvC,oGAAA,QAAQ,OAAA;AAEjB,kBAAkB;AAClB,wDAAuD;AAA9C,wGAAA,UAAU,OAAA;AACnB,oEAAkE;AAAzD,mHAAA,eAAe,OAAA;AACxB,gFAA+E;AAAtE,sHAAA,iBAAiB,OAAA;AAE1B,wCAAwC;AACxC,8EAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,gGAA+F;AAAtF,kIAAA,uBAAuB,OAAA;AAChC,gFAA+E;AAAtE,kHAAA,eAAe,OAAA"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../brightchain-lib/src/browser.ts"],"names":[],"mappings":";AAAA,qCAAqC;AACrC,qEAAqE;;;;AAErE,4DAAkC;AAClC,uEAA6C;AAC7C,4EAAkD;AAClD,8EAAoD;AACpD,wEAA8C;AAE9C,qCAAqC;AACrC,0CAA8C;AAArC,iGAAA,SAAS,OAAA;AAClB,8CAI6B;AAH3B,2GAAA,iBAAiB,OAAA;AACjB,uGAAA,aAAa,OAAA;AAGf,gDAAoD;AAA3C,uGAAA,YAAY,OAAA;AAErB,0DAA0D;AAC1D,+DAIqC;AAHnC,yHAAA,sBAAsB,OAAA;AACtB,kHAAA,eAAe,OAAA;AACf,0HAAA,uBAAuB,OAAA;AAGzB,4CAA4C;AAC5C,oEAAkE;AAAzD,mHAAA,eAAe,OAAA;AAExB,4CAA4C;AAC5C,mCAAmD;AAA1C,6GAAA,qBAAqB,OAAA;AAE9B,kDAAkD;AAClD,iDAAgD;AAAvC,oGAAA,QAAQ,OAAA;AAEjB,0CAA0C;AAC1C,uEAAwE;AAA/D,oGAAA,SAAS,OAAA;AAGlB,kBAAkB;AAClB,wDAAuD;AAA9C,wGAAA,UAAU,OAAA;AACnB,oEAAkE;AAAzD,mHAAA,eAAe,OAAA;AACxB,gFAA+E;AAAtE,sHAAA,iBAAiB,OAAA;AAE1B,wCAAwC;AACxC,8EAA6E;AAApE,gHAAA,cAAc,OAAA;AACvB,gGAA+F;AAAtF,kIAAA,uBAAuB,OAAA;AAChC,gFAA+E;AAAtE,kHAAA,eAAe,OAAA"}
@@ -14,6 +14,7 @@ export * from './memoryTuple';
14
14
  export * from './parity';
15
15
  export * from './random';
16
16
  export * from './rawData';
17
+ export * from './tcbl';
17
18
  export * from './vcbl';
18
19
  export * from './whitened';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC"}
@@ -17,6 +17,7 @@ tslib_1.__exportStar(require("./memoryTuple"), exports);
17
17
  tslib_1.__exportStar(require("./parity"), exports);
18
18
  tslib_1.__exportStar(require("./random"), exports);
19
19
  tslib_1.__exportStar(require("./rawData"), exports);
20
+ tslib_1.__exportStar(require("./tcbl"), exports);
20
21
  tslib_1.__exportStar(require("./vcbl"), exports);
21
22
  tslib_1.__exportStar(require("./whitened"), exports);
22
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,qDAA2B;AAC3B,0DAAgC;AAChC,gDAAsB;AACtB,oDAA0B;AAC1B,sDAA4B;AAC5B,kEAAwC;AACxC,kEAAwC;AACxC,sDAA4B;AAC5B,wDAA8B;AAC9B,mDAAyB;AACzB,wDAA8B;AAC9B,wDAA8B;AAC9B,mDAAyB;AACzB,mDAAyB;AACzB,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/blocks/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,qDAA2B;AAC3B,0DAAgC;AAChC,gDAAsB;AACtB,oDAA0B;AAC1B,sDAA4B;AAC5B,kEAAwC;AACxC,kEAAwC;AACxC,sDAA4B;AAC5B,wDAA8B;AAC9B,mDAAyB;AACzB,wDAA8B;AAC9B,wDAA8B;AAC9B,mDAAyB;AACzB,mDAAyB;AACzB,oDAA0B;AAC1B,iDAAuB;AACvB,iDAAuB;AACvB,qDAA2B"}
@@ -0,0 +1,7 @@
1
+ export * from './manifestSerializer';
2
+ export * from './tcbl';
3
+ export * from './tcblAttachmentUtils';
4
+ export * from './tcblBuilder';
5
+ export * from './tcblReader';
6
+ export * from './tcblValidator';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/blocks/tcbl/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,QAAQ,CAAC;AACvB,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./manifestSerializer"), exports);
5
+ tslib_1.__exportStar(require("./tcbl"), exports);
6
+ tslib_1.__exportStar(require("./tcblAttachmentUtils"), exports);
7
+ tslib_1.__exportStar(require("./tcblBuilder"), exports);
8
+ tslib_1.__exportStar(require("./tcblReader"), exports);
9
+ tslib_1.__exportStar(require("./tcblValidator"), exports);
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/blocks/tcbl/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC;AACrC,iDAAuB;AACvB,gEAAsC;AACtC,wDAA8B;AAC9B,uDAA6B;AAC7B,0DAAgC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * @fileoverview TCBL Manifest Serializer.
3
+ *
4
+ * Provides deterministic binary serialization and deserialization of TCBL manifests.
5
+ * The binary format is:
6
+ * - version: uint16 (2 bytes, big-endian)
7
+ * - entryCount: uint32 (4 bytes, big-endian)
8
+ * - For each entry:
9
+ * - fileNameLength: uint16 (2 bytes, big-endian)
10
+ * - fileName: UTF-8 bytes (variable)
11
+ * - mimeTypeLength: uint8 (1 byte)
12
+ * - mimeType: UTF-8 bytes (variable)
13
+ * - originalDataLength: uint48 (6 bytes, big-endian)
14
+ * - cblAddress: fixed-size checksum bytes (64 bytes for SHA3-512)
15
+ * - checksum: 64 bytes (SHA3-512 of all preceding data)
16
+ *
17
+ * @see Requirements 3.1, 3.2, 3.3, 3.4, 3.5
18
+ * @see Requirement 2.5
19
+ */
20
+ import { ITcblManifest } from '../../interfaces/tcbl/tcblManifest';
21
+ import { Checksum } from '../../types/checksum';
22
+ /**
23
+ * Static utility class for deterministic binary serialization and
24
+ * deserialization of TCBL manifests.
25
+ *
26
+ * @see Requirement 3
27
+ */
28
+ export declare class TcblManifestSerializer {
29
+ /**
30
+ * Serialize a TCBL manifest into a deterministic binary `Uint8Array`.
31
+ *
32
+ * The checksum field on the manifest is ignored during serialization;
33
+ * a fresh checksum is computed over the entry data and appended.
34
+ *
35
+ * @param manifest - The manifest to serialize
36
+ * @returns The serialized binary representation
37
+ *
38
+ * @see Requirements 3.1, 3.5
39
+ */
40
+ static serialize(manifest: ITcblManifest): Uint8Array;
41
+ /**
42
+ * Deserialize a binary `Uint8Array` back into a TCBL manifest object.
43
+ *
44
+ * @param data - The binary data to deserialize
45
+ * @returns The deserialized manifest
46
+ * @throws {TcblError} with `ManifestTruncated` if data is too short
47
+ * @throws {TcblError} with `ManifestCorrupted` if data is structurally invalid
48
+ *
49
+ * @see Requirements 3.2, 3.4
50
+ */
51
+ static deserialize(data: Uint8Array): ITcblManifest;
52
+ /**
53
+ * Compute the manifest checksum over the serialized entry data
54
+ * (version + entryCount + entries), excluding the checksum itself.
55
+ *
56
+ * @param manifest - The manifest to compute the checksum for
57
+ * @returns The computed checksum
58
+ *
59
+ * @see Requirement 2.5
60
+ */
61
+ static computeChecksum(manifest: ITcblManifest): Checksum;
62
+ /**
63
+ * Write a uint48 value (6 bytes, big-endian) into a DataView.
64
+ *
65
+ * @param view - The DataView to write to
66
+ * @param offset - The byte offset to write at
67
+ * @param value - The value to write (must be <= 2^48 - 1)
68
+ */
69
+ private static writeUint48;
70
+ /**
71
+ * Read a uint48 value (6 bytes, big-endian) from a DataView.
72
+ *
73
+ * @param view - The DataView to read from
74
+ * @param offset - The byte offset to read at
75
+ * @returns The uint48 value as a number
76
+ */
77
+ private static readUint48;
78
+ }
79
+ //# sourceMappingURL=manifestSerializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestSerializer.d.ts","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/blocks/tcbl/manifestSerializer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAuBhD;;;;;GAKG;AACH,qBAAa,sBAAsB;IACjC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU;IAmFrD;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa;IAmHnD;;;;;;;;OAQG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,GAAG,QAAQ;IAWzD;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;CAK1B"}
@@ -0,0 +1,258 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview TCBL Manifest Serializer.
4
+ *
5
+ * Provides deterministic binary serialization and deserialization of TCBL manifests.
6
+ * The binary format is:
7
+ * - version: uint16 (2 bytes, big-endian)
8
+ * - entryCount: uint32 (4 bytes, big-endian)
9
+ * - For each entry:
10
+ * - fileNameLength: uint16 (2 bytes, big-endian)
11
+ * - fileName: UTF-8 bytes (variable)
12
+ * - mimeTypeLength: uint8 (1 byte)
13
+ * - mimeType: UTF-8 bytes (variable)
14
+ * - originalDataLength: uint48 (6 bytes, big-endian)
15
+ * - cblAddress: fixed-size checksum bytes (64 bytes for SHA3-512)
16
+ * - checksum: 64 bytes (SHA3-512 of all preceding data)
17
+ *
18
+ * @see Requirements 3.1, 3.2, 3.3, 3.4, 3.5
19
+ * @see Requirement 2.5
20
+ */
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.TcblManifestSerializer = void 0;
23
+ const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
24
+ const sha3_1 = require("@noble/hashes/sha3");
25
+ const tcblErrorType_1 = require("../../enumerations/tcblErrorType");
26
+ const tcblError_1 = require("../../errors/tcblError");
27
+ const checksum_1 = require("../../types/checksum");
28
+ /** Fixed size of a checksum in bytes (SHA3-512). */
29
+ const CHECKSUM_BYTE_LENGTH = ecies_lib_1.CHECKSUM.SHA3_BUFFER_LENGTH; // 64
30
+ /** Size of the version field in bytes. */
31
+ const VERSION_SIZE = 2;
32
+ /** Size of the entryCount field in bytes. */
33
+ const ENTRY_COUNT_SIZE = 4;
34
+ /** Size of the fileNameLength field in bytes. */
35
+ const FILE_NAME_LENGTH_SIZE = 2;
36
+ /** Size of the mimeTypeLength field in bytes. */
37
+ const MIME_TYPE_LENGTH_SIZE = 1;
38
+ /** Size of the originalDataLength field in bytes (uint48). */
39
+ const ORIGINAL_DATA_LENGTH_SIZE = 6;
40
+ /** Minimum header size: version + entryCount. */
41
+ const MIN_HEADER_SIZE = VERSION_SIZE + ENTRY_COUNT_SIZE;
42
+ /**
43
+ * Static utility class for deterministic binary serialization and
44
+ * deserialization of TCBL manifests.
45
+ *
46
+ * @see Requirement 3
47
+ */
48
+ class TcblManifestSerializer {
49
+ /**
50
+ * Serialize a TCBL manifest into a deterministic binary `Uint8Array`.
51
+ *
52
+ * The checksum field on the manifest is ignored during serialization;
53
+ * a fresh checksum is computed over the entry data and appended.
54
+ *
55
+ * @param manifest - The manifest to serialize
56
+ * @returns The serialized binary representation
57
+ *
58
+ * @see Requirements 3.1, 3.5
59
+ */
60
+ static serialize(manifest) {
61
+ const encoder = new TextEncoder();
62
+ // Pre-compute total size
63
+ let totalSize = VERSION_SIZE + ENTRY_COUNT_SIZE;
64
+ const encodedEntries = [];
65
+ for (const entry of manifest.entries) {
66
+ const fileNameBytes = encoder.encode(entry.fileName);
67
+ const mimeTypeBytes = encoder.encode(entry.mimeType);
68
+ encodedEntries.push({ fileNameBytes, mimeTypeBytes, entry });
69
+ totalSize +=
70
+ FILE_NAME_LENGTH_SIZE +
71
+ fileNameBytes.length +
72
+ MIME_TYPE_LENGTH_SIZE +
73
+ mimeTypeBytes.length +
74
+ ORIGINAL_DATA_LENGTH_SIZE +
75
+ CHECKSUM_BYTE_LENGTH;
76
+ }
77
+ // Add checksum at the end
78
+ totalSize += CHECKSUM_BYTE_LENGTH;
79
+ const buffer = new Uint8Array(totalSize);
80
+ const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength);
81
+ let offset = 0;
82
+ // Version (uint16 big-endian)
83
+ view.setUint16(offset, manifest.version, false);
84
+ offset += VERSION_SIZE;
85
+ // Entry count (uint32 big-endian)
86
+ view.setUint32(offset, manifest.entries.length, false);
87
+ offset += ENTRY_COUNT_SIZE;
88
+ // Entries
89
+ for (const { fileNameBytes, mimeTypeBytes, entry } of encodedEntries) {
90
+ // fileNameLength (uint16 big-endian)
91
+ view.setUint16(offset, fileNameBytes.length, false);
92
+ offset += FILE_NAME_LENGTH_SIZE;
93
+ // fileName (UTF-8 bytes)
94
+ buffer.set(fileNameBytes, offset);
95
+ offset += fileNameBytes.length;
96
+ // mimeTypeLength (uint8)
97
+ view.setUint8(offset, mimeTypeBytes.length);
98
+ offset += MIME_TYPE_LENGTH_SIZE;
99
+ // mimeType (UTF-8 bytes)
100
+ buffer.set(mimeTypeBytes, offset);
101
+ offset += mimeTypeBytes.length;
102
+ // originalDataLength (uint48 big-endian)
103
+ TcblManifestSerializer.writeUint48(view, offset, entry.originalDataLength);
104
+ offset += ORIGINAL_DATA_LENGTH_SIZE;
105
+ // cblAddress (fixed-size checksum bytes)
106
+ buffer.set(entry.cblAddress.toUint8Array(), offset);
107
+ offset += CHECKSUM_BYTE_LENGTH;
108
+ }
109
+ // Compute checksum over everything before the checksum slot
110
+ const entryData = buffer.subarray(0, offset);
111
+ const checksumBytes = (0, sha3_1.sha3_512)(entryData);
112
+ buffer.set(checksumBytes, offset);
113
+ return buffer;
114
+ }
115
+ /**
116
+ * Deserialize a binary `Uint8Array` back into a TCBL manifest object.
117
+ *
118
+ * @param data - The binary data to deserialize
119
+ * @returns The deserialized manifest
120
+ * @throws {TcblError} with `ManifestTruncated` if data is too short
121
+ * @throws {TcblError} with `ManifestCorrupted` if data is structurally invalid
122
+ *
123
+ * @see Requirements 3.2, 3.4
124
+ */
125
+ static deserialize(data) {
126
+ if (data.length < MIN_HEADER_SIZE + CHECKSUM_BYTE_LENGTH) {
127
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
128
+ }
129
+ const view = new DataView(data.buffer, data.byteOffset, data.byteLength);
130
+ let offset = 0;
131
+ // Version (uint16 big-endian)
132
+ const version = view.getUint16(offset, false);
133
+ offset += VERSION_SIZE;
134
+ // Entry count (uint32 big-endian)
135
+ const entryCount = view.getUint32(offset, false);
136
+ offset += ENTRY_COUNT_SIZE;
137
+ const decoder = new TextDecoder('utf-8', { fatal: true });
138
+ const entries = [];
139
+ for (let i = 0; i < entryCount; i++) {
140
+ // fileNameLength (uint16 big-endian)
141
+ if (offset + FILE_NAME_LENGTH_SIZE > data.length - CHECKSUM_BYTE_LENGTH) {
142
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
143
+ }
144
+ const fileNameLength = view.getUint16(offset, false);
145
+ offset += FILE_NAME_LENGTH_SIZE;
146
+ // fileName (UTF-8 bytes)
147
+ if (offset + fileNameLength > data.length - CHECKSUM_BYTE_LENGTH) {
148
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
149
+ }
150
+ let fileName;
151
+ try {
152
+ fileName = decoder.decode(data.subarray(offset, offset + fileNameLength));
153
+ }
154
+ catch {
155
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestCorrupted);
156
+ }
157
+ offset += fileNameLength;
158
+ // mimeTypeLength (uint8)
159
+ if (offset + MIME_TYPE_LENGTH_SIZE > data.length - CHECKSUM_BYTE_LENGTH) {
160
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
161
+ }
162
+ const mimeTypeLength = view.getUint8(offset);
163
+ offset += MIME_TYPE_LENGTH_SIZE;
164
+ // mimeType (UTF-8 bytes)
165
+ if (offset + mimeTypeLength > data.length - CHECKSUM_BYTE_LENGTH) {
166
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
167
+ }
168
+ let mimeType;
169
+ try {
170
+ mimeType = decoder.decode(data.subarray(offset, offset + mimeTypeLength));
171
+ }
172
+ catch {
173
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestCorrupted);
174
+ }
175
+ offset += mimeTypeLength;
176
+ // originalDataLength (uint48 big-endian)
177
+ if (offset + ORIGINAL_DATA_LENGTH_SIZE >
178
+ data.length - CHECKSUM_BYTE_LENGTH) {
179
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
180
+ }
181
+ const originalDataLength = TcblManifestSerializer.readUint48(view, offset);
182
+ offset += ORIGINAL_DATA_LENGTH_SIZE;
183
+ // cblAddress (fixed-size checksum bytes)
184
+ if (offset + CHECKSUM_BYTE_LENGTH > data.length - CHECKSUM_BYTE_LENGTH) {
185
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestTruncated);
186
+ }
187
+ const cblAddressBytes = data.slice(offset, offset + CHECKSUM_BYTE_LENGTH);
188
+ const cblAddress = checksum_1.Checksum.fromUint8Array(cblAddressBytes);
189
+ offset += CHECKSUM_BYTE_LENGTH;
190
+ entries.push({ fileName, mimeType, originalDataLength, cblAddress });
191
+ }
192
+ // Verify we consumed exactly the right amount before the checksum
193
+ const expectedChecksumOffset = data.length - CHECKSUM_BYTE_LENGTH;
194
+ if (offset !== expectedChecksumOffset) {
195
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestCorrupted);
196
+ }
197
+ // Extract and verify checksum
198
+ const storedChecksumBytes = data.slice(offset, offset + CHECKSUM_BYTE_LENGTH);
199
+ const checksum = checksum_1.Checksum.fromUint8Array(storedChecksumBytes);
200
+ // Verify checksum integrity
201
+ const entryData = data.subarray(0, offset);
202
+ const computedChecksumBytes = (0, sha3_1.sha3_512)(entryData);
203
+ const computedChecksum = checksum_1.Checksum.fromUint8Array(computedChecksumBytes);
204
+ if (!checksum.equals(computedChecksum)) {
205
+ throw new tcblError_1.TcblError(tcblErrorType_1.TcblErrorType.ManifestCorrupted);
206
+ }
207
+ return {
208
+ version,
209
+ entryCount,
210
+ entries,
211
+ checksum,
212
+ };
213
+ }
214
+ /**
215
+ * Compute the manifest checksum over the serialized entry data
216
+ * (version + entryCount + entries), excluding the checksum itself.
217
+ *
218
+ * @param manifest - The manifest to compute the checksum for
219
+ * @returns The computed checksum
220
+ *
221
+ * @see Requirement 2.5
222
+ */
223
+ static computeChecksum(manifest) {
224
+ const serialized = TcblManifestSerializer.serialize(manifest);
225
+ // The checksum is the last CHECKSUM_BYTE_LENGTH bytes;
226
+ // compute over everything before it
227
+ const entryData = serialized.subarray(0, serialized.length - CHECKSUM_BYTE_LENGTH);
228
+ return checksum_1.Checksum.fromUint8Array((0, sha3_1.sha3_512)(entryData));
229
+ }
230
+ /**
231
+ * Write a uint48 value (6 bytes, big-endian) into a DataView.
232
+ *
233
+ * @param view - The DataView to write to
234
+ * @param offset - The byte offset to write at
235
+ * @param value - The value to write (must be <= 2^48 - 1)
236
+ */
237
+ static writeUint48(view, offset, value) {
238
+ // Split into high 16 bits and low 32 bits
239
+ const high = Math.floor(value / 0x100000000) & 0xffff;
240
+ const low = value >>> 0;
241
+ view.setUint16(offset, high, false);
242
+ view.setUint32(offset + 2, low, false);
243
+ }
244
+ /**
245
+ * Read a uint48 value (6 bytes, big-endian) from a DataView.
246
+ *
247
+ * @param view - The DataView to read from
248
+ * @param offset - The byte offset to read at
249
+ * @returns The uint48 value as a number
250
+ */
251
+ static readUint48(view, offset) {
252
+ const high = view.getUint16(offset, false);
253
+ const low = view.getUint32(offset + 2, false);
254
+ return high * 0x100000000 + low;
255
+ }
256
+ }
257
+ exports.TcblManifestSerializer = TcblManifestSerializer;
258
+ //# sourceMappingURL=manifestSerializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifestSerializer.js","sourceRoot":"","sources":["../../../../../../brightchain-lib/src/lib/blocks/tcbl/manifestSerializer.ts"],"names":[],"mappings":"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"}