Spaces:
Running
Running
// Type definitions for xorb and shard file formats | |
export interface MerkleHash { | |
data: [bigint, bigint, bigint, bigint]; // 4 x 64-bit unsigned integers (32 bytes total) | |
} | |
// === XORB Types === | |
export interface ChunkHeader { | |
version: number; | |
compressed_size: number; | |
compression_type: number; | |
uncompressed_size: number; | |
} | |
export interface Chunk { | |
header: ChunkHeader; | |
compressed_data: Uint8Array; | |
} | |
// === SHARD Types === | |
export interface MDBShardFileHeader { | |
tag: Uint8Array; // 32 bytes magic number | |
version: number; | |
footer_size: number; | |
} | |
export interface MDBShardFileFooter { | |
version: number; | |
file_info_offset: number; | |
cas_info_offset: number; | |
chunk_hash_hmac_key: MerkleHash; | |
shard_creation_timestamp: number; | |
shard_key_expiry: number; | |
footer_offset: number; | |
} | |
export interface FileDataSequenceHeader { | |
file_hash: MerkleHash; | |
file_flags: number; | |
num_entries: number; | |
_unused: Uint8Array; | |
} | |
export interface FileDataSequenceEntry { | |
cas_hash: MerkleHash; | |
cas_flags: number; | |
unpacked_segment_bytes: number; | |
chunk_index_start: number; | |
chunk_index_end: number; | |
} | |
export interface FileVerificationEntry { | |
chunk_hash: MerkleHash; | |
_unused: Uint8Array; | |
} | |
export interface FileMetadataExt { | |
sha256: MerkleHash; | |
_unused: Uint8Array; | |
} | |
export interface CASChunkSequenceHeader { | |
cas_hash: MerkleHash; | |
cas_flags: number; | |
num_entries: number; | |
num_bytes_in_cas: number; | |
num_bytes_on_disk: number; | |
} | |
export interface CASChunkSequenceEntry { | |
chunk_hash: MerkleHash; | |
chunk_byte_range_start: number; | |
unpacked_segment_bytes: number; | |
_unused: number; | |
} | |
export interface MDBFileInfo { | |
header: FileDataSequenceHeader; | |
entries: FileDataSequenceEntry[]; | |
verification_entries?: FileVerificationEntry[]; | |
metadata_ext?: FileMetadataExt; | |
} | |
export interface MDBCASInfo { | |
header: CASChunkSequenceHeader; | |
entries: CASChunkSequenceEntry[]; | |
} | |
export interface ShardData { | |
header: MDBShardFileHeader; | |
footer: MDBShardFileFooter; | |
file_info: MDBFileInfo[]; | |
cas_info: MDBCASInfo[]; | |
} | |
// === Parsed Metadata for Display === | |
export interface ParsedFileMetadata { | |
type: "xorb" | "shard"; | |
filename: string; | |
fileSize: number; | |
data: Chunk[] | ShardData; | |
error?: string; | |
} | |
// File type detection | |
export const MDB_SHARD_HEADER_TAG = new Uint8Array([ | |
0x48, 0x46, 0x52, 0x65, 0x70, 0x6f, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, | |
0x61, 0x00, 0x55, 0x69, 0x67, 0x45, 0x6a, 0x7b, 0x81, 0x57, 0x83, 0xa5, 0xbd, | |
0xd9, 0x5c, 0xcd, 0xd1, 0x4a, 0xa9, | |
]); | |
export const XORB_IDENT = new Uint8Array([88, 69, 84, 66, 76, 79, 66]); | |