chat-about-video
Version:
Chat about a video clip using ChatGPT hosted in OpenAI or Azure, or Gemini provided by Google
45 lines (44 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAzureBlobStorageFileBatchUploader = void 0;
const tslib_1 = require("tslib");
const storage_blob_1 = require("@azure/storage-blob");
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"));
async function generateDownloadUrl(blockBlobClient, expirationSeconds) {
const url = await blockBlobClient.generateSasUrl({
expiresOn: new Date(Date.now() + expirationSeconds * 1000),
permissions: storage_blob_1.BlobSASPermissions.parse('r'),
});
return url;
}
function createAzureBlobStorageFileBatchUploader(blobServiceClient, expirationSeconds, parallelism = 3) {
return async (dir, relativePaths, containerName, blobPathPrefix) => {
const containerClient = blobServiceClient.getContainerClient(containerName);
if (!(await containerClient.exists())) {
await containerClient.create();
}
const blobNames = relativePaths.map((relativePath) => `${blobPathPrefix}${relativePath}`);
// Upload each file to the container
const downloadUrls = await (0, promise_utils_1.withConcurrency)(parallelism, relativePaths, async (fileName, i) => {
const blobName = blobNames[i];
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
// Read the file as a buffer
const fileContent = await promises_1.default.readFile(node_path_1.default.join(dir, fileName));
// Upload the buffer to Azure Blob Storage
await blockBlobClient.upload(fileContent, fileContent.length, {
blobHTTPHeaders: { blobContentType: 'application/octet-stream' },
});
return generateDownloadUrl(blockBlobClient, expirationSeconds);
});
return {
downloadUrls,
cleanup: () => (0, promise_utils_1.inParallel)(parallelism, blobNames, async (blobName) => {
const blockBlobClient = containerClient.getBlockBlobClient(blobName);
await blockBlobClient.delete();
}),
};
};
}
exports.createAzureBlobStorageFileBatchUploader = createAzureBlobStorageFileBatchUploader;