@payloadcms/plugin-mcp 4.0.0-internal.a0ef1b8 → 4.0.0-internal.a1317b2
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/LICENSE.md +1 -1
- package/bin.js +7 -0
- package/dist/defaultAccess.d.ts +3 -0
- package/dist/defaultAccess.d.ts.map +1 -0
- package/dist/defaultAccess.js +3 -0
- package/dist/defaultAccess.js.map +1 -0
- package/dist/defineTool.d.ts +8 -8
- package/dist/defineTool.d.ts.map +1 -1
- package/dist/endpoint/access.d.ts +12 -5
- package/dist/endpoint/access.d.ts.map +1 -1
- package/dist/endpoint/access.js +75 -88
- package/dist/endpoint/access.js.map +1 -1
- package/dist/endpoint/index.d.ts +1 -1
- package/dist/endpoint/index.d.ts.map +1 -1
- package/dist/endpoint/index.js +68 -17
- package/dist/endpoint/index.js.map +1 -1
- package/dist/exports/client.d.ts +1 -1
- package/dist/exports/client.d.ts.map +1 -1
- package/dist/exports/client.js +1 -1
- package/dist/exports/client.js.map +1 -1
- package/dist/exports/internal.d.ts +2 -0
- package/dist/exports/internal.d.ts.map +1 -0
- package/dist/exports/internal.js +3 -0
- package/dist/exports/internal.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -20
- package/dist/index.js.map +1 -1
- package/dist/mcp/buildMcpServer.d.ts +5 -5
- package/dist/mcp/buildMcpServer.d.ts.map +1 -1
- package/dist/mcp/buildMcpServer.js +145 -80
- package/dist/mcp/buildMcpServer.js.map +1 -1
- package/dist/mcp/builtin/collections/authTools.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/authTools.js +122 -61
- package/dist/mcp/builtin/collections/authTools.js.map +1 -1
- package/dist/mcp/builtin/collections/countTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/countTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/countTool.js +63 -0
- package/dist/mcp/builtin/collections/countTool.js.map +1 -0
- package/dist/mcp/builtin/collections/countVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/countVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/countVersionsTool.js +60 -0
- package/dist/mcp/builtin/collections/countVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/collections/createTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/createTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/createTool.js +111 -68
- package/dist/mcp/builtin/collections/createTool.js.map +1 -1
- package/dist/mcp/builtin/collections/deleteTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/deleteTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/deleteTool.js +51 -61
- package/dist/mcp/builtin/collections/deleteTool.js.map +1 -1
- package/dist/mcp/builtin/collections/duplicateTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/duplicateTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/duplicateTool.js +86 -0
- package/dist/mcp/builtin/collections/duplicateTool.js.map +1 -0
- package/dist/mcp/builtin/collections/fileInput.d.ts +28 -0
- package/dist/mcp/builtin/collections/fileInput.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/fileInput.js +123 -0
- package/dist/mcp/builtin/collections/fileInput.js.map +1 -0
- package/dist/mcp/builtin/collections/fileInput.spec.js +86 -0
- package/dist/mcp/builtin/collections/fileInput.spec.js.map +1 -0
- package/dist/mcp/builtin/collections/findDistinctTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findDistinctTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findDistinctTool.js +77 -0
- package/dist/mcp/builtin/collections/findDistinctTool.js.map +1 -0
- package/dist/mcp/builtin/collections/findTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/findTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/findTool.js +55 -72
- package/dist/mcp/builtin/collections/findTool.js.map +1 -1
- package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findVersionByIDTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findVersionByIDTool.js +74 -0
- package/dist/mcp/builtin/collections/findVersionByIDTool.js.map +1 -0
- package/dist/mcp/builtin/collections/findVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/findVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/findVersionsTool.js +84 -0
- package/dist/mcp/builtin/collections/findVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.js +87 -0
- package/dist/mcp/builtin/collections/getCollectionSchemaTool.js.map +1 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.js +69 -0
- package/dist/mcp/builtin/collections/restoreVersionTool.js.map +1 -0
- package/dist/mcp/builtin/collections/updateTool.d.ts +1 -1
- package/dist/mcp/builtin/collections/updateTool.d.ts.map +1 -1
- package/dist/mcp/builtin/collections/updateTool.js +104 -136
- package/dist/mcp/builtin/collections/updateTool.js.map +1 -1
- package/dist/mcp/builtin/collections/uploadInstructionsTool.d.ts +2 -0
- package/dist/mcp/builtin/collections/uploadInstructionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/collections/uploadInstructionsTool.js +55 -0
- package/dist/mcp/builtin/collections/uploadInstructionsTool.js.map +1 -0
- package/dist/mcp/builtin/formatEntityError.d.ts +16 -0
- package/dist/mcp/builtin/formatEntityError.d.ts.map +1 -0
- package/dist/mcp/builtin/formatEntityError.js +55 -0
- package/dist/mcp/builtin/formatEntityError.js.map +1 -0
- package/dist/mcp/builtin/getConfigInfoTool.d.ts +2 -0
- package/dist/mcp/builtin/getConfigInfoTool.d.ts.map +1 -0
- package/dist/mcp/builtin/getConfigInfoTool.js +69 -0
- package/dist/mcp/builtin/getConfigInfoTool.js.map +1 -0
- package/dist/mcp/builtin/globals/countVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/countVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/countVersionsTool.js +60 -0
- package/dist/mcp/builtin/globals/countVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/globals/findTool.d.ts.map +1 -1
- package/dist/mcp/builtin/globals/findTool.js +27 -36
- package/dist/mcp/builtin/globals/findTool.js.map +1 -1
- package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/findVersionByIDTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/findVersionByIDTool.js +68 -0
- package/dist/mcp/builtin/globals/findVersionByIDTool.js.map +1 -0
- package/dist/mcp/builtin/globals/findVersionsTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/findVersionsTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/findVersionsTool.js +78 -0
- package/dist/mcp/builtin/globals/findVersionsTool.js.map +1 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.js +65 -0
- package/dist/mcp/builtin/globals/getGlobalSchemaTool.js.map +1 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.d.ts +2 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.d.ts.map +1 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.js +70 -0
- package/dist/mcp/builtin/globals/restoreVersionTool.js.map +1 -0
- package/dist/mcp/builtin/globals/updateTool.d.ts.map +1 -1
- package/dist/mcp/builtin/globals/updateTool.js +44 -62
- package/dist/mcp/builtin/globals/updateTool.js.map +1 -1
- package/dist/mcp/builtinTools.d.ts +150 -19
- package/dist/mcp/builtinTools.d.ts.map +1 -1
- package/dist/mcp/builtinTools.js +125 -20
- package/dist/mcp/builtinTools.js.map +1 -1
- package/dist/mcp/sanitizeMCPConfig.d.ts +0 -1
- package/dist/mcp/sanitizeMCPConfig.d.ts.map +1 -1
- package/dist/mcp/sanitizeMCPConfig.js +124 -58
- package/dist/mcp/sanitizeMCPConfig.js.map +1 -1
- package/dist/stdio.d.ts +3 -3
- package/dist/stdio.d.ts.map +1 -1
- package/dist/stdio.js +84 -46
- package/dist/stdio.js.map +1 -1
- package/dist/types.d.ts +114 -112
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -4
- package/dist/types.js.map +1 -1
- package/dist/utils/camelCase.d.ts.map +1 -1
- package/dist/utils/getPluginConfig.d.ts +1 -1
- package/dist/utils/getPluginConfig.js +1 -1
- package/dist/utils/getPluginConfig.js.map +1 -1
- package/dist/utils/resolveProjectRoot.d.ts.map +1 -1
- package/dist/utils/toStandardSchema.d.ts.map +1 -1
- package/package.json +11 -18
- package/src/defaultAccess.ts +3 -0
- package/src/endpoint/access.ts +80 -101
- package/src/endpoint/index.ts +58 -16
- package/src/exports/client.ts +2 -1
- package/src/exports/internal.ts +1 -0
- package/src/index.ts +12 -20
- package/src/mcp/buildMcpServer.ts +179 -114
- package/src/mcp/builtin/collections/authTools.ts +119 -75
- package/src/mcp/builtin/collections/countTool.ts +61 -0
- package/src/mcp/builtin/collections/countVersionsTool.ts +60 -0
- package/src/mcp/builtin/collections/createTool.ts +104 -88
- package/src/mcp/builtin/collections/deleteTool.ts +48 -74
- package/src/mcp/builtin/collections/duplicateTool.ts +83 -0
- package/src/mcp/builtin/collections/fileInput.spec.ts +93 -0
- package/src/mcp/builtin/collections/fileInput.ts +169 -0
- package/src/mcp/builtin/collections/findDistinctTool.ts +67 -0
- package/src/mcp/builtin/collections/findTool.ts +55 -108
- package/src/mcp/builtin/collections/findVersionByIDTool.ts +66 -0
- package/src/mcp/builtin/collections/findVersionsTool.ts +83 -0
- package/src/mcp/builtin/collections/getCollectionSchemaTool.ts +80 -0
- package/src/mcp/builtin/collections/restoreVersionTool.ts +65 -0
- package/src/mcp/builtin/collections/updateTool.ts +101 -142
- package/src/mcp/builtin/collections/uploadInstructionsTool.ts +64 -0
- package/src/mcp/builtin/formatEntityError.ts +77 -0
- package/src/mcp/builtin/getConfigInfoTool.ts +68 -0
- package/src/mcp/builtin/globals/countVersionsTool.ts +60 -0
- package/src/mcp/builtin/globals/findTool.ts +27 -57
- package/src/mcp/builtin/globals/findVersionByIDTool.ts +64 -0
- package/src/mcp/builtin/globals/findVersionsTool.ts +69 -0
- package/src/mcp/builtin/globals/getGlobalSchemaTool.ts +63 -0
- package/src/mcp/builtin/globals/restoreVersionTool.ts +68 -0
- package/src/mcp/builtin/globals/updateTool.ts +51 -79
- package/src/mcp/builtinTools.ts +118 -41
- package/src/mcp/sanitizeMCPConfig.ts +120 -78
- package/src/stdio.ts +79 -46
- package/src/types.ts +130 -117
- package/src/utils/getPluginConfig.ts +1 -1
- package/dist/@types/assets.d.js +0 -2
- package/dist/@types/assets.d.js.map +0 -1
- package/dist/collection/getAccessField.d.ts +0 -12
- package/dist/collection/getAccessField.d.ts.map +0 -1
- package/dist/collection/getAccessField.js +0 -57
- package/dist/collection/getAccessField.js.map +0 -1
- package/dist/collection/index.d.ts +0 -6
- package/dist/collection/index.d.ts.map +0 -1
- package/dist/collection/index.js +0 -60
- package/dist/collection/index.js.map +0 -1
- package/dist/components/AccessField/index.client.d.ts +0 -10
- package/dist/components/AccessField/index.client.d.ts.map +0 -1
- package/dist/components/AccessField/index.client.js +0 -305
- package/dist/components/AccessField/index.client.js.map +0 -1
- package/dist/components/AccessField/index.css +0 -93
- package/dist/utils/getVirtualFieldNames.d.ts +0 -14
- package/dist/utils/getVirtualFieldNames.d.ts.map +0 -1
- package/dist/utils/getVirtualFieldNames.js +0 -35
- package/dist/utils/getVirtualFieldNames.js.map +0 -1
- package/dist/utils/localAPIDefaults.d.ts +0 -20
- package/dist/utils/localAPIDefaults.d.ts.map +0 -1
- package/dist/utils/localAPIDefaults.js +0 -19
- package/dist/utils/localAPIDefaults.js.map +0 -1
- package/dist/utils/schemaConversion/buildToolInput.d.ts +0 -29
- package/dist/utils/schemaConversion/buildToolInput.d.ts.map +0 -1
- package/dist/utils/schemaConversion/buildToolInput.js +0 -51
- package/dist/utils/schemaConversion/buildToolInput.js.map +0 -1
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts +0 -7
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.d.ts.map +0 -1
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js +0 -20
- package/dist/utils/schemaConversion/removeVirtualFieldsFromSchema.js.map +0 -1
- package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts +0 -15
- package/dist/utils/schemaConversion/sanitizeEntitySchema.d.ts.map +0 -1
- package/dist/utils/schemaConversion/sanitizeEntitySchema.js +0 -464
- package/dist/utils/schemaConversion/sanitizeEntitySchema.js.map +0 -1
- package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js +0 -158
- package/dist/utils/schemaConversion/sanitizeEntitySchema.spec.js.map +0 -1
- package/dist/utils/transformPointDataToPayload.d.ts +0 -7
- package/dist/utils/transformPointDataToPayload.d.ts.map +0 -1
- package/dist/utils/transformPointDataToPayload.js +0 -28
- package/dist/utils/transformPointDataToPayload.js.map +0 -1
- package/src/@types/assets.d.ts +0 -3
- package/src/collection/getAccessField.ts +0 -64
- package/src/collection/index.ts +0 -64
- package/src/components/AccessField/index.client.tsx +0 -344
- package/src/components/AccessField/index.css +0 -93
- package/src/utils/getVirtualFieldNames.ts +0 -53
- package/src/utils/localAPIDefaults.ts +0 -22
- package/src/utils/schemaConversion/buildToolInput.ts +0 -68
- package/src/utils/schemaConversion/removeVirtualFieldsFromSchema.ts +0 -27
- package/src/utils/schemaConversion/sanitizeEntitySchema.spec.ts +0 -103
- package/src/utils/schemaConversion/sanitizeEntitySchema.ts +0 -529
- package/src/utils/transformPointDataToPayload.ts +0 -40
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { countGlobalVersionsInputSchema } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
4
|
+
import { defineGlobalTool } from '../../../defineTool.js'
|
|
5
|
+
import { getLogger } from '../../../utils/getLogger.js'
|
|
6
|
+
|
|
7
|
+
const DEFAULT_DESCRIPTION =
|
|
8
|
+
'Count global versions in any version-enabled global by passing the global slug and optional where clause.'
|
|
9
|
+
|
|
10
|
+
export const countGlobalVersionsTool = defineGlobalTool({
|
|
11
|
+
access: (args) =>
|
|
12
|
+
defaultAccess(args) && Boolean(args.permissions?.globals?.[args.slug]?.readVersions),
|
|
13
|
+
annotations: {
|
|
14
|
+
destructiveHint: false,
|
|
15
|
+
idempotentHint: true,
|
|
16
|
+
openWorldHint: false,
|
|
17
|
+
readOnlyHint: true,
|
|
18
|
+
title: 'Count Global Versions',
|
|
19
|
+
},
|
|
20
|
+
description: DEFAULT_DESCRIPTION,
|
|
21
|
+
input: countGlobalVersionsInputSchema,
|
|
22
|
+
}).handler(async ({ slug, authorizedMCP, input, req }) => {
|
|
23
|
+
const payload = req.payload
|
|
24
|
+
const logger = getLogger({ payload })
|
|
25
|
+
const { locale, where } = input
|
|
26
|
+
|
|
27
|
+
logger.info(`Counting versions for global: ${slug}`)
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const result = await payload.countGlobalVersions({
|
|
31
|
+
global: slug,
|
|
32
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
33
|
+
req,
|
|
34
|
+
...(locale ? { locale } : {}),
|
|
35
|
+
...(where ? { where } : {}),
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: `Global "${slug}" contains ${result.totalDocs} matching versions.\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
doc: result,
|
|
46
|
+
}
|
|
47
|
+
} catch (error) {
|
|
48
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
|
|
49
|
+
logger.error(`Error counting versions for global ${slug}: ${errorMessage}`)
|
|
50
|
+
return {
|
|
51
|
+
content: [
|
|
52
|
+
{
|
|
53
|
+
type: 'text',
|
|
54
|
+
text: `❌ **Error counting versions for global "${slug}":** ${errorMessage}`,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
isError: true,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
})
|
|
@@ -1,96 +1,66 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import { z } from 'zod'
|
|
1
|
+
import { findGlobalInputSchema } from 'payload'
|
|
4
2
|
|
|
3
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
5
4
|
import { defineGlobalTool } from '../../../defineTool.js'
|
|
6
5
|
import { getLogger } from '../../../utils/getLogger.js'
|
|
7
|
-
import { localAPIDefaults } from '../../../utils/localAPIDefaults.js'
|
|
8
6
|
|
|
9
|
-
const DEFAULT_DESCRIPTION = 'Find
|
|
7
|
+
const DEFAULT_DESCRIPTION = 'Find any Payload global by passing the global slug.'
|
|
10
8
|
|
|
11
9
|
export const findGlobalTool = defineGlobalTool({
|
|
10
|
+
access: (args) => defaultAccess(args) && Boolean(args.permissions?.globals?.[args.slug]?.read),
|
|
11
|
+
annotations: {
|
|
12
|
+
destructiveHint: false,
|
|
13
|
+
idempotentHint: true,
|
|
14
|
+
openWorldHint: false,
|
|
15
|
+
readOnlyHint: true,
|
|
16
|
+
title: 'Find Global',
|
|
17
|
+
},
|
|
12
18
|
description: DEFAULT_DESCRIPTION,
|
|
13
|
-
input:
|
|
14
|
-
|
|
15
|
-
.number()
|
|
16
|
-
.int()
|
|
17
|
-
.min(0)
|
|
18
|
-
.max(10)
|
|
19
|
-
.describe('Depth of population for relationships')
|
|
20
|
-
.optional()
|
|
21
|
-
.default(0),
|
|
22
|
-
fallbackLocale: z
|
|
23
|
-
.string()
|
|
24
|
-
.describe('Optional: fallback locale code to use when requested locale is not available')
|
|
25
|
-
.optional(),
|
|
26
|
-
locale: z
|
|
27
|
-
.string()
|
|
28
|
-
.describe(
|
|
29
|
-
'Optional: locale code to retrieve data in (e.g., "en", "es"). Use "all" to retrieve all locales for localized fields',
|
|
30
|
-
)
|
|
31
|
-
.optional(),
|
|
32
|
-
select: z
|
|
33
|
-
.string()
|
|
34
|
-
.describe(
|
|
35
|
-
"Optional: define exactly which fields you'd like to return in the response (JSON), e.g., '{\"title\": true}'",
|
|
36
|
-
)
|
|
37
|
-
.optional(),
|
|
38
|
-
}),
|
|
39
|
-
}).handler(async ({ authorizedMCP, globalSlug, input, req }) => {
|
|
19
|
+
input: findGlobalInputSchema,
|
|
20
|
+
}).handler(async ({ slug, authorizedMCP, input, req }) => {
|
|
40
21
|
const payload = req.payload
|
|
41
22
|
const logger = getLogger({ payload })
|
|
42
23
|
|
|
43
|
-
const { depth, fallbackLocale, locale, select } = input
|
|
24
|
+
const { depth, fallbackLocale, locale, populate, select } = input
|
|
44
25
|
|
|
45
|
-
logger.info(
|
|
46
|
-
`Reading global: ${globalSlug}, depth: ${depth}${locale ? `, locale: ${locale}` : ''}`,
|
|
47
|
-
)
|
|
26
|
+
logger.info(`Reading global: ${slug}, depth: ${depth}${locale ? `, locale: ${locale}` : ''}`)
|
|
48
27
|
|
|
49
28
|
try {
|
|
50
29
|
const findOptions: Parameters<typeof payload.findGlobal>[0] = {
|
|
51
|
-
slug
|
|
30
|
+
slug,
|
|
52
31
|
depth,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
let selectClause: SelectType | undefined
|
|
57
|
-
if (select) {
|
|
58
|
-
try {
|
|
59
|
-
selectClause = JSON.parse(select) as SelectType
|
|
60
|
-
} catch {
|
|
61
|
-
logger.warn(`Invalid select clause JSON for global: ${select}`)
|
|
62
|
-
return { content: [{ type: 'text', text: 'Error: Invalid JSON in select clause' }] }
|
|
63
|
-
}
|
|
32
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
33
|
+
req,
|
|
64
34
|
}
|
|
65
35
|
|
|
66
36
|
if (locale) {
|
|
67
37
|
findOptions.locale = locale
|
|
68
38
|
}
|
|
69
|
-
if (fallbackLocale) {
|
|
39
|
+
if (fallbackLocale !== undefined) {
|
|
70
40
|
findOptions.fallbackLocale = fallbackLocale
|
|
71
41
|
}
|
|
72
|
-
if (
|
|
73
|
-
findOptions.select =
|
|
42
|
+
if (select) {
|
|
43
|
+
findOptions.select = select
|
|
44
|
+
}
|
|
45
|
+
if (populate) {
|
|
46
|
+
findOptions.populate = populate
|
|
74
47
|
}
|
|
75
|
-
|
|
76
48
|
const result = await payload.findGlobal(findOptions)
|
|
77
49
|
|
|
78
50
|
return {
|
|
79
51
|
content: [
|
|
80
52
|
{
|
|
81
53
|
type: 'text',
|
|
82
|
-
text: `Global "${
|
|
54
|
+
text: `Global "${slug}":\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
|
|
83
55
|
},
|
|
84
56
|
],
|
|
85
57
|
doc: result as Record<string, unknown>,
|
|
86
58
|
}
|
|
87
59
|
} catch (error) {
|
|
88
60
|
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
|
|
89
|
-
logger.error(`Error reading global ${
|
|
61
|
+
logger.error(`Error reading global ${slug}: ${errorMessage}`)
|
|
90
62
|
return {
|
|
91
|
-
content: [
|
|
92
|
-
{ type: 'text', text: `❌ **Error reading global "${globalSlug}":** ${errorMessage}` },
|
|
93
|
-
],
|
|
63
|
+
content: [{ type: 'text', text: `❌ **Error reading global "${slug}":** ${errorMessage}` }],
|
|
94
64
|
}
|
|
95
65
|
}
|
|
96
66
|
})
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { findGlobalVersionByIDInputSchema } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
4
|
+
import { defineGlobalTool } from '../../../defineTool.js'
|
|
5
|
+
import { getLogger } from '../../../utils/getLogger.js'
|
|
6
|
+
|
|
7
|
+
const DEFAULT_DESCRIPTION =
|
|
8
|
+
'Find a specific global version in any version-enabled global by passing the global slug and version ID.'
|
|
9
|
+
|
|
10
|
+
export const findGlobalVersionByIDTool = defineGlobalTool({
|
|
11
|
+
access: (args) =>
|
|
12
|
+
defaultAccess(args) && Boolean(args.permissions?.globals?.[args.slug]?.readVersions),
|
|
13
|
+
annotations: {
|
|
14
|
+
destructiveHint: false,
|
|
15
|
+
idempotentHint: true,
|
|
16
|
+
openWorldHint: false,
|
|
17
|
+
readOnlyHint: true,
|
|
18
|
+
title: 'Find Global Version By ID',
|
|
19
|
+
},
|
|
20
|
+
description: DEFAULT_DESCRIPTION,
|
|
21
|
+
input: findGlobalVersionByIDInputSchema,
|
|
22
|
+
}).handler(async ({ slug, authorizedMCP, input, req }) => {
|
|
23
|
+
const payload = req.payload
|
|
24
|
+
const logger = getLogger({ payload })
|
|
25
|
+
const { id, depth, fallbackLocale, locale, populate, select } = input
|
|
26
|
+
|
|
27
|
+
logger.info(`Finding version for global: ${slug} with ID: ${id}`)
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const result = await payload.findGlobalVersionByID({
|
|
31
|
+
id,
|
|
32
|
+
slug,
|
|
33
|
+
depth,
|
|
34
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
35
|
+
req,
|
|
36
|
+
...(fallbackLocale !== undefined ? { fallbackLocale } : {}),
|
|
37
|
+
...(locale ? { locale } : {}),
|
|
38
|
+
...(populate ? { populate } : {}),
|
|
39
|
+
...(select ? { select } : {}),
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: `Version "${id}" from global "${slug}":\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
doc: result as unknown as Record<string, unknown>,
|
|
50
|
+
}
|
|
51
|
+
} catch (error) {
|
|
52
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
|
|
53
|
+
logger.error(`Error finding version ${id} for global ${slug}: ${errorMessage}`)
|
|
54
|
+
return {
|
|
55
|
+
content: [
|
|
56
|
+
{
|
|
57
|
+
type: 'text',
|
|
58
|
+
text: `❌ **Error finding version "${id}" for global "${slug}":** ${errorMessage}`,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
isError: true,
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
})
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { findGlobalVersionsInputSchema } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
4
|
+
import { defineGlobalTool } from '../../../defineTool.js'
|
|
5
|
+
import { getLogger } from '../../../utils/getLogger.js'
|
|
6
|
+
|
|
7
|
+
const DEFAULT_DESCRIPTION =
|
|
8
|
+
'Find global versions in any version-enabled global by passing the global slug and optional where clause.'
|
|
9
|
+
|
|
10
|
+
export const findGlobalVersionsTool = defineGlobalTool({
|
|
11
|
+
access: (args) =>
|
|
12
|
+
defaultAccess(args) && Boolean(args.permissions?.globals?.[args.slug]?.readVersions),
|
|
13
|
+
annotations: {
|
|
14
|
+
destructiveHint: false,
|
|
15
|
+
idempotentHint: true,
|
|
16
|
+
openWorldHint: false,
|
|
17
|
+
readOnlyHint: true,
|
|
18
|
+
title: 'Find Global Versions',
|
|
19
|
+
},
|
|
20
|
+
description: DEFAULT_DESCRIPTION,
|
|
21
|
+
input: findGlobalVersionsInputSchema,
|
|
22
|
+
}).handler(async ({ slug, authorizedMCP, input, req }) => {
|
|
23
|
+
const payload = req.payload
|
|
24
|
+
const logger = getLogger({ payload })
|
|
25
|
+
const { depth, fallbackLocale, limit, locale, page, pagination, populate, select, sort, where } =
|
|
26
|
+
input
|
|
27
|
+
|
|
28
|
+
logger.info(`Finding versions for global: ${slug}, limit: ${limit}, page: ${page}`)
|
|
29
|
+
|
|
30
|
+
try {
|
|
31
|
+
const result = await payload.findGlobalVersions({
|
|
32
|
+
slug,
|
|
33
|
+
depth,
|
|
34
|
+
limit,
|
|
35
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
36
|
+
page,
|
|
37
|
+
req,
|
|
38
|
+
...(fallbackLocale !== undefined ? { fallbackLocale } : {}),
|
|
39
|
+
...(locale ? { locale } : {}),
|
|
40
|
+
...(pagination !== undefined ? { pagination } : {}),
|
|
41
|
+
...(populate ? { populate } : {}),
|
|
42
|
+
...(select ? { select } : {}),
|
|
43
|
+
...(sort ? { sort } : {}),
|
|
44
|
+
...(where ? { where } : {}),
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: 'text',
|
|
51
|
+
text: `Versions for global "${slug}":\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
doc: result as unknown as Record<string, unknown>,
|
|
55
|
+
}
|
|
56
|
+
} catch (error) {
|
|
57
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
|
|
58
|
+
logger.error(`Error finding versions for global ${slug}: ${errorMessage}`)
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: `❌ **Error finding versions for global "${slug}":** ${errorMessage}`,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
isError: true,
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
})
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { getAccessResults, getGlobalInputSchema, getGlobalSchemaInputSchema } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
4
|
+
import { defineGlobalTool } from '../../../defineTool.js'
|
|
5
|
+
|
|
6
|
+
export const getGlobalSchemaTool = defineGlobalTool({
|
|
7
|
+
access: (args) => {
|
|
8
|
+
const permissions = args.permissions?.globals?.[args.slug]
|
|
9
|
+
|
|
10
|
+
return defaultAccess(args) && Boolean(permissions?.update)
|
|
11
|
+
},
|
|
12
|
+
annotations: {
|
|
13
|
+
destructiveHint: false,
|
|
14
|
+
idempotentHint: true,
|
|
15
|
+
openWorldHint: false,
|
|
16
|
+
readOnlyHint: true,
|
|
17
|
+
title: 'Get Global Schema',
|
|
18
|
+
},
|
|
19
|
+
description: 'Get the input schema for updating a global.',
|
|
20
|
+
input: getGlobalSchemaInputSchema,
|
|
21
|
+
}).handler(async ({ slug, authorizedMCP, req }) => {
|
|
22
|
+
const permissions = authorizedMCP.overrideAccess
|
|
23
|
+
? null
|
|
24
|
+
: (await getAccessResults({ req })).globals?.[slug]
|
|
25
|
+
|
|
26
|
+
if (!authorizedMCP.overrideAccess && !permissions?.update) {
|
|
27
|
+
return {
|
|
28
|
+
content: [
|
|
29
|
+
{
|
|
30
|
+
type: 'text',
|
|
31
|
+
text: `Error: MCP access to "getGlobalSchema" is not enabled for global "${slug}"`,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
isError: true,
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const inputSchema = getGlobalInputSchema({
|
|
39
|
+
globalSlug: slug,
|
|
40
|
+
req,
|
|
41
|
+
...(permissions ? { permissions } : {}),
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
if (!inputSchema) {
|
|
45
|
+
return {
|
|
46
|
+
content: [{ type: 'text', text: `Error: Global "${slug}" not found` }],
|
|
47
|
+
isError: true,
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return {
|
|
52
|
+
content: [
|
|
53
|
+
{
|
|
54
|
+
type: 'text',
|
|
55
|
+
text: `Schema for global "${slug}":\n\`\`\`json\n${JSON.stringify(inputSchema)}\n\`\`\``,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
structuredContent: {
|
|
59
|
+
slug,
|
|
60
|
+
schema: inputSchema,
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
})
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { restoreGlobalVersionInputSchema } from 'payload'
|
|
2
|
+
|
|
3
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
4
|
+
import { defineGlobalTool } from '../../../defineTool.js'
|
|
5
|
+
import { getLogger } from '../../../utils/getLogger.js'
|
|
6
|
+
|
|
7
|
+
const DEFAULT_DESCRIPTION =
|
|
8
|
+
'Restore a global from a previous version in any version-enabled global.'
|
|
9
|
+
|
|
10
|
+
export const restoreGlobalVersionTool = defineGlobalTool({
|
|
11
|
+
access: (args) => defaultAccess(args) && Boolean(args.permissions?.globals?.[args.slug]?.update),
|
|
12
|
+
annotations: {
|
|
13
|
+
destructiveHint: true,
|
|
14
|
+
idempotentHint: false,
|
|
15
|
+
openWorldHint: false,
|
|
16
|
+
readOnlyHint: false,
|
|
17
|
+
title: 'Restore Global Version',
|
|
18
|
+
},
|
|
19
|
+
description: DEFAULT_DESCRIPTION,
|
|
20
|
+
input: restoreGlobalVersionInputSchema,
|
|
21
|
+
}).handler(async ({ slug, authorizedMCP, input, req }) => {
|
|
22
|
+
const payload = req.payload
|
|
23
|
+
const logger = getLogger({ payload })
|
|
24
|
+
const { id, depth, fallbackLocale, locale, populate, select } = input
|
|
25
|
+
|
|
26
|
+
logger.info(`Restoring version for global: ${slug} with ID: ${id}`)
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
const result = await payload.restoreGlobalVersion({
|
|
30
|
+
id: String(id),
|
|
31
|
+
slug,
|
|
32
|
+
depth,
|
|
33
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
34
|
+
req,
|
|
35
|
+
...(fallbackLocale !== undefined ? { fallbackLocale } : {}),
|
|
36
|
+
...(locale ? { locale } : {}),
|
|
37
|
+
...(populate ? { populate } : {}),
|
|
38
|
+
...(select ? { select } : {}),
|
|
39
|
+
})
|
|
40
|
+
const resultObject = result as Record<string, unknown>
|
|
41
|
+
const restoredGlobal =
|
|
42
|
+
resultObject.version && typeof resultObject.version === 'object'
|
|
43
|
+
? (resultObject.version as Record<string, unknown>)
|
|
44
|
+
: resultObject
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: 'text',
|
|
50
|
+
text: `Version "${id}" restored successfully for global "${slug}"!\nRestored global:\n\`\`\`json\n${JSON.stringify(restoredGlobal)}\n\`\`\``,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
doc: restoredGlobal,
|
|
54
|
+
}
|
|
55
|
+
} catch (error) {
|
|
56
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error'
|
|
57
|
+
logger.error(`Error restoring version ${id} for global ${slug}: ${errorMessage}`)
|
|
58
|
+
return {
|
|
59
|
+
content: [
|
|
60
|
+
{
|
|
61
|
+
type: 'text',
|
|
62
|
+
text: `❌ **Error restoring version "${id}" for global "${slug}":** ${errorMessage}`,
|
|
63
|
+
},
|
|
64
|
+
],
|
|
65
|
+
isError: true,
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
})
|
|
@@ -1,102 +1,76 @@
|
|
|
1
|
-
import type { SelectType } from 'payload'
|
|
2
|
-
|
|
3
|
-
import { z } from 'zod'
|
|
4
|
-
|
|
5
|
-
import { defineGlobalTool } from '../../../defineTool.js'
|
|
6
|
-
import { getLogger } from '../../../utils/getLogger.js'
|
|
7
1
|
import {
|
|
8
2
|
getGlobalVirtualFieldNames,
|
|
9
3
|
stripVirtualFields,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
4
|
+
transformPointDataToPayload,
|
|
5
|
+
updateGlobalInputSchema,
|
|
6
|
+
validateGlobalData,
|
|
7
|
+
} from 'payload'
|
|
14
8
|
|
|
15
|
-
|
|
9
|
+
import { defaultAccess } from '../../../defaultAccess.js'
|
|
10
|
+
import { defineGlobalTool } from '../../../defineTool.js'
|
|
11
|
+
import { getLogger } from '../../../utils/getLogger.js'
|
|
12
|
+
import { formatEntityError } from '../formatEntityError.js'
|
|
16
13
|
|
|
17
|
-
|
|
18
|
-
description: DEFAULT_DESCRIPTION,
|
|
19
|
-
input: ({ globalSchema }) => {
|
|
20
|
-
const partialSchema = sanitizeEntitySchema(globalSchema)
|
|
21
|
-
// Global updates do not require all required fields to be passed => delete .required.
|
|
22
|
-
//
|
|
23
|
-
// Local API equivalent: packages/payload/src/global/operations/local/update.ts#BaseOptions#data:
|
|
24
|
-
// data: DeepPartial<Omit<DataFromGlobalSlug<TSlug>, 'id'>>
|
|
25
|
-
delete partialSchema.required
|
|
14
|
+
const DEFAULT_DESCRIPTION = 'Update any Payload global by passing the global slug and data.'
|
|
26
15
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
.boolean()
|
|
36
|
-
.describe('Optional: Whether to save as draft (default: false)')
|
|
37
|
-
.optional()
|
|
38
|
-
.default(false),
|
|
39
|
-
fallbackLocale: z
|
|
40
|
-
.string()
|
|
41
|
-
.describe('Optional: fallback locale code to use when requested locale is not available')
|
|
42
|
-
.optional(),
|
|
43
|
-
locale: z
|
|
44
|
-
.string()
|
|
45
|
-
.describe(
|
|
46
|
-
'Optional: locale code to update data in (e.g., "en", "es"). Use "all" to update all locales for localized fields',
|
|
47
|
-
)
|
|
48
|
-
.optional(),
|
|
49
|
-
select: z
|
|
50
|
-
.string()
|
|
51
|
-
.describe(
|
|
52
|
-
'Optional: define exactly which fields you\'d like to return in the response (JSON), e.g., \'{"siteName": "My Site"}\'',
|
|
53
|
-
)
|
|
54
|
-
.optional(),
|
|
55
|
-
},
|
|
56
|
-
dataDescription: 'The fields to update',
|
|
57
|
-
dataSchema: partialSchema,
|
|
58
|
-
})
|
|
16
|
+
export const updateGlobalTool = defineGlobalTool({
|
|
17
|
+
access: (args) => defaultAccess(args) && Boolean(args.permissions?.globals?.[args.slug]?.update),
|
|
18
|
+
annotations: {
|
|
19
|
+
destructiveHint: true,
|
|
20
|
+
idempotentHint: false,
|
|
21
|
+
openWorldHint: false,
|
|
22
|
+
readOnlyHint: false,
|
|
23
|
+
title: 'Update Global',
|
|
59
24
|
},
|
|
60
|
-
|
|
25
|
+
description: DEFAULT_DESCRIPTION,
|
|
26
|
+
input: updateGlobalInputSchema,
|
|
27
|
+
}).handler(async ({ slug, authorizedMCP, input, req }) => {
|
|
61
28
|
const payload = req.payload
|
|
62
29
|
const logger = getLogger({ payload })
|
|
63
30
|
|
|
64
|
-
const {
|
|
31
|
+
const {
|
|
32
|
+
data,
|
|
33
|
+
depth,
|
|
34
|
+
draft,
|
|
35
|
+
fallbackLocale,
|
|
36
|
+
locale,
|
|
37
|
+
overrideLock,
|
|
38
|
+
populate,
|
|
39
|
+
publishAllLocales,
|
|
40
|
+
select,
|
|
41
|
+
unpublishAllLocales,
|
|
42
|
+
} = input
|
|
65
43
|
|
|
66
|
-
logger.info(
|
|
67
|
-
`Updating global: ${globalSlug}, draft: ${draft}${locale ? `, locale: ${locale}` : ''}`,
|
|
68
|
-
)
|
|
44
|
+
logger.info(`Updating global: ${slug}, draft: ${draft}${locale ? `, locale: ${locale}` : ''}`)
|
|
69
45
|
|
|
70
46
|
try {
|
|
71
|
-
const virtualFieldNames = getGlobalVirtualFieldNames(payload.config,
|
|
72
|
-
const
|
|
47
|
+
const virtualFieldNames = getGlobalVirtualFieldNames(payload.config, slug)
|
|
48
|
+
const inputData = stripVirtualFields(data, virtualFieldNames)
|
|
49
|
+
validateGlobalData({ slug, data: inputData, req })
|
|
73
50
|
|
|
74
|
-
|
|
75
|
-
if (select) {
|
|
76
|
-
try {
|
|
77
|
-
selectClause = JSON.parse(select) as SelectType
|
|
78
|
-
} catch {
|
|
79
|
-
logger.warn(`Invalid select clause JSON for global: ${select}`)
|
|
80
|
-
return { content: [{ type: 'text', text: 'Error: Invalid JSON in select clause' }] }
|
|
81
|
-
}
|
|
82
|
-
}
|
|
51
|
+
const parsedData = transformPointDataToPayload(inputData)
|
|
83
52
|
|
|
84
53
|
const updateOptions: Parameters<typeof payload.updateGlobal>[0] = {
|
|
85
|
-
slug
|
|
54
|
+
slug,
|
|
86
55
|
data: parsedData,
|
|
87
56
|
depth,
|
|
88
57
|
draft,
|
|
89
|
-
|
|
58
|
+
overrideAccess: authorizedMCP.overrideAccess,
|
|
59
|
+
overrideLock,
|
|
60
|
+
populate,
|
|
61
|
+
publishAllLocales,
|
|
62
|
+
req,
|
|
63
|
+
unpublishAllLocales,
|
|
90
64
|
}
|
|
91
65
|
|
|
92
66
|
if (locale) {
|
|
93
67
|
updateOptions.locale = locale
|
|
94
68
|
}
|
|
95
|
-
if (fallbackLocale) {
|
|
69
|
+
if (fallbackLocale !== undefined) {
|
|
96
70
|
updateOptions.fallbackLocale = fallbackLocale
|
|
97
71
|
}
|
|
98
|
-
if (
|
|
99
|
-
updateOptions.select =
|
|
72
|
+
if (select) {
|
|
73
|
+
updateOptions.select = select
|
|
100
74
|
}
|
|
101
75
|
|
|
102
76
|
const result = await payload.updateGlobal(updateOptions)
|
|
@@ -105,16 +79,14 @@ export const updateGlobalTool = defineGlobalTool({
|
|
|
105
79
|
content: [
|
|
106
80
|
{
|
|
107
81
|
type: 'text',
|
|
108
|
-
text: `Global "${
|
|
82
|
+
text: `Global "${slug}" updated successfully!\n\`\`\`json\n${JSON.stringify(result)}\n\`\`\``,
|
|
109
83
|
},
|
|
110
84
|
],
|
|
111
85
|
doc: result as Record<string, unknown>,
|
|
112
86
|
}
|
|
113
87
|
} catch (error) {
|
|
114
|
-
const
|
|
115
|
-
logger.error(`Error updating global ${
|
|
116
|
-
return {
|
|
117
|
-
content: [{ type: 'text', text: `Error updating global "${globalSlug}": ${errorMessage}` }],
|
|
118
|
-
}
|
|
88
|
+
const message = error instanceof Error ? error.message : 'Unknown error'
|
|
89
|
+
logger.error(`Error updating global ${slug}: ${message}`)
|
|
90
|
+
return formatEntityError({ slug, action: 'updating', entity: 'global', error, req })
|
|
119
91
|
}
|
|
120
92
|
})
|