@strapi/core 5.47.0 → 5.47.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/dist/Strapi.d.ts.map +1 -1
- package/dist/Strapi.js +12 -3
- package/dist/Strapi.js.map +1 -1
- package/dist/Strapi.mjs +12 -3
- package/dist/Strapi.mjs.map +1 -1
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +12 -5
- package/dist/compile.js.map +1 -1
- package/dist/compile.mjs +12 -5
- package/dist/compile.mjs.map +1 -1
- package/dist/middlewares/session.d.ts +2 -2
- package/dist/middlewares/session.d.ts.map +1 -1
- package/dist/middlewares/session.js +1 -1
- package/dist/middlewares/session.js.map +1 -1
- package/dist/middlewares/session.mjs +2 -2
- package/dist/middlewares/session.mjs.map +1 -1
- package/dist/package.json.js +14 -15
- package/dist/package.json.js.map +1 -1
- package/dist/package.json.mjs +14 -15
- package/dist/package.json.mjs.map +1 -1
- package/dist/providers/session-manager.d.ts.map +1 -1
- package/dist/providers/session-manager.js +3 -0
- package/dist/providers/session-manager.js.map +1 -1
- package/dist/providers/session-manager.mjs +3 -0
- package/dist/providers/session-manager.mjs.map +1 -1
- package/dist/services/cron.d.ts +1 -1
- package/dist/services/cron.d.ts.map +1 -1
- package/dist/services/cron.js +10 -2
- package/dist/services/cron.js.map +1 -1
- package/dist/services/cron.mjs +10 -2
- package/dist/services/cron.mjs.map +1 -1
- package/dist/services/mcp/index.d.ts.map +1 -1
- package/dist/services/mcp/index.js +3 -3
- package/dist/services/mcp/index.js.map +1 -1
- package/dist/services/mcp/index.mjs +3 -3
- package/dist/services/mcp/index.mjs.map +1 -1
- package/dist/services/metrics/index.d.ts.map +1 -1
- package/dist/services/metrics/index.js +6 -5
- package/dist/services/metrics/index.js.map +1 -1
- package/dist/services/metrics/index.mjs +6 -5
- package/dist/services/metrics/index.mjs.map +1 -1
- package/dist/services/metrics/sender.d.ts.map +1 -1
- package/dist/services/metrics/sender.js +11 -3
- package/dist/services/metrics/sender.js.map +1 -1
- package/dist/services/metrics/sender.mjs +11 -3
- package/dist/services/metrics/sender.mjs.map +1 -1
- package/package.json +14 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.mjs","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport
|
|
1
|
+
{"version":3,"file":"session.mjs","sources":["../../src/middlewares/session.ts"],"sourcesContent":["import { isEmpty, isArray } from 'lodash/fp';\nimport { type SessionOptions, createSession } from 'koa-session';\nimport type { Core } from '@strapi/types';\n\nconst defaultConfig = {\n key: 'koa.sess',\n maxAge: 86400000,\n autoCommit: true,\n overwrite: true,\n httpOnly: true,\n signed: true,\n rolling: false,\n renew: false,\n secure: process.env.NODE_ENV === 'production',\n sameSite: undefined,\n};\n\nexport const session: Core.MiddlewareFactory<Partial<SessionOptions>> = (\n userConfig,\n { strapi }\n) => {\n const { keys } = strapi.server.app;\n if (!isArray(keys) || isEmpty(keys) || keys.some(isEmpty)) {\n throw new Error(\n `App keys are required. Please set app.keys in config/server.js (ex: keys: ['myKeyA', 'myKeyB'])`\n );\n }\n\n const config: Partial<SessionOptions> = { ...defaultConfig, ...userConfig };\n\n strapi.server.use(createSession(config, strapi.server.app));\n};\n"],"names":["defaultConfig","key","maxAge","autoCommit","overwrite","httpOnly","signed","rolling","renew","secure","process","env","NODE_ENV","sameSite","undefined","session","userConfig","strapi","keys","server","app","isArray","isEmpty","some","Error","config","use","createSession"],"mappings":";;;AAIA,MAAMA,aAAAA,GAAgB;IACpBC,GAAAA,EAAK,UAAA;IACLC,MAAAA,EAAQ,QAAA;IACRC,UAAAA,EAAY,IAAA;IACZC,SAAAA,EAAW,IAAA;IACXC,QAAAA,EAAU,IAAA;IACVC,MAAAA,EAAQ,IAAA;IACRC,OAAAA,EAAS,KAAA;IACTC,KAAAA,EAAO,KAAA;AACPC,IAAAA,MAAAA,EAAQC,OAAAA,CAAQC,GAAG,CAACC,QAAQ,KAAK,YAAA;IACjCC,QAAAA,EAAUC;AACZ,CAAA;MAEaC,OAAAA,GAA2D,CACtEC,UAAAA,EACA,EAAEC,MAAM,EAAE,GAAA;AAEV,IAAA,MAAM,EAAEC,IAAI,EAAE,GAAGD,MAAAA,CAAOE,MAAM,CAACC,GAAG;IAClC,IAAI,CAACC,QAAQH,IAAAA,CAAAA,IAASI,OAAAA,CAAQJ,SAASA,IAAAA,CAAKK,IAAI,CAACD,OAAAA,CAAAA,EAAU;AACzD,QAAA,MAAM,IAAIE,KAAAA,CACR,CAAC,+FAA+F,CAAC,CAAA;AAErG,IAAA;AAEA,IAAA,MAAMC,MAAAA,GAAkC;AAAE,QAAA,GAAGzB,aAAa;AAAE,QAAA,GAAGgB;AAAW,KAAA;IAE1EC,MAAAA,CAAOE,MAAM,CAACO,GAAG,CAACC,cAAcF,MAAAA,EAAQR,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAA,CAAA;AAC3D;;;;"}
|
package/dist/package.json.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var name = "@strapi/core";
|
|
6
|
-
var version = "5.47.
|
|
6
|
+
var version = "5.47.1";
|
|
7
7
|
var description = "Core of Strapi";
|
|
8
8
|
var homepage = "https://strapi.io";
|
|
9
9
|
var bugs = {
|
|
@@ -64,14 +64,14 @@ var dependencies = {
|
|
|
64
64
|
"@koa/router": "12.0.2",
|
|
65
65
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
66
66
|
"@paralleldrive/cuid2": "2.2.2",
|
|
67
|
-
"@strapi/admin": "5.47.
|
|
68
|
-
"@strapi/database": "5.47.
|
|
69
|
-
"@strapi/generators": "5.47.
|
|
70
|
-
"@strapi/logger": "5.47.
|
|
71
|
-
"@strapi/permissions": "5.47.
|
|
72
|
-
"@strapi/types": "5.47.
|
|
73
|
-
"@strapi/typescript-utils": "5.47.
|
|
74
|
-
"@strapi/utils": "5.47.
|
|
67
|
+
"@strapi/admin": "5.47.1",
|
|
68
|
+
"@strapi/database": "5.47.1",
|
|
69
|
+
"@strapi/generators": "5.47.1",
|
|
70
|
+
"@strapi/logger": "5.47.1",
|
|
71
|
+
"@strapi/permissions": "5.47.1",
|
|
72
|
+
"@strapi/types": "5.47.1",
|
|
73
|
+
"@strapi/typescript-utils": "5.47.1",
|
|
74
|
+
"@strapi/utils": "5.47.1",
|
|
75
75
|
"@vercel/stega": "0.1.2",
|
|
76
76
|
bcryptjs: "2.4.3",
|
|
77
77
|
boxen: "5.1.2",
|
|
@@ -99,7 +99,7 @@ var dependencies = {
|
|
|
99
99
|
"koa-favicon": "2.1.0",
|
|
100
100
|
"koa-helmet": "7.0.2",
|
|
101
101
|
"koa-ip": "^2.1.3",
|
|
102
|
-
"koa-session": "
|
|
102
|
+
"koa-session": "7.0.2",
|
|
103
103
|
"koa-static": "5.0.0",
|
|
104
104
|
lodash: "4.18.1",
|
|
105
105
|
"mime-types": "2.1.35",
|
|
@@ -108,7 +108,7 @@ var dependencies = {
|
|
|
108
108
|
ora: "5.4.1",
|
|
109
109
|
"package-json": "7.0.0",
|
|
110
110
|
"pkg-up": "3.1.0",
|
|
111
|
-
qs: "6.15.
|
|
111
|
+
qs: "6.15.2",
|
|
112
112
|
"resolve.exports": "2.0.2",
|
|
113
113
|
semver: "7.7.4",
|
|
114
114
|
statuses: "2.0.1",
|
|
@@ -130,7 +130,6 @@ var devDependencies = {
|
|
|
130
130
|
"@types/json-logic-js": "2.0.8",
|
|
131
131
|
"@types/koa": "2.13.4",
|
|
132
132
|
"@types/koa-compress": "4.0.3",
|
|
133
|
-
"@types/koa-session": "6.4.1",
|
|
134
133
|
"@types/koa-static": "4.0.2",
|
|
135
134
|
"@types/koa__router": "12.0.0",
|
|
136
135
|
"@types/lodash": "^4.14.191",
|
|
@@ -138,11 +137,11 @@ var devDependencies = {
|
|
|
138
137
|
"@types/node": "24.10.0",
|
|
139
138
|
"@types/node-schedule": "2.1.7",
|
|
140
139
|
"@types/statuses": "2.0.1",
|
|
141
|
-
"eslint-config-custom": "5.47.
|
|
140
|
+
"eslint-config-custom": "5.47.1",
|
|
142
141
|
supertest: "7.2.2",
|
|
143
|
-
tsconfig: "5.47.
|
|
142
|
+
tsconfig: "5.47.1",
|
|
144
143
|
vitest: "catalog:",
|
|
145
|
-
"vitest-config": "5.47.
|
|
144
|
+
"vitest-config": "5.47.1"
|
|
146
145
|
};
|
|
147
146
|
var engines = {
|
|
148
147
|
node: ">=20.0.0 <=24.x.x",
|
package/dist/package.json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/package.json.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
var name = "@strapi/core";
|
|
2
|
-
var version = "5.47.
|
|
2
|
+
var version = "5.47.1";
|
|
3
3
|
var description = "Core of Strapi";
|
|
4
4
|
var homepage = "https://strapi.io";
|
|
5
5
|
var bugs = {
|
|
@@ -60,14 +60,14 @@ var dependencies = {
|
|
|
60
60
|
"@koa/router": "12.0.2",
|
|
61
61
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
62
62
|
"@paralleldrive/cuid2": "2.2.2",
|
|
63
|
-
"@strapi/admin": "5.47.
|
|
64
|
-
"@strapi/database": "5.47.
|
|
65
|
-
"@strapi/generators": "5.47.
|
|
66
|
-
"@strapi/logger": "5.47.
|
|
67
|
-
"@strapi/permissions": "5.47.
|
|
68
|
-
"@strapi/types": "5.47.
|
|
69
|
-
"@strapi/typescript-utils": "5.47.
|
|
70
|
-
"@strapi/utils": "5.47.
|
|
63
|
+
"@strapi/admin": "5.47.1",
|
|
64
|
+
"@strapi/database": "5.47.1",
|
|
65
|
+
"@strapi/generators": "5.47.1",
|
|
66
|
+
"@strapi/logger": "5.47.1",
|
|
67
|
+
"@strapi/permissions": "5.47.1",
|
|
68
|
+
"@strapi/types": "5.47.1",
|
|
69
|
+
"@strapi/typescript-utils": "5.47.1",
|
|
70
|
+
"@strapi/utils": "5.47.1",
|
|
71
71
|
"@vercel/stega": "0.1.2",
|
|
72
72
|
bcryptjs: "2.4.3",
|
|
73
73
|
boxen: "5.1.2",
|
|
@@ -95,7 +95,7 @@ var dependencies = {
|
|
|
95
95
|
"koa-favicon": "2.1.0",
|
|
96
96
|
"koa-helmet": "7.0.2",
|
|
97
97
|
"koa-ip": "^2.1.3",
|
|
98
|
-
"koa-session": "
|
|
98
|
+
"koa-session": "7.0.2",
|
|
99
99
|
"koa-static": "5.0.0",
|
|
100
100
|
lodash: "4.18.1",
|
|
101
101
|
"mime-types": "2.1.35",
|
|
@@ -104,7 +104,7 @@ var dependencies = {
|
|
|
104
104
|
ora: "5.4.1",
|
|
105
105
|
"package-json": "7.0.0",
|
|
106
106
|
"pkg-up": "3.1.0",
|
|
107
|
-
qs: "6.15.
|
|
107
|
+
qs: "6.15.2",
|
|
108
108
|
"resolve.exports": "2.0.2",
|
|
109
109
|
semver: "7.7.4",
|
|
110
110
|
statuses: "2.0.1",
|
|
@@ -126,7 +126,6 @@ var devDependencies = {
|
|
|
126
126
|
"@types/json-logic-js": "2.0.8",
|
|
127
127
|
"@types/koa": "2.13.4",
|
|
128
128
|
"@types/koa-compress": "4.0.3",
|
|
129
|
-
"@types/koa-session": "6.4.1",
|
|
130
129
|
"@types/koa-static": "4.0.2",
|
|
131
130
|
"@types/koa__router": "12.0.0",
|
|
132
131
|
"@types/lodash": "^4.14.191",
|
|
@@ -134,11 +133,11 @@ var devDependencies = {
|
|
|
134
133
|
"@types/node": "24.10.0",
|
|
135
134
|
"@types/node-schedule": "2.1.7",
|
|
136
135
|
"@types/statuses": "2.0.1",
|
|
137
|
-
"eslint-config-custom": "5.47.
|
|
136
|
+
"eslint-config-custom": "5.47.1",
|
|
138
137
|
supertest: "7.2.2",
|
|
139
|
-
tsconfig: "5.47.
|
|
138
|
+
tsconfig: "5.47.1",
|
|
140
139
|
vitest: "catalog:",
|
|
141
|
-
"vitest-config": "5.47.
|
|
140
|
+
"vitest-config": "5.47.1"
|
|
142
141
|
};
|
|
143
142
|
var engines = {
|
|
144
143
|
node: ">=20.0.0 <=24.x.x",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"package.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/providers/session-manager.ts"],"names":[],"mappings":";AAIA,
|
|
1
|
+
{"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/providers/session-manager.ts"],"names":[],"mappings":";AAIA,wBAuBG"}
|
|
@@ -10,6 +10,9 @@ var sessionManager = provider.defineProvider({
|
|
|
10
10
|
}));
|
|
11
11
|
},
|
|
12
12
|
async bootstrap (strapi) {
|
|
13
|
+
if (strapi.config.get('admin.serveAdminPanel') === false) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
13
16
|
const adminAuth = strapi.config.get('admin.auth');
|
|
14
17
|
const jwtSecret = adminAuth?.secret;
|
|
15
18
|
if (!jwtSecret) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.js","sources":["../../src/providers/session-manager.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { defineProvider } from './provider';\nimport { createSessionManager } from '../services/session-manager';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('sessionManager', () =>\n createSessionManager({\n db: strapi.db,\n })\n );\n },\n\n async bootstrap(strapi) {\n const adminAuth = strapi.config.get<Core.Config.Admin['auth']>('admin.auth');\n const jwtSecret = adminAuth?.secret;\n\n if (!jwtSecret) {\n throw new Error(\n 'Missing admin.auth.secret configuration. The SessionManager requires a JWT secret'\n );\n }\n },\n});\n"],"names":["defineProvider","init","strapi","add","createSessionManager","db","bootstrap","
|
|
1
|
+
{"version":3,"file":"session-manager.js","sources":["../../src/providers/session-manager.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { defineProvider } from './provider';\nimport { createSessionManager } from '../services/session-manager';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('sessionManager', () =>\n createSessionManager({\n db: strapi.db,\n })\n );\n },\n\n async bootstrap(strapi) {\n if (strapi.config.get('admin.serveAdminPanel') === false) {\n return;\n }\n\n const adminAuth = strapi.config.get<Core.Config.Admin['auth']>('admin.auth');\n const jwtSecret = adminAuth?.secret;\n\n if (!jwtSecret) {\n throw new Error(\n 'Missing admin.auth.secret configuration. The SessionManager requires a JWT secret'\n );\n }\n },\n});\n"],"names":["defineProvider","init","strapi","add","createSessionManager","db","bootstrap","config","get","adminAuth","jwtSecret","secret","Error"],"mappings":";;;;;AAIA,qBAAeA,uBAAAA,CAAe;AAC5BC,IAAAA,IAAAA,CAAAA,CAAKC,MAAM,EAAA;AACTA,QAAAA,MAAAA,CAAOC,GAAG,CAAC,gBAAA,EAAkB,IAC3BC,qCAAAA,CAAqB;AACnBC,gBAAAA,EAAAA,EAAIH,OAAOG;AACb,aAAA,CAAA,CAAA;AAEJ,IAAA,CAAA;AAEA,IAAA,MAAMC,WAAUJ,MAAM,EAAA;AACpB,QAAA,IAAIA,OAAOK,MAAM,CAACC,GAAG,CAAC,6BAA6B,KAAA,EAAO;AACxD,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,SAAAA,GAAYP,MAAAA,CAAOK,MAAM,CAACC,GAAG,CAA4B,YAAA,CAAA;AAC/D,QAAA,MAAME,YAAYD,SAAAA,EAAWE,MAAAA;AAE7B,QAAA,IAAI,CAACD,SAAAA,EAAW;AACd,YAAA,MAAM,IAAIE,KAAAA,CACR,mFAAA,CAAA;AAEJ,QAAA;AACF,IAAA;AACF,CAAA,CAAA;;;;"}
|
|
@@ -8,6 +8,9 @@ var sessionManager = defineProvider({
|
|
|
8
8
|
}));
|
|
9
9
|
},
|
|
10
10
|
async bootstrap (strapi) {
|
|
11
|
+
if (strapi.config.get('admin.serveAdminPanel') === false) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
11
14
|
const adminAuth = strapi.config.get('admin.auth');
|
|
12
15
|
const jwtSecret = adminAuth?.secret;
|
|
13
16
|
if (!jwtSecret) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-manager.mjs","sources":["../../src/providers/session-manager.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { defineProvider } from './provider';\nimport { createSessionManager } from '../services/session-manager';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('sessionManager', () =>\n createSessionManager({\n db: strapi.db,\n })\n );\n },\n\n async bootstrap(strapi) {\n const adminAuth = strapi.config.get<Core.Config.Admin['auth']>('admin.auth');\n const jwtSecret = adminAuth?.secret;\n\n if (!jwtSecret) {\n throw new Error(\n 'Missing admin.auth.secret configuration. The SessionManager requires a JWT secret'\n );\n }\n },\n});\n"],"names":["defineProvider","init","strapi","add","createSessionManager","db","bootstrap","
|
|
1
|
+
{"version":3,"file":"session-manager.mjs","sources":["../../src/providers/session-manager.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { defineProvider } from './provider';\nimport { createSessionManager } from '../services/session-manager';\n\nexport default defineProvider({\n init(strapi) {\n strapi.add('sessionManager', () =>\n createSessionManager({\n db: strapi.db,\n })\n );\n },\n\n async bootstrap(strapi) {\n if (strapi.config.get('admin.serveAdminPanel') === false) {\n return;\n }\n\n const adminAuth = strapi.config.get<Core.Config.Admin['auth']>('admin.auth');\n const jwtSecret = adminAuth?.secret;\n\n if (!jwtSecret) {\n throw new Error(\n 'Missing admin.auth.secret configuration. The SessionManager requires a JWT secret'\n );\n }\n },\n});\n"],"names":["defineProvider","init","strapi","add","createSessionManager","db","bootstrap","config","get","adminAuth","jwtSecret","secret","Error"],"mappings":";;;AAIA,qBAAeA,cAAAA,CAAe;AAC5BC,IAAAA,IAAAA,CAAAA,CAAKC,MAAM,EAAA;AACTA,QAAAA,MAAAA,CAAOC,GAAG,CAAC,gBAAA,EAAkB,IAC3BC,oBAAAA,CAAqB;AACnBC,gBAAAA,EAAAA,EAAIH,OAAOG;AACb,aAAA,CAAA,CAAA;AAEJ,IAAA,CAAA;AAEA,IAAA,MAAMC,WAAUJ,MAAM,EAAA;AACpB,QAAA,IAAIA,OAAOK,MAAM,CAACC,GAAG,CAAC,6BAA6B,KAAA,EAAO;AACxD,YAAA;AACF,QAAA;AAEA,QAAA,MAAMC,SAAAA,GAAYP,MAAAA,CAAOK,MAAM,CAACC,GAAG,CAA4B,YAAA,CAAA;AAC/D,QAAA,MAAME,YAAYD,SAAAA,EAAWE,MAAAA;AAE7B,QAAA,IAAI,CAACD,SAAAA,EAAW;AACd,YAAA,MAAM,IAAIE,KAAAA,CACR,mFAAA,CAAA;AAEJ,QAAA;AACF,IAAA;AACF,CAAA,CAAA;;;;"}
|
package/dist/services/cron.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cron.d.ts","sourceRoot":"","sources":["../../src/services/cron.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAY1C,UAAU,OAAO;IACf,GAAG,EAAE,GAAG,CAAC;IACT,OAAO,EAAE,IAAI,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,KAAK,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE5F,KAAK,IAAI,GACL,MAAM,GACN;IACE,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;CACf,CAAC;AAEN,UAAU,KAAK;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,QAAA,MAAM,iBAAiB;gBAKR,KAAK;iBAuCH,MAAM;;;;;CAgCtB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
package/dist/services/cron.js
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var nodeSchedule = require('node-schedule');
|
|
4
3
|
var fp = require('lodash/fp');
|
|
5
4
|
|
|
5
|
+
// Lazy: only required when a cron task is actually scheduled
|
|
6
|
+
let lazyNs;
|
|
7
|
+
const ns = ()=>{
|
|
8
|
+
if (!lazyNs) {
|
|
9
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
10
|
+
lazyNs = require('node-schedule');
|
|
11
|
+
}
|
|
12
|
+
return lazyNs;
|
|
13
|
+
};
|
|
6
14
|
const createCronService = ()=>{
|
|
7
15
|
let jobsSpecs = [];
|
|
8
16
|
let running = false;
|
|
@@ -30,7 +38,7 @@ const createCronService = ()=>{
|
|
|
30
38
|
strapi
|
|
31
39
|
}, ...args);
|
|
32
40
|
// const job = new Job(null, fnWithStrapi);
|
|
33
|
-
const job = new
|
|
41
|
+
const job = new (ns()).Job(fnWithStrapi);
|
|
34
42
|
job.on('error', (error)=>{
|
|
35
43
|
strapi.log.error(`Cron job "${taskName ?? taskExpression}" failed`, error);
|
|
36
44
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n job.on('error', (error) => {\n strapi.log.error(`Cron job \"${taskName ?? taskExpression}\" failed`, error);\n });\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }, index) => {\n if (jobSpecName === name) {\n jobsSpecs.splice(index, 1);\n return true;\n }\n return false;\n });\n matchingJobsSpecs.forEach(({ job }) => job.cancel());\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["createCronService","jobsSpecs","running","add","tasks","taskExpression","Object","keys","taskValue","fn","options","taskName","isFunction","bind","task","Error","fnWithStrapi","args","strapi","job","Job","on","error","log","push","name","schedule","remove","matchingJobsSpecs","filter","jobSpecName","index","splice","forEach","cancel","start","stop","destroy","jobs"],"mappings":"
|
|
1
|
+
{"version":3,"file":"cron.js","sources":["../../src/services/cron.ts"],"sourcesContent":["import type { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\n// Lazy: only required when a cron task is actually scheduled\nlet lazyNs: typeof import('node-schedule') | undefined;\nconst ns = (): typeof import('node-schedule') => {\n if (!lazyNs) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyNs = require('node-schedule');\n }\n return lazyNs as typeof import('node-schedule');\n};\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job: Job = new (ns().Job)(fnWithStrapi);\n job.on('error', (error) => {\n strapi.log.error(`Cron job \"${taskName ?? taskExpression}\" failed`, error);\n });\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }, index) => {\n if (jobSpecName === name) {\n jobsSpecs.splice(index, 1);\n return true;\n }\n return false;\n });\n matchingJobsSpecs.forEach(({ job }) => job.cancel());\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["lazyNs","ns","require","createCronService","jobsSpecs","running","add","tasks","taskExpression","Object","keys","taskValue","fn","options","taskName","isFunction","bind","task","Error","fnWithStrapi","args","strapi","job","Job","on","error","log","push","name","schedule","remove","matchingJobsSpecs","filter","jobSpecName","index","splice","forEach","cancel","start","stop","destroy","jobs"],"mappings":"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"}
|
package/dist/services/cron.mjs
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
import { Job } from 'node-schedule';
|
|
2
1
|
import { isFunction } from 'lodash/fp';
|
|
3
2
|
|
|
3
|
+
// Lazy: only required when a cron task is actually scheduled
|
|
4
|
+
let lazyNs;
|
|
5
|
+
const ns = ()=>{
|
|
6
|
+
if (!lazyNs) {
|
|
7
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
8
|
+
lazyNs = require('node-schedule');
|
|
9
|
+
}
|
|
10
|
+
return lazyNs;
|
|
11
|
+
};
|
|
4
12
|
const createCronService = ()=>{
|
|
5
13
|
let jobsSpecs = [];
|
|
6
14
|
let running = false;
|
|
@@ -28,7 +36,7 @@ const createCronService = ()=>{
|
|
|
28
36
|
strapi
|
|
29
37
|
}, ...args);
|
|
30
38
|
// const job = new Job(null, fnWithStrapi);
|
|
31
|
-
const job = new Job(fnWithStrapi);
|
|
39
|
+
const job = new (ns()).Job(fnWithStrapi);
|
|
32
40
|
job.on('error', (error)=>{
|
|
33
41
|
strapi.log.error(`Cron job "${taskName ?? taskExpression}" failed`, error);
|
|
34
42
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job = new Job(fnWithStrapi);\n job.on('error', (error) => {\n strapi.log.error(`Cron job \"${taskName ?? taskExpression}\" failed`, error);\n });\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }, index) => {\n if (jobSpecName === name) {\n jobsSpecs.splice(index, 1);\n return true;\n }\n return false;\n });\n matchingJobsSpecs.forEach(({ job }) => job.cancel());\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["createCronService","jobsSpecs","running","add","tasks","taskExpression","Object","keys","taskValue","fn","options","taskName","isFunction","bind","task","Error","fnWithStrapi","args","strapi","job","Job","on","error","log","push","name","schedule","remove","matchingJobsSpecs","filter","jobSpecName","index","splice","forEach","cancel","start","stop","destroy","jobs"],"mappings":"
|
|
1
|
+
{"version":3,"file":"cron.mjs","sources":["../../src/services/cron.ts"],"sourcesContent":["import type { Job, Spec } from 'node-schedule';\nimport { isFunction } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\n// Lazy: only required when a cron task is actually scheduled\nlet lazyNs: typeof import('node-schedule') | undefined;\nconst ns = (): typeof import('node-schedule') => {\n if (!lazyNs) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n lazyNs = require('node-schedule');\n }\n return lazyNs as typeof import('node-schedule');\n};\n\ninterface JobSpec {\n job: Job;\n options: Spec;\n name: string | null;\n}\n\ntype TaskFn = ({ strapi }: { strapi: Core.Strapi }, ...args: unknown[]) => Promise<unknown>;\n\ntype Task =\n | TaskFn\n | {\n task: TaskFn;\n options: Spec;\n };\n\ninterface Tasks {\n [key: string]: Task;\n}\n\nconst createCronService = () => {\n let jobsSpecs: JobSpec[] = [];\n let running = false;\n\n return {\n add(tasks: Tasks = {}) {\n for (const taskExpression of Object.keys(tasks)) {\n const taskValue = tasks[taskExpression];\n\n let fn: TaskFn;\n let options: Spec;\n let taskName: string | null;\n if (isFunction(taskValue)) {\n // don't use task name if key is the rule\n taskName = null;\n fn = taskValue.bind(tasks);\n options = taskExpression;\n } else if (isFunction(taskValue.task)) {\n // set task name if key is not the rule\n taskName = taskExpression;\n fn = taskValue.task.bind(taskValue);\n options = taskValue.options;\n } else {\n throw new Error(\n `Could not schedule a cron job for \"${taskExpression}\": no function found.`\n );\n }\n\n const fnWithStrapi = (...args: unknown[]) => fn({ strapi }, ...args);\n\n // const job = new Job(null, fnWithStrapi);\n const job: Job = new (ns().Job)(fnWithStrapi);\n job.on('error', (error) => {\n strapi.log.error(`Cron job \"${taskName ?? taskExpression}\" failed`, error);\n });\n jobsSpecs.push({ job, options, name: taskName });\n\n if (running) {\n job.schedule(options);\n }\n }\n return this;\n },\n\n remove(name: string) {\n if (!name) throw new Error('You must provide a name to remove a cron job.');\n const matchingJobsSpecs = jobsSpecs.filter(({ name: jobSpecName }, index) => {\n if (jobSpecName === name) {\n jobsSpecs.splice(index, 1);\n return true;\n }\n return false;\n });\n matchingJobsSpecs.forEach(({ job }) => job.cancel());\n return this;\n },\n\n start() {\n jobsSpecs.forEach(({ job, options }) => job.schedule(options));\n running = true;\n return this;\n },\n\n stop() {\n jobsSpecs.forEach(({ job }) => job.cancel());\n running = false;\n return this;\n },\n\n destroy() {\n this.stop();\n jobsSpecs = [];\n return this;\n },\n jobs: jobsSpecs,\n };\n};\n\nexport default createCronService;\n"],"names":["lazyNs","ns","require","createCronService","jobsSpecs","running","add","tasks","taskExpression","Object","keys","taskValue","fn","options","taskName","isFunction","bind","task","Error","fnWithStrapi","args","strapi","job","Job","on","error","log","push","name","schedule","remove","matchingJobsSpecs","filter","jobSpecName","index","splice","forEach","cancel","start","stop","destroy","jobs"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAYnD;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAAY,KAAK,MAAM,KAAG,QAAQ,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAYnD;;GAEG;AACH,eAAO,MAAM,gBAAgB,WAAY,KAAK,MAAM,KAAG,QAAQ,GAAG,CAAC,UAgHlE,CAAC"}
|
|
@@ -45,19 +45,19 @@ var log = require('./tools/log.js');
|
|
|
45
45
|
},
|
|
46
46
|
registerTool (tool) {
|
|
47
47
|
if (serverStatus !== 'idle') {
|
|
48
|
-
throw new Error('[MCP]
|
|
48
|
+
throw new Error('[MCP] Cannot register tools after the MCP server has started.');
|
|
49
49
|
}
|
|
50
50
|
toolDefinitions.define(tool);
|
|
51
51
|
},
|
|
52
52
|
registerPrompt (prompt) {
|
|
53
53
|
if (serverStatus !== 'idle') {
|
|
54
|
-
throw new Error('[MCP]
|
|
54
|
+
throw new Error('[MCP] Cannot register prompts after the MCP server has started.');
|
|
55
55
|
}
|
|
56
56
|
promptDefinitions.define(prompt);
|
|
57
57
|
},
|
|
58
58
|
registerResource (resource) {
|
|
59
59
|
if (serverStatus !== 'idle') {
|
|
60
|
-
throw new Error('[MCP]
|
|
60
|
+
throw new Error('[MCP] Cannot register resources after the MCP server has started.');
|
|
61
61
|
}
|
|
62
62
|
resourceDefinitions.define(resource);
|
|
63
63
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/services/mcp/index.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { createMcpAdminTokenAuthenticator } from './authentication';\nimport { createPostHandler } from './handlers/handlePost';\nimport type { McpHandlerDependencies } from './handlers/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport { McpConfiguration } from './internal/McpConfiguration';\nimport { createMcpServerWithRegistries } from './internal/McpServerFactory';\nimport { createOAuthDiscoveryFallbackMiddleware } from './middleware/oauthDiscoveryFallback';\nimport { createMcpRoutes } from './routes';\nimport { sendDidStartMcpServer } from './metrics/metrics';\nimport { logToolDefinition } from './tools/log';\n\n/**\n * Creates an MCP service instance for Strapi Core\n */\nexport const createMcpService = (strapi: Core.Strapi): Modules.MCP.McpService => {\n // Initialize configuration\n const config = new McpConfiguration(strapi);\n\n const authenticationStrategy = createMcpAdminTokenAuthenticator(strapi);\n\n // Status tracking\n let serverStatus: Modules.MCP.McpServiceStatus = 'idle';\n\n // Definition registries\n const toolDefinitions = new McpCapabilityDefinitionRegistry<\n 'tool',\n Modules.MCP.McpToolDefinition\n >('tool');\n\n const promptDefinitions = new McpCapabilityDefinitionRegistry<\n 'prompt',\n Modules.MCP.McpPromptDefinition\n >('prompt');\n\n const resourceDefinitions = new McpCapabilityDefinitionRegistry<\n 'resource',\n Modules.MCP.McpResourceDefinition\n >('resource');\n\n // Prepare handler dependencies\n const handlerDependencies: McpHandlerDependencies = {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries: createMcpServerWithRegistries,\n capabilityDefinitions: {\n tools: toolDefinitions,\n prompts: promptDefinitions,\n resources: resourceDefinitions,\n },\n };\n\n // Create HTTP handlers\n const handlePost = createPostHandler(handlerDependencies);\n\n const service: Modules.MCP.McpService = {\n isEnabled() {\n return config.isEnabled();\n },\n\n isRunning() {\n return serverStatus === 'running';\n },\n\n registerTool(tool: Modules.MCP.McpToolDefinition) {\n if (serverStatus !== 'idle') {\n throw new Error(
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/services/mcp/index.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { createMcpAdminTokenAuthenticator } from './authentication';\nimport { createPostHandler } from './handlers/handlePost';\nimport type { McpHandlerDependencies } from './handlers/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport { McpConfiguration } from './internal/McpConfiguration';\nimport { createMcpServerWithRegistries } from './internal/McpServerFactory';\nimport { createOAuthDiscoveryFallbackMiddleware } from './middleware/oauthDiscoveryFallback';\nimport { createMcpRoutes } from './routes';\nimport { sendDidStartMcpServer } from './metrics/metrics';\nimport { logToolDefinition } from './tools/log';\n\n/**\n * Creates an MCP service instance for Strapi Core\n */\nexport const createMcpService = (strapi: Core.Strapi): Modules.MCP.McpService => {\n // Initialize configuration\n const config = new McpConfiguration(strapi);\n\n const authenticationStrategy = createMcpAdminTokenAuthenticator(strapi);\n\n // Status tracking\n let serverStatus: Modules.MCP.McpServiceStatus = 'idle';\n\n // Definition registries\n const toolDefinitions = new McpCapabilityDefinitionRegistry<\n 'tool',\n Modules.MCP.McpToolDefinition\n >('tool');\n\n const promptDefinitions = new McpCapabilityDefinitionRegistry<\n 'prompt',\n Modules.MCP.McpPromptDefinition\n >('prompt');\n\n const resourceDefinitions = new McpCapabilityDefinitionRegistry<\n 'resource',\n Modules.MCP.McpResourceDefinition\n >('resource');\n\n // Prepare handler dependencies\n const handlerDependencies: McpHandlerDependencies = {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries: createMcpServerWithRegistries,\n capabilityDefinitions: {\n tools: toolDefinitions,\n prompts: promptDefinitions,\n resources: resourceDefinitions,\n },\n };\n\n // Create HTTP handlers\n const handlePost = createPostHandler(handlerDependencies);\n\n const service: Modules.MCP.McpService = {\n isEnabled() {\n return config.isEnabled();\n },\n\n isRunning() {\n return serverStatus === 'running';\n },\n\n registerTool(tool: Modules.MCP.McpToolDefinition) {\n if (serverStatus !== 'idle') {\n throw new Error('[MCP] Cannot register tools after the MCP server has started.');\n }\n\n toolDefinitions.define(tool);\n },\n\n registerPrompt(prompt) {\n if (serverStatus !== 'idle') {\n throw new Error('[MCP] Cannot register prompts after the MCP server has started.');\n }\n promptDefinitions.define(prompt);\n },\n\n registerResource(resource) {\n if (serverStatus !== 'idle') {\n throw new Error('[MCP] Cannot register resources after the MCP server has started.');\n }\n resourceDefinitions.define(resource);\n },\n\n async start() {\n if (service.isEnabled() === false) {\n strapi.log.debug('[MCP] Server is disabled');\n return;\n }\n if (serverStatus === 'error') {\n throw new Error('[MCP] Cannot start server: previous error state');\n }\n if (serverStatus !== 'idle') {\n throw new Error(`[MCP] Server already started or starting (status: ${serverStatus})`);\n }\n serverStatus = 'starting';\n\n strapi.server.use(createOAuthDiscoveryFallbackMiddleware());\n\n const routes = createMcpRoutes(config, { handlePost });\n strapi.server.routes(routes);\n\n serverStatus = 'running';\n\n sendDidStartMcpServer(strapi, {\n path: config.path,\n numberOfTools: toolDefinitions.size,\n numberOfPrompts: promptDefinitions.size,\n numberOfResources: resourceDefinitions.size,\n });\n\n const baseUrl = strapi.config.get('server.url', 'http://localhost:1337');\n strapi.log.info(`[MCP] Server available at ${baseUrl}${config.path}`);\n },\n\n async stop() {\n serverStatus = 'idle';\n strapi.log.info('[MCP] Service stopped');\n },\n };\n\n service.registerTool(logToolDefinition);\n\n return service;\n};\n"],"names":["createMcpService","strapi","config","McpConfiguration","authenticationStrategy","createMcpAdminTokenAuthenticator","serverStatus","toolDefinitions","McpCapabilityDefinitionRegistry","promptDefinitions","resourceDefinitions","handlerDependencies","createServerWithRegistries","createMcpServerWithRegistries","capabilityDefinitions","tools","prompts","resources","handlePost","createPostHandler","service","isEnabled","isRunning","registerTool","tool","Error","define","registerPrompt","prompt","registerResource","resource","start","log","debug","server","use","createOAuthDiscoveryFallbackMiddleware","routes","createMcpRoutes","sendDidStartMcpServer","path","numberOfTools","size","numberOfPrompts","numberOfResources","baseUrl","get","info","stop","logToolDefinition"],"mappings":"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"}
|
|
@@ -43,19 +43,19 @@ import { logToolDefinition } from './tools/log.mjs';
|
|
|
43
43
|
},
|
|
44
44
|
registerTool (tool) {
|
|
45
45
|
if (serverStatus !== 'idle') {
|
|
46
|
-
throw new Error('[MCP]
|
|
46
|
+
throw new Error('[MCP] Cannot register tools after the MCP server has started.');
|
|
47
47
|
}
|
|
48
48
|
toolDefinitions.define(tool);
|
|
49
49
|
},
|
|
50
50
|
registerPrompt (prompt) {
|
|
51
51
|
if (serverStatus !== 'idle') {
|
|
52
|
-
throw new Error('[MCP]
|
|
52
|
+
throw new Error('[MCP] Cannot register prompts after the MCP server has started.');
|
|
53
53
|
}
|
|
54
54
|
promptDefinitions.define(prompt);
|
|
55
55
|
},
|
|
56
56
|
registerResource (resource) {
|
|
57
57
|
if (serverStatus !== 'idle') {
|
|
58
|
-
throw new Error('[MCP]
|
|
58
|
+
throw new Error('[MCP] Cannot register resources after the MCP server has started.');
|
|
59
59
|
}
|
|
60
60
|
resourceDefinitions.define(resource);
|
|
61
61
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../src/services/mcp/index.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { createMcpAdminTokenAuthenticator } from './authentication';\nimport { createPostHandler } from './handlers/handlePost';\nimport type { McpHandlerDependencies } from './handlers/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport { McpConfiguration } from './internal/McpConfiguration';\nimport { createMcpServerWithRegistries } from './internal/McpServerFactory';\nimport { createOAuthDiscoveryFallbackMiddleware } from './middleware/oauthDiscoveryFallback';\nimport { createMcpRoutes } from './routes';\nimport { sendDidStartMcpServer } from './metrics/metrics';\nimport { logToolDefinition } from './tools/log';\n\n/**\n * Creates an MCP service instance for Strapi Core\n */\nexport const createMcpService = (strapi: Core.Strapi): Modules.MCP.McpService => {\n // Initialize configuration\n const config = new McpConfiguration(strapi);\n\n const authenticationStrategy = createMcpAdminTokenAuthenticator(strapi);\n\n // Status tracking\n let serverStatus: Modules.MCP.McpServiceStatus = 'idle';\n\n // Definition registries\n const toolDefinitions = new McpCapabilityDefinitionRegistry<\n 'tool',\n Modules.MCP.McpToolDefinition\n >('tool');\n\n const promptDefinitions = new McpCapabilityDefinitionRegistry<\n 'prompt',\n Modules.MCP.McpPromptDefinition\n >('prompt');\n\n const resourceDefinitions = new McpCapabilityDefinitionRegistry<\n 'resource',\n Modules.MCP.McpResourceDefinition\n >('resource');\n\n // Prepare handler dependencies\n const handlerDependencies: McpHandlerDependencies = {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries: createMcpServerWithRegistries,\n capabilityDefinitions: {\n tools: toolDefinitions,\n prompts: promptDefinitions,\n resources: resourceDefinitions,\n },\n };\n\n // Create HTTP handlers\n const handlePost = createPostHandler(handlerDependencies);\n\n const service: Modules.MCP.McpService = {\n isEnabled() {\n return config.isEnabled();\n },\n\n isRunning() {\n return serverStatus === 'running';\n },\n\n registerTool(tool: Modules.MCP.McpToolDefinition) {\n if (serverStatus !== 'idle') {\n throw new Error(
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../src/services/mcp/index.ts"],"sourcesContent":["import type { Core, Modules } from '@strapi/types';\nimport { createMcpAdminTokenAuthenticator } from './authentication';\nimport { createPostHandler } from './handlers/handlePost';\nimport type { McpHandlerDependencies } from './handlers/types';\nimport { McpCapabilityDefinitionRegistry } from './internal/McpCapabilityDefinitionRegistry';\nimport { McpConfiguration } from './internal/McpConfiguration';\nimport { createMcpServerWithRegistries } from './internal/McpServerFactory';\nimport { createOAuthDiscoveryFallbackMiddleware } from './middleware/oauthDiscoveryFallback';\nimport { createMcpRoutes } from './routes';\nimport { sendDidStartMcpServer } from './metrics/metrics';\nimport { logToolDefinition } from './tools/log';\n\n/**\n * Creates an MCP service instance for Strapi Core\n */\nexport const createMcpService = (strapi: Core.Strapi): Modules.MCP.McpService => {\n // Initialize configuration\n const config = new McpConfiguration(strapi);\n\n const authenticationStrategy = createMcpAdminTokenAuthenticator(strapi);\n\n // Status tracking\n let serverStatus: Modules.MCP.McpServiceStatus = 'idle';\n\n // Definition registries\n const toolDefinitions = new McpCapabilityDefinitionRegistry<\n 'tool',\n Modules.MCP.McpToolDefinition\n >('tool');\n\n const promptDefinitions = new McpCapabilityDefinitionRegistry<\n 'prompt',\n Modules.MCP.McpPromptDefinition\n >('prompt');\n\n const resourceDefinitions = new McpCapabilityDefinitionRegistry<\n 'resource',\n Modules.MCP.McpResourceDefinition\n >('resource');\n\n // Prepare handler dependencies\n const handlerDependencies: McpHandlerDependencies = {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries: createMcpServerWithRegistries,\n capabilityDefinitions: {\n tools: toolDefinitions,\n prompts: promptDefinitions,\n resources: resourceDefinitions,\n },\n };\n\n // Create HTTP handlers\n const handlePost = createPostHandler(handlerDependencies);\n\n const service: Modules.MCP.McpService = {\n isEnabled() {\n return config.isEnabled();\n },\n\n isRunning() {\n return serverStatus === 'running';\n },\n\n registerTool(tool: Modules.MCP.McpToolDefinition) {\n if (serverStatus !== 'idle') {\n throw new Error('[MCP] Cannot register tools after the MCP server has started.');\n }\n\n toolDefinitions.define(tool);\n },\n\n registerPrompt(prompt) {\n if (serverStatus !== 'idle') {\n throw new Error('[MCP] Cannot register prompts after the MCP server has started.');\n }\n promptDefinitions.define(prompt);\n },\n\n registerResource(resource) {\n if (serverStatus !== 'idle') {\n throw new Error('[MCP] Cannot register resources after the MCP server has started.');\n }\n resourceDefinitions.define(resource);\n },\n\n async start() {\n if (service.isEnabled() === false) {\n strapi.log.debug('[MCP] Server is disabled');\n return;\n }\n if (serverStatus === 'error') {\n throw new Error('[MCP] Cannot start server: previous error state');\n }\n if (serverStatus !== 'idle') {\n throw new Error(`[MCP] Server already started or starting (status: ${serverStatus})`);\n }\n serverStatus = 'starting';\n\n strapi.server.use(createOAuthDiscoveryFallbackMiddleware());\n\n const routes = createMcpRoutes(config, { handlePost });\n strapi.server.routes(routes);\n\n serverStatus = 'running';\n\n sendDidStartMcpServer(strapi, {\n path: config.path,\n numberOfTools: toolDefinitions.size,\n numberOfPrompts: promptDefinitions.size,\n numberOfResources: resourceDefinitions.size,\n });\n\n const baseUrl = strapi.config.get('server.url', 'http://localhost:1337');\n strapi.log.info(`[MCP] Server available at ${baseUrl}${config.path}`);\n },\n\n async stop() {\n serverStatus = 'idle';\n strapi.log.info('[MCP] Service stopped');\n },\n };\n\n service.registerTool(logToolDefinition);\n\n return service;\n};\n"],"names":["createMcpService","strapi","config","McpConfiguration","authenticationStrategy","createMcpAdminTokenAuthenticator","serverStatus","toolDefinitions","McpCapabilityDefinitionRegistry","promptDefinitions","resourceDefinitions","handlerDependencies","createServerWithRegistries","createMcpServerWithRegistries","capabilityDefinitions","tools","prompts","resources","handlePost","createPostHandler","service","isEnabled","isRunning","registerTool","tool","Error","define","registerPrompt","prompt","registerResource","resource","start","log","debug","server","use","createOAuthDiscoveryFallbackMiddleware","routes","createMcpRoutes","sendDidStartMcpServer","path","numberOfTools","size","numberOfPrompts","numberOfResources","baseUrl","get","info","stop","logToolDefinition"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/metrics/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiB1C,QAAA,MAAM,uBAAuB,WAAY,KAAK,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/metrics/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiB1C,QAAA,MAAM,uBAAuB,WAAY,KAAK,MAAM;;;;gBA8B9B,MAAM,YAAW,OAAO,MAAM,EAAE,OAAO,CAAC;;CAS7D,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
|
@@ -18,16 +18,17 @@ const createTelemetryInstance = (strapi)=>{
|
|
|
18
18
|
const uuid = strapi.config.get('uuid');
|
|
19
19
|
const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled');
|
|
20
20
|
const isDisabled = !uuid || isTruthy(process.env.STRAPI_TELEMETRY_DISABLED) || isTruthy(telemetryDisabled);
|
|
21
|
-
|
|
22
|
-
const
|
|
21
|
+
// Skip the sender (and its tsUtils consumer) entirely when telemetry is off
|
|
22
|
+
const sender$1 = isDisabled ? null : sender(strapi);
|
|
23
|
+
const sendEvent = sender$1 ? rateLimiter(sender$1, {
|
|
23
24
|
limitedEvents: LIMITED_EVENTS
|
|
24
|
-
});
|
|
25
|
+
}) : null;
|
|
25
26
|
return {
|
|
26
27
|
get isDisabled () {
|
|
27
28
|
return isDisabled;
|
|
28
29
|
},
|
|
29
30
|
register () {
|
|
30
|
-
if (!isDisabled) {
|
|
31
|
+
if (!isDisabled && sendEvent) {
|
|
31
32
|
strapi.cron.add({
|
|
32
33
|
sendPingEvent: {
|
|
33
34
|
task: ()=>sendEvent('ping'),
|
|
@@ -42,7 +43,7 @@ const createTelemetryInstance = (strapi)=>{
|
|
|
42
43
|
},
|
|
43
44
|
bootstrap () {},
|
|
44
45
|
async send (event, payload = {}) {
|
|
45
|
-
if (isDisabled) return true;
|
|
46
|
+
if (isDisabled || !sendEvent) return true;
|
|
46
47
|
return sendEvent(event, payload);
|
|
47
48
|
},
|
|
48
49
|
destroy () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/services/metrics/index.ts"],"sourcesContent":["/**\n * Strapi telemetry package.\n * You can learn more at https://docs.strapi.io/developer-docs/latest/getting-started/usage-information.html\n */\n\nimport type { Core } from '@strapi/types';\n\nimport wrapWithRateLimit from './rate-limiter';\nimport createSender from './sender';\nimport createMiddleware from './middleware';\nimport isTruthy from './is-truthy';\nimport { MCP_LIMITED_TELEMETRY_EVENTS } from '../mcp/metrics/metrics';\n\nconst LIMITED_EVENTS = [\n 'didSaveMediaWithAlternativeText',\n 'didSaveMediaWithCaption',\n 'didDisableResponsiveDimensions',\n 'didEnableResponsiveDimensions',\n 'didInitializePluginUpload',\n ...Object.values(MCP_LIMITED_TELEMETRY_EVENTS),\n];\n\nconst createTelemetryInstance = (strapi: Core.Strapi) => {\n const uuid = strapi.config.get('uuid');\n const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled');\n const isDisabled =\n !uuid || isTruthy(process.env.STRAPI_TELEMETRY_DISABLED) || isTruthy(telemetryDisabled);\n\n const sender = createSender(strapi);\n const sendEvent = wrapWithRateLimit(sender, { limitedEvents: LIMITED_EVENTS });\n\n return {\n get isDisabled() {\n return isDisabled;\n },\n\n register() {\n if (!isDisabled) {\n strapi.cron.add({\n sendPingEvent: {\n task: () => sendEvent('ping'),\n options: '0 0 12 * * *',\n },\n });\n\n strapi.server.use(createMiddleware({ sendEvent, strapi }));\n }\n },\n\n bootstrap() {},\n\n async send(event: string, payload: Record<string, unknown> = {}) {\n if (isDisabled) return true;\n return sendEvent(event, payload);\n },\n\n destroy() {\n // Clean up resources if needed\n },\n };\n};\n\nexport default createTelemetryInstance;\n"],"names":["LIMITED_EVENTS","Object","values","MCP_LIMITED_TELEMETRY_EVENTS","createTelemetryInstance","strapi","uuid","config","get","telemetryDisabled","isDisabled","isTruthy","process","env","STRAPI_TELEMETRY_DISABLED","sender","createSender","sendEvent","wrapWithRateLimit","limitedEvents","register","cron","add","sendPingEvent","task","options","server","use","createMiddleware","bootstrap","send","event","payload","destroy"],"mappings":";;;;;;;;AAaA,MAAMA,cAAAA,GAAiB;AACrB,IAAA,iCAAA;AACA,IAAA,yBAAA;AACA,IAAA,gCAAA;AACA,IAAA,+BAAA;AACA,IAAA,2BAAA;AACGC,IAAAA,GAAAA,MAAAA,CAAOC,MAAM,CAACC,oCAAAA;AAClB,CAAA;AAED,MAAMC,0BAA0B,CAACC,MAAAA,GAAAA;AAC/B,IAAA,MAAMC,IAAAA,GAAOD,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAC,MAAA,CAAA;AAC/B,IAAA,MAAMC,iBAAAA,GAAoBJ,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAC,qCAAA,CAAA;IAC5C,MAAME,UAAAA,GACJ,CAACJ,IAAAA,IAAQK,QAAAA,CAASC,QAAQC,GAAG,CAACC,yBAAyB,CAAA,IAAKH,QAAAA,CAASF,iBAAAA,CAAAA
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/services/metrics/index.ts"],"sourcesContent":["/**\n * Strapi telemetry package.\n * You can learn more at https://docs.strapi.io/developer-docs/latest/getting-started/usage-information.html\n */\n\nimport type { Core } from '@strapi/types';\n\nimport wrapWithRateLimit from './rate-limiter';\nimport createSender from './sender';\nimport createMiddleware from './middleware';\nimport isTruthy from './is-truthy';\nimport { MCP_LIMITED_TELEMETRY_EVENTS } from '../mcp/metrics/metrics';\n\nconst LIMITED_EVENTS = [\n 'didSaveMediaWithAlternativeText',\n 'didSaveMediaWithCaption',\n 'didDisableResponsiveDimensions',\n 'didEnableResponsiveDimensions',\n 'didInitializePluginUpload',\n ...Object.values(MCP_LIMITED_TELEMETRY_EVENTS),\n];\n\nconst createTelemetryInstance = (strapi: Core.Strapi) => {\n const uuid = strapi.config.get('uuid');\n const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled');\n const isDisabled =\n !uuid || isTruthy(process.env.STRAPI_TELEMETRY_DISABLED) || isTruthy(telemetryDisabled);\n\n // Skip the sender (and its tsUtils consumer) entirely when telemetry is off\n const sender = isDisabled ? null : createSender(strapi);\n const sendEvent = sender ? wrapWithRateLimit(sender, { limitedEvents: LIMITED_EVENTS }) : null;\n\n return {\n get isDisabled() {\n return isDisabled;\n },\n\n register() {\n if (!isDisabled && sendEvent) {\n strapi.cron.add({\n sendPingEvent: {\n task: () => sendEvent('ping'),\n options: '0 0 12 * * *',\n },\n });\n\n strapi.server.use(createMiddleware({ sendEvent, strapi }));\n }\n },\n\n bootstrap() {},\n\n async send(event: string, payload: Record<string, unknown> = {}) {\n if (isDisabled || !sendEvent) return true;\n return sendEvent(event, payload);\n },\n\n destroy() {\n // Clean up resources if needed\n },\n };\n};\n\nexport default createTelemetryInstance;\n"],"names":["LIMITED_EVENTS","Object","values","MCP_LIMITED_TELEMETRY_EVENTS","createTelemetryInstance","strapi","uuid","config","get","telemetryDisabled","isDisabled","isTruthy","process","env","STRAPI_TELEMETRY_DISABLED","sender","createSender","sendEvent","wrapWithRateLimit","limitedEvents","register","cron","add","sendPingEvent","task","options","server","use","createMiddleware","bootstrap","send","event","payload","destroy"],"mappings":";;;;;;;;AAaA,MAAMA,cAAAA,GAAiB;AACrB,IAAA,iCAAA;AACA,IAAA,yBAAA;AACA,IAAA,gCAAA;AACA,IAAA,+BAAA;AACA,IAAA,2BAAA;AACGC,IAAAA,GAAAA,MAAAA,CAAOC,MAAM,CAACC,oCAAAA;AAClB,CAAA;AAED,MAAMC,0BAA0B,CAACC,MAAAA,GAAAA;AAC/B,IAAA,MAAMC,IAAAA,GAAOD,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAC,MAAA,CAAA;AAC/B,IAAA,MAAMC,iBAAAA,GAAoBJ,MAAAA,CAAOE,MAAM,CAACC,GAAG,CAAC,qCAAA,CAAA;IAC5C,MAAME,UAAAA,GACJ,CAACJ,IAAAA,IAAQK,QAAAA,CAASC,QAAQC,GAAG,CAACC,yBAAyB,CAAA,IAAKH,QAAAA,CAASF,iBAAAA,CAAAA;;IAGvE,MAAMM,QAAAA,GAASL,UAAAA,GAAa,IAAA,GAAOM,MAAAA,CAAaX,MAAAA,CAAAA;IAChD,MAAMY,SAAAA,GAAYF,QAAAA,GAASG,WAAAA,CAAkBH,QAAAA,EAAQ;QAAEI,aAAAA,EAAenB;KAAe,CAAA,GAAK,IAAA;IAE1F,OAAO;AACL,QAAA,IAAIU,UAAAA,CAAAA,GAAa;YACf,OAAOA,UAAAA;AACT,QAAA,CAAA;AAEAU,QAAAA,QAAAA,CAAAA,GAAAA;YACE,IAAI,CAACV,cAAcO,SAAAA,EAAW;gBAC5BZ,MAAAA,CAAOgB,IAAI,CAACC,GAAG,CAAC;oBACdC,aAAAA,EAAe;AACbC,wBAAAA,IAAAA,EAAM,IAAMP,SAAAA,CAAU,MAAA,CAAA;wBACtBQ,OAAAA,EAAS;AACX;AACF,iBAAA,CAAA;AAEApB,gBAAAA,MAAAA,CAAOqB,MAAM,CAACC,GAAG,CAACC,UAAAA,CAAiB;AAAEX,oBAAAA,SAAAA;AAAWZ,oBAAAA;AAAO,iBAAA,CAAA,CAAA;AACzD,YAAA;AACF,QAAA,CAAA;QAEAwB,SAAAA,CAAAA,GAAAA,CAAa,CAAA;AAEb,QAAA,MAAMC,IAAAA,CAAAA,CAAKC,KAAa,EAAEC,OAAAA,GAAmC,EAAE,EAAA;YAC7D,IAAItB,UAAAA,IAAc,CAACO,SAAAA,EAAW,OAAO,IAAA;AACrC,YAAA,OAAOA,UAAUc,KAAAA,EAAOC,OAAAA,CAAAA;AAC1B,QAAA,CAAA;AAEAC,QAAAA,OAAAA,CAAAA,GAAAA;;AAEA,QAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -16,16 +16,17 @@ const createTelemetryInstance = (strapi)=>{
|
|
|
16
16
|
const uuid = strapi.config.get('uuid');
|
|
17
17
|
const telemetryDisabled = strapi.config.get('packageJsonStrapi.telemetryDisabled');
|
|
18
18
|
const isDisabled = !uuid || isTruthy(process.env.STRAPI_TELEMETRY_DISABLED) || isTruthy(telemetryDisabled);
|
|
19
|
-
|
|
20
|
-
const
|
|
19
|
+
// Skip the sender (and its tsUtils consumer) entirely when telemetry is off
|
|
20
|
+
const sender = isDisabled ? null : createSender(strapi);
|
|
21
|
+
const sendEvent = sender ? wrapWithRateLimit(sender, {
|
|
21
22
|
limitedEvents: LIMITED_EVENTS
|
|
22
|
-
});
|
|
23
|
+
}) : null;
|
|
23
24
|
return {
|
|
24
25
|
get isDisabled () {
|
|
25
26
|
return isDisabled;
|
|
26
27
|
},
|
|
27
28
|
register () {
|
|
28
|
-
if (!isDisabled) {
|
|
29
|
+
if (!isDisabled && sendEvent) {
|
|
29
30
|
strapi.cron.add({
|
|
30
31
|
sendPingEvent: {
|
|
31
32
|
task: ()=>sendEvent('ping'),
|
|
@@ -40,7 +41,7 @@ const createTelemetryInstance = (strapi)=>{
|
|
|
40
41
|
},
|
|
41
42
|
bootstrap () {},
|
|
42
43
|
async send (event, payload = {}) {
|
|
43
|
-
if (isDisabled) return true;
|
|
44
|
+
if (isDisabled || !sendEvent) return true;
|
|
44
45
|
return sendEvent(event, payload);
|
|
45
46
|
},
|
|
46
47
|
destroy () {
|