express-range-tracker v1.0.11
express-range-tracker
Detects semantically correct usage of the range header by firing the onDownloaded event when all chunks related to the current ip are downloaded
Usage
const express = require("express");
const rangeTracker = require("express-range-tracker");
express()
.use(
rangeTracker({
timestampFunction: Date.now,
onDownloaded: (req, res, next) => {
/* ... */
},
})
)
.listen(3000);timestampFunction - Calculates datetime of range chunk request
storage - an Object that supports indexing, associative array. {} by default
onDownloaded - event that behaves as middleware
onDeadlineReached - event that fires when maxDelay exceeds timestamp window between the last and the new timestamps
allowedTraits - array of functions that determine whitelist of range header behavior. true if match, false otherwise
interface Trait {
from: number;
to: number;
timestamp: number;
}(previous: Trait, current: Trait) => boolean;bannedTraits - array of functions that determine blacklist of range header behavior. true if match, false otherwise
(previous: Trait, current: Trait) => boolean;onSimilarTrait - fires when another ips had the same range behavior as the current ip. The current ip will not be in the list
const track = rangeTracker({
storage,
onSimilarTrait: (ips) => {
console.log(ips.length);
},
});onRobotic - fires when range is malformed in some way:
malformed- does not conform to range specdigits-fromis bigger thantoin range segmentempty- range header is present but length of string is 0absent- request of content that should have range header but does not existnegative- negative from or to range detected
onRobotic(req, reason);onSimilarTimestamp - function that fires on clients with same range request timestamp windows
onSimilarTimestamp(req, ips);onRangeOverflow - fires with either parts or overflow reason when segment count is larger than maxParts or max value is smaller than the biggest part of any segment, respectively
const track = rangeTracker({
storage,
maxParts: 3,
max: 50
onRangeOverflow: (req, reason) => {
console.log(reason);
},
});Test
npm test