import { CreateBucketCommand, HeadBucketCommand, S3Client } from "@aws-sdk/client-s3";
const required = (name) => {
const value = process.env[name];
if (!value) throw new Error(`Missing required environment variable: ${name}`);
return value;
};
const client = new S3Client({
endpoint: required("S3_ENDPOINT"),
region: process.env.S3_REGION ?? "us-east-1",
forcePathStyle: process.env.S3_FORCE_PATH_STYLE === "true",
credentials: { accessKeyId: required("S3_ACCESS_KEY_ID"), secretAccessKey: required("S3_SECRET_ACCESS_KEY") },
});
const Bucket = required("S3_BUCKET");
for (let attempt = 1; attempt <= 20; attempt += 1) {
try {
await client.send(new HeadBucketCommand({ Bucket }));
break;
} catch {
try {
await client.send(new CreateBucketCommand({ Bucket }));
break;
} catch (error) {
if (attempt === 20) throw error;
await new Promise((resolve) => setTimeout(resolve, 1_000));
}
}
}