@tgrospic/rnode-grpc-js
Version:
RNode gRPC helpers
49 lines (44 loc) • 1.16 kB
JavaScript
import fs from 'fs-extra'
import request from 'request'
import * as R from 'ramda'
const { log, error } = console
export const downLoadFile = async opt => {
const { downloadUrl, filePath } = opt
const file = fs.createWriteStream(filePath)
const cleanUp = () => {
file.close()
return fs.remove(filePath)
}
log('Downloading', downloadUrl)
return new Promise((resolve, reject) => {
request.get(downloadUrl)
.on('response', res => {
if (res.statusCode !== 200) {
cleanUp()
reject(Error(`File not found: ${downloadUrl}`))
}
})
.on('error', reject).pipe(file)
file.on('finish', () => {
file.close()
resolve(opt)
})
file.on('error', err => {
cleanUp()
reject(err)
})
})
}
export const downloadAll = R.pipe(
R.map(downLoadFile),
Promise.all.bind(Promise),
)
export const fetch = opt => new Promise((resolve, reject) => {
request(opt, (err, res, body) => {
const isJson = !!opt.json
if (err) reject(err)
else if (res.statusCode !== 200)
reject(Error(`HTTP ${res.statusCode}`))
else resolve(isJson ? body : res)
})
})