'use strict'; const Promise = require("bluebird"); const bhttp = require("bhttp"); const debug = require("debug")("seekable:http"); function generateRangeHeader(start, end) { if (start != null && end != null) { return `bytes=${start}-${end}`; } else if (start != null && end == null) { return `bytes=${start}-`; } else if (start == null && end != null) { return `bytes=-${end}`; } else { return null; } } module.exports = function getHttpSeekable(targetUrl) { return { createReadStream: function createReadStream(start, end) { return Promise.try(() => { debug(`${start}-${end} -- ${targetUrl}`); return bhttp.get(targetUrl, { stream: true, headers: { "range": generateRangeHeader(start, end) // FIXME: What if there is no range specified at all? Is `null` valid then? } }); }); } } };