Alexandre Bodin bd5f3cb1ab Wrap cloudinary error info in an error object
Signed-off-by: Alexandre Bodin <bodin.alex@gmail.com>
2020-03-26 14:01:45 +01:00

68 lines
1.8 KiB
JavaScript

'use strict';
/**
* Module dependencies
*/
// Public node modules.
const cloudinary = require('cloudinary').v2;
const intoStream = require('into-stream');
module.exports = {
init(config) {
cloudinary.config(config);
return {
upload(file, customConfig = {}) {
return new Promise((resolve, reject) => {
const upload_stream = cloudinary.uploader.upload_stream(
{ resource_type: 'auto', public_id: file.hash, ...customConfig },
(err, image) => {
if (err) {
return reject(err);
}
if (image.resource_type === 'video') {
file.previewUrl = cloudinary.url(`${image.public_id}.gif`, {
video_sampling: 6,
delay: 200,
width: 250,
crop: 'scale',
resource_type: 'video',
});
}
file.url = image.secure_url;
file.provider_metadata = {
public_id: image.public_id,
resource_type: image.resource_type,
};
resolve();
}
);
intoStream(file.buffer).pipe(upload_stream);
});
},
async delete(file, customConfig = {}) {
try {
const { resource_type, public_id } = file.provider_metadata;
const response = await cloudinary.uploader.destroy(public_id, {
invalidate: true,
resource_type: resource_type || 'image',
...customConfig,
});
if (response.result !== 'ok') {
throw {
error: new Error(response.result),
};
}
} catch (error) {
throw new Error(error.error);
}
},
};
},
};