wundertec-core
Version:
Librería estándar de utilidades e integraciones AWS + helpers generales
63 lines (62 loc) • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.uploadObject = uploadObject;
exports.getObject = getObject;
exports.deleteObject = deleteObject;
exports.getSignedGetUrl = getSignedGetUrl;
exports.getSignedPutUrl = getSignedPutUrl;
const client_s3_1 = require("@aws-sdk/client-s3");
const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
const s3Client = new client_s3_1.S3Client({ region: process.env.AWS_REGION });
/**
* Sube un objeto a S3.
*/
async function uploadObject(bucket, key, body, options) {
const command = new client_s3_1.PutObjectCommand({
Bucket: bucket,
Key: key,
Body: body,
...options,
});
return s3Client.send(command);
}
/**
* Obtiene un objeto de S3 como Buffer.
*/
async function getObject(bucket, key) {
const command = new client_s3_1.GetObjectCommand({ Bucket: bucket, Key: key });
const response = await s3Client.send(command);
const stream = response.Body;
return streamToBuffer(stream);
}
async function streamToBuffer(stream) {
return new Promise((resolve, reject) => {
const chunks = [];
stream.on("data", (chunk) => chunks.push(chunk));
stream.on("error", reject);
stream.on("end", () => resolve(Buffer.concat(chunks)));
});
}
/**
* Elimina un objeto de S3.
*/
async function deleteObject(bucket, key) {
const command = new client_s3_1.DeleteObjectCommand({ Bucket: bucket, Key: key });
return s3Client.send(command);
}
/**
* Genera un URL firmado para descargar (GET) un objeto privado.
* @param expiresIn Segundos de validez del URL (por defecto 900 = 15 minutos).
*/
async function getSignedGetUrl(bucket, key, expiresIn = 900) {
const command = new client_s3_1.GetObjectCommand({ Bucket: bucket, Key: key });
return (0, s3_request_presigner_1.getSignedUrl)(s3Client, command, { expiresIn });
}
/**
* Genera un URL firmado para subir (PUT) un objeto privado.
* @param expiresIn Segundos de validez del URL (por defecto 900 = 15 minutos).
*/
async function getSignedPutUrl(bucket, key, expiresIn = 900) {
const command = new client_s3_1.PutObjectCommand({ Bucket: bucket, Key: key });
return (0, s3_request_presigner_1.getSignedUrl)(s3Client, command, { expiresIn });
}