import { S3Client, PutObjectCommand, DeleteObjectCommand } from "@aws-sdk/client-s3"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; const bucket = process.env["STORAGE_BUCKET"] ?? "epicure-uploads"; const endpoint = process.env["STORAGE_ENDPOINT"] ?? "http://localhost:9000"; const publicUrl = process.env["STORAGE_PUBLIC_URL"] ?? "http://localhost:9000"; const s3 = new S3Client({ region: process.env["STORAGE_REGION"] ?? "us-east-1", endpoint, forcePathStyle: true, credentials: { accessKeyId: process.env["STORAGE_ACCESS_KEY"] ?? "minioadmin", secretAccessKey: process.env["STORAGE_SECRET_KEY"] ?? "minioadmin", }, }); export async function createPresignedUploadUrl(key: string, contentType: string): Promise { const command = new PutObjectCommand({ Bucket: bucket, Key: key, ContentType: contentType }); return getSignedUrl(s3, command, { expiresIn: 300 }); } export async function deleteObject(key: string): Promise { await s3.send(new DeleteObjectCommand({ Bucket: bucket, Key: key })); } export function getPublicUrl(key: string): string { return `${publicUrl}/${bucket}/${key}`; }