@strapi/core 5.8.0 → 5.9.0
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/services/metrics/middleware.d.ts.map +1 -1
- package/dist/services/metrics/middleware.js +6 -4
- package/dist/services/metrics/middleware.js.map +1 -1
- package/dist/services/metrics/middleware.mjs +6 -4
- package/dist/services/metrics/middleware.mjs.map +1 -1
- package/dist/services/metrics/rate-limiter.d.ts.map +1 -1
- package/dist/services/metrics/rate-limiter.js +6 -3
- package/dist/services/metrics/rate-limiter.js.map +1 -1
- package/dist/services/metrics/rate-limiter.mjs +6 -3
- package/dist/services/metrics/rate-limiter.mjs.map +1 -1
- package/package.json +11 -11
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/services/metrics/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../src/services/metrics/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAWvC,QAAA,MAAM,gBAAgB,kBAAmB;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2BA4B7D,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
@@ -1,15 +1,17 @@
|
|
1
1
|
"use strict";
|
2
|
+
function nextResetDate() {
|
3
|
+
return Date.now() + 24 * 60 * 60 * 1e3;
|
4
|
+
}
|
2
5
|
const createMiddleware = ({ sendEvent }) => {
|
3
6
|
const state = {
|
4
|
-
|
7
|
+
expires: nextResetDate(),
|
5
8
|
counter: 0
|
6
9
|
};
|
7
10
|
const middleware = async (ctx, next) => {
|
8
11
|
const { url, method } = ctx.request;
|
9
12
|
if (!url.includes(".") && ["GET", "PUT", "POST", "DELETE"].includes(method)) {
|
10
|
-
|
11
|
-
|
12
|
-
state.currentDay = dayOfMonth;
|
13
|
+
if (Date.now() > state.expires) {
|
14
|
+
state.expires = nextResetDate();
|
13
15
|
state.counter = 0;
|
14
16
|
}
|
15
17
|
if (state.counter < 1e3) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"middleware.js","sources":["../../../src/services/metrics/middleware.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { Sender } from './sender';\n\ninterface State {\n
|
1
|
+
{"version":3,"file":"middleware.js","sources":["../../../src/services/metrics/middleware.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { Sender } from './sender';\n\ninterface State {\n expires: number;\n counter: number;\n}\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nconst createMiddleware = ({ sendEvent }: { sendEvent: Sender }) => {\n const state: State = {\n expires: nextResetDate(),\n counter: 0,\n };\n\n const middleware: Core.MiddlewareHandler = async (ctx, next) => {\n const { url, method } = ctx.request;\n\n if (!url.includes('.') && ['GET', 'PUT', 'POST', 'DELETE'].includes(method)) {\n if (Date.now() > state.expires) {\n state.expires = nextResetDate();\n state.counter = 0;\n }\n\n // Send max. 1000 events per day.\n if (state.counter < 1000) {\n sendEvent('didReceiveRequest', { eventProperties: { url: ctx.request.url } });\n\n // Increase counter.\n state.counter += 1;\n }\n }\n\n await next();\n };\n\n return middleware;\n};\n\nexport default createMiddleware;\n"],"names":[],"mappings":";AAQA,SAAS,gBAAwB;AAC/B,SAAO,KAAK,IAAQ,IAAA,KAAK,KAAK,KAAK;AACrC;AAEA,MAAM,mBAAmB,CAAC,EAAE,gBAAuC;AACjE,QAAM,QAAe;AAAA,IACnB,SAAS,cAAc;AAAA,IACvB,SAAS;AAAA,EACX;AAEM,QAAA,aAAqC,OAAO,KAAK,SAAS;AAC9D,UAAM,EAAE,KAAK,OAAO,IAAI,IAAI;AAE5B,QAAI,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,OAAO,QAAQ,QAAQ,EAAE,SAAS,MAAM,GAAG;AAC3E,UAAI,KAAK,QAAQ,MAAM,SAAS;AAC9B,cAAM,UAAU,cAAc;AAC9B,cAAM,UAAU;AAAA,MAAA;AAId,UAAA,MAAM,UAAU,KAAM;AACd,kBAAA,qBAAqB,EAAE,iBAAiB,EAAE,KAAK,IAAI,QAAQ,IAAI,GAAG;AAG5E,cAAM,WAAW;AAAA,MAAA;AAAA,IACnB;AAGF,UAAM,KAAK;AAAA,EACb;AAEO,SAAA;AACT;;"}
|
@@ -1,14 +1,16 @@
|
|
1
|
+
function nextResetDate() {
|
2
|
+
return Date.now() + 24 * 60 * 60 * 1e3;
|
3
|
+
}
|
1
4
|
const createMiddleware = ({ sendEvent }) => {
|
2
5
|
const state = {
|
3
|
-
|
6
|
+
expires: nextResetDate(),
|
4
7
|
counter: 0
|
5
8
|
};
|
6
9
|
const middleware = async (ctx, next) => {
|
7
10
|
const { url, method } = ctx.request;
|
8
11
|
if (!url.includes(".") && ["GET", "PUT", "POST", "DELETE"].includes(method)) {
|
9
|
-
|
10
|
-
|
11
|
-
state.currentDay = dayOfMonth;
|
12
|
+
if (Date.now() > state.expires) {
|
13
|
+
state.expires = nextResetDate();
|
12
14
|
state.counter = 0;
|
13
15
|
}
|
14
16
|
if (state.counter < 1e3) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"middleware.mjs","sources":["../../../src/services/metrics/middleware.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { Sender } from './sender';\n\ninterface State {\n
|
1
|
+
{"version":3,"file":"middleware.mjs","sources":["../../../src/services/metrics/middleware.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { Sender } from './sender';\n\ninterface State {\n expires: number;\n counter: number;\n}\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nconst createMiddleware = ({ sendEvent }: { sendEvent: Sender }) => {\n const state: State = {\n expires: nextResetDate(),\n counter: 0,\n };\n\n const middleware: Core.MiddlewareHandler = async (ctx, next) => {\n const { url, method } = ctx.request;\n\n if (!url.includes('.') && ['GET', 'PUT', 'POST', 'DELETE'].includes(method)) {\n if (Date.now() > state.expires) {\n state.expires = nextResetDate();\n state.counter = 0;\n }\n\n // Send max. 1000 events per day.\n if (state.counter < 1000) {\n sendEvent('didReceiveRequest', { eventProperties: { url: ctx.request.url } });\n\n // Increase counter.\n state.counter += 1;\n }\n }\n\n await next();\n };\n\n return middleware;\n};\n\nexport default createMiddleware;\n"],"names":[],"mappings":"AAQA,SAAS,gBAAwB;AAC/B,SAAO,KAAK,IAAQ,IAAA,KAAK,KAAK,KAAK;AACrC;AAEA,MAAM,mBAAmB,CAAC,EAAE,gBAAuC;AACjE,QAAM,QAAe;AAAA,IACnB,SAAS,cAAc;AAAA,IACvB,SAAS;AAAA,EACX;AAEM,QAAA,aAAqC,OAAO,KAAK,SAAS;AAC9D,UAAM,EAAE,KAAK,OAAO,IAAI,IAAI;AAE5B,QAAI,CAAC,IAAI,SAAS,GAAG,KAAK,CAAC,OAAO,OAAO,QAAQ,QAAQ,EAAE,SAAS,MAAM,GAAG;AAC3E,UAAI,KAAK,QAAQ,MAAM,SAAS;AAC9B,cAAM,UAAU,cAAc;AAC9B,cAAM,UAAU;AAAA,MAAA;AAId,UAAA,MAAM,UAAU,KAAM;AACd,kBAAA,qBAAqB,EAAE,iBAAiB,EAAE,KAAK,IAAI,QAAQ,IAAI,GAAG;AAG5E,cAAM,WAAW;AAAA,MAAA;AAAA,IACnB;AAGF,UAAM,KAAK;AAAA,EACb;AAEO,SAAA;AACT;"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/services/metrics/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,UAAU,OAAO;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/services/metrics/rate-limiter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,UAAU,OAAO;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;iCASuB,MAAM,sBAA0B,OAAO,aAIxC,MAAM;AAJ7B,wBAqBE"}
|
@@ -1,14 +1,17 @@
|
|
1
1
|
"use strict";
|
2
|
+
function nextResetDate() {
|
3
|
+
return Date.now() + 24 * 60 * 60 * 1e3;
|
4
|
+
}
|
2
5
|
const wrapWithRateLimit = (sender, { limitedEvents = [] } = {}) => {
|
3
|
-
let
|
6
|
+
let cacheExpiresAt = nextResetDate();
|
4
7
|
const eventCache = /* @__PURE__ */ new Map();
|
5
8
|
return async (event, ...args) => {
|
6
9
|
if (!limitedEvents.includes(event)) {
|
7
10
|
return sender(event, ...args);
|
8
11
|
}
|
9
|
-
if (
|
12
|
+
if (Date.now() > cacheExpiresAt) {
|
10
13
|
eventCache.clear();
|
11
|
-
|
14
|
+
cacheExpiresAt = nextResetDate();
|
12
15
|
}
|
13
16
|
if (eventCache.has(event)) {
|
14
17
|
return false;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sources":["../../../src/services/metrics/rate-limiter.ts"],"sourcesContent":["import type { Sender } from './sender';\n\ninterface Options {\n limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n let
|
1
|
+
{"version":3,"file":"rate-limiter.js","sources":["../../../src/services/metrics/rate-limiter.ts"],"sourcesContent":["import type { Sender } from './sender';\n\ninterface Options {\n limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n let cacheExpiresAt = nextResetDate();\n const eventCache = new Map();\n\n return async (event: string, ...args: TailParams<Sender>) => {\n if (!limitedEvents.includes(event)) {\n return sender(event, ...args);\n }\n\n if (Date.now() > cacheExpiresAt) {\n eventCache.clear();\n cacheExpiresAt = nextResetDate();\n }\n\n if (eventCache.has(event)) {\n return false;\n }\n\n eventCache.set(event, true);\n return sender(event, ...args);\n };\n};\n"],"names":[],"mappings":";AASA,SAAS,gBAAwB;AAC/B,SAAO,KAAK,IAAQ,IAAA,KAAK,KAAK,KAAK;AACrC;AAEA,MAAe,oBAAA,CAAC,QAAgB,EAAE,gBAAgB,CAAG,EAAA,IAAa,CAAA,MAAO;AACvE,MAAI,iBAAiB,cAAc;AAC7B,QAAA,iCAAiB,IAAI;AAEpB,SAAA,OAAO,UAAkB,SAA6B;AAC3D,QAAI,CAAC,cAAc,SAAS,KAAK,GAAG;AAC3B,aAAA,OAAO,OAAO,GAAG,IAAI;AAAA,IAAA;AAG1B,QAAA,KAAK,IAAI,IAAI,gBAAgB;AAC/B,iBAAW,MAAM;AACjB,uBAAiB,cAAc;AAAA,IAAA;AAG7B,QAAA,WAAW,IAAI,KAAK,GAAG;AAClB,aAAA;AAAA,IAAA;AAGE,eAAA,IAAI,OAAO,IAAI;AACnB,WAAA,OAAO,OAAO,GAAG,IAAI;AAAA,EAC9B;AACF;;"}
|
@@ -1,13 +1,16 @@
|
|
1
|
+
function nextResetDate() {
|
2
|
+
return Date.now() + 24 * 60 * 60 * 1e3;
|
3
|
+
}
|
1
4
|
const wrapWithRateLimit = (sender, { limitedEvents = [] } = {}) => {
|
2
|
-
let
|
5
|
+
let cacheExpiresAt = nextResetDate();
|
3
6
|
const eventCache = /* @__PURE__ */ new Map();
|
4
7
|
return async (event, ...args) => {
|
5
8
|
if (!limitedEvents.includes(event)) {
|
6
9
|
return sender(event, ...args);
|
7
10
|
}
|
8
|
-
if (
|
11
|
+
if (Date.now() > cacheExpiresAt) {
|
9
12
|
eventCache.clear();
|
10
|
-
|
13
|
+
cacheExpiresAt = nextResetDate();
|
11
14
|
}
|
12
15
|
if (eventCache.has(event)) {
|
13
16
|
return false;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rate-limiter.mjs","sources":["../../../src/services/metrics/rate-limiter.ts"],"sourcesContent":["import type { Sender } from './sender';\n\ninterface Options {\n limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n let
|
1
|
+
{"version":3,"file":"rate-limiter.mjs","sources":["../../../src/services/metrics/rate-limiter.ts"],"sourcesContent":["import type { Sender } from './sender';\n\ninterface Options {\n limitedEvents?: string[];\n}\n\ntype TailParams<T extends (...args: any[]) => any> =\n Parameters<T> extends [unknown, ...infer U] ? U : never;\n\nfunction nextResetDate(): number {\n return Date.now() + 24 * 60 * 60 * 1000; // Now + 24 hours.\n}\n\nexport default (sender: Sender, { limitedEvents = [] }: Options = {}) => {\n let cacheExpiresAt = nextResetDate();\n const eventCache = new Map();\n\n return async (event: string, ...args: TailParams<Sender>) => {\n if (!limitedEvents.includes(event)) {\n return sender(event, ...args);\n }\n\n if (Date.now() > cacheExpiresAt) {\n eventCache.clear();\n cacheExpiresAt = nextResetDate();\n }\n\n if (eventCache.has(event)) {\n return false;\n }\n\n eventCache.set(event, true);\n return sender(event, ...args);\n };\n};\n"],"names":[],"mappings":"AASA,SAAS,gBAAwB;AAC/B,SAAO,KAAK,IAAQ,IAAA,KAAK,KAAK,KAAK;AACrC;AAEA,MAAe,oBAAA,CAAC,QAAgB,EAAE,gBAAgB,CAAG,EAAA,IAAa,CAAA,MAAO;AACvE,MAAI,iBAAiB,cAAc;AAC7B,QAAA,iCAAiB,IAAI;AAEpB,SAAA,OAAO,UAAkB,SAA6B;AAC3D,QAAI,CAAC,cAAc,SAAS,KAAK,GAAG;AAC3B,aAAA,OAAO,OAAO,GAAG,IAAI;AAAA,IAAA;AAG1B,QAAA,KAAK,IAAI,IAAI,gBAAgB;AAC/B,iBAAW,MAAM;AACjB,uBAAiB,cAAc;AAAA,IAAA;AAG7B,QAAA,WAAW,IAAI,KAAK,GAAG;AAClB,aAAA;AAAA,IAAA;AAGE,eAAA,IAAI,OAAO,IAAI;AACnB,WAAA,OAAO,OAAO,GAAG,IAAI;AAAA,EAC9B;AACF;"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@strapi/core",
|
3
|
-
"version": "5.
|
3
|
+
"version": "5.9.0",
|
4
4
|
"description": "Core of Strapi",
|
5
5
|
"homepage": "https://strapi.io",
|
6
6
|
"bugs": {
|
@@ -55,15 +55,15 @@
|
|
55
55
|
"@koa/cors": "5.0.0",
|
56
56
|
"@koa/router": "12.0.2",
|
57
57
|
"@paralleldrive/cuid2": "2.2.2",
|
58
|
-
"@strapi/admin": "5.
|
59
|
-
"@strapi/database": "5.
|
60
|
-
"@strapi/generators": "5.
|
61
|
-
"@strapi/logger": "5.
|
58
|
+
"@strapi/admin": "5.9.0",
|
59
|
+
"@strapi/database": "5.9.0",
|
60
|
+
"@strapi/generators": "5.9.0",
|
61
|
+
"@strapi/logger": "5.9.0",
|
62
62
|
"@strapi/pack-up": "5.0.2",
|
63
|
-
"@strapi/permissions": "5.
|
64
|
-
"@strapi/types": "5.
|
65
|
-
"@strapi/typescript-utils": "5.
|
66
|
-
"@strapi/utils": "5.
|
63
|
+
"@strapi/permissions": "5.9.0",
|
64
|
+
"@strapi/types": "5.9.0",
|
65
|
+
"@strapi/typescript-utils": "5.9.0",
|
66
|
+
"@strapi/utils": "5.9.0",
|
67
67
|
"bcryptjs": "2.4.3",
|
68
68
|
"boxen": "5.1.2",
|
69
69
|
"chalk": "4.1.2",
|
@@ -126,9 +126,9 @@
|
|
126
126
|
"@types/node": "18.19.24",
|
127
127
|
"@types/node-schedule": "2.1.7",
|
128
128
|
"@types/statuses": "2.0.1",
|
129
|
-
"eslint-config-custom": "5.
|
129
|
+
"eslint-config-custom": "5.9.0",
|
130
130
|
"supertest": "6.3.3",
|
131
|
-
"tsconfig": "5.
|
131
|
+
"tsconfig": "5.9.0"
|
132
132
|
},
|
133
133
|
"engines": {
|
134
134
|
"node": ">=18.0.0 <=22.x.x",
|