diff --git a/addon/addon.js b/addon/addon.js index fd04b7d..4e83ee9 100644 --- a/addon/addon.js +++ b/addon/addon.js @@ -1,3 +1,4 @@ +const Bottleneck = require('bottleneck'); const { addonBuilder } = require('stremio-addon-sdk'); const { Type } = require('./lib/types'); const { manifest, DefaultProviders } = require('./lib/manifest'); @@ -14,16 +15,21 @@ const STALE_ERROR_AGE = 7 * 24 * 60 * 60; // 7 days const defaultProviders = DefaultProviders.map(provider => provider.toLowerCase()); const builder = new addonBuilder(manifest()); +const limiter = new Bottleneck({ + maxConcurrent: process.env.LIMIT_MAX_CONCURRENT || 20, + highWater: process.env.LIMIT_QUEUE_SIZE || 100, + strategy: Bottleneck.strategy.OVERFLOW +}); builder.defineStreamHandler((args) => { if (!args.id.match(/tt\d+/i) && !args.id.match(/kitsu:\d+/i)) { return Promise.resolve({ streams: [] }); } - return cacheWrapStream(args.id, () => streamHandler(args) + return limiter.schedule(() => cacheWrapStream(args.id, () => streamHandler(args) .then(records => records .sort((a, b) => b.torrent.seeders - a.torrent.seeders || b.torrent.uploadDate - a.torrent.uploadDate) - .map(record => toStreamInfo(record)))) + .map(record => toStreamInfo(record))))) .then(streams => filterByProvider(streams, args.extra.providers || defaultProviders)) .then(streams => applySorting(streams, args.extra)) .then(streams => applyMochs(streams, args.extra)) @@ -35,7 +41,7 @@ builder.defineStreamHandler((args) => { })) .catch(error => { console.log(`Failed request ${args.id}: ${error}`); - throw error; + throw Promise.reject(error); }); }); diff --git a/addon/package-lock.json b/addon/package-lock.json index 15ecc5d..73af197 100644 --- a/addon/package-lock.json +++ b/addon/package-lock.json @@ -188,6 +188,11 @@ "type-is": "~1.6.17" } }, + "bottleneck": { + "version": "2.19.5", + "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", + "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", diff --git a/addon/package.json b/addon/package.json index f2a8ff7..3cea184 100644 --- a/addon/package.json +++ b/addon/package.json @@ -8,6 +8,7 @@ "author": "TheBeastLT ", "license": "MIT", "dependencies": { + "bottleneck": "^2.19.5", "cache-manager": "^2.11.1", "cache-manager-mongodb": "^0.2.2", "express-rate-limit": "^5.1.1",