feat(ingest): content-addressed blob store

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-01 03:35:06 +10:00
parent c6e72e93d5
commit 6e973404e9
2 changed files with 72 additions and 0 deletions

34
lib/ingest/blob_store.js Normal file
View File

@@ -0,0 +1,34 @@
import crypto from 'node:crypto';
import fs from 'node:fs/promises';
import path from 'node:path';
export class BlobStore {
constructor(root) { this.root = root; }
async hash(buf) {
return crypto.createHash('sha256').update(buf).digest('hex');
}
path(sha) {
return path.join(this.root, sha.slice(0, 2), sha);
}
async write(buf) {
const sha = await this.hash(buf);
const dest = this.path(sha);
try {
await fs.access(dest);
} catch {
await fs.mkdir(path.dirname(dest), { recursive: true });
await fs.writeFile(dest, buf);
}
return { sha, path: dest };
}
}
let _default = null;
export function defaultStore() {
const root = process.env.BLOB_ROOT || '/var/lib/void/blobs';
if (!_default || _default.root !== root) _default = new BlobStore(root);
return _default;
}