@mvp-rockets/namma-generator
Version:
A generator to generate mvp-rockets projects
97 lines (82 loc) • 2.79 kB
JavaScript
const config = require('config/config');
const AWS = require('aws-sdk');
const Result = require('folktale/result');
const awsS3 = config.serviceProviderConfig.awsS3;
const path = require('path');
const mime = require('mime');
const { logError } = require('@mvp-rockets/namma-lib/utilities');
const { bucketAcl } = require('config/config');
const cloudFrontFolders = {};
const awsConfig = {
region: awsS3.region,
params: {
Bucket: awsS3.bucketName
}
};
if (awsS3.access_key_id && awsS3.secret_access_key) {
awsConfig.accessKeyId = awsS3.access_key_id;
awsConfig.secretAccessKey = awsS3.secret_access_key;
}
if (awsS3.endpoint) {
awsConfig.endpoint = awsS3.endpoint;
}
const s3Bucket = new AWS.S3(awsConfig);
const getSignedUrl = (fileKey) => new Promise((resolve, reject) => {
const params = {
Bucket: awsS3.bucketName,
Key: fileKey
};
s3Bucket.getSignedUrl('getObject', params, (err, data) => {
if (err) {
return reject(new Error(Result.Error('some error occurred')));
}
return resolve(Result.Ok(data));
});
});
const getUploadPreSignedUrl = (fileKey) => new Promise((resolve, reject) => {
const extension = path.extname(fileKey);
const extensionContentType = mime.getType(extension);
const contentType = extensionContentType.split('/');
const actualContentType = `${contentType[0]}/`;
const bucketParams = {
Bucket: awsS3.bucketName,
Expires: 3600,
Fields: {
key: fileKey
},
Conditions: [
['starts-with', '$Content-Type', actualContentType]
]
};
s3Bucket.createPresignedPost(bucketParams, (err, data) => {
if (err) {
logError('aws upload presigned error', { err });
return reject(new Error(Result.Error('some error occurred')));
}
return resolve(Result.Ok(data));
});
});
const getObject = (fileKey) => new Promise((resolve, reject) => {
const params = {
Bucket: awsS3.bucketName,
Key: fileKey
};
s3Bucket.getObject(params, (err, data) => {
if (err) {
return reject(new Error(Result.Error('some error occurred')));
}
return resolve(Result.Ok(data));
});
});
const getCloudFrontUrl = (fileKey, folder) => {
const { cloudFrontUrl } = awsS3;
const cloudFrontFolder = cloudFrontFolders[folder];
if (cloudFrontUrl && cloudFrontFolder) {
const fileName = fileKey?.split(cloudFrontFolder)[1];
return `${cloudFrontUrl}${fileName}`;
}
return `https://${awsS3.bucketName}.s3.${awsS3.region}.amazonaws.com/${fileKey}`;
};
module.exports = {
s3Bucket, Bucket: awsS3.bucketName, getSignedUrl, getUploadPreSignedUrl, getObject, getCloudFrontUrl
};