@avijs/security 0.5.1 → 0.5.3
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/dist/rate-limit.d.ts.map +1 -1
- package/dist/rate-limit.js +12 -12
- package/dist/rate-limit.js.map +1 -1
- package/package.json +2 -2
- package/src/rate-limit.ts +12 -11
package/dist/rate-limit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjG,oGAAoG;AACpG,MAAM,WAAW,cAAc;IAC7B,iGAAiG;IACjG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/B,uDAAuD;IACvD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,yDAAyD;IACzD,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,yFAAyF;AACzF,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAuDhE;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CACzD;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,KAAK,MAAM,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAEjG,oGAAoG;AACpG,MAAM,WAAW,cAAc;IAC7B,iGAAiG;IACjG,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CACpF;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IAC/B,uDAAuD;IACvD,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAChC,yDAAyD;IACzD,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,yFAAyF;AACzF,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,WAAW,CAuDhE;AAED,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAY,SAAQ,cAAc;IACjD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAAC;CACzD;AAED,yFAAyF;AACzF,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAwBzE"}
|
package/dist/rate-limit.js
CHANGED
|
@@ -59,26 +59,26 @@ export function rateLimit(options) {
|
|
|
59
59
|
/** Counts in this process only. For several processes or servers, use a shared store. */
|
|
60
60
|
export function memoryStore(options = {}) {
|
|
61
61
|
const maxKeys = positive('maxKeys', options.maxKeys ?? 100_000);
|
|
62
|
-
//
|
|
62
|
+
// Least recently used first: every increment moves its key to the end.
|
|
63
63
|
const windows = new Map();
|
|
64
64
|
return {
|
|
65
65
|
increment(key, window) {
|
|
66
66
|
const now = Date.now();
|
|
67
67
|
const current = windows.get(key);
|
|
68
|
-
if (current && current.resetAt > now) {
|
|
69
|
-
current.count++;
|
|
70
|
-
return { count: current.count, resetAt: current.resetAt };
|
|
71
|
-
}
|
|
72
68
|
if (current)
|
|
73
69
|
windows.delete(key);
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
const entry = current && current.resetAt > now
|
|
71
|
+
? { count: current.count + 1, resetAt: current.resetAt }
|
|
72
|
+
: { count: 1, resetAt: now + window };
|
|
73
|
+
windows.set(key, entry);
|
|
74
|
+
// Over the cap, the least recently used key goes. Pushing out a key that is still in use
|
|
75
|
+
// takes more new keys than the store holds between two of its requests.
|
|
76
|
+
if (windows.size > maxKeys) {
|
|
77
|
+
const oldest = windows.keys().next();
|
|
78
|
+
if (!oldest.done)
|
|
79
|
+
windows.delete(oldest.value);
|
|
78
80
|
}
|
|
79
|
-
|
|
80
|
-
windows.set(key, fresh);
|
|
81
|
-
return { count: fresh.count, resetAt: fresh.resetAt };
|
|
81
|
+
return { count: entry.count, resetAt: entry.resetAt };
|
|
82
82
|
},
|
|
83
83
|
};
|
|
84
84
|
}
|
package/dist/rate-limit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../src/rate-limit.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avijs/security",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "CORS and security headers for Avi.js.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"avi",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"access": "public"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@avijs/http": "0.5.
|
|
45
|
+
"@avijs/http": "0.5.3"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
48
|
"typecheck": "tsc -p tsconfig.json"
|
package/src/rate-limit.ts
CHANGED
|
@@ -109,25 +109,26 @@ export interface MemoryStore extends RateLimitStore {
|
|
|
109
109
|
/** Counts in this process only. For several processes or servers, use a shared store. */
|
|
110
110
|
export function memoryStore(options: MemoryStoreOptions = {}): MemoryStore {
|
|
111
111
|
const maxKeys = positive('maxKeys', options.maxKeys ?? 100_000);
|
|
112
|
-
//
|
|
112
|
+
// Least recently used first: every increment moves its key to the end.
|
|
113
113
|
const windows = new Map<string, { count: number; resetAt: number }>();
|
|
114
114
|
|
|
115
115
|
return {
|
|
116
116
|
increment(key, window) {
|
|
117
117
|
const now = Date.now();
|
|
118
118
|
const current = windows.get(key);
|
|
119
|
-
if (current && current.resetAt > now) {
|
|
120
|
-
current.count++;
|
|
121
|
-
return { count: current.count, resetAt: current.resetAt };
|
|
122
|
-
}
|
|
123
119
|
if (current) windows.delete(key);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
const entry =
|
|
121
|
+
current && current.resetAt > now
|
|
122
|
+
? { count: current.count + 1, resetAt: current.resetAt }
|
|
123
|
+
: { count: 1, resetAt: now + window };
|
|
124
|
+
windows.set(key, entry);
|
|
125
|
+
// Over the cap, the least recently used key goes. Pushing out a key that is still in use
|
|
126
|
+
// takes more new keys than the store holds between two of its requests.
|
|
127
|
+
if (windows.size > maxKeys) {
|
|
128
|
+
const oldest = windows.keys().next();
|
|
129
|
+
if (!oldest.done) windows.delete(oldest.value);
|
|
127
130
|
}
|
|
128
|
-
|
|
129
|
-
windows.set(key, fresh);
|
|
130
|
-
return { count: fresh.count, resetAt: fresh.resetAt };
|
|
131
|
+
return { count: entry.count, resetAt: entry.resetAt };
|
|
131
132
|
},
|
|
132
133
|
};
|
|
133
134
|
}
|