You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

35 lines
1021 B
JavaScript

'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?
}
});
});
}
}
};