@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.
- package/README.md +66 -0
- package/package.json +2 -2
- package/src/browser.d.ts +2 -0
- package/src/browser.d.ts.map +1 -1
- package/src/browser.js +4 -1
- package/src/browser.js.map +1 -1
- package/src/lib/blocks/index.d.ts +1 -0
- package/src/lib/blocks/index.d.ts.map +1 -1
- package/src/lib/blocks/index.js +1 -0
- package/src/lib/blocks/index.js.map +1 -1
- package/src/lib/blocks/tcbl/index.d.ts +7 -0
- package/src/lib/blocks/tcbl/index.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/index.js +10 -0
- package/src/lib/blocks/tcbl/index.js.map +1 -0
- package/src/lib/blocks/tcbl/manifestSerializer.d.ts +79 -0
- package/src/lib/blocks/tcbl/manifestSerializer.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/manifestSerializer.js +258 -0
- package/src/lib/blocks/tcbl/manifestSerializer.js.map +1 -0
- package/src/lib/blocks/tcbl/tcbl.d.ts +190 -0
- package/src/lib/blocks/tcbl/tcbl.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/tcbl.js +263 -0
- package/src/lib/blocks/tcbl/tcbl.js.map +1 -0
- package/src/lib/blocks/tcbl/tcblAttachmentUtils.d.ts +49 -0
- package/src/lib/blocks/tcbl/tcblAttachmentUtils.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/tcblAttachmentUtils.js +126 -0
- package/src/lib/blocks/tcbl/tcblAttachmentUtils.js.map +1 -0
- package/src/lib/blocks/tcbl/tcblBuilder.d.ts +89 -0
- package/src/lib/blocks/tcbl/tcblBuilder.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/tcblBuilder.js +180 -0
- package/src/lib/blocks/tcbl/tcblBuilder.js.map +1 -0
- package/src/lib/blocks/tcbl/tcblReader.d.ts +126 -0
- package/src/lib/blocks/tcbl/tcblReader.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/tcblReader.js +224 -0
- package/src/lib/blocks/tcbl/tcblReader.js.map +1 -0
- package/src/lib/blocks/tcbl/tcblValidator.d.ts +56 -0
- package/src/lib/blocks/tcbl/tcblValidator.d.ts.map +1 -0
- package/src/lib/blocks/tcbl/tcblValidator.js +100 -0
- package/src/lib/blocks/tcbl/tcblValidator.js.map +1 -0
- package/src/lib/constants.d.ts +5 -1
- package/src/lib/constants.d.ts.map +1 -1
- package/src/lib/constants.js +4 -0
- package/src/lib/constants.js.map +1 -1
- package/src/lib/documents/member/memberDocument.d.ts +3 -3
- package/src/lib/documents/member/memberDocument.d.ts.map +1 -1
- package/src/lib/documents/member/memberDocument.js +2 -2
- package/src/lib/documents/member/memberDocument.js.map +1 -1
- package/src/lib/documents/member/memberHydration.js +3 -3
- package/src/lib/documents/member/memberHydration.js.map +1 -1
- package/src/lib/documents/member/memberOperational.d.ts.map +1 -1
- package/src/lib/documents/member/memberOperational.js +2 -2
- package/src/lib/documents/member/memberOperational.js.map +1 -1
- package/src/lib/documents/member/memberProfileHydration.js +4 -4
- package/src/lib/documents/member/memberProfileHydration.js.map +1 -1
- package/src/lib/ecies-config.js +1 -1
- package/src/lib/ecies-config.js.map +1 -1
- package/src/lib/enumeration-translations/blockType.d.ts.map +1 -1
- package/src/lib/enumeration-translations/blockType.js +16 -0
- package/src/lib/enumeration-translations/blockType.js.map +1 -1
- package/src/lib/enumerations/blockType.d.ts +12 -0
- package/src/lib/enumerations/blockType.d.ts.map +1 -1
- package/src/lib/enumerations/blockType.js +14 -0
- package/src/lib/enumerations/blockType.js.map +1 -1
- package/src/lib/enumerations/brightChainStrings.d.ts +12 -0
- package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -1
- package/src/lib/enumerations/brightChainStrings.js +13 -0
- package/src/lib/enumerations/brightChainStrings.js.map +1 -1
- package/src/lib/enumerations/index.d.ts +1 -0
- package/src/lib/enumerations/index.d.ts.map +1 -1
- package/src/lib/enumerations/index.js +2 -0
- package/src/lib/enumerations/index.js.map +1 -1
- package/src/lib/enumerations/tcblErrorType.d.ts +34 -0
- package/src/lib/enumerations/tcblErrorType.d.ts.map +1 -0
- package/src/lib/enumerations/tcblErrorType.js +38 -0
- package/src/lib/enumerations/tcblErrorType.js.map +1 -0
- package/src/lib/errors/index.d.ts +4 -0
- package/src/lib/errors/index.d.ts.map +1 -1
- package/src/lib/errors/index.js +7 -0
- package/src/lib/errors/index.js.map +1 -1
- package/src/lib/errors/tcblError.d.ts +30 -0
- package/src/lib/errors/tcblError.d.ts.map +1 -0
- package/src/lib/errors/tcblError.js +53 -0
- package/src/lib/errors/tcblError.js.map +1 -0
- package/src/lib/errors/typeGuards.d.ts +19 -0
- package/src/lib/errors/typeGuards.d.ts.map +1 -1
- package/src/lib/errors/typeGuards.js +22 -0
- package/src/lib/errors/typeGuards.js.map +1 -1
- package/src/lib/i18n/strings/englishUs.d.ts.map +1 -1
- package/src/lib/i18n/strings/englishUs.js +13 -0
- package/src/lib/i18n/strings/englishUs.js.map +1 -1
- package/src/lib/i18n/strings/french.d.ts.map +1 -1
- package/src/lib/i18n/strings/french.js +13 -0
- package/src/lib/i18n/strings/french.js.map +1 -1
- package/src/lib/i18n/strings/german.d.ts.map +1 -1
- package/src/lib/i18n/strings/german.js +13 -0
- package/src/lib/i18n/strings/german.js.map +1 -1
- package/src/lib/i18n/strings/japanese.d.ts.map +1 -1
- package/src/lib/i18n/strings/japanese.js +13 -0
- package/src/lib/i18n/strings/japanese.js.map +1 -1
- package/src/lib/i18n/strings/mandarin.d.ts.map +1 -1
- package/src/lib/i18n/strings/mandarin.js +13 -0
- package/src/lib/i18n/strings/mandarin.js.map +1 -1
- package/src/lib/i18n/strings/spanish.d.ts.map +1 -1
- package/src/lib/i18n/strings/spanish.js +13 -0
- package/src/lib/i18n/strings/spanish.js.map +1 -1
- package/src/lib/i18n/strings/ukrainian.d.ts.map +1 -1
- package/src/lib/i18n/strings/ukrainian.js +13 -0
- package/src/lib/i18n/strings/ukrainian.js.map +1 -1
- package/src/lib/interfaces/aliasRecord.d.ts +3 -5
- package/src/lib/interfaces/aliasRecord.d.ts.map +1 -1
- package/src/lib/interfaces/auditLogEntry.d.ts +7 -6
- package/src/lib/interfaces/auditLogEntry.d.ts.map +1 -1
- package/src/lib/interfaces/availability/availabilityService.d.ts +12 -11
- package/src/lib/interfaces/availability/availabilityService.d.ts.map +1 -1
- package/src/lib/interfaces/availability/availabilityService.js.map +1 -1
- package/src/lib/interfaces/availability/blockRegistry.d.ts +8 -7
- package/src/lib/interfaces/availability/blockRegistry.d.ts.map +1 -1
- package/src/lib/interfaces/availability/discoveryProtocol.d.ts +6 -5
- package/src/lib/interfaces/availability/discoveryProtocol.d.ts.map +1 -1
- package/src/lib/interfaces/availability/discoveryProtocol.js.map +1 -1
- package/src/lib/interfaces/availability/gossipService.d.ts +16 -15
- package/src/lib/interfaces/availability/gossipService.d.ts.map +1 -1
- package/src/lib/interfaces/availability/gossipService.js.map +1 -1
- package/src/lib/interfaces/availability/locationRecord.d.ts +2 -1
- package/src/lib/interfaces/availability/locationRecord.d.ts.map +1 -1
- package/src/lib/interfaces/availability/locationRecord.js.map +1 -1
- package/src/lib/interfaces/availability/reconciliationService.d.ts +5 -4
- package/src/lib/interfaces/availability/reconciliationService.d.ts.map +1 -1
- package/src/lib/interfaces/availability/reconciliationService.js.map +1 -1
- package/src/lib/interfaces/blockFetch/blockFetcher.d.ts +2 -1
- package/src/lib/interfaces/blockFetch/blockFetcher.d.ts.map +1 -1
- package/src/lib/interfaces/blockFetch/blockFetcher.js.map +1 -1
- package/src/lib/interfaces/branded/primitives/blockId.d.ts +13 -0
- package/src/lib/interfaces/branded/primitives/blockId.d.ts.map +1 -1
- package/src/lib/interfaces/branded/primitives/blockId.js +13 -0
- package/src/lib/interfaces/branded/primitives/blockId.js.map +1 -1
- package/src/lib/interfaces/brightpass/vaultEntry.d.ts +2 -1
- package/src/lib/interfaces/brightpass/vaultEntry.d.ts.map +1 -1
- package/src/lib/interfaces/brightpass/vaultMetadata.d.ts +2 -1
- package/src/lib/interfaces/brightpass/vaultMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/chainedAuditLogEntry.d.ts +3 -2
- package/src/lib/interfaces/chainedAuditLogEntry.d.ts.map +1 -1
- package/src/lib/interfaces/contentWithIdentity.d.ts +3 -3
- package/src/lib/interfaces/contentWithIdentity.d.ts.map +1 -1
- package/src/lib/interfaces/identityRecoveryRecord.d.ts +5 -7
- package/src/lib/interfaces/identityRecoveryRecord.d.ts.map +1 -1
- package/src/lib/interfaces/index.d.ts +1 -0
- package/src/lib/interfaces/index.d.ts.map +1 -1
- package/src/lib/interfaces/member/memberDto.d.ts +4 -4
- package/src/lib/interfaces/member/memberDto.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/attachmentMetadata.d.ts +2 -1
- package/src/lib/interfaces/messaging/attachmentMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailDelivery.d.ts +3 -2
- package/src/lib/interfaces/messaging/emailDelivery.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailDelivery.js.map +1 -1
- package/src/lib/interfaces/messaging/emailMetadata.d.ts +7 -3
- package/src/lib/interfaces/messaging/emailMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailMetadata.js.map +1 -1
- package/src/lib/interfaces/messaging/messageMetadata.d.ts +12 -6
- package/src/lib/interfaces/messaging/messageMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/messageMetadataStore.d.ts +17 -10
- package/src/lib/interfaces/messaging/messageMetadataStore.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/mimePart.d.ts +2 -1
- package/src/lib/interfaces/messaging/mimePart.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/mimePart.js.map +1 -1
- package/src/lib/interfaces/proposal.d.ts +26 -10
- package/src/lib/interfaces/proposal.d.ts.map +1 -1
- package/src/lib/interfaces/quorumDocumentMetadata.d.ts +2 -2
- package/src/lib/interfaces/quorumDocumentMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/quorumEpoch.d.ts +3 -5
- package/src/lib/interfaces/quorumEpoch.d.ts.map +1 -1
- package/src/lib/interfaces/readOnlyDataObjectDto.d.ts +2 -2
- package/src/lib/interfaces/readOnlyDataObjectDto.d.ts.map +1 -1
- package/src/lib/interfaces/redistributionJournalEntry.d.ts +4 -4
- package/src/lib/interfaces/redistributionJournalEntry.d.ts.map +1 -1
- package/src/lib/interfaces/responses/getBlock.d.ts +2 -1
- package/src/lib/interfaces/responses/getBlock.d.ts.map +1 -1
- package/src/lib/interfaces/responses/index.d.ts +1 -0
- package/src/lib/interfaces/responses/index.d.ts.map +1 -1
- package/src/lib/interfaces/responses/memberProfileData.d.ts +51 -0
- package/src/lib/interfaces/responses/memberProfileData.d.ts.map +1 -0
- package/src/lib/interfaces/responses/memberProfileData.js +3 -0
- package/src/lib/interfaces/responses/memberProfileData.js.map +1 -0
- package/src/lib/interfaces/responses/replicateBlockResponse.d.ts +2 -1
- package/src/lib/interfaces/responses/replicateBlockResponse.d.ts.map +1 -1
- package/src/lib/interfaces/responses/storeBlock.d.ts +2 -1
- package/src/lib/interfaces/responses/storeBlock.d.ts.map +1 -1
- package/src/lib/interfaces/services/contentIngestion.d.ts +3 -3
- package/src/lib/interfaces/services/contentIngestion.d.ts.map +1 -1
- package/src/lib/interfaces/services/expirationScheduler.d.ts +2 -2
- package/src/lib/interfaces/services/expirationScheduler.d.ts.map +1 -1
- package/src/lib/interfaces/services/identitySealingPipeline.d.ts +3 -3
- package/src/lib/interfaces/services/identitySealingPipeline.d.ts.map +1 -1
- package/src/lib/interfaces/services/identityValidator.d.ts +2 -2
- package/src/lib/interfaces/services/identityValidator.d.ts.map +1 -1
- package/src/lib/interfaces/services/operatorPrompt.d.ts +4 -4
- package/src/lib/interfaces/services/operatorPrompt.d.ts.map +1 -1
- package/src/lib/interfaces/services/quorumDatabase.d.ts +9 -9
- package/src/lib/interfaces/services/quorumDatabase.d.ts.map +1 -1
- package/src/lib/interfaces/services/quorumService.d.ts +23 -22
- package/src/lib/interfaces/services/quorumService.d.ts.map +1 -1
- package/src/lib/interfaces/services/quorumStateMachine.d.ts +6 -6
- package/src/lib/interfaces/services/quorumStateMachine.d.ts.map +1 -1
- package/src/lib/interfaces/services/redistributionConfig.d.ts +2 -2
- package/src/lib/interfaces/services/redistributionConfig.d.ts.map +1 -1
- package/src/lib/interfaces/storage/blockMetadata.d.ts +7 -6
- package/src/lib/interfaces/storage/blockMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/storage/blockMetadata.js.map +1 -1
- package/src/lib/interfaces/storage/blockMetadataStore.d.ts +5 -4
- package/src/lib/interfaces/storage/blockMetadataStore.d.ts.map +1 -1
- package/src/lib/interfaces/storage/cblIndex.d.ts +5 -4
- package/src/lib/interfaces/storage/cblIndex.d.ts.map +1 -1
- package/src/lib/interfaces/storage/cblIndex.js.map +1 -1
- package/src/lib/interfaces/storage/cblWhitening.d.ts +9 -8
- package/src/lib/interfaces/storage/cblWhitening.d.ts.map +1 -1
- package/src/lib/interfaces/tcbl/index.d.ts +5 -0
- package/src/lib/interfaces/tcbl/index.d.ts.map +1 -0
- package/src/lib/interfaces/tcbl/index.js +3 -0
- package/src/lib/interfaces/tcbl/index.js.map +1 -0
- package/src/lib/interfaces/tcbl/tcblArchiveOptions.d.ts +21 -0
- package/src/lib/interfaces/tcbl/tcblArchiveOptions.d.ts.map +1 -0
- package/src/lib/interfaces/tcbl/tcblArchiveOptions.js +12 -0
- package/src/lib/interfaces/tcbl/tcblArchiveOptions.js.map +1 -0
- package/src/lib/interfaces/tcbl/tcblEntryDescriptor.d.ts +25 -0
- package/src/lib/interfaces/tcbl/tcblEntryDescriptor.d.ts.map +1 -0
- package/src/lib/interfaces/tcbl/tcblEntryDescriptor.js +10 -0
- package/src/lib/interfaces/tcbl/tcblEntryDescriptor.js.map +1 -0
- package/src/lib/interfaces/tcbl/tcblEntryInput.d.ts +21 -0
- package/src/lib/interfaces/tcbl/tcblEntryInput.d.ts.map +1 -0
- package/src/lib/interfaces/tcbl/tcblEntryInput.js +10 -0
- package/src/lib/interfaces/tcbl/tcblEntryInput.js.map +1 -0
- package/src/lib/interfaces/tcbl/tcblManifest.d.ts +28 -0
- package/src/lib/interfaces/tcbl/tcblManifest.d.ts.map +1 -0
- package/src/lib/interfaces/tcbl/tcblManifest.js +11 -0
- package/src/lib/interfaces/tcbl/tcblManifest.js.map +1 -0
- package/src/lib/interfaces/vote.d.ts +5 -9
- package/src/lib/interfaces/vote.d.ts.map +1 -1
- package/src/lib/quorum.d.ts +4 -4
- package/src/lib/quorum.d.ts.map +1 -1
- package/src/lib/quorum.js +1 -1
- package/src/lib/quorum.js.map +1 -1
- package/src/lib/quorumDataRecord.d.ts +4 -4
- package/src/lib/quorumDataRecord.d.ts.map +1 -1
- package/src/lib/quorumDataRecord.js +3 -3
- package/src/lib/quorumDataRecord.js.map +1 -1
- package/src/lib/quorumDataRecordDto.d.ts +5 -5
- package/src/lib/quorumDataRecordDto.d.ts.map +1 -1
- package/src/lib/schemas/messaging/messageMetadataSchema.d.ts.map +1 -1
- package/src/lib/schemas/messaging/messageMetadataSchema.js +1 -1
- package/src/lib/schemas/messaging/messageMetadataSchema.js.map +1 -1
- package/src/lib/schemas/quorumDocument.d.ts +1 -1
- package/src/lib/schemas/quorumDocument.d.ts.map +1 -1
- package/src/lib/schemas/quorumDocument.js +1 -1
- package/src/lib/schemas/quorumDocument.js.map +1 -1
- package/src/lib/services/aliasRegistry.d.ts +3 -3
- package/src/lib/services/aliasRegistry.d.ts.map +1 -1
- package/src/lib/services/aliasRegistry.js +2 -3
- package/src/lib/services/aliasRegistry.js.map +1 -1
- package/src/lib/services/auditLogService.d.ts +3 -3
- package/src/lib/services/auditLogService.d.ts.map +1 -1
- package/src/lib/services/auditLogService.js.map +1 -1
- package/src/lib/services/blockCapacity.service.d.ts.map +1 -1
- package/src/lib/services/blockCapacity.service.js +3 -1
- package/src/lib/services/blockCapacity.service.js.map +1 -1
- package/src/lib/services/blockFormatService.d.ts +13 -0
- package/src/lib/services/blockFormatService.d.ts.map +1 -1
- package/src/lib/services/blockFormatService.js +24 -0
- package/src/lib/services/blockFormatService.js.map +1 -1
- package/src/lib/services/communication/explodingMessageService.js +7 -7
- package/src/lib/services/communication/explodingMessageService.js.map +1 -1
- package/src/lib/services/identity/memberIdentityProofService.js +2 -2
- package/src/lib/services/identity/memberIdentityProofService.js.map +1 -1
- package/src/lib/services/identity/memberPaperKeyService.js +5 -5
- package/src/lib/services/identity/memberPaperKeyService.js.map +1 -1
- package/src/lib/services/identitySealingPipeline.d.ts +2 -2
- package/src/lib/services/identitySealingPipeline.d.ts.map +1 -1
- package/src/lib/services/identitySealingPipeline.js.map +1 -1
- package/src/lib/services/identityValidator.d.ts +1 -1
- package/src/lib/services/identityValidator.d.ts.map +1 -1
- package/src/lib/services/identityValidator.js +1 -1
- package/src/lib/services/identityValidator.js.map +1 -1
- package/src/lib/services/index.d.ts +1 -0
- package/src/lib/services/index.d.ts.map +1 -1
- package/src/lib/services/index.js +1 -0
- package/src/lib/services/index.js.map +1 -1
- package/src/lib/services/memberStore.d.ts.map +1 -1
- package/src/lib/services/memberStore.js +7 -6
- package/src/lib/services/memberStore.js.map +1 -1
- package/src/lib/services/messaging/emailMessageService.d.ts.map +1 -1
- package/src/lib/services/messaging/emailMessageService.js +2 -1
- package/src/lib/services/messaging/emailMessageService.js.map +1 -1
- package/src/lib/services/messaging/emailParser.d.ts.map +1 -1
- package/src/lib/services/messaging/emailParser.js.map +1 -1
- package/src/lib/services/messaging/gossipRetryService.d.ts +3 -2
- package/src/lib/services/messaging/gossipRetryService.d.ts.map +1 -1
- package/src/lib/services/messaging/gossipRetryService.js.map +1 -1
- package/src/lib/services/messaging/messageCBLService.d.ts.map +1 -1
- package/src/lib/services/messaging/messageCBLService.js +2 -1
- package/src/lib/services/messaging/messageCBLService.js.map +1 -1
- package/src/lib/services/quorumService.d.ts +16 -16
- package/src/lib/services/quorumService.d.ts.map +1 -1
- package/src/lib/services/quorumService.js +72 -39
- package/src/lib/services/quorumService.js.map +1 -1
- package/src/lib/services/quorumStateMachine.d.ts +7 -7
- package/src/lib/services/quorumStateMachine.d.ts.map +1 -1
- package/src/lib/services/quorumStateMachine.js +31 -24
- package/src/lib/services/quorumStateMachine.js.map +1 -1
- package/src/lib/services/sealing.service.d.ts +4 -4
- package/src/lib/services/sealing.service.d.ts.map +1 -1
- package/src/lib/services/sealing.service.js +2 -2
- package/src/lib/services/sealing.service.js.map +1 -1
- package/src/lib/stores/energyAccountStore.d.ts.map +1 -1
- package/src/lib/stores/energyAccountStore.js.map +1 -1
- package/src/lib/stores/energyLedger.d.ts.map +1 -1
- package/src/lib/stores/energyLedger.js.map +1 -1
- package/src/lib/stores/memoryBlockMetadataStore.d.ts +6 -5
- package/src/lib/stores/memoryBlockMetadataStore.d.ts.map +1 -1
- package/src/lib/stores/memoryBlockMetadataStore.js.map +1 -1
- package/src/lib/stores/memoryBlockStore.d.ts.map +1 -1
- package/src/lib/stores/memoryBlockStore.js +38 -22
- package/src/lib/stores/memoryBlockStore.js.map +1 -1
- package/src/lib/stores/memoryCblStore.d.ts.map +1 -1
- package/src/lib/stores/memoryCblStore.js +14 -3
- package/src/lib/stores/memoryCblStore.js.map +1 -1
- package/src/lib/stores/messaging/memoryMessageMetadataStore.d.ts.map +1 -1
- package/src/lib/stores/messaging/memoryMessageMetadataStore.js.map +1 -1
- package/src/lib/stores/pooledMemoryBlockStore.d.ts.map +1 -1
- package/src/lib/stores/pooledMemoryBlockStore.js +19 -8
- 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.
|
|
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.
|
|
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';
|
package/src/browser.d.ts.map
CHANGED
|
@@ -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; } });
|
package/src/browser.js.map
CHANGED
|
@@ -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"}
|
|
@@ -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"}
|
package/src/lib/blocks/index.js
CHANGED
|
@@ -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 @@
|
|
|
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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"}
|