@onereach/orest-input-cli
Version:
The tool for creating, serving, and publishing OREST Inputs
58 lines (46 loc) • 1.35 kB
JavaScript
const FormData = require('form-data');
const fs = require('fs');
const { Store } = require('@or-sdk/store');
class StoreApi extends Store {
constructor({ userToken, storeApiUrl, packageType }) {
super({
token: userToken,
storeApiUrl: storeApiUrl,
packageType: packageType,
});
this.packageType = packageType;
}
uploadBundle({ filePath, destFileName, url, fields }, onProgress) {
const formData = new FormData();
Object.keys(fields).forEach(key => formData.append(key, fields[key]));
const fileSize = fs.statSync(filePath).size;
const stream = fs.createReadStream(filePath);
formData.append('file', stream, {
filename: destFileName,
knownLength: fileSize,
});
return new Promise((resolve, reject) => {
let uploadSize = 0;
try {
uploadSize = formData.getLengthSync();
} catch (error) {
// bug: zero file size
}
let uploaded = 0;
formData.submit(url, (err, res) => {
if (err) {
return reject(err);
}
resolve(res);
});
if (onProgress) {
formData.on('data', function (data) {
uploaded += data.length;
const progress = (uploaded * 100) / uploadSize;
onProgress(progress);
});
}
});
}
}
module.exports = StoreApi;