n8n-nodes-mautic-advanced
Version:
Enhanced n8n node for Mautic with comprehensive API coverage including tags, campaigns, categories, and advanced contact management
110 lines (109 loc) • 4.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeStatsOperation = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const ApiHelpers_1 = require("../utils/ApiHelpers");
const DataHelpers_1 = require("../utils/DataHelpers");
const GenericFunctions_1 = require("../GenericFunctions");
async function executeStatsOperation(context, operation, i) {
let responseData;
try {
switch (operation) {
case 'getAvailableTables':
responseData = await getAvailableTables(context);
break;
case 'get':
responseData = await getStats(context, i);
break;
default:
throw new n8n_workflow_1.NodeOperationError(context.getNode(), `Operation '${operation}' is not supported for Stats resource.`, { itemIndex: i });
}
return context.helpers.returnJsonArray((0, DataHelpers_1.wrapSingleItem)(responseData));
}
catch (error) {
return (0, ApiHelpers_1.handleApiError)(context, error, operation, 'Stats');
}
}
exports.executeStatsOperation = executeStatsOperation;
async function getAvailableTables(context) {
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', '/stats');
return (0, DataHelpers_1.convertNumericStrings)(response);
}
async function getStats(context, itemIndex) {
const table = (0, ApiHelpers_1.getRequiredParam)(context, 'table', itemIndex);
const returnAll = (0, ApiHelpers_1.getOptionalParam)(context, 'returnAll', itemIndex, false);
const additionalOptions = (0, ApiHelpers_1.getOptionalParam)(context, 'additionalOptions', itemIndex, {});
const qs = {};
// Handle pagination
if (additionalOptions.start !== undefined) {
qs.start = additionalOptions.start;
}
else {
qs.start = 0;
}
if (!returnAll) {
const limit = (0, ApiHelpers_1.getRequiredParam)(context, 'limit', itemIndex);
qs.limit = limit;
}
// Handle ordering
if (additionalOptions.orderBy) {
const orderDir = additionalOptions.orderByDir || 'asc';
// Mautic expects order as array: order[0][col]=id&order[0][dir]=asc
qs['order[0][col]'] = additionalOptions.orderBy;
qs['order[0][dir]'] = orderDir;
}
// Handle where conditions
if (additionalOptions.where) {
const whereConditions = (0, GenericFunctions_1.validateJSON)(additionalOptions.where);
if (whereConditions && Array.isArray(whereConditions)) {
whereConditions.forEach((condition, idx) => {
if (condition.col)
qs[`where[${idx}][col]`] = condition.col;
if (condition.expr)
qs[`where[${idx}][expr]`] = condition.expr;
if (condition.val !== undefined)
qs[`where[${idx}][val]`] = condition.val;
});
}
}
const allStats = [];
if (returnAll) {
// Paginate through all results
const pageSize = 100;
qs.limit = pageSize;
let hasMore = true;
while (hasMore) {
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', `/stats/${table}`, {}, qs);
const statsRaw = response.stats ?? [];
let statsArray;
if (Array.isArray(statsRaw)) {
statsArray = statsRaw;
}
else if (typeof statsRaw === 'object') {
statsArray = Object.values(statsRaw);
}
else {
statsArray = [];
}
allStats.push(...statsArray);
if (statsArray.length < pageSize) {
hasMore = false;
}
else {
qs.start = qs.start + pageSize;
}
}
return (0, DataHelpers_1.convertNumericStrings)(allStats);
}
else {
const response = await (0, ApiHelpers_1.makeApiRequest)(context, 'GET', `/stats/${table}`, {}, qs);
const stats = response.stats ?? [];
if (Array.isArray(stats)) {
return (0, DataHelpers_1.convertNumericStrings)(stats);
}
else if (typeof stats === 'object') {
return (0, DataHelpers_1.convertNumericStrings)(Object.values(stats));
}
return (0, DataHelpers_1.convertNumericStrings)(stats);
}
}