UNPKG

@edge-store/server

Version:

Image Handling for React/Next.js

52 lines (47 loc) 1.91 kB
'use strict'; 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;