chat-about-video
Version:
Chat about a video clip using ChatGPT hosted in OpenAI or Azure, or Gemini provided by Google
33 lines (32 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAwsS3FileBatchUploader = void 0;
const tslib_1 = require("tslib");
const client_s3_1 = require("@aws-sdk/client-s3");
const s3_1 = require("@handy-common-utils/aws-utils/s3");
const promise_utils_1 = require("@handy-common-utils/promise-utils");
const promises_1 = tslib_1.__importDefault(require("node:fs/promises"));
const node_path_1 = tslib_1.__importDefault(require("node:path"));
function createAwsS3FileBatchUploader(s3Client, expirationSeconds, parallelism = 3) {
return async (dir, fileNames, s3BucketName, s3ObjectPathPrefix) => {
const checkResult = await s3Client.send(new client_s3_1.HeadBucketCommand({ Bucket: s3BucketName }));
if (checkResult.$metadata.httpStatusCode === 404) {
await s3Client.send(new client_s3_1.CreateBucketCommand({ Bucket: s3BucketName }));
}
const s3ObjectKeys = fileNames.map((fileName) => `${s3ObjectPathPrefix}${fileName}`);
// Upload each file to the container
const downloadUrls = await (0, promise_utils_1.withConcurrency)(parallelism, fileNames, async (fileName, i) => {
const s3ObjectKey = s3ObjectKeys[i];
// Read the file as a buffer
const fileBuffer = await promises_1.default.readFile(node_path_1.default.join(dir, fileName));
// Upload the buffer to AWS S3
await (0, s3_1.putS3Object)(s3Client, s3BucketName, s3ObjectKey, fileBuffer);
return await (0, s3_1.generatePresignedUrlForDownloading)(s3Client, s3BucketName, s3ObjectKey, expirationSeconds);
});
return {
downloadUrls,
cleanup: () => (0, promise_utils_1.inParallel)(parallelism, s3ObjectKeys, (s3ObjectKey) => (0, s3_1.deleteS3Object)(s3Client, s3BucketName, s3ObjectKey)),
};
};
}
exports.createAwsS3FileBatchUploader = createAwsS3FileBatchUploader;