request = require("request").defaults(jar: false) fs = require("fs") module.exports = UrlFetcher = pipeUrlToFile: (url, filePath, _callback = (error) ->) -> callbackOnce = (error) -> _callback(error) _callback = () -> urlStream = request.get(url) fileStream = fs.createWriteStream(filePath) urlStream.on "response", (res) -> if res.statusCode >= 200 and res.statusCode < 300 urlStream.pipe(fileStream) else callbackOnce(new Error("URL returned non-success status code: #{res.statusCode} #{url}")) urlStream.on "error", (error) -> callbackOnce(error or new Error("Something went wrong downloading the URL #{url}")) urlStream.on "end", () -> callbackOnce()