'use strict'; let FeedParser = require('feedparser'); let request = require('request'); module.exports.fetch = (url, callback) => { let req = request(url); let feedparser = new FeedParser(); let returned = false; let entries = []; req.setHeader('user-agent', 'Mailtrain'); req.setHeader('accept', 'text/html,application/xhtml+xml'); req.on('error', err => { if (returned) { return; } returned = true; callback(err); }); req.on('response', res => { if (returned) { return; } if (res.statusCode !== 200) { return req.emit('error', new Error('Bad status code')); } req.pipe(feedparser); }); feedparser.on('error', err => { if (returned) { return; } returned = true; callback(err); }); feedparser.on('readable', () => { let item; while ((item = feedparser.read())) { let entry = { title: item.title, date: item.date || item.pubdate || item.pubDate || new Date(), guid: item.guid || item.link, link: item.link, content: item.description || item.summary }; entries.push(entry); } }); feedparser.on('end', () => { if (returned) { return; } returned = true; callback(null, entries); }); };