26 lines
687 B
TypeScript
26 lines
687 B
TypeScript
import "server-only";
|
|
|
|
import { S3Client } from "bun";
|
|
|
|
let client: S3Client | undefined;
|
|
|
|
function required(name: string): string {
|
|
const value = process.env[name];
|
|
if (!value) throw new Error(`${name} is required for media storage.`);
|
|
return value;
|
|
}
|
|
|
|
export function getMediaStorage(): S3Client {
|
|
if (!client) {
|
|
client = new S3Client({
|
|
accessKeyId: required("S3_ACCESS_KEY_ID"),
|
|
secretAccessKey: required("S3_SECRET_ACCESS_KEY"),
|
|
bucket: required("S3_BUCKET"),
|
|
endpoint: required("S3_ENDPOINT"),
|
|
region: process.env.S3_REGION || "auto",
|
|
virtualHostedStyle: process.env.S3_VIRTUAL_HOSTED_STYLE === "true",
|
|
});
|
|
}
|
|
return client;
|
|
}
|