import Rx from 'rx';
import https from 'https';
let promise = Rx.Observable.create(observer => {
const req = https.request(url, res => {
if (res.statusCode === 429) {
const err = new Error('TooManyRequests');
err.waitTime = Number(res.headers['retry-after']) * 1000;
return observer.onError(err);
}
res.setEncoding('utf8');
res.on('data', chunk => observer.onNext(chunk));
res.on('end', () => observer.onCompleted());
res.on('error', err => observer.onError(err));
});
req.setTimeout(this.timeout, () => req.abort());
req.on('error', err => observer.onError(err));
req.end();
})
.reduce((prev, next) => prev + next)
.map(JSON.parse)
.toPromise(Promise);