feat(attachments): R2 toggle, storage metrics, and demo R2 config

Add an ATTACHMENTS_ENABLED switch (default on when R2 is bound) via a
central getAttachmentBucket helper, surface R2 + estimated KV usage
against the free tier on the status page and /api/stats (refreshed by the
hourly cron), let setup.sh create and wire the R2 bucket, and bind the
demo bucket so the deployed demo has attachments.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Julien Herr
2026-05-23 17:33:50 +02:00
parent 7226e718f7
commit f150d40c45
19 changed files with 387 additions and 23 deletions
+8
View File
@@ -237,6 +237,14 @@ export class MockR2 {
}
}
async list(_options?: { cursor?: string }) {
const objects = Array.from(this.store.entries()).map(([key, entry]) => ({
key,
size: entry.body.byteLength,
}));
return { objects, truncated: false as const, cursor: undefined };
}
_has(key: string) {
return this.store.has(key);
}