UNPKG

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
"use strict"; 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); } }