var fs = require("fs"); var request = require("request"); var progress = require("request-progress"); export type Progress = { percent: number; speed: number; size: { total: number; transfered: number; }; time: { elapsed: number; remaining: number; }; }; export function download( url: string, targetLocation: string, onprogress: (state: Progress) => void ): Promise { return new Promise((resolve: any, reject: any) => { progress(request(url), { throttle: 500, }) .on("progress", onprogress) .on("error", reject) .on("end", resolve) .pipe(fs.createWriteStream(targetLocation)); }); }