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
JavaScript
;
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;
}