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.
- package/lib/RateLimiterDynamo.js +13 -5
- package/lib/RateLimiterMongo.js +2 -41
- package/lib/RateLimiterQueue.js +9 -5
- package/package.json +1 -1
package/lib/RateLimiterDynamo.js
CHANGED
|
@@ -154,15 +154,23 @@ class RateLimiterDynamo extends RateLimiterStoreAbstract {
|
|
|
154
154
|
};
|
|
155
155
|
|
|
156
156
|
const data = await this.client.getItem(params);
|
|
157
|
-
|
|
158
|
-
|
|
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
|
-
|
|
164
|
-
|
|
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
|
/**
|
package/lib/RateLimiterMongo.js
CHANGED
|
@@ -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
|
-
//
|
|
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
|
package/lib/RateLimiterQueue.js
CHANGED
|
@@ -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
|
|
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,
|
|
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 =
|
|
17
|
+
this._maxQueueSize = maxQueueSize;
|
|
14
18
|
}
|
|
15
19
|
|
|
16
20
|
getTokensRemaining(key = KEY_DEFAULT) {
|
package/package.json
CHANGED