rate-limiter-flexible 8.3.0 → 9.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -154,15 +154,23 @@ class RateLimiterDynamo extends RateLimiterStoreAbstract {
154
154
  };
155
155
 
156
156
  const data = await this.client.getItem(params);
157
- if(data.Item) {
158
- return new DynamoItem(
157
+
158
+ if (!data.Item) {
159
+ return null;
160
+ }
161
+
162
+ const item = new DynamoItem(
159
163
  data.Item.key.S,
160
164
  Number(data.Item.points.N),
161
165
  Number(data.Item.expire.N)
162
166
  );
163
- } else {
164
- return null;
165
- }
167
+
168
+ const dateNowSec = Date.now() / 1000;
169
+
170
+ if (item.expire !== -1 && item.expire <= dateNowSec) {
171
+ return null;
172
+ }
173
+ return item;
166
174
  }
167
175
 
168
176
  /**
@@ -1,34 +1,6 @@
1
1
  const RateLimiterStoreAbstract = require('./RateLimiterStoreAbstract');
2
2
  const RateLimiterRes = require('./RateLimiterRes');
3
3
 
4
- /**
5
- * Get MongoDB driver version as upsert options differ
6
- * @params {Object} Client instance
7
- * @returns {Object} Version Object containing major, feature & minor versions.
8
- */
9
- function getDriverVersion(client) {
10
- try {
11
- const _client = client.client ? client.client : client;
12
-
13
- let _v = [0, 0, 0];
14
- if (typeof _client.topology === 'undefined') {
15
- const { version } = _client.options.metadata.driver;
16
- _v = version.split('|', 1)[0].split('.').map(v => parseInt(v));
17
- } else {
18
- const { version } = _client.topology.s.options.metadata.driver;
19
- _v = version.split('.').map(v => parseInt(v));
20
- }
21
-
22
- return {
23
- major: _v[0],
24
- feature: _v[1],
25
- patch: _v[2],
26
- };
27
- } catch (err) {
28
- return { major: 0, feature: 0, patch: 0 };
29
- }
30
- }
31
-
32
4
  class RateLimiterMongo extends RateLimiterStoreAbstract {
33
5
  /**
34
6
  *
@@ -59,11 +31,9 @@ class RateLimiterMongo extends RateLimiterStoreAbstract {
59
31
  .then((conn) => {
60
32
  this.client = conn;
61
33
  this._initCollection();
62
- this._driverVersion = getDriverVersion(this.client);
63
34
  });
64
35
  } else {
65
36
  this._initCollection();
66
- this._driverVersion = getDriverVersion(this.client);
67
37
  }
68
38
  }
69
39
 
@@ -198,20 +168,11 @@ class RateLimiterMongo extends RateLimiterStoreAbstract {
198
168
  upsertData.$setOnInsert = Object.assign(upsertData.$setOnInsert, docAttrs);
199
169
  }
200
170
 
201
- // Options for collection updates differ between driver versions
171
+ // All supported MongoDB drivers (3.6.7+) use returnDocument: 'after'
202
172
  const upsertOptions = {
203
173
  upsert: true,
174
+ returnDocument: 'after',
204
175
  };
205
- if ((this._driverVersion.major >= 4) ||
206
- (this._driverVersion.major === 3 &&
207
- (this._driverVersion.feature >=7) ||
208
- (this._driverVersion.feature >= 6 &&
209
- this._driverVersion.patch >= 7 )))
210
- {
211
- upsertOptions.returnDocument = 'after';
212
- } else {
213
- upsertOptions.returnOriginal = false;
214
- }
215
176
 
216
177
  /*
217
178
  * 1. Find actual limit and increment points
@@ -3,14 +3,18 @@ const MAX_QUEUE_SIZE = 4294967295;
3
3
  const KEY_DEFAULT = 'limiter';
4
4
 
5
5
  module.exports = class RateLimiterQueue {
6
- constructor(limiterFlexible, opts = {
7
- maxQueueSize: MAX_QUEUE_SIZE,
8
- }) {
6
+ constructor(limiterFlexible, opts = {}) {
7
+ const maxQueueSize =
8
+ opts.maxQueueSize !== undefined ? opts.maxQueueSize : MAX_QUEUE_SIZE;
9
9
  this._queueLimiters = {
10
- KEY_DEFAULT: new RateLimiterQueueInternal(limiterFlexible, opts)
10
+ KEY_DEFAULT: new RateLimiterQueueInternal(limiterFlexible, {
11
+ ...opts,
12
+ maxQueueSize,
13
+ key: KEY_DEFAULT
14
+ }),
11
15
  };
12
16
  this._limiterFlexible = limiterFlexible;
13
- this._maxQueueSize = opts.maxQueueSize
17
+ this._maxQueueSize = maxQueueSize;
14
18
  }
15
19
 
16
20
  getTokensRemaining(key = KEY_DEFAULT) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rate-limiter-flexible",
3
- "version": "8.3.0",
3
+ "version": "9.0.1",
4
4
  "description": "Node.js atomic and non-atomic counters, rate limiting tools, protection from DoS and brute-force attacks at scale",
5
5
  "main": "index.js",
6
6
  "scripts": {