@edge-store/server
Version:
Image Handling for React/Next.js
52 lines (47 loc) • 1.91 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var clientS3 = require('@aws-sdk/client-s3');
var s3RequestPresigner = require('@aws-sdk/s3-request-presigner');
var uuid = require('uuid');
function AWSProvider(options) {
const { accessKeyId = process.env.ES_AWS_ACCESS_KEY_ID, secretAccessKey = process.env.ES_AWS_SECRET_ACCESS_KEY, region = process.env.ES_AWS_REGION, bucketName = process.env.ES_AWS_BUCKET_NAME } = options ?? {};
const credentials = accessKeyId && secretAccessKey ? {
accessKeyId,
secretAccessKey
} : undefined;
const s3Client = new clientS3.S3Client({
region,
credentials
});
const baseUrl = process.env.EDGE_STORE_BASE_URL ?? `https://${bucketName}.s3.${region}.amazonaws.com`;
return {
async init () {
return {};
},
getBaseUrl () {
return baseUrl;
},
async requestUpload ({ fileInfo }) {
const pathPrefix = `${fileInfo.routeName}${fileInfo.isPublic ? '/_public' : ''}`;
const nameId = uuid.v4();
const extension = fileInfo.extension ? `.${fileInfo.extension.replace('.', '')}` : '';
const fileName = `${nameId}${extension}`;
const filePath = fileInfo.path.reduce((acc, item)=>{
return `${acc}/${item.value}`;
}, '');
const command = new clientS3.PutObjectCommand({
Bucket: bucketName,
Key: `${pathPrefix}/${filePath}/${fileName}`
});
const signedUrl = await s3RequestPresigner.getSignedUrl(s3Client, command, {
expiresIn: 60 * 60
});
const url = `${baseUrl}/${fileInfo.path}`;
return {
uploadUrl: signedUrl,
accessUrl: url
};
}
};
}
exports.AWSProvider = AWSProvider;