import { z } from "zod"; import { withAuth, getSessionCredentials } from "../../auth/index.js"; import { handleApiResponse, handleToolError, validateRequired } from "../helpers/errorHandler.js"; import { AcaiHttpClient } from "../helpers/acaiHttpClient.js"; import { withAuthParams } from "../helpers/authSchema.js"; export function registerSetModuleConfigVarsTool(server) { server.tool( "set_module_config_vars", `Set configuration variables for a module instance on a page record. Supports simple vars (text, list, checkbox, colorpicker, etc.) and multi/repeater vars (records array). For simple vars, pass key-value pairs. For multi vars, pass an array of objects with sub-var values. All field types are passed the same way as string values. Fields like list, checkbox and colorpicker are stored directly in config-vars (not in builder_custom). Text, title, wysiwyg and upload fields are stored in builder_custom automatically. The response includes 'uploadFields' — a map of upload variable names to their recordNum and fieldName. Use these directly with upload_record_image (tableName="builder_custom") without needing to read builder.json. For multi vars with uploads, the key is "varName.subVarName" and the value is an array of {index, fieldName, recordNum}. Required params: - tableName (string) without 'cms_' prefix - recordNum (number) record primary key ('num' field, never 'id') - sectionId (string) section ID of the module instance - vars (object) variable names as keys`, withAuthParams({ tableName: z.string().describe("Parent table name (e.g. 'apartados')"), recordNum: z.number().describe("Parent record number"), sectionId: z.string().describe("Section ID of the module instance"), vars: z.record(z.any()).describe("Object with variable names as keys. Simple vars: string values. Multi vars: array of objects with sub-var values. Example: { titulo: 'My Title', records: [{ pregunta: 'Q1', respuesta: 'A1' }] }") }), { readOnlyHint: false, destructiveHint: false }, withAuth(async ({ tableName, recordNum, sectionId, vars }, extra) => { try { const validationError = validateRequired({ tableName, recordNum, sectionId, vars }, ['tableName', 'recordNum', 'sectionId', 'vars'], 'set_module_config_vars'); if (validationError) return validationError; const sessionId = extra.sessionId; const credentials = await getSessionCredentials(sessionId); const payload = { tableName, recordNum, sectionId, vars }; const response = await AcaiHttpClient.setModuleConfigVars( credentials, credentials.token, credentials.tokenHash, payload ); const apiError = handleApiResponse(response.data, 'set_module_config_vars'); if (apiError) return apiError; return { content: [{ type: "text", text: JSON.stringify({ success: true, action: 'set_module_config_vars', tableName, recordNum, sectionId, data: response.data?.data ?? response.data }, null, 2) }] }; } catch (error) { return handleToolError(error, 'set_module_config_vars', { tableName, recordNum, sectionId }); } }) ); }