Files
payloadcms/test/plugin-cloud-storage/utils.ts

49 lines
1.4 KiB
TypeScript

import * as AWS from '@aws-sdk/client-s3'
const getS3Client = () => {
return new AWS.S3({
endpoint: process.env.S3_ENDPOINT,
forcePathStyle: process.env.S3_FORCE_PATH_STYLE === 'true',
region: process.env.S3_REGION,
credentials: {
accessKeyId: process.env.S3_ACCESS_KEY_ID,
secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
},
})
}
export async function createTestBucket(bucketName?: string) {
const client = getS3Client()
const makeBucketRes = await client.send(
new AWS.CreateBucketCommand({ Bucket: bucketName || process.env.S3_BUCKET }),
)
if (makeBucketRes.$metadata.httpStatusCode !== 200) {
throw new Error(`Failed to create bucket. ${makeBucketRes.$metadata.httpStatusCode}`)
}
}
export async function clearTestBucket(client: AWS.S3Client, bucketName?: string) {
const listedObjects = await client.send(
new AWS.ListObjectsV2Command({
Bucket: bucketName || process.env.S3_BUCKET,
}),
)
if (!listedObjects?.Contents?.length) return
const deleteParams = {
Bucket: bucketName || process.env.S3_BUCKET,
Delete: { Objects: [] },
}
listedObjects.Contents.forEach(({ Key }) => {
deleteParams.Delete.Objects.push({ Key })
})
const deleteResult = await client.send(new AWS.DeleteObjectsCommand(deleteParams))
if (deleteResult.Errors?.length) {
throw new Error(JSON.stringify(deleteResult.Errors))
}
}