import { env } from "indite-js/env"; import { Client } from "minio"; type Props = { folderPath: string; }; export const getFolderSize = async ({ folderPath }: Props) => { if (!env.S3_ENDPOINT || !env.S3_ACCESS_KEY || !env.S3_SECRET_KEY) throw new Error( "S3 not properly configured. Missing one of those variables: S3_ENDPOINT, S3_ACCESS_KEY, S3_SECRET_KEY" ); const minioClient = new Client({ endPoint: env.S3_ENDPOINT, port: env.S3_PORT, useSSL: env.S3_SSL, accessKey: env.S3_ACCESS_KEY, secretKey: env.S3_SECRET_KEY, region: env.S3_REGION, }); return new Promise((resolve, reject) => { let totalSize = 0; const stream = minioClient.listObjectsV2( env.S3_BUCKET, "public/" + folderPath, true ); stream.on("data", function (obj) { totalSize += obj.size; }); stream.on("error", function (err) { reject(err); }); stream.on("end", function () { resolve(totalSize); }); }); };