n8n-nodes-mautic-advanced
Version:
Enhanced n8n node for Mautic with comprehensive API coverage including tags, campaigns, categories, and advanced contact management
203 lines (202 loc) • 8.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeEmailOperation = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ApiHelpers_1 = require("../utils/ApiHelpers");
const DataHelpers_1 = require("../utils/DataHelpers");
async function executeEmailOperation(context, operation, i) {
let responseData;
try {
switch (operation) {
case 'create':
responseData = await createEmail(context, i);
break;
case 'update':
responseData = await updateEmail(context, i);
break;
case 'get':
responseData = await getEmail(context, i);
break;
case 'getAll':
responseData = await getAllEmails(context, i);
break;
case 'delete':
responseData = await deleteEmail(context, i);
break;
case 'createReply':
responseData = await createReply(context, i);
break;
default:
throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Email resource.`, { itemIndex: i });
}
return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData));
}
catch (error) {
return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Email');
}
}
exports.executeEmailOperation = executeEmailOperation;
async function createEmail(context, itemIndex) {
const name = (0, ApiHelpers_1.getRequiredParam)(context, 'name', itemIndex);
const additionalFields = (0, ApiHelpers_1.getOptionalParam)(context, 'additionalFields', itemIndex, {});
const body = {
name,
};
if (additionalFields.subject) {
body.subject = additionalFields.subject;
}
if (additionalFields.customHtml) {
body.customHtml = additionalFields.customHtml;
}
if (additionalFields.plainText) {
body.plainText = additionalFields.plainText;
}
if (additionalFields.emailType) {
body.emailType = additionalFields.emailType;
}
if (additionalFields.fromAddress) {
body.fromAddress = additionalFields.fromAddress;
}
if (additionalFields.fromName) {
body.fromName = additionalFields.fromName;
}
if (additionalFields.replyToAddress) {
body.replyToAddress = additionalFields.replyToAddress;
}
if (additionalFields.bccAddress) {
body.bccAddress = additionalFields.bccAddress;
}
if (additionalFields.isPublished !== undefined) {
body.isPublished = additionalFields.isPublished;
}
if (additionalFields.publishUp) {
body.publishUp = additionalFields.publishUp;
}
if (additionalFields.publishDown) {
body.publishDown = additionalFields.publishDown;
}
if (additionalFields.language) {
body.language = additionalFields.language;
}
if (additionalFields.template) {
body.template = additionalFields.template;
}
if (additionalFields.category) {
body.category = additionalFields.category;
}
if (additionalFields.unsubscribeForm) {
body.unsubscribeForm = additionalFields.unsubscribeForm;
}
if (additionalFields.lists && Array.isArray(additionalFields.lists)) {
body.lists = additionalFields.lists;
}
if (additionalFields.assetAttachments) {
if (Array.isArray(additionalFields.assetAttachments)) {
body.assetAttachments = additionalFields.assetAttachments;
}
}
if (additionalFields.dynamicContent) {
body.dynamicContent = additionalFields.dynamicContent;
}
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', '/emails/new', body);
return response.email;
}
async function updateEmail(context, itemIndex) {
const emailId = (0, ApiHelpers_1.getRequiredParam)(context, 'emailId', itemIndex);
const createIfNotFound = (0, ApiHelpers_1.getOptionalParam)(context, 'createIfNotFound', itemIndex, false);
const updateFields = (0, ApiHelpers_1.getOptionalParam)(context, 'updateFields', itemIndex, {});
const body = {};
if (updateFields.name) {
body.name = updateFields.name;
}
if (updateFields.subject !== undefined) {
body.subject = updateFields.subject;
}
if (updateFields.customHtml !== undefined) {
body.customHtml = updateFields.customHtml;
}
if (updateFields.plainText !== undefined) {
body.plainText = updateFields.plainText;
}
if (updateFields.emailType !== undefined) {
body.emailType = updateFields.emailType;
}
if (updateFields.fromAddress !== undefined) {
body.fromAddress = updateFields.fromAddress;
}
if (updateFields.fromName !== undefined) {
body.fromName = updateFields.fromName;
}
if (updateFields.replyToAddress !== undefined) {
body.replyToAddress = updateFields.replyToAddress;
}
if (updateFields.bccAddress !== undefined) {
body.bccAddress = updateFields.bccAddress;
}
if (updateFields.isPublished !== undefined) {
body.isPublished = updateFields.isPublished;
}
if (updateFields.publishUp !== undefined) {
body.publishUp = updateFields.publishUp;
}
if (updateFields.publishDown !== undefined) {
body.publishDown = updateFields.publishDown;
}
if (updateFields.language !== undefined) {
body.language = updateFields.language;
}
if (updateFields.template !== undefined) {
body.template = updateFields.template;
}
if (updateFields.category !== undefined) {
body.category = updateFields.category;
}
if (updateFields.unsubscribeForm !== undefined) {
body.unsubscribeForm = updateFields.unsubscribeForm;
}
if (updateFields.lists !== undefined && Array.isArray(updateFields.lists)) {
body.lists = updateFields.lists;
}
if (updateFields.assetAttachments !== undefined) {
if (Array.isArray(updateFields.assetAttachments)) {
body.assetAttachments = updateFields.assetAttachments;
}
}
if (updateFields.dynamicContent !== undefined) {
body.dynamicContent = updateFields.dynamicContent;
}
const method = createIfNotFound ? 'PUT' : 'PATCH';
const response = await (0, ApiHelpers_1.makeApiRequest)(context, method, `/emails/${emailId}/edit`, body);
return response.email;
}
async function getEmail(context, itemIndex) {
const emailId = (0, ApiHelpers_1.getRequiredParam)(context, 'emailId', itemIndex);
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', `/emails/${emailId}`);
return (0, DataHelpers_1.convertNumericStrings)(response.email);
}
async function getAllEmails(context, 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, 'emails', 'GET', '/emails', {}, query);
return (0, DataHelpers_1.convertNumericStrings)(result);
}
else {
query.limit = limit;
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', '/emails', {}, query);
const data = Object.values(response.emails || {});
return (0, DataHelpers_1.convertNumericStrings)(data);
}
}
async function deleteEmail(context, itemIndex) {
const emailId = (0, ApiHelpers_1.getRequiredParam)(context, 'emailId', itemIndex);
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'DELETE', `/emails/${emailId}/delete`);
return response.email ?? { success: true };
}
async function createReply(context, itemIndex) {
const trackingHash = (0, ApiHelpers_1.getRequiredParam)(context, 'trackingHash', itemIndex);
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'POST', `/emails/reply/${trackingHash}`);
return response;
}