UNPKG

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
"use strict"; 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;