commit 5345666120ec0820a570d2b06b8c5003251067fd Author: Sven Slootweg Date: Tue Apr 23 22:55:18 2019 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..254e3d4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +yarn.lock +node_modules \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..2131eca --- /dev/null +++ b/index.js @@ -0,0 +1,27 @@ +"use strict"; + +const Promise = require("bluebird"); +const ms = require("ms"); +const promiseDelaySince = require("@joepie91/promise-delay-every"); + +module.exports = function rateLimitedStream(interval) { + let intervalInMilliseconds = (typeof interval === "number") + ? interval + : ms(interval); + + let delayer = promiseDelaySince(intervalInMilliseconds); + + return { + description: `rate-limited stream (1 per ${interval})`, + read: (source) => { + return Promise.try(() => { + return delayer(); + }).then(() => { + return source.read(); + }); + }, + abort: (source, reason) => { + source.abort(reason); + } + } +}; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..89a1b62 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "name": "@ppstreams/rate-limit", + "version": "1.0.0", + "main": "index.js", + "repository": "git@git.cryto.net:joepie91/ppstreams-rate-limit.git", + "author": "Sven Slootweg ", + "license": "WTFPL OR CC0-1.0", + "dependencies": { + "@joepie91/promise-delay-every": "^1.0.0", + "bluebird": "^3.5.4", + "ms": "^2.1.1" + } +}