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)); } } }