UNPKG

n8n-nodes-mautic-advanced

Version:

Enhanced n8n node for Mautic with comprehensive API coverage including tags, campaigns, categories, and advanced contact management

170 lines (169 loc) 7.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeFieldOperation = void 0; const n8n_workflow_1 = require("n8n-workflow"); const ApiHelpers_1 = require("../utils/ApiHelpers"); const DataHelpers_1 = require("../utils/DataHelpers"); async function executeFieldOperation(context, operation, i) { let responseData; try { switch (operation) { case 'create': responseData = await createField(context, i); break; case 'update': responseData = await updateField(context, i); break; case 'get': responseData = await getField(context, i); break; case 'getAll': responseData = await getAllFields(context, i); break; case 'delete': responseData = await deleteField(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Field resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Field'); } } exports.executeFieldOperation = executeFieldOperation; async function createField(context, itemIndex) { const fieldObject = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldObject', itemIndex); const label = (0, ApiHelpers_1.getRequiredParam)(context, 'label', itemIndex); const type = (0, ApiHelpers_1.getRequiredParam)(context, 'type', itemIndex); const alias = (0, ApiHelpers_1.getOptionalParam)(context, 'alias', itemIndex, ''); const group = (0, ApiHelpers_1.getOptionalParam)(context, 'group', itemIndex, 'core'); const defaultValue = (0, ApiHelpers_1.getOptionalParam)(context, 'defaultValue', itemIndex, ''); const isRequired = (0, ApiHelpers_1.getOptionalParam)(context, 'isRequired', itemIndex, false); const isPubliclyUpdatable = (0, ApiHelpers_1.getOptionalParam)(context, 'isPubliclyUpdatable', itemIndex, false); const isUniqueIdentifier = (0, ApiHelpers_1.getOptionalParam)(context, 'isUniqueIdentifier', itemIndex, false); const properties = (0, ApiHelpers_1.getOptionalParam)(context, 'properties', itemIndex, {}); const additionalFields = (0, ApiHelpers_1.getOptionalParam)(context, 'additionalFields', itemIndex, {}); const body = { label, type, group, isRequired, isPubliclyUpdatable, isUniqueIdentifier, }; if (alias) { body.alias = alias; } if (defaultValue) { body.defaultValue = defaultValue; } if (additionalFields.description) { body.description = additionalFields.description; } if (additionalFields.order !== undefined) { body.order = additionalFields.order; } if (additionalFields.isPublished !== undefined) { body.isPublished = additionalFields.isPublished; } // Process properties for select/multiselect fields const listItems = properties?.list?.items?.item || properties?.list?.items || []; if (Array.isArray(listItems) && listItems.length > 0) { body.properties = { list: listItems.map((item) => ({ label: item.label, value: item.value, })), }; } const endpoint = `/fields/${fieldObject}/new`; const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', endpoint, body); return response.field; } async function updateField(context, itemIndex) { const fieldObject = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldObject', itemIndex); const fieldId = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldId', itemIndex); const createIfNotFound = (0, ApiHelpers_1.getOptionalParam)(context, 'createIfNotFound', itemIndex, false); const updateFields = (0, ApiHelpers_1.getOptionalParam)(context, 'updateFields', itemIndex, {}); const body = {}; if (updateFields.label) { body.label = updateFields.label; } if (updateFields.type) { body.type = updateFields.type; } if (updateFields.alias) { body.alias = updateFields.alias; } if (updateFields.group) { body.group = updateFields.group; } if (updateFields.defaultValue !== undefined) { body.defaultValue = updateFields.defaultValue; } if (updateFields.isRequired !== undefined) { body.isRequired = updateFields.isRequired; } if (updateFields.isPubliclyUpdatable !== undefined) { body.isPubliclyUpdatable = updateFields.isPubliclyUpdatable; } if (updateFields.isUniqueIdentifier !== undefined) { body.isUniqueIdentifier = updateFields.isUniqueIdentifier; } if (updateFields.description !== undefined) { body.description = updateFields.description; } if (updateFields.order !== undefined) { body.order = updateFields.order; } if (updateFields.isPublished !== undefined) { body.isPublished = updateFields.isPublished; } // Process properties for select/multiselect fields const updateListItems = updateFields.properties?.list?.items?.item || updateFields.properties?.list?.items || []; if (Array.isArray(updateListItems) && updateListItems.length > 0) { body.properties = { list: updateListItems.map((item) => ({ label: item.label, value: item.value, })), }; } const endpoint = `/fields/${fieldObject}/${fieldId}/edit`; const method = createIfNotFound ? 'PUT' : 'PATCH'; const response = await (0, ApiHelpers_1.makeApiRequest)(context, method, endpoint, body); return response.field; } async function getField(context, itemIndex) { const fieldObject = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldObject', itemIndex); const fieldId = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldId', itemIndex); const endpoint = `/fields/${fieldObject}/${fieldId}`; const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', endpoint); return (0, DataHelpers_1.convertNumericStrings)(response.field); } async function getAllFields(context, itemIndex) { const fieldObject = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldObject', itemIndex); const returnAll = (0, ApiHelpers_1.getOptionalParam)(context, 'returnAll', itemIndex, false); const limit = (0, ApiHelpers_1.getOptionalParam)(context, 'limit', itemIndex, 50); const options = (0, ApiHelpers_1.getOptionalParam)(context, 'options', itemIndex, {}); const query = (0, DataHelpers_1.buildQueryFromOptions)(options); if (returnAll) { const result = await (0, ApiHelpers_1.makePaginatedRequest)(context, 'fields', 'GET', `/fields/${fieldObject}`, {}, query); return (0, DataHelpers_1.convertNumericStrings)(result); } else { query.limit = limit; const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', `/fields/${fieldObject}`, {}, query); const data = Object.values(response.fields || {}); return (0, DataHelpers_1.convertNumericStrings)(data); } } async function deleteField(context, itemIndex) { const fieldObject = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldObject', itemIndex); const fieldId = (0, ApiHelpers_1.getRequiredParam)(context, 'fieldId', itemIndex); const endpoint = `/fields/${fieldObject}/${fieldId}/delete`; const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'DELETE', endpoint); return response.field; }