streamby-core
Version:
StreamBy middleware framework for media storage management
69 lines (68 loc) • 2.61 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.S3Adapter = void 0;
const client_s3_1 = require("@aws-sdk/client-s3");
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
class S3Adapter {
constructor(config) {
this.s3 = new client_s3_1.S3Client({
region: config.region,
credentials: {
accessKeyId: config.accessKeyId,
secretAccessKey: config.secretAccessKey,
},
});
this.bucket = config.bucket;
}
async listFiles(projectId) {
const command = new client_s3_1.ListObjectsV2Command({
Bucket: this.bucket,
Prefix: `${projectId}/`,
});
const result = await this.s3.send(command);
return result.Contents || [];
}
async deleteProjectImage(projectId) {
const command = new client_s3_1.DeleteObjectCommand({
Bucket: this.bucket,
Key: `${projectId}/project-image`,
});
return await this.s3.send(command);
}
async deleteProjectDirectory(projectId) {
const listCommand = new client_s3_1.ListObjectsV2Command({
Bucket: this.bucket,
Prefix: `${projectId}/`,
});
const listedObjects = await this.s3.send(listCommand);
if (!listedObjects.Contents || listedObjects.Contents.length === 0) {
return;
}
const deleteParams = {
Bucket: this.bucket,
Delete: { Objects: listedObjects.Contents.map(({ Key }) => ({ Key })) },
};
const deleteCommand = new client_s3_1.DeleteObjectCommand(deleteParams);
return await this.s3.send(deleteCommand);
}
async getPresignedUrl(contentType, projectId) {
const command = new client_s3_1.PutObjectCommand({
Bucket: this.bucket,
Key: `${projectId}/${Date.now()}`,
ContentType: contentType,
});
return await (0, s3_request_presigner_1.getSignedUrl)(this.s3, command, { expiresIn: 3600 });
}
async getPresignedProjectImageUrl(projectId) {
const key = `${projectId}/project-image`;
const command = new client_s3_1.PutObjectCommand({
Bucket: this.bucket,
Key: key,
ContentType: 'image/jpeg',
});
const url = await (0, s3_request_presigner_1.getSignedUrl)(this.s3, command, { expiresIn: 3600 });
const publicUrl = `https://${this.bucket}.s3.amazonaws.com/${key}`;
return { url, publicUrl };
}
}
exports.S3Adapter = S3Adapter;