libs/s3/client.js (view raw)
1const Minio = require("minio");
2const chalk = require("chalk");
3
4module.exports = s3Config => {
5 const minio = getMinioClient(s3Config);
6
7 return {
8 push: push(minio, s3Config),
9 pull: pull(minio, s3Config),
10 list: list(minio, s3Config),
11 remove: remove(minio, s3Config),
12 };
13};
14
15const getMinioClient = s3Config =>
16 new Minio.Client({
17 endPoint: s3Config.host,
18 port: s3Config.port,
19 useSSL: s3Config.useSSL,
20 accessKey: s3Config.accessKey,
21 secretKey: s3Config.secretKey,
22 });
23
24const push = (minio, s3Config) => async ({ dumpPath, fileName }) => {
25 await upsertBucket(minio, s3Config);
26 return minio.fPutObject(s3Config.bucket, fileName, dumpPath);
27};
28
29const pull = (minio, s3Config) => async ({ dumpPath, fileName }) =>
30 minio.fGetObject(s3Config.bucket, fileName, dumpPath);
31
32const list = (minio, s3Config) => async () => {
33 await upsertBucket(minio, s3Config);
34 return new Promise((resolve, reject) => {
35 const stream = minio.listObjectsV2(s3Config.bucket);
36 let files = [];
37 stream.on("data", obj => files.push(obj));
38 stream.on("end", () => resolve(files));
39 stream.on("error", reject);
40 });
41};
42
43const remove = (minio, s3Config) => async fileName =>
44 minio.removeObject(s3Config.bucket, fileName);
45
46const upsertBucket = async (minio, s3Config) => {
47 const bucketExists = await minio.bucketExists(s3Config.bucket);
48
49 if (!bucketExists) {
50 await minio.makeBucket(s3Config.bucket);
51 console.log(chalk.blue(`Bucket ${s3Config.bucket} created on S3 server`));
52 }
53};