Fixed
- Inbox template header images blank when Meta media ids expire (BORD-999). The template-header proxy now reads durable
media_*columns, prefers payloadheaderImageUrl/ headerimage.link, and falls back to the approved template IMAGEheader_handlesample when Graph media GET fails — caching bytes into the object store so subsequent views never re-hit Facebook. - Assets route bucket env override. Workspace asset uploads resolve
STORAGE_BUCKET_ASSETSinstead of a hard-coded bucket name.
Features
- Unified object-storage driver surface.
@repo/storageunderstandsSTORAGE_DRIVER(s3_compatible|aws_s3|vercel_blobreserved), path-style toggle, and logical bucket env vars so Railway+MinIO / AWS S3 / R2 / Supabase S3 installs re-point via config. Documented in self-hosting env tables.
Verification
pnpm --filter app exec vitest run app/api/inbox/messages/[messageId]/template-header-image/route.test.ts app/api/settings/assets/route.test.tspnpm --filter @repo/database exec vitest run src/adapters/conversations.test.tspnpm exec vitest run packages/storage/src/keys.test.tspnpm --filter @repo/storage typecheck