@strapi/core 5.51.2 → 5.52.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.
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var name = "@strapi/core";
6
- var version = "5.51.2";
6
+ var version = "5.52.1";
7
7
  var description = "Core of Strapi";
8
8
  var homepage = "https://strapi.io";
9
9
  var bugs = {
@@ -63,17 +63,17 @@ var dependencies = {
63
63
  "@casl/ability": "6.7.5",
64
64
  "@koa/cors": "5.0.0",
65
65
  "@koa/router": "12.0.2",
66
- "@modelcontextprotocol/sdk": "1.29.0",
66
+ "@modelcontextprotocol/sdk": "1.30.0",
67
67
  "@paralleldrive/cuid2": "2.2.2",
68
- "@strapi/admin": "5.51.2",
69
- "@strapi/database": "5.51.2",
70
- "@strapi/generators": "5.51.2",
71
- "@strapi/logger": "5.51.2",
72
- "@strapi/openapi": "5.51.2",
73
- "@strapi/permissions": "5.51.2",
74
- "@strapi/types": "5.51.2",
75
- "@strapi/typescript-utils": "5.51.2",
76
- "@strapi/utils": "5.51.2",
68
+ "@strapi/admin": "5.52.1",
69
+ "@strapi/database": "5.52.1",
70
+ "@strapi/generators": "5.52.1",
71
+ "@strapi/logger": "5.52.1",
72
+ "@strapi/openapi": "5.52.1",
73
+ "@strapi/permissions": "5.52.1",
74
+ "@strapi/types": "5.52.1",
75
+ "@strapi/typescript-utils": "5.52.1",
76
+ "@strapi/utils": "5.52.1",
77
77
  "@vercel/stega": "0.1.2",
78
78
  bcryptjs: "2.4.3",
79
79
  boxen: "5.1.2",
@@ -137,12 +137,12 @@ var devDependencies = {
137
137
  "@types/mime-types": "2.1.1",
138
138
  "@types/node": "20.19.41",
139
139
  "@types/node-schedule": "2.1.7",
140
- "eslint-config-custom": "5.51.2",
140
+ "eslint-config-custom": "5.52.1",
141
141
  jest: "29.6.0",
142
142
  supertest: "7.2.2",
143
- tsconfig: "5.51.2",
143
+ tsconfig: "5.52.1",
144
144
  vitest: "catalog:",
145
- "vitest-config": "5.51.2"
145
+ "vitest-config": "5.52.1"
146
146
  };
147
147
  var engines = {
148
148
  node: ">=20.0.0 <=26.x.x",
@@ -1,5 +1,5 @@
1
1
  var name = "@strapi/core";
2
- var version = "5.51.2";
2
+ var version = "5.52.1";
3
3
  var description = "Core of Strapi";
4
4
  var homepage = "https://strapi.io";
5
5
  var bugs = {
@@ -59,17 +59,17 @@ var dependencies = {
59
59
  "@casl/ability": "6.7.5",
60
60
  "@koa/cors": "5.0.0",
61
61
  "@koa/router": "12.0.2",
62
- "@modelcontextprotocol/sdk": "1.29.0",
62
+ "@modelcontextprotocol/sdk": "1.30.0",
63
63
  "@paralleldrive/cuid2": "2.2.2",
64
- "@strapi/admin": "5.51.2",
65
- "@strapi/database": "5.51.2",
66
- "@strapi/generators": "5.51.2",
67
- "@strapi/logger": "5.51.2",
68
- "@strapi/openapi": "5.51.2",
69
- "@strapi/permissions": "5.51.2",
70
- "@strapi/types": "5.51.2",
71
- "@strapi/typescript-utils": "5.51.2",
72
- "@strapi/utils": "5.51.2",
64
+ "@strapi/admin": "5.52.1",
65
+ "@strapi/database": "5.52.1",
66
+ "@strapi/generators": "5.52.1",
67
+ "@strapi/logger": "5.52.1",
68
+ "@strapi/openapi": "5.52.1",
69
+ "@strapi/permissions": "5.52.1",
70
+ "@strapi/types": "5.52.1",
71
+ "@strapi/typescript-utils": "5.52.1",
72
+ "@strapi/utils": "5.52.1",
73
73
  "@vercel/stega": "0.1.2",
74
74
  bcryptjs: "2.4.3",
75
75
  boxen: "5.1.2",
@@ -133,12 +133,12 @@ var devDependencies = {
133
133
  "@types/mime-types": "2.1.1",
134
134
  "@types/node": "20.19.41",
135
135
  "@types/node-schedule": "2.1.7",
136
- "eslint-config-custom": "5.51.2",
136
+ "eslint-config-custom": "5.52.1",
137
137
  jest: "29.6.0",
138
138
  supertest: "7.2.2",
139
- tsconfig: "5.51.2",
139
+ tsconfig: "5.52.1",
140
140
  vitest: "catalog:",
141
- "vitest-config": "5.51.2"
141
+ "vitest-config": "5.52.1"
142
142
  };
143
143
  var engines = {
144
144
  node: ">=20.0.0 <=26.x.x",
@@ -1 +1 @@
1
- {"version":3,"file":"handlePost.d.ts","sourceRoot":"","sources":["../../../../src/services/mcp/handlers/handlePost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,iBAAiB,GAAI,MAAM,sBAAsB,KAAG,IAAI,CAAC,iBAuErE,CAAC"}
1
+ {"version":3,"file":"handlePost.d.ts","sourceRoot":"","sources":["../../../../src/services/mcp/handlers/handlePost.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAS1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,eAAO,MAAM,iBAAiB,GAAI,MAAM,sBAAsB,KAAG,IAAI,CAAC,iBA2ErE,CAAC"}
@@ -25,6 +25,9 @@ const createPostHandler = (deps)=>{
25
25
  }
26
26
  hadAuthenticatedMcpRequest = true;
27
27
  metrics.sendDidUseMcpServer(strapi);
28
+ // Let audit logs pick up MCP actions and tag their origin.
29
+ ctx.state.user = authResult.user;
30
+ ctx.state.auditSource = 'mcp';
28
31
  const { mcpServer } = createServerWithRegistries({
29
32
  strapi,
30
33
  definitions: capabilityDefinitions,
@@ -1 +1 @@
1
- {"version":3,"file":"handlePost.js","sources":["../../../../src/services/mcp/handlers/handlePost.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Core } from '@strapi/types';\nimport {\n classifyMcpRequestFailure,\n sendDidNotAuthenticateMcpRequest,\n sendDidNotHandleMcpRequest,\n sendDidUseMcpServer,\n} from '../metrics/metrics';\nimport { sendJsonRpcError } from '../utils/sendJsonRpcError';\nimport { withTimeout } from '../utils/withTimeout';\nimport type { McpHandlerDependencies } from './types';\n\nexport const createPostHandler = (deps: McpHandlerDependencies): Core.MiddlewareHandler => {\n const {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries,\n capabilityDefinitions,\n } = deps;\n\n return async (ctx) => {\n // Opt out of Koa's response phase — the MCP SDK writes directly to ctx.res\n // (via res.writeHead / res.end / SSE streaming). Without this, Koa's respond()\n // would also try to write ctx.body to the socket after the handler returns.\n ctx.respond = false;\n const req = ctx.req;\n const res = ctx.res;\n\n let hadAuthenticatedMcpRequest = false;\n\n try {\n const authResult = await authenticationStrategy.authenticate(ctx);\n if (authResult.authenticated === false) {\n sendDidNotAuthenticateMcpRequest(strapi, authResult.reason);\n sendJsonRpcError(res, 'AUTHENTICATION_REQUIRED');\n return;\n }\n\n hadAuthenticatedMcpRequest = true;\n sendDidUseMcpServer(strapi);\n\n const { mcpServer } = createServerWithRegistries({\n strapi,\n definitions: capabilityDefinitions,\n isDevMode: config.isDevMode(),\n ability: authResult.ability,\n user: authResult.user,\n });\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: undefined,\n });\n\n try {\n await withTimeout(\n mcpServer.connect(transport),\n config.connectTimeoutMs,\n 'mcpServer.connect'\n );\n\n const requestBody = ctx.request.body ?? null;\n await withTimeout(\n transport.handleRequest(req, res, requestBody),\n config.requestTimeoutMs,\n 'transport.handleRequest'\n );\n } finally {\n await mcpServer.close();\n }\n } catch (error) {\n strapi.log.error('[MCP] Error handling POST request', {\n error: error instanceof Error ? error.message : 'Unknown error',\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n sendJsonRpcError(res, 'INTERNAL_ERROR');\n\n if (hadAuthenticatedMcpRequest) {\n sendDidNotHandleMcpRequest(strapi, classifyMcpRequestFailure(error));\n }\n }\n };\n};\n"],"names":["createPostHandler","deps","strapi","authenticationStrategy","config","createServerWithRegistries","capabilityDefinitions","ctx","respond","req","res","hadAuthenticatedMcpRequest","authResult","authenticate","authenticated","sendDidNotAuthenticateMcpRequest","reason","sendJsonRpcError","sendDidUseMcpServer","mcpServer","definitions","isDevMode","ability","user","transport","StreamableHTTPServerTransport","sessionIdGenerator","undefined","withTimeout","connect","connectTimeoutMs","requestBody","request","body","handleRequest","requestTimeoutMs","close","error","log","Error","message","stack","sendDidNotHandleMcpRequest","classifyMcpRequestFailure"],"mappings":";;;;;;;AAAA;AAaO,MAAMA,oBAAoB,CAACC,IAAAA,GAAAA;IAChC,MAAM,EACJC,MAAM,EACNC,sBAAsB,EACtBC,MAAM,EACNC,0BAA0B,EAC1BC,qBAAqB,EACtB,GAAGL,IAAAA;AAEJ,IAAA,OAAO,OAAOM,GAAAA,GAAAA;;;;AAIZA,QAAAA,GAAAA,CAAIC,OAAO,GAAG,KAAA;QACd,MAAMC,GAAAA,GAAMF,IAAIE,GAAG;QACnB,MAAMC,GAAAA,GAAMH,IAAIG,GAAG;AAEnB,QAAA,IAAIC,0BAAAA,GAA6B,KAAA;QAEjC,IAAI;AACF,YAAA,MAAMC,UAAAA,GAAa,MAAMT,sBAAAA,CAAuBU,YAAY,CAACN,GAAAA,CAAAA;YAC7D,IAAIK,UAAAA,CAAWE,aAAa,KAAK,KAAA,EAAO;gBACtCC,wCAAAA,CAAiCb,MAAAA,EAAQU,WAAWI,MAAM,CAAA;AAC1DC,gBAAAA,iCAAAA,CAAiBP,GAAAA,EAAK,yBAAA,CAAA;AACtB,gBAAA;AACF,YAAA;YAEAC,0BAAAA,GAA6B,IAAA;YAC7BO,2BAAAA,CAAoBhB,MAAAA,CAAAA;AAEpB,YAAA,MAAM,EAAEiB,SAAS,EAAE,GAAGd,0BAAAA,CAA2B;AAC/CH,gBAAAA,MAAAA;gBACAkB,WAAAA,EAAad,qBAAAA;AACbe,gBAAAA,SAAAA,EAAWjB,OAAOiB,SAAS,EAAA;AAC3BC,gBAAAA,OAAAA,EAASV,WAAWU,OAAO;AAC3BC,gBAAAA,IAAAA,EAAMX,WAAWW;AACnB,aAAA,CAAA;YAEA,MAAMC,SAAAA,GAAY,IAAIC,+CAAAA,CAA8B;gBAClDC,kBAAAA,EAAoBC;AACtB,aAAA,CAAA;YAEA,IAAI;AACF,gBAAA,MAAMC,wBACJT,SAAAA,CAAUU,OAAO,CAACL,SAAAA,CAAAA,EAClBpB,MAAAA,CAAO0B,gBAAgB,EACvB,mBAAA,CAAA;AAGF,gBAAA,MAAMC,WAAAA,GAAcxB,GAAAA,CAAIyB,OAAO,CAACC,IAAI,IAAI,IAAA;gBACxC,MAAML,uBAAAA,CACJJ,UAAUU,aAAa,CAACzB,KAAKC,GAAAA,EAAKqB,WAAAA,CAAAA,EAClC3B,MAAAA,CAAO+B,gBAAgB,EACvB,yBAAA,CAAA;YAEJ,CAAA,QAAU;AACR,gBAAA,MAAMhB,UAAUiB,KAAK,EAAA;AACvB,YAAA;AACF,QAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACdnC,YAAAA,MAAAA,CAAOoC,GAAG,CAACD,KAAK,CAAC,mCAAA,EAAqC;AACpDA,gBAAAA,KAAAA,EAAOA,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMG,OAAO,GAAG,eAAA;AAChDC,gBAAAA,KAAAA,EAAOJ,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMI,KAAK,GAAGd;AAChD,aAAA,CAAA;AAEAV,YAAAA,iCAAAA,CAAiBP,GAAAA,EAAK,gBAAA,CAAA;AAEtB,YAAA,IAAIC,0BAAAA,EAA4B;AAC9B+B,gBAAAA,kCAAAA,CAA2BxC,QAAQyC,iCAAAA,CAA0BN,KAAAA,CAAAA,CAAAA;AAC/D,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"handlePost.js","sources":["../../../../src/services/mcp/handlers/handlePost.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Core } from '@strapi/types';\nimport {\n classifyMcpRequestFailure,\n sendDidNotAuthenticateMcpRequest,\n sendDidNotHandleMcpRequest,\n sendDidUseMcpServer,\n} from '../metrics/metrics';\nimport { sendJsonRpcError } from '../utils/sendJsonRpcError';\nimport { withTimeout } from '../utils/withTimeout';\nimport type { McpHandlerDependencies } from './types';\n\nexport const createPostHandler = (deps: McpHandlerDependencies): Core.MiddlewareHandler => {\n const {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries,\n capabilityDefinitions,\n } = deps;\n\n return async (ctx) => {\n // Opt out of Koa's response phase — the MCP SDK writes directly to ctx.res\n // (via res.writeHead / res.end / SSE streaming). Without this, Koa's respond()\n // would also try to write ctx.body to the socket after the handler returns.\n ctx.respond = false;\n const req = ctx.req;\n const res = ctx.res;\n\n let hadAuthenticatedMcpRequest = false;\n\n try {\n const authResult = await authenticationStrategy.authenticate(ctx);\n if (authResult.authenticated === false) {\n sendDidNotAuthenticateMcpRequest(strapi, authResult.reason);\n sendJsonRpcError(res, 'AUTHENTICATION_REQUIRED');\n return;\n }\n\n hadAuthenticatedMcpRequest = true;\n sendDidUseMcpServer(strapi);\n\n // Let audit logs pick up MCP actions and tag their origin.\n ctx.state.user = authResult.user;\n ctx.state.auditSource = 'mcp';\n\n const { mcpServer } = createServerWithRegistries({\n strapi,\n definitions: capabilityDefinitions,\n isDevMode: config.isDevMode(),\n ability: authResult.ability,\n user: authResult.user,\n });\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: undefined,\n });\n\n try {\n await withTimeout(\n mcpServer.connect(transport),\n config.connectTimeoutMs,\n 'mcpServer.connect'\n );\n\n const requestBody = ctx.request.body ?? null;\n await withTimeout(\n transport.handleRequest(req, res, requestBody),\n config.requestTimeoutMs,\n 'transport.handleRequest'\n );\n } finally {\n await mcpServer.close();\n }\n } catch (error) {\n strapi.log.error('[MCP] Error handling POST request', {\n error: error instanceof Error ? error.message : 'Unknown error',\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n sendJsonRpcError(res, 'INTERNAL_ERROR');\n\n if (hadAuthenticatedMcpRequest) {\n sendDidNotHandleMcpRequest(strapi, classifyMcpRequestFailure(error));\n }\n }\n };\n};\n"],"names":["createPostHandler","deps","strapi","authenticationStrategy","config","createServerWithRegistries","capabilityDefinitions","ctx","respond","req","res","hadAuthenticatedMcpRequest","authResult","authenticate","authenticated","sendDidNotAuthenticateMcpRequest","reason","sendJsonRpcError","sendDidUseMcpServer","state","user","auditSource","mcpServer","definitions","isDevMode","ability","transport","StreamableHTTPServerTransport","sessionIdGenerator","undefined","withTimeout","connect","connectTimeoutMs","requestBody","request","body","handleRequest","requestTimeoutMs","close","error","log","Error","message","stack","sendDidNotHandleMcpRequest","classifyMcpRequestFailure"],"mappings":";;;;;;;AAAA;AAaO,MAAMA,oBAAoB,CAACC,IAAAA,GAAAA;IAChC,MAAM,EACJC,MAAM,EACNC,sBAAsB,EACtBC,MAAM,EACNC,0BAA0B,EAC1BC,qBAAqB,EACtB,GAAGL,IAAAA;AAEJ,IAAA,OAAO,OAAOM,GAAAA,GAAAA;;;;AAIZA,QAAAA,GAAAA,CAAIC,OAAO,GAAG,KAAA;QACd,MAAMC,GAAAA,GAAMF,IAAIE,GAAG;QACnB,MAAMC,GAAAA,GAAMH,IAAIG,GAAG;AAEnB,QAAA,IAAIC,0BAAAA,GAA6B,KAAA;QAEjC,IAAI;AACF,YAAA,MAAMC,UAAAA,GAAa,MAAMT,sBAAAA,CAAuBU,YAAY,CAACN,GAAAA,CAAAA;YAC7D,IAAIK,UAAAA,CAAWE,aAAa,KAAK,KAAA,EAAO;gBACtCC,wCAAAA,CAAiCb,MAAAA,EAAQU,WAAWI,MAAM,CAAA;AAC1DC,gBAAAA,iCAAAA,CAAiBP,GAAAA,EAAK,yBAAA,CAAA;AACtB,gBAAA;AACF,YAAA;YAEAC,0BAAAA,GAA6B,IAAA;YAC7BO,2BAAAA,CAAoBhB,MAAAA,CAAAA;;AAGpBK,YAAAA,GAAAA,CAAIY,KAAK,CAACC,IAAI,GAAGR,WAAWQ,IAAI;YAChCb,GAAAA,CAAIY,KAAK,CAACE,WAAW,GAAG,KAAA;AAExB,YAAA,MAAM,EAAEC,SAAS,EAAE,GAAGjB,0BAAAA,CAA2B;AAC/CH,gBAAAA,MAAAA;gBACAqB,WAAAA,EAAajB,qBAAAA;AACbkB,gBAAAA,SAAAA,EAAWpB,OAAOoB,SAAS,EAAA;AAC3BC,gBAAAA,OAAAA,EAASb,WAAWa,OAAO;AAC3BL,gBAAAA,IAAAA,EAAMR,WAAWQ;AACnB,aAAA,CAAA;YAEA,MAAMM,SAAAA,GAAY,IAAIC,+CAAAA,CAA8B;gBAClDC,kBAAAA,EAAoBC;AACtB,aAAA,CAAA;YAEA,IAAI;AACF,gBAAA,MAAMC,wBACJR,SAAAA,CAAUS,OAAO,CAACL,SAAAA,CAAAA,EAClBtB,MAAAA,CAAO4B,gBAAgB,EACvB,mBAAA,CAAA;AAGF,gBAAA,MAAMC,WAAAA,GAAc1B,GAAAA,CAAI2B,OAAO,CAACC,IAAI,IAAI,IAAA;gBACxC,MAAML,uBAAAA,CACJJ,UAAUU,aAAa,CAAC3B,KAAKC,GAAAA,EAAKuB,WAAAA,CAAAA,EAClC7B,MAAAA,CAAOiC,gBAAgB,EACvB,yBAAA,CAAA;YAEJ,CAAA,QAAU;AACR,gBAAA,MAAMf,UAAUgB,KAAK,EAAA;AACvB,YAAA;AACF,QAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACdrC,YAAAA,MAAAA,CAAOsC,GAAG,CAACD,KAAK,CAAC,mCAAA,EAAqC;AACpDA,gBAAAA,KAAAA,EAAOA,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMG,OAAO,GAAG,eAAA;AAChDC,gBAAAA,KAAAA,EAAOJ,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMI,KAAK,GAAGd;AAChD,aAAA,CAAA;AAEAZ,YAAAA,iCAAAA,CAAiBP,GAAAA,EAAK,gBAAA,CAAA;AAEtB,YAAA,IAAIC,0BAAAA,EAA4B;AAC9BiC,gBAAAA,kCAAAA,CAA2B1C,QAAQ2C,iCAAAA,CAA0BN,KAAAA,CAAAA,CAAAA;AAC/D,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AACF;;;;"}
@@ -23,6 +23,9 @@ const createPostHandler = (deps)=>{
23
23
  }
24
24
  hadAuthenticatedMcpRequest = true;
25
25
  sendDidUseMcpServer(strapi);
26
+ // Let audit logs pick up MCP actions and tag their origin.
27
+ ctx.state.user = authResult.user;
28
+ ctx.state.auditSource = 'mcp';
26
29
  const { mcpServer } = createServerWithRegistries({
27
30
  strapi,
28
31
  definitions: capabilityDefinitions,
@@ -1 +1 @@
1
- {"version":3,"file":"handlePost.mjs","sources":["../../../../src/services/mcp/handlers/handlePost.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Core } from '@strapi/types';\nimport {\n classifyMcpRequestFailure,\n sendDidNotAuthenticateMcpRequest,\n sendDidNotHandleMcpRequest,\n sendDidUseMcpServer,\n} from '../metrics/metrics';\nimport { sendJsonRpcError } from '../utils/sendJsonRpcError';\nimport { withTimeout } from '../utils/withTimeout';\nimport type { McpHandlerDependencies } from './types';\n\nexport const createPostHandler = (deps: McpHandlerDependencies): Core.MiddlewareHandler => {\n const {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries,\n capabilityDefinitions,\n } = deps;\n\n return async (ctx) => {\n // Opt out of Koa's response phase — the MCP SDK writes directly to ctx.res\n // (via res.writeHead / res.end / SSE streaming). Without this, Koa's respond()\n // would also try to write ctx.body to the socket after the handler returns.\n ctx.respond = false;\n const req = ctx.req;\n const res = ctx.res;\n\n let hadAuthenticatedMcpRequest = false;\n\n try {\n const authResult = await authenticationStrategy.authenticate(ctx);\n if (authResult.authenticated === false) {\n sendDidNotAuthenticateMcpRequest(strapi, authResult.reason);\n sendJsonRpcError(res, 'AUTHENTICATION_REQUIRED');\n return;\n }\n\n hadAuthenticatedMcpRequest = true;\n sendDidUseMcpServer(strapi);\n\n const { mcpServer } = createServerWithRegistries({\n strapi,\n definitions: capabilityDefinitions,\n isDevMode: config.isDevMode(),\n ability: authResult.ability,\n user: authResult.user,\n });\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: undefined,\n });\n\n try {\n await withTimeout(\n mcpServer.connect(transport),\n config.connectTimeoutMs,\n 'mcpServer.connect'\n );\n\n const requestBody = ctx.request.body ?? null;\n await withTimeout(\n transport.handleRequest(req, res, requestBody),\n config.requestTimeoutMs,\n 'transport.handleRequest'\n );\n } finally {\n await mcpServer.close();\n }\n } catch (error) {\n strapi.log.error('[MCP] Error handling POST request', {\n error: error instanceof Error ? error.message : 'Unknown error',\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n sendJsonRpcError(res, 'INTERNAL_ERROR');\n\n if (hadAuthenticatedMcpRequest) {\n sendDidNotHandleMcpRequest(strapi, classifyMcpRequestFailure(error));\n }\n }\n };\n};\n"],"names":["createPostHandler","deps","strapi","authenticationStrategy","config","createServerWithRegistries","capabilityDefinitions","ctx","respond","req","res","hadAuthenticatedMcpRequest","authResult","authenticate","authenticated","sendDidNotAuthenticateMcpRequest","reason","sendJsonRpcError","sendDidUseMcpServer","mcpServer","definitions","isDevMode","ability","user","transport","StreamableHTTPServerTransport","sessionIdGenerator","undefined","withTimeout","connect","connectTimeoutMs","requestBody","request","body","handleRequest","requestTimeoutMs","close","error","log","Error","message","stack","sendDidNotHandleMcpRequest","classifyMcpRequestFailure"],"mappings":";;;;;AAAA;AAaO,MAAMA,oBAAoB,CAACC,IAAAA,GAAAA;IAChC,MAAM,EACJC,MAAM,EACNC,sBAAsB,EACtBC,MAAM,EACNC,0BAA0B,EAC1BC,qBAAqB,EACtB,GAAGL,IAAAA;AAEJ,IAAA,OAAO,OAAOM,GAAAA,GAAAA;;;;AAIZA,QAAAA,GAAAA,CAAIC,OAAO,GAAG,KAAA;QACd,MAAMC,GAAAA,GAAMF,IAAIE,GAAG;QACnB,MAAMC,GAAAA,GAAMH,IAAIG,GAAG;AAEnB,QAAA,IAAIC,0BAAAA,GAA6B,KAAA;QAEjC,IAAI;AACF,YAAA,MAAMC,UAAAA,GAAa,MAAMT,sBAAAA,CAAuBU,YAAY,CAACN,GAAAA,CAAAA;YAC7D,IAAIK,UAAAA,CAAWE,aAAa,KAAK,KAAA,EAAO;gBACtCC,gCAAAA,CAAiCb,MAAAA,EAAQU,WAAWI,MAAM,CAAA;AAC1DC,gBAAAA,gBAAAA,CAAiBP,GAAAA,EAAK,yBAAA,CAAA;AACtB,gBAAA;AACF,YAAA;YAEAC,0BAAAA,GAA6B,IAAA;YAC7BO,mBAAAA,CAAoBhB,MAAAA,CAAAA;AAEpB,YAAA,MAAM,EAAEiB,SAAS,EAAE,GAAGd,0BAAAA,CAA2B;AAC/CH,gBAAAA,MAAAA;gBACAkB,WAAAA,EAAad,qBAAAA;AACbe,gBAAAA,SAAAA,EAAWjB,OAAOiB,SAAS,EAAA;AAC3BC,gBAAAA,OAAAA,EAASV,WAAWU,OAAO;AAC3BC,gBAAAA,IAAAA,EAAMX,WAAWW;AACnB,aAAA,CAAA;YAEA,MAAMC,SAAAA,GAAY,IAAIC,6BAAAA,CAA8B;gBAClDC,kBAAAA,EAAoBC;AACtB,aAAA,CAAA;YAEA,IAAI;AACF,gBAAA,MAAMC,YACJT,SAAAA,CAAUU,OAAO,CAACL,SAAAA,CAAAA,EAClBpB,MAAAA,CAAO0B,gBAAgB,EACvB,mBAAA,CAAA;AAGF,gBAAA,MAAMC,WAAAA,GAAcxB,GAAAA,CAAIyB,OAAO,CAACC,IAAI,IAAI,IAAA;gBACxC,MAAML,WAAAA,CACJJ,UAAUU,aAAa,CAACzB,KAAKC,GAAAA,EAAKqB,WAAAA,CAAAA,EAClC3B,MAAAA,CAAO+B,gBAAgB,EACvB,yBAAA,CAAA;YAEJ,CAAA,QAAU;AACR,gBAAA,MAAMhB,UAAUiB,KAAK,EAAA;AACvB,YAAA;AACF,QAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACdnC,YAAAA,MAAAA,CAAOoC,GAAG,CAACD,KAAK,CAAC,mCAAA,EAAqC;AACpDA,gBAAAA,KAAAA,EAAOA,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMG,OAAO,GAAG,eAAA;AAChDC,gBAAAA,KAAAA,EAAOJ,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMI,KAAK,GAAGd;AAChD,aAAA,CAAA;AAEAV,YAAAA,gBAAAA,CAAiBP,GAAAA,EAAK,gBAAA,CAAA;AAEtB,YAAA,IAAIC,0BAAAA,EAA4B;AAC9B+B,gBAAAA,0BAAAA,CAA2BxC,QAAQyC,yBAAAA,CAA0BN,KAAAA,CAAAA,CAAAA;AAC/D,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"handlePost.mjs","sources":["../../../../src/services/mcp/handlers/handlePost.ts"],"sourcesContent":["// eslint-disable-next-line import/extensions\nimport { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';\nimport type { Core } from '@strapi/types';\nimport {\n classifyMcpRequestFailure,\n sendDidNotAuthenticateMcpRequest,\n sendDidNotHandleMcpRequest,\n sendDidUseMcpServer,\n} from '../metrics/metrics';\nimport { sendJsonRpcError } from '../utils/sendJsonRpcError';\nimport { withTimeout } from '../utils/withTimeout';\nimport type { McpHandlerDependencies } from './types';\n\nexport const createPostHandler = (deps: McpHandlerDependencies): Core.MiddlewareHandler => {\n const {\n strapi,\n authenticationStrategy,\n config,\n createServerWithRegistries,\n capabilityDefinitions,\n } = deps;\n\n return async (ctx) => {\n // Opt out of Koa's response phase — the MCP SDK writes directly to ctx.res\n // (via res.writeHead / res.end / SSE streaming). Without this, Koa's respond()\n // would also try to write ctx.body to the socket after the handler returns.\n ctx.respond = false;\n const req = ctx.req;\n const res = ctx.res;\n\n let hadAuthenticatedMcpRequest = false;\n\n try {\n const authResult = await authenticationStrategy.authenticate(ctx);\n if (authResult.authenticated === false) {\n sendDidNotAuthenticateMcpRequest(strapi, authResult.reason);\n sendJsonRpcError(res, 'AUTHENTICATION_REQUIRED');\n return;\n }\n\n hadAuthenticatedMcpRequest = true;\n sendDidUseMcpServer(strapi);\n\n // Let audit logs pick up MCP actions and tag their origin.\n ctx.state.user = authResult.user;\n ctx.state.auditSource = 'mcp';\n\n const { mcpServer } = createServerWithRegistries({\n strapi,\n definitions: capabilityDefinitions,\n isDevMode: config.isDevMode(),\n ability: authResult.ability,\n user: authResult.user,\n });\n\n const transport = new StreamableHTTPServerTransport({\n sessionIdGenerator: undefined,\n });\n\n try {\n await withTimeout(\n mcpServer.connect(transport),\n config.connectTimeoutMs,\n 'mcpServer.connect'\n );\n\n const requestBody = ctx.request.body ?? null;\n await withTimeout(\n transport.handleRequest(req, res, requestBody),\n config.requestTimeoutMs,\n 'transport.handleRequest'\n );\n } finally {\n await mcpServer.close();\n }\n } catch (error) {\n strapi.log.error('[MCP] Error handling POST request', {\n error: error instanceof Error ? error.message : 'Unknown error',\n stack: error instanceof Error ? error.stack : undefined,\n });\n\n sendJsonRpcError(res, 'INTERNAL_ERROR');\n\n if (hadAuthenticatedMcpRequest) {\n sendDidNotHandleMcpRequest(strapi, classifyMcpRequestFailure(error));\n }\n }\n };\n};\n"],"names":["createPostHandler","deps","strapi","authenticationStrategy","config","createServerWithRegistries","capabilityDefinitions","ctx","respond","req","res","hadAuthenticatedMcpRequest","authResult","authenticate","authenticated","sendDidNotAuthenticateMcpRequest","reason","sendJsonRpcError","sendDidUseMcpServer","state","user","auditSource","mcpServer","definitions","isDevMode","ability","transport","StreamableHTTPServerTransport","sessionIdGenerator","undefined","withTimeout","connect","connectTimeoutMs","requestBody","request","body","handleRequest","requestTimeoutMs","close","error","log","Error","message","stack","sendDidNotHandleMcpRequest","classifyMcpRequestFailure"],"mappings":";;;;;AAAA;AAaO,MAAMA,oBAAoB,CAACC,IAAAA,GAAAA;IAChC,MAAM,EACJC,MAAM,EACNC,sBAAsB,EACtBC,MAAM,EACNC,0BAA0B,EAC1BC,qBAAqB,EACtB,GAAGL,IAAAA;AAEJ,IAAA,OAAO,OAAOM,GAAAA,GAAAA;;;;AAIZA,QAAAA,GAAAA,CAAIC,OAAO,GAAG,KAAA;QACd,MAAMC,GAAAA,GAAMF,IAAIE,GAAG;QACnB,MAAMC,GAAAA,GAAMH,IAAIG,GAAG;AAEnB,QAAA,IAAIC,0BAAAA,GAA6B,KAAA;QAEjC,IAAI;AACF,YAAA,MAAMC,UAAAA,GAAa,MAAMT,sBAAAA,CAAuBU,YAAY,CAACN,GAAAA,CAAAA;YAC7D,IAAIK,UAAAA,CAAWE,aAAa,KAAK,KAAA,EAAO;gBACtCC,gCAAAA,CAAiCb,MAAAA,EAAQU,WAAWI,MAAM,CAAA;AAC1DC,gBAAAA,gBAAAA,CAAiBP,GAAAA,EAAK,yBAAA,CAAA;AACtB,gBAAA;AACF,YAAA;YAEAC,0BAAAA,GAA6B,IAAA;YAC7BO,mBAAAA,CAAoBhB,MAAAA,CAAAA;;AAGpBK,YAAAA,GAAAA,CAAIY,KAAK,CAACC,IAAI,GAAGR,WAAWQ,IAAI;YAChCb,GAAAA,CAAIY,KAAK,CAACE,WAAW,GAAG,KAAA;AAExB,YAAA,MAAM,EAAEC,SAAS,EAAE,GAAGjB,0BAAAA,CAA2B;AAC/CH,gBAAAA,MAAAA;gBACAqB,WAAAA,EAAajB,qBAAAA;AACbkB,gBAAAA,SAAAA,EAAWpB,OAAOoB,SAAS,EAAA;AAC3BC,gBAAAA,OAAAA,EAASb,WAAWa,OAAO;AAC3BL,gBAAAA,IAAAA,EAAMR,WAAWQ;AACnB,aAAA,CAAA;YAEA,MAAMM,SAAAA,GAAY,IAAIC,6BAAAA,CAA8B;gBAClDC,kBAAAA,EAAoBC;AACtB,aAAA,CAAA;YAEA,IAAI;AACF,gBAAA,MAAMC,YACJR,SAAAA,CAAUS,OAAO,CAACL,SAAAA,CAAAA,EAClBtB,MAAAA,CAAO4B,gBAAgB,EACvB,mBAAA,CAAA;AAGF,gBAAA,MAAMC,WAAAA,GAAc1B,GAAAA,CAAI2B,OAAO,CAACC,IAAI,IAAI,IAAA;gBACxC,MAAML,WAAAA,CACJJ,UAAUU,aAAa,CAAC3B,KAAKC,GAAAA,EAAKuB,WAAAA,CAAAA,EAClC7B,MAAAA,CAAOiC,gBAAgB,EACvB,yBAAA,CAAA;YAEJ,CAAA,QAAU;AACR,gBAAA,MAAMf,UAAUgB,KAAK,EAAA;AACvB,YAAA;AACF,QAAA,CAAA,CAAE,OAAOC,KAAAA,EAAO;AACdrC,YAAAA,MAAAA,CAAOsC,GAAG,CAACD,KAAK,CAAC,mCAAA,EAAqC;AACpDA,gBAAAA,KAAAA,EAAOA,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMG,OAAO,GAAG,eAAA;AAChDC,gBAAAA,KAAAA,EAAOJ,KAAAA,YAAiBE,KAAAA,GAAQF,KAAAA,CAAMI,KAAK,GAAGd;AAChD,aAAA,CAAA;AAEAZ,YAAAA,gBAAAA,CAAiBP,GAAAA,EAAK,gBAAA,CAAA;AAEtB,YAAA,IAAIC,0BAAAA,EAA4B;AAC9BiC,gBAAAA,0BAAAA,CAA2B1C,QAAQ2C,yBAAAA,CAA0BN,KAAAA,CAAAA,CAAAA;AAC/D,YAAA;AACF,QAAA;AACF,IAAA,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/server/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAgBnD,QAAA,MAAM,YAAY,GAAI,QAAQ,IAAI,CAAC,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MA4F1D,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/server/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAgBnD,QAAA,MAAM,YAAY,GAAI,QAAQ,IAAI,CAAC,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MA8F1D,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -21,6 +21,8 @@ const healthCheck = async (ctx)=>{
21
21
  const createServer = (strapi)=>{
22
22
  const app = koa({
23
23
  proxy: strapi.config.get('server.proxy.koa'),
24
+ proxyIpHeader: strapi.config.get('server.proxy.ipHeader'),
25
+ maxIpsCount: strapi.config.get('server.proxy.maxIpsCount'),
24
26
  keys: strapi.config.get('server.app.keys')
25
27
  });
26
28
  app.use((ctx, next)=>requestContext.run(ctx, ()=>next()));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/services/server/index.ts"],"sourcesContent":["import Router from '@koa/router';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { createHTTPServer } from './http-server';\nimport { createRouteManager } from './routing';\nimport { createAdminAPI } from './admin-api';\nimport { createContentAPI } from './content-api';\nimport registerAllRoutes from './register-routes';\nimport registerApplicationMiddlewares from './register-middlewares';\nimport createKoaApp from './koa';\nimport requestCtx from '../request-context';\n\nconst healthCheck: Core.MiddlewareHandler = async (ctx) => {\n ctx.set('strapi', 'You are so French!');\n ctx.status = 204;\n};\n\nconst createServer = (strapi: Core.Strapi): Modules.Server.Server => {\n const app = createKoaApp({\n proxy: strapi.config.get('server.proxy.koa'),\n keys: strapi.config.get('server.app.keys'),\n });\n\n app.use((ctx, next) => requestCtx.run(ctx, () => next()));\n\n const router = new Router();\n\n const routeManager = createRouteManager(strapi);\n\n const httpServer = createHTTPServer(strapi, app);\n\n const apis = {\n 'content-api': createContentAPI(strapi),\n admin: createAdminAPI(strapi),\n };\n\n // init health check\n router.all('/_health', healthCheck);\n\n const state = {\n mounted: false,\n };\n\n return {\n app,\n router,\n httpServer,\n\n api(name) {\n return apis[name];\n },\n\n use(...args) {\n app.use(...args);\n return this;\n },\n\n routes(routes: Core.Router | Omit<Core.Route, 'info'>[]) {\n if (!Array.isArray(routes) && routes.type) {\n const api = apis[routes.type];\n if (!api) {\n throw new Error(`API ${routes.type} not found. Possible APIs are ${Object.keys(apis)}`);\n }\n\n apis[routes.type].routes(routes);\n return this;\n }\n\n routeManager.addRoutes(routes, router);\n return this;\n },\n\n mount() {\n state.mounted = true;\n\n Object.values(apis).forEach((api) => api.mount(router));\n app.use(router.routes()).use(router.allowedMethods());\n\n return this;\n },\n\n initRouting() {\n registerAllRoutes(strapi);\n\n return this;\n },\n\n async initMiddlewares() {\n await registerApplicationMiddlewares(strapi);\n\n return this;\n },\n\n listRoutes() {\n return [...router.stack];\n },\n\n listen(...args: any[]) {\n if (!state.mounted) {\n this.mount();\n }\n\n return httpServer.listen(...args);\n },\n\n async destroy() {\n await httpServer.destroy();\n },\n };\n};\n\nexport { createServer };\n"],"names":["healthCheck","ctx","set","status","createServer","strapi","app","createKoaApp","proxy","config","get","keys","use","next","requestCtx","run","router","Router","routeManager","createRouteManager","httpServer","createHTTPServer","apis","createContentAPI","admin","createAdminAPI","all","state","mounted","api","name","args","routes","Array","isArray","type","Error","Object","addRoutes","mount","values","forEach","allowedMethods","initRouting","registerAllRoutes","initMiddlewares","registerApplicationMiddlewares","listRoutes","stack","listen","destroy"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/services/server/index.ts"],"sourcesContent":["import Router from '@koa/router';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { createHTTPServer } from './http-server';\nimport { createRouteManager } from './routing';\nimport { createAdminAPI } from './admin-api';\nimport { createContentAPI } from './content-api';\nimport registerAllRoutes from './register-routes';\nimport registerApplicationMiddlewares from './register-middlewares';\nimport createKoaApp from './koa';\nimport requestCtx from '../request-context';\n\nconst healthCheck: Core.MiddlewareHandler = async (ctx) => {\n ctx.set('strapi', 'You are so French!');\n ctx.status = 204;\n};\n\nconst createServer = (strapi: Core.Strapi): Modules.Server.Server => {\n const app = createKoaApp({\n proxy: strapi.config.get('server.proxy.koa'),\n proxyIpHeader: strapi.config.get('server.proxy.ipHeader'),\n maxIpsCount: strapi.config.get('server.proxy.maxIpsCount'),\n keys: strapi.config.get('server.app.keys'),\n });\n\n app.use((ctx, next) => requestCtx.run(ctx, () => next()));\n\n const router = new Router();\n\n const routeManager = createRouteManager(strapi);\n\n const httpServer = createHTTPServer(strapi, app);\n\n const apis = {\n 'content-api': createContentAPI(strapi),\n admin: createAdminAPI(strapi),\n };\n\n // init health check\n router.all('/_health', healthCheck);\n\n const state = {\n mounted: false,\n };\n\n return {\n app,\n router,\n httpServer,\n\n api(name) {\n return apis[name];\n },\n\n use(...args) {\n app.use(...args);\n return this;\n },\n\n routes(routes: Core.Router | Omit<Core.Route, 'info'>[]) {\n if (!Array.isArray(routes) && routes.type) {\n const api = apis[routes.type];\n if (!api) {\n throw new Error(`API ${routes.type} not found. Possible APIs are ${Object.keys(apis)}`);\n }\n\n apis[routes.type].routes(routes);\n return this;\n }\n\n routeManager.addRoutes(routes, router);\n return this;\n },\n\n mount() {\n state.mounted = true;\n\n Object.values(apis).forEach((api) => api.mount(router));\n app.use(router.routes()).use(router.allowedMethods());\n\n return this;\n },\n\n initRouting() {\n registerAllRoutes(strapi);\n\n return this;\n },\n\n async initMiddlewares() {\n await registerApplicationMiddlewares(strapi);\n\n return this;\n },\n\n listRoutes() {\n return [...router.stack];\n },\n\n listen(...args: any[]) {\n if (!state.mounted) {\n this.mount();\n }\n\n return httpServer.listen(...args);\n },\n\n async destroy() {\n await httpServer.destroy();\n },\n };\n};\n\nexport { createServer };\n"],"names":["healthCheck","ctx","set","status","createServer","strapi","app","createKoaApp","proxy","config","get","proxyIpHeader","maxIpsCount","keys","use","next","requestCtx","run","router","Router","routeManager","createRouteManager","httpServer","createHTTPServer","apis","createContentAPI","admin","createAdminAPI","all","state","mounted","api","name","args","routes","Array","isArray","type","Error","Object","addRoutes","mount","values","forEach","allowedMethods","initRouting","registerAllRoutes","initMiddlewares","registerApplicationMiddlewares","listRoutes","stack","listen","destroy"],"mappings":"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"}
@@ -15,6 +15,8 @@ const healthCheck = async (ctx)=>{
15
15
  const createServer = (strapi)=>{
16
16
  const app = createKoaApp({
17
17
  proxy: strapi.config.get('server.proxy.koa'),
18
+ proxyIpHeader: strapi.config.get('server.proxy.ipHeader'),
19
+ maxIpsCount: strapi.config.get('server.proxy.maxIpsCount'),
18
20
  keys: strapi.config.get('server.app.keys')
19
21
  });
20
22
  app.use((ctx, next)=>requestCtx.run(ctx, ()=>next()));
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/services/server/index.ts"],"sourcesContent":["import Router from '@koa/router';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { createHTTPServer } from './http-server';\nimport { createRouteManager } from './routing';\nimport { createAdminAPI } from './admin-api';\nimport { createContentAPI } from './content-api';\nimport registerAllRoutes from './register-routes';\nimport registerApplicationMiddlewares from './register-middlewares';\nimport createKoaApp from './koa';\nimport requestCtx from '../request-context';\n\nconst healthCheck: Core.MiddlewareHandler = async (ctx) => {\n ctx.set('strapi', 'You are so French!');\n ctx.status = 204;\n};\n\nconst createServer = (strapi: Core.Strapi): Modules.Server.Server => {\n const app = createKoaApp({\n proxy: strapi.config.get('server.proxy.koa'),\n keys: strapi.config.get('server.app.keys'),\n });\n\n app.use((ctx, next) => requestCtx.run(ctx, () => next()));\n\n const router = new Router();\n\n const routeManager = createRouteManager(strapi);\n\n const httpServer = createHTTPServer(strapi, app);\n\n const apis = {\n 'content-api': createContentAPI(strapi),\n admin: createAdminAPI(strapi),\n };\n\n // init health check\n router.all('/_health', healthCheck);\n\n const state = {\n mounted: false,\n };\n\n return {\n app,\n router,\n httpServer,\n\n api(name) {\n return apis[name];\n },\n\n use(...args) {\n app.use(...args);\n return this;\n },\n\n routes(routes: Core.Router | Omit<Core.Route, 'info'>[]) {\n if (!Array.isArray(routes) && routes.type) {\n const api = apis[routes.type];\n if (!api) {\n throw new Error(`API ${routes.type} not found. Possible APIs are ${Object.keys(apis)}`);\n }\n\n apis[routes.type].routes(routes);\n return this;\n }\n\n routeManager.addRoutes(routes, router);\n return this;\n },\n\n mount() {\n state.mounted = true;\n\n Object.values(apis).forEach((api) => api.mount(router));\n app.use(router.routes()).use(router.allowedMethods());\n\n return this;\n },\n\n initRouting() {\n registerAllRoutes(strapi);\n\n return this;\n },\n\n async initMiddlewares() {\n await registerApplicationMiddlewares(strapi);\n\n return this;\n },\n\n listRoutes() {\n return [...router.stack];\n },\n\n listen(...args: any[]) {\n if (!state.mounted) {\n this.mount();\n }\n\n return httpServer.listen(...args);\n },\n\n async destroy() {\n await httpServer.destroy();\n },\n };\n};\n\nexport { createServer };\n"],"names":["healthCheck","ctx","set","status","createServer","strapi","app","createKoaApp","proxy","config","get","keys","use","next","requestCtx","run","router","Router","routeManager","createRouteManager","httpServer","createHTTPServer","apis","createContentAPI","admin","createAdminAPI","all","state","mounted","api","name","args","routes","Array","isArray","type","Error","Object","addRoutes","mount","values","forEach","allowedMethods","initRouting","registerAllRoutes","initMiddlewares","registerApplicationMiddlewares","listRoutes","stack","listen","destroy"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/services/server/index.ts"],"sourcesContent":["import Router from '@koa/router';\nimport type { Core, Modules } from '@strapi/types';\n\nimport { createHTTPServer } from './http-server';\nimport { createRouteManager } from './routing';\nimport { createAdminAPI } from './admin-api';\nimport { createContentAPI } from './content-api';\nimport registerAllRoutes from './register-routes';\nimport registerApplicationMiddlewares from './register-middlewares';\nimport createKoaApp from './koa';\nimport requestCtx from '../request-context';\n\nconst healthCheck: Core.MiddlewareHandler = async (ctx) => {\n ctx.set('strapi', 'You are so French!');\n ctx.status = 204;\n};\n\nconst createServer = (strapi: Core.Strapi): Modules.Server.Server => {\n const app = createKoaApp({\n proxy: strapi.config.get('server.proxy.koa'),\n proxyIpHeader: strapi.config.get('server.proxy.ipHeader'),\n maxIpsCount: strapi.config.get('server.proxy.maxIpsCount'),\n keys: strapi.config.get('server.app.keys'),\n });\n\n app.use((ctx, next) => requestCtx.run(ctx, () => next()));\n\n const router = new Router();\n\n const routeManager = createRouteManager(strapi);\n\n const httpServer = createHTTPServer(strapi, app);\n\n const apis = {\n 'content-api': createContentAPI(strapi),\n admin: createAdminAPI(strapi),\n };\n\n // init health check\n router.all('/_health', healthCheck);\n\n const state = {\n mounted: false,\n };\n\n return {\n app,\n router,\n httpServer,\n\n api(name) {\n return apis[name];\n },\n\n use(...args) {\n app.use(...args);\n return this;\n },\n\n routes(routes: Core.Router | Omit<Core.Route, 'info'>[]) {\n if (!Array.isArray(routes) && routes.type) {\n const api = apis[routes.type];\n if (!api) {\n throw new Error(`API ${routes.type} not found. Possible APIs are ${Object.keys(apis)}`);\n }\n\n apis[routes.type].routes(routes);\n return this;\n }\n\n routeManager.addRoutes(routes, router);\n return this;\n },\n\n mount() {\n state.mounted = true;\n\n Object.values(apis).forEach((api) => api.mount(router));\n app.use(router.routes()).use(router.allowedMethods());\n\n return this;\n },\n\n initRouting() {\n registerAllRoutes(strapi);\n\n return this;\n },\n\n async initMiddlewares() {\n await registerApplicationMiddlewares(strapi);\n\n return this;\n },\n\n listRoutes() {\n return [...router.stack];\n },\n\n listen(...args: any[]) {\n if (!state.mounted) {\n this.mount();\n }\n\n return httpServer.listen(...args);\n },\n\n async destroy() {\n await httpServer.destroy();\n },\n };\n};\n\nexport { createServer };\n"],"names":["healthCheck","ctx","set","status","createServer","strapi","app","createKoaApp","proxy","config","get","proxyIpHeader","maxIpsCount","keys","use","next","requestCtx","run","router","Router","routeManager","createRouteManager","httpServer","createHTTPServer","apis","createContentAPI","admin","createAdminAPI","all","state","mounted","api","name","args","routes","Array","isArray","type","Error","Object","addRoutes","mount","values","forEach","allowedMethods","initRouting","registerAllRoutes","initMiddlewares","registerApplicationMiddlewares","listRoutes","stack","listen","destroy"],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import Koa from 'koa';
2
- declare const createKoaApp: ({ proxy, keys }: {
2
+ declare const createKoaApp: ({ proxy, proxyIpHeader, maxIpsCount, keys, }: {
3
3
  proxy: boolean;
4
+ proxyIpHeader: string;
5
+ maxIpsCount: number;
4
6
  keys: string[];
5
7
  }) => Koa<Koa.DefaultState, Koa.DefaultContext>;
6
8
  export default createKoaApp;
@@ -1 +1 @@
1
- {"version":3,"file":"koa.d.ts","sourceRoot":"","sources":["../../../src/services/server/koa.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,KAAK,CAAC;AA8CtB,QAAA,MAAM,YAAY,GAAI,iBAAiB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,8CAOxE,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"koa.d.ts","sourceRoot":"","sources":["../../../src/services/server/koa.ts"],"names":[],"mappings":"AACA,OAAO,GAAG,MAAM,KAAK,CAAC;AA8CtB,QAAA,MAAM,YAAY,GAAI,8CAKnB;IACD,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,8CASA,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -45,10 +45,12 @@ const addCustomMethods = (app)=>{
45
45
  delegator.method('send').method('created').method('deleted');
46
46
  return app;
47
47
  };
48
- const createKoaApp = ({ proxy, keys })=>{
48
+ const createKoaApp = ({ proxy, proxyIpHeader = 'X-Forwarded-For', maxIpsCount = 0, keys })=>{
49
49
  const app = new Koa__default.default({
50
50
  proxy
51
51
  });
52
+ app.proxyIpHeader = proxyIpHeader;
53
+ app.maxIpsCount = maxIpsCount;
52
54
  app.keys = keys;
53
55
  addCustomMethods(app);
54
56
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"koa.js","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport { formatHttpError } from '../errors';\nimport { errorMethodEntries } from './koa-methods';\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n for (const { code, statusName, methodName } of errorMethodEntries()) {\n app.response[methodName] = function responseCode(response = statusName, details = {}) {\n const httpError = createError(code, response, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n\n delegator.method(methodName);\n }\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n const app = new Koa({ proxy });\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n"],"names":["addCustomMethods","app","delegator","delegate","context","code","statusName","methodName","errorMethodEntries","response","responseCode","details","httpError","createError","status","body","formatHttpError","method","send","data","created","deleted","isNil","createKoaApp","proxy","keys","Koa"],"mappings":";;;;;;;;;;;;;;;AAOA,MAAMA,mBAAmB,CAACC,GAAAA,GAAAA;AACxB,IAAA,MAAMC,SAAAA,GAAYC,yBAAAA,CAASF,GAAAA,CAAIG,OAAO,EAAE,UAAA,CAAA;iBAGxC,KAAK,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAEC,UAAU,EAAE,IAAIC,6BAAAA,EAAAA,CAAsB;QACnEP,GAAAA,CAAIQ,QAAQ,CAACF,UAAAA,CAAW,GAAG,SAASG,YAAAA,CAAaD,QAAAA,GAAWH,UAAU,EAAEK,OAAAA,GAAU,EAAE,EAAA;YAClF,MAAMC,SAAAA,GAAYC,4BAAAA,CAAYR,IAAAA,EAAMI,QAAAA,EAAU;AAAEE,gBAAAA;AAAQ,aAAA,CAAA;AACxD,YAAA,MAAM,EAAEG,MAAM,EAAEC,IAAI,EAAE,GAAGC,sBAAAA,CAAgBJ,SAAAA,CAAAA;YACzC,IAAI,CAACE,MAAM,GAAGA,MAAAA;YACd,IAAI,CAACC,IAAI,GAAGA,IAAAA;AACd,QAAA,CAAA;AAEAb,QAAAA,SAAAA,CAAUe,MAAM,CAACV,UAAAA,CAAAA;AACnB,IAAA;iCAGAN,GAAAA,CAAIQ,QAAQ,CAACS,IAAI,GAAG,SAASA,IAAAA,CAAKC,IAAI,EAAEL,MAAAA,GAAS,GAAG,EAAA;QAClD,IAAI,CAACA,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACW,OAAO,GAAG,SAASA,QAAQD,IAAI,EAAA;QAC1C,IAAI,CAACL,MAAM,GAAG,GAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACY,OAAO,GAAG,SAASA,QAAQF,IAAI,EAAA;AAC1C,QAAA,IAAIG,SAAMH,IAAAA,CAAAA,EAAO;YACf,IAAI,CAACL,MAAM,GAAG,GAAA;QAChB,CAAA,MAAO;YACL,IAAI,CAACA,MAAM,GAAG,GAAA;YACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,QAAA;AACF,IAAA,CAAA;AAEAjB,IAAAA,SAAAA,CAAUe,MAAM,CAAC,MAAA,CAAA,CAAQA,MAAM,CAAC,SAAA,CAAA,CAAWA,MAAM,CAAC,SAAA,CAAA;IAElD,OAAOhB,GAAAA;AACT,CAAA;AAEA,MAAMsB,eAAe,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAsC,GAAA;IACvE,MAAMxB,GAAAA,GAAM,IAAIyB,oBAAAA,CAAI;AAAEF,QAAAA;AAAM,KAAA,CAAA;AAC5BvB,IAAAA,GAAAA,CAAIwB,IAAI,GAAGA,IAAAA;IAEXzB,gBAAAA,CAAiBC,GAAAA,CAAAA;IAEjB,OAAOA,GAAAA;AACT;;;;"}
1
+ {"version":3,"file":"koa.js","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport { formatHttpError } from '../errors';\nimport { errorMethodEntries } from './koa-methods';\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n for (const { code, statusName, methodName } of errorMethodEntries()) {\n app.response[methodName] = function responseCode(response = statusName, details = {}) {\n const httpError = createError(code, response, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n\n delegator.method(methodName);\n }\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({\n proxy,\n proxyIpHeader = 'X-Forwarded-For',\n maxIpsCount = 0,\n keys,\n}: {\n proxy: boolean;\n proxyIpHeader: string;\n maxIpsCount: number;\n keys: string[];\n}) => {\n const app = new Koa({ proxy });\n app.proxyIpHeader = proxyIpHeader;\n app.maxIpsCount = maxIpsCount;\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n"],"names":["addCustomMethods","app","delegator","delegate","context","code","statusName","methodName","errorMethodEntries","response","responseCode","details","httpError","createError","status","body","formatHttpError","method","send","data","created","deleted","isNil","createKoaApp","proxy","proxyIpHeader","maxIpsCount","keys","Koa"],"mappings":";;;;;;;;;;;;;;;AAOA,MAAMA,mBAAmB,CAACC,GAAAA,GAAAA;AACxB,IAAA,MAAMC,SAAAA,GAAYC,yBAAAA,CAASF,GAAAA,CAAIG,OAAO,EAAE,UAAA,CAAA;iBAGxC,KAAK,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAEC,UAAU,EAAE,IAAIC,6BAAAA,EAAAA,CAAsB;QACnEP,GAAAA,CAAIQ,QAAQ,CAACF,UAAAA,CAAW,GAAG,SAASG,YAAAA,CAAaD,QAAAA,GAAWH,UAAU,EAAEK,OAAAA,GAAU,EAAE,EAAA;YAClF,MAAMC,SAAAA,GAAYC,4BAAAA,CAAYR,IAAAA,EAAMI,QAAAA,EAAU;AAAEE,gBAAAA;AAAQ,aAAA,CAAA;AACxD,YAAA,MAAM,EAAEG,MAAM,EAAEC,IAAI,EAAE,GAAGC,sBAAAA,CAAgBJ,SAAAA,CAAAA;YACzC,IAAI,CAACE,MAAM,GAAGA,MAAAA;YACd,IAAI,CAACC,IAAI,GAAGA,IAAAA;AACd,QAAA,CAAA;AAEAb,QAAAA,SAAAA,CAAUe,MAAM,CAACV,UAAAA,CAAAA;AACnB,IAAA;iCAGAN,GAAAA,CAAIQ,QAAQ,CAACS,IAAI,GAAG,SAASA,IAAAA,CAAKC,IAAI,EAAEL,MAAAA,GAAS,GAAG,EAAA;QAClD,IAAI,CAACA,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACW,OAAO,GAAG,SAASA,QAAQD,IAAI,EAAA;QAC1C,IAAI,CAACL,MAAM,GAAG,GAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACY,OAAO,GAAG,SAASA,QAAQF,IAAI,EAAA;AAC1C,QAAA,IAAIG,SAAMH,IAAAA,CAAAA,EAAO;YACf,IAAI,CAACL,MAAM,GAAG,GAAA;QAChB,CAAA,MAAO;YACL,IAAI,CAACA,MAAM,GAAG,GAAA;YACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,QAAA;AACF,IAAA,CAAA;AAEAjB,IAAAA,SAAAA,CAAUe,MAAM,CAAC,MAAA,CAAA,CAAQA,MAAM,CAAC,SAAA,CAAA,CAAWA,MAAM,CAAC,SAAA,CAAA;IAElD,OAAOhB,GAAAA;AACT,CAAA;AAEA,MAAMsB,YAAAA,GAAe,CAAC,EACpBC,KAAK,EACLC,aAAAA,GAAgB,iBAAiB,EACjCC,WAAAA,GAAc,CAAC,EACfC,IAAI,EAML,GAAA;IACC,MAAM1B,GAAAA,GAAM,IAAI2B,oBAAAA,CAAI;AAAEJ,QAAAA;AAAM,KAAA,CAAA;AAC5BvB,IAAAA,GAAAA,CAAIwB,aAAa,GAAGA,aAAAA;AACpBxB,IAAAA,GAAAA,CAAIyB,WAAW,GAAGA,WAAAA;AAClBzB,IAAAA,GAAAA,CAAI0B,IAAI,GAAGA,IAAAA;IAEX3B,gBAAAA,CAAiBC,GAAAA,CAAAA;IAEjB,OAAOA,GAAAA;AACT;;;;"}
@@ -37,10 +37,12 @@ const addCustomMethods = (app)=>{
37
37
  delegator.method('send').method('created').method('deleted');
38
38
  return app;
39
39
  };
40
- const createKoaApp = ({ proxy, keys })=>{
40
+ const createKoaApp = ({ proxy, proxyIpHeader = 'X-Forwarded-For', maxIpsCount = 0, keys })=>{
41
41
  const app = new Koa({
42
42
  proxy
43
43
  });
44
+ app.proxyIpHeader = proxyIpHeader;
45
+ app.maxIpsCount = maxIpsCount;
44
46
  app.keys = keys;
45
47
  addCustomMethods(app);
46
48
  return app;
@@ -1 +1 @@
1
- {"version":3,"file":"koa.mjs","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport { formatHttpError } from '../errors';\nimport { errorMethodEntries } from './koa-methods';\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n for (const { code, statusName, methodName } of errorMethodEntries()) {\n app.response[methodName] = function responseCode(response = statusName, details = {}) {\n const httpError = createError(code, response, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n\n delegator.method(methodName);\n }\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({ proxy, keys }: { proxy: boolean; keys: string[] }) => {\n const app = new Koa({ proxy });\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n"],"names":["addCustomMethods","app","delegator","delegate","context","code","statusName","methodName","errorMethodEntries","response","responseCode","details","httpError","createError","status","body","formatHttpError","method","send","data","created","deleted","isNil","createKoaApp","proxy","keys","Koa"],"mappings":";;;;;;;AAOA,MAAMA,mBAAmB,CAACC,GAAAA,GAAAA;AACxB,IAAA,MAAMC,SAAAA,GAAYC,QAAAA,CAASF,GAAAA,CAAIG,OAAO,EAAE,UAAA,CAAA;iBAGxC,KAAK,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAEC,UAAU,EAAE,IAAIC,kBAAAA,EAAAA,CAAsB;QACnEP,GAAAA,CAAIQ,QAAQ,CAACF,UAAAA,CAAW,GAAG,SAASG,YAAAA,CAAaD,QAAAA,GAAWH,UAAU,EAAEK,OAAAA,GAAU,EAAE,EAAA;YAClF,MAAMC,SAAAA,GAAYC,WAAAA,CAAYR,IAAAA,EAAMI,QAAAA,EAAU;AAAEE,gBAAAA;AAAQ,aAAA,CAAA;AACxD,YAAA,MAAM,EAAEG,MAAM,EAAEC,IAAI,EAAE,GAAGC,eAAAA,CAAgBJ,SAAAA,CAAAA;YACzC,IAAI,CAACE,MAAM,GAAGA,MAAAA;YACd,IAAI,CAACC,IAAI,GAAGA,IAAAA;AACd,QAAA,CAAA;AAEAb,QAAAA,SAAAA,CAAUe,MAAM,CAACV,UAAAA,CAAAA;AACnB,IAAA;iCAGAN,GAAAA,CAAIQ,QAAQ,CAACS,IAAI,GAAG,SAASA,IAAAA,CAAKC,IAAI,EAAEL,MAAAA,GAAS,GAAG,EAAA;QAClD,IAAI,CAACA,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACW,OAAO,GAAG,SAASA,QAAQD,IAAI,EAAA;QAC1C,IAAI,CAACL,MAAM,GAAG,GAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACY,OAAO,GAAG,SAASA,QAAQF,IAAI,EAAA;AAC1C,QAAA,IAAIG,MAAMH,IAAAA,CAAAA,EAAO;YACf,IAAI,CAACL,MAAM,GAAG,GAAA;QAChB,CAAA,MAAO;YACL,IAAI,CAACA,MAAM,GAAG,GAAA;YACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,QAAA;AACF,IAAA,CAAA;AAEAjB,IAAAA,SAAAA,CAAUe,MAAM,CAAC,MAAA,CAAA,CAAQA,MAAM,CAAC,SAAA,CAAA,CAAWA,MAAM,CAAC,SAAA,CAAA;IAElD,OAAOhB,GAAAA;AACT,CAAA;AAEA,MAAMsB,eAAe,CAAC,EAAEC,KAAK,EAAEC,IAAI,EAAsC,GAAA;IACvE,MAAMxB,GAAAA,GAAM,IAAIyB,GAAAA,CAAI;AAAEF,QAAAA;AAAM,KAAA,CAAA;AAC5BvB,IAAAA,GAAAA,CAAIwB,IAAI,GAAGA,IAAAA;IAEXzB,gBAAAA,CAAiBC,GAAAA,CAAAA;IAEjB,OAAOA,GAAAA;AACT;;;;"}
1
+ {"version":3,"file":"koa.mjs","sources":["../../../src/services/server/koa.ts"],"sourcesContent":["import { isNil } from 'lodash/fp';\nimport Koa from 'koa';\nimport createError from 'http-errors';\nimport delegate from 'delegates';\nimport { formatHttpError } from '../errors';\nimport { errorMethodEntries } from './koa-methods';\n\nconst addCustomMethods = (app: Koa) => {\n const delegator = delegate(app.context, 'response');\n\n /* errors */\n for (const { code, statusName, methodName } of errorMethodEntries()) {\n app.response[methodName] = function responseCode(response = statusName, details = {}) {\n const httpError = createError(code, response, { details });\n const { status, body } = formatHttpError(httpError);\n this.status = status;\n this.body = body;\n };\n\n delegator.method(methodName);\n }\n\n /* send, created, deleted */\n app.response.send = function send(data, status = 200) {\n this.status = status;\n this.body = data;\n };\n\n app.response.created = function created(data) {\n this.status = 201;\n this.body = data;\n };\n\n app.response.deleted = function deleted(data) {\n if (isNil(data)) {\n this.status = 204;\n } else {\n this.status = 200;\n this.body = data;\n }\n };\n\n delegator.method('send').method('created').method('deleted');\n\n return app;\n};\n\nconst createKoaApp = ({\n proxy,\n proxyIpHeader = 'X-Forwarded-For',\n maxIpsCount = 0,\n keys,\n}: {\n proxy: boolean;\n proxyIpHeader: string;\n maxIpsCount: number;\n keys: string[];\n}) => {\n const app = new Koa({ proxy });\n app.proxyIpHeader = proxyIpHeader;\n app.maxIpsCount = maxIpsCount;\n app.keys = keys;\n\n addCustomMethods(app);\n\n return app;\n};\n\nexport default createKoaApp;\n"],"names":["addCustomMethods","app","delegator","delegate","context","code","statusName","methodName","errorMethodEntries","response","responseCode","details","httpError","createError","status","body","formatHttpError","method","send","data","created","deleted","isNil","createKoaApp","proxy","proxyIpHeader","maxIpsCount","keys","Koa"],"mappings":";;;;;;;AAOA,MAAMA,mBAAmB,CAACC,GAAAA,GAAAA;AACxB,IAAA,MAAMC,SAAAA,GAAYC,QAAAA,CAASF,GAAAA,CAAIG,OAAO,EAAE,UAAA,CAAA;iBAGxC,KAAK,MAAM,EAAEC,IAAI,EAAEC,UAAU,EAAEC,UAAU,EAAE,IAAIC,kBAAAA,EAAAA,CAAsB;QACnEP,GAAAA,CAAIQ,QAAQ,CAACF,UAAAA,CAAW,GAAG,SAASG,YAAAA,CAAaD,QAAAA,GAAWH,UAAU,EAAEK,OAAAA,GAAU,EAAE,EAAA;YAClF,MAAMC,SAAAA,GAAYC,WAAAA,CAAYR,IAAAA,EAAMI,QAAAA,EAAU;AAAEE,gBAAAA;AAAQ,aAAA,CAAA;AACxD,YAAA,MAAM,EAAEG,MAAM,EAAEC,IAAI,EAAE,GAAGC,eAAAA,CAAgBJ,SAAAA,CAAAA;YACzC,IAAI,CAACE,MAAM,GAAGA,MAAAA;YACd,IAAI,CAACC,IAAI,GAAGA,IAAAA;AACd,QAAA,CAAA;AAEAb,QAAAA,SAAAA,CAAUe,MAAM,CAACV,UAAAA,CAAAA;AACnB,IAAA;iCAGAN,GAAAA,CAAIQ,QAAQ,CAACS,IAAI,GAAG,SAASA,IAAAA,CAAKC,IAAI,EAAEL,MAAAA,GAAS,GAAG,EAAA;QAClD,IAAI,CAACA,MAAM,GAAGA,MAAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACW,OAAO,GAAG,SAASA,QAAQD,IAAI,EAAA;QAC1C,IAAI,CAACL,MAAM,GAAG,GAAA;QACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,IAAA,CAAA;AAEAlB,IAAAA,GAAAA,CAAIQ,QAAQ,CAACY,OAAO,GAAG,SAASA,QAAQF,IAAI,EAAA;AAC1C,QAAA,IAAIG,MAAMH,IAAAA,CAAAA,EAAO;YACf,IAAI,CAACL,MAAM,GAAG,GAAA;QAChB,CAAA,MAAO;YACL,IAAI,CAACA,MAAM,GAAG,GAAA;YACd,IAAI,CAACC,IAAI,GAAGI,IAAAA;AACd,QAAA;AACF,IAAA,CAAA;AAEAjB,IAAAA,SAAAA,CAAUe,MAAM,CAAC,MAAA,CAAA,CAAQA,MAAM,CAAC,SAAA,CAAA,CAAWA,MAAM,CAAC,SAAA,CAAA;IAElD,OAAOhB,GAAAA;AACT,CAAA;AAEA,MAAMsB,YAAAA,GAAe,CAAC,EACpBC,KAAK,EACLC,aAAAA,GAAgB,iBAAiB,EACjCC,WAAAA,GAAc,CAAC,EACfC,IAAI,EAML,GAAA;IACC,MAAM1B,GAAAA,GAAM,IAAI2B,GAAAA,CAAI;AAAEJ,QAAAA;AAAM,KAAA,CAAA;AAC5BvB,IAAAA,GAAAA,CAAIwB,aAAa,GAAGA,aAAAA;AACpBxB,IAAAA,GAAAA,CAAIyB,WAAW,GAAGA,WAAAA;AAClBzB,IAAAA,GAAAA,CAAI0B,IAAI,GAAGA,IAAAA;IAEX3B,gBAAAA,CAAiBC,GAAAA,CAAAA;IAEjB,OAAOA,GAAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/core",
3
- "version": "5.51.2",
3
+ "version": "5.52.1",
4
4
  "description": "Core of Strapi",
5
5
  "homepage": "https://strapi.io",
6
6
  "bugs": {
@@ -60,17 +60,17 @@
60
60
  "@casl/ability": "6.7.5",
61
61
  "@koa/cors": "5.0.0",
62
62
  "@koa/router": "12.0.2",
63
- "@modelcontextprotocol/sdk": "1.29.0",
63
+ "@modelcontextprotocol/sdk": "1.30.0",
64
64
  "@paralleldrive/cuid2": "2.2.2",
65
- "@strapi/admin": "5.51.2",
66
- "@strapi/database": "5.51.2",
67
- "@strapi/generators": "5.51.2",
68
- "@strapi/logger": "5.51.2",
69
- "@strapi/openapi": "5.51.2",
70
- "@strapi/permissions": "5.51.2",
71
- "@strapi/types": "5.51.2",
72
- "@strapi/typescript-utils": "5.51.2",
73
- "@strapi/utils": "5.51.2",
65
+ "@strapi/admin": "5.52.1",
66
+ "@strapi/database": "5.52.1",
67
+ "@strapi/generators": "5.52.1",
68
+ "@strapi/logger": "5.52.1",
69
+ "@strapi/openapi": "5.52.1",
70
+ "@strapi/permissions": "5.52.1",
71
+ "@strapi/types": "5.52.1",
72
+ "@strapi/typescript-utils": "5.52.1",
73
+ "@strapi/utils": "5.52.1",
74
74
  "@vercel/stega": "0.1.2",
75
75
  "bcryptjs": "2.4.3",
76
76
  "boxen": "5.1.2",
@@ -134,12 +134,12 @@
134
134
  "@types/mime-types": "2.1.1",
135
135
  "@types/node": "20.19.41",
136
136
  "@types/node-schedule": "2.1.7",
137
- "eslint-config-custom": "5.51.2",
137
+ "eslint-config-custom": "5.52.1",
138
138
  "jest": "29.6.0",
139
139
  "supertest": "7.2.2",
140
- "tsconfig": "5.51.2",
140
+ "tsconfig": "5.52.1",
141
141
  "vitest": "catalog:",
142
- "vitest-config": "5.51.2"
142
+ "vitest-config": "5.52.1"
143
143
  },
144
144
  "engines": {
145
145
  "node": ">=20.0.0 <=26.x.x",