From 13a1bd9ab0e94c484e1792631410f894609455d9 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Mon, 7 Mar 2022 01:36:25 +0300 Subject: [PATCH] Added a rate limiter --- api.js | 13 ++++++++++--- package-lock.json | 29 ++++++++++++++++++++++++++++- package.json | 3 ++- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/api.js b/api.js index 0d3eeed..4eaa207 100644 --- a/api.js +++ b/api.js @@ -1,13 +1,20 @@ -const { default: axios } = require('axios') +const axios = require('axios') +const { RateLimiter } = require('limiter') class Api { constructor () { this.baseUrl = 'https://api.warframe.market/v1/' - this.timeout = 0 + this.delay = process.env.API_DELAY ?? 3000 + this.limiter = new RateLimiter({ tokensPerInterval: 1, interval: Number(this.delay) }) + } + + async _get (url) { + await this.limiter.removeTokens(1) + return axios.get(url) } async getOrders (url) { - const response = await axios.get(this.baseUrl + 'items/' + url + '/orders') + const response = await this._get(this.baseUrl + 'items/' + url + '/orders') return response.data.payload.orders.filter(function (order) { return order.order_type === 'sell' && order.user.status !== 'offline' }) diff --git a/package-lock.json b/package-lock.json index f7134d8..eb907a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,8 @@ "dependencies": { "axios": "^0.26.0", "dotenv": "^16.0.0", - "handlebars": "^4.7.7" + "handlebars": "^4.7.7", + "limiter": "^2.1.0" }, "devDependencies": { "eslint-config-standard": "^16.0.3" @@ -1646,6 +1647,11 @@ "json5": "lib/cli.js" } }, + "node_modules/just-performance": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/just-performance/-/just-performance-4.3.0.tgz", + "integrity": "sha512-L7RjvtJsL0QO8xFs5wEoDDzzJwoiowRw6Rn/GnvldlchS2JQr9wFYPiwZcDfrbbujEKqKN0tvENdbjXdYhDp5Q==" + }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -1660,6 +1666,14 @@ "node": ">= 0.8.0" } }, + "node_modules/limiter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-2.1.0.tgz", + "integrity": "sha512-361TYz6iay6n+9KvUUImqdLuFigK+K79qrUtBsXhJTLdH4rIt/r1y8r1iozwh8KbZNpujbFTSh74mJ7bwbAMOw==", + "dependencies": { + "just-performance": "4.3.0" + } + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -3567,6 +3581,11 @@ "minimist": "^1.2.0" } }, + "just-performance": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/just-performance/-/just-performance-4.3.0.tgz", + "integrity": "sha512-L7RjvtJsL0QO8xFs5wEoDDzzJwoiowRw6Rn/GnvldlchS2JQr9wFYPiwZcDfrbbujEKqKN0tvENdbjXdYhDp5Q==" + }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3578,6 +3597,14 @@ "type-check": "~0.4.0" } }, + "limiter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-2.1.0.tgz", + "integrity": "sha512-361TYz6iay6n+9KvUUImqdLuFigK+K79qrUtBsXhJTLdH4rIt/r1y8r1iozwh8KbZNpujbFTSh74mJ7bwbAMOw==", + "requires": { + "just-performance": "4.3.0" + } + }, "lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", diff --git a/package.json b/package.json index 134ef6a..323379f 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "dependencies": { "axios": "^0.26.0", "dotenv": "^16.0.0", - "handlebars": "^4.7.7" + "handlebars": "^4.7.7", + "limiter": "^2.1.0" }, "devDependencies": { "eslint-config-standard": "^16.0.3"