UNPKG

n8n-nodes-mautic-advanced

Version:

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

249 lines (248 loc) 12.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeCompanyContactOperation = exports.executeCampaignContactOperation = exports.executeContactSegmentOperation = exports.executeSegmentEmailOperation = exports.executeCategoryOperation = exports.executeTagOperation = void 0; const n8n_workflow_1 = require("n8n-workflow"); const ApiHelpers_1 = require("../utils/ApiHelpers"); const DataHelpers_1 = require("../utils/DataHelpers"); const TagOperations_1 = require("./TagOperations"); // Public execute entry points async function executeTagOperation(context, operation, i) { try { const mauticVersion = await (0, TagOperations_1.getMauticVersion)(context); const useV2Tags = mauticVersion === 'v7'; let responseData; switch (operation) { case 'create': responseData = useV2Tags ? await (0, TagOperations_1.createTagV2)(context, i) : await (0, TagOperations_1.createTagV1)(context, i); break; case 'update': responseData = useV2Tags ? await (0, TagOperations_1.updateTagV2)(context, i) : await (0, TagOperations_1.updateTagV1)(context, i); break; case 'get': responseData = useV2Tags ? await (0, TagOperations_1.getTagV2)(context, i) : await (0, TagOperations_1.getTagV1)(context, i); break; case 'getAll': responseData = useV2Tags ? await (0, TagOperations_1.getAllTagsV2)(context, i) : await (0, TagOperations_1.getAllTagsV1)(context, i); break; case 'delete': responseData = useV2Tags ? await (0, TagOperations_1.deleteTagV2)(context, i) : await (0, TagOperations_1.deleteTagV1)(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Tag resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Tag'); } } exports.executeTagOperation = executeTagOperation; async function executeCategoryOperation(context, operation, i) { try { let responseData; switch (operation) { case 'create': responseData = await createCategory(context, i); break; case 'update': responseData = await updateCategory(context, i); break; case 'get': responseData = await getCategory(context, i); break; case 'getAll': responseData = await getAllCategories(context, i); break; case 'delete': responseData = await deleteCategory(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Category resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Category'); } } exports.executeCategoryOperation = executeCategoryOperation; async function executeSegmentEmailOperation(context, operation, i) { try { let responseData; switch (operation) { case 'send': responseData = await sendEmail(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Segment Email resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Segment Email'); } } exports.executeSegmentEmailOperation = executeSegmentEmailOperation; async function executeContactSegmentOperation(context, operation, i) { try { let responseData; switch (operation) { case 'add': responseData = await addContactToSegment(context, i); break; case 'remove': responseData = await removeContactFromSegment(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Contact Segment resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Contact Segment'); } } exports.executeContactSegmentOperation = executeContactSegmentOperation; async function executeCampaignContactOperation(context, operation, i) { try { let responseData; switch (operation) { case 'add': responseData = await addContactToCampaign(context, i); break; case 'remove': responseData = await removeContactFromCampaign(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Campaign Contact resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Campaign Contact'); } } exports.executeCampaignContactOperation = executeCampaignContactOperation; async function executeCompanyContactOperation(context, operation, i) { try { let responseData; switch (operation) { case 'add': responseData = await addContactToCompany(context, i); break; case 'remove': responseData = await removeContactFromCompany(context, i); break; default: throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Company Contact resource.`, { itemIndex: i }); } return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData)); } catch (error) { return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Company Contact'); } } exports.executeCompanyContactOperation = executeCompanyContactOperation; // Category operations async function createCategory(context, itemIndex) { const body = { title: (0, ApiHelpers_1.getRequiredParam)(context, 'title', itemIndex), bundle: (0, ApiHelpers_1.getRequiredParam)(context, 'bundle', itemIndex), }; const description = (0, ApiHelpers_1.getOptionalParam)(context, 'description', itemIndex, ''); if (description) body.description = description; const color = (0, ApiHelpers_1.getOptionalParam)(context, 'color', itemIndex, ''); if (color) { // Mautic API expects hex color without # prefix (e.g., "b36262") // n8n color picker returns with # prefix, so we strip it if present body.color = color.startsWith('#') ? color.substring(1) : color; } const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', '/categories/new', body); return response.category; } async function updateCategory(context, itemIndex) { const categoryId = (0, ApiHelpers_1.getRequiredParam)(context, 'categoryId', itemIndex); const createIfNotFound = (0, ApiHelpers_1.getOptionalParam)(context, 'createIfNotFound', itemIndex, false); const updateFields = (0, ApiHelpers_1.getOptionalParam)(context, 'updateFields', itemIndex, {}); const body = {}; if (updateFields.title) body.title = updateFields.title; if (updateFields.description) body.description = updateFields.description; if (updateFields.color) { // Mautic API expects hex color without # prefix (e.g., "b36262") // n8n color picker returns with # prefix, so we strip it if present const color = updateFields.color; body.color = color.startsWith('#') ? color.substring(1) : color; } if (updateFields.bundle) body.bundle = updateFields.bundle; const method = createIfNotFound ? 'PUT' : 'PATCH'; const response = await (0, ApiHelpers_1.makeApiRequest)(context, method, `/categories/${categoryId}/edit`, body); return response.category; } async function getCategory(context, itemIndex) { const categoryId = (0, ApiHelpers_1.getRequiredParam)(context, 'categoryId', itemIndex); const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', `/categories/${categoryId}`); return (0, DataHelpers_1.convertNumericStrings)(response.category); } async function getAllCategories(context, itemIndex) { const returnAll = (0, ApiHelpers_1.getOptionalParam)(context, 'returnAll', itemIndex, false); const options = (0, ApiHelpers_1.getOptionalParam)(context, 'options', itemIndex, {}); const qs = (0, DataHelpers_1.buildQueryFromOptions)(options); if (!qs.orderBy) qs.orderBy = 'id'; if (!qs.orderByDir) qs.orderByDir = 'asc'; let limit = undefined; if (!returnAll) { limit = (0, ApiHelpers_1.getOptionalParam)(context, 'limit', itemIndex, 30); } const result = await (0, ApiHelpers_1.makePaginatedRequest)(context, 'categories', 'GET', '/categories', {}, qs, limit); return (0, DataHelpers_1.convertNumericStrings)(result); } async function deleteCategory(context, itemIndex) { const categoryId = (0, ApiHelpers_1.getRequiredParam)(context, 'categoryId', itemIndex); const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'DELETE', `/categories/${categoryId}/delete`); return response.category ?? { success: true }; } // Email operations async function sendEmail(context, itemIndex) { const segmentEmailId = (0, ApiHelpers_1.getRequiredParam)(context, 'segmentEmailId', itemIndex); const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/emails/${segmentEmailId}/send`); return response; } // Contact-Segment relationships async function addContactToSegment(context, itemIndex) { const contactId = (0, ApiHelpers_1.getRequiredParam)(context, 'contactId', itemIndex); const segmentId = (0, ApiHelpers_1.getRequiredParam)(context, 'segmentId', itemIndex); return await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/segments/${segmentId}/contact/${contactId}/add`); } async function removeContactFromSegment(context, itemIndex) { const contactId = (0, ApiHelpers_1.getRequiredParam)(context, 'contactId', itemIndex); const segmentId = (0, ApiHelpers_1.getRequiredParam)(context, 'segmentId', itemIndex); return await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/segments/${segmentId}/contact/${contactId}/remove`); } // Campaign-Contact relationships async function addContactToCampaign(context, itemIndex) { const contactId = (0, ApiHelpers_1.getRequiredParam)(context, 'contactId', itemIndex); const campaignId = (0, ApiHelpers_1.getRequiredParam)(context, 'campaignId', itemIndex); return await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/campaigns/${campaignId}/contact/${contactId}/add`); } async function removeContactFromCampaign(context, itemIndex) { const contactId = (0, ApiHelpers_1.getRequiredParam)(context, 'contactId', itemIndex); const campaignId = (0, ApiHelpers_1.getRequiredParam)(context, 'campaignId', itemIndex); return await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/campaigns/${campaignId}/contact/${contactId}/remove`); } // Company-Contact relationships async function addContactToCompany(context, itemIndex) { const contactId = (0, ApiHelpers_1.getRequiredParam)(context, 'contactId', itemIndex); const companyId = (0, ApiHelpers_1.getRequiredParam)(context, 'companyId', itemIndex); return await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/companies/${companyId}/contact/${contactId}/add`, {}); } async function removeContactFromCompany(context, itemIndex) { const contactId = (0, ApiHelpers_1.getRequiredParam)(context, 'contactId', itemIndex); const companyId = (0, ApiHelpers_1.getRequiredParam)(context, 'companyId', itemIndex); return await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/companies/${companyId}/contact/${contactId}/remove`, {}); }