UNPKG

@panoptic-it-solutions/n8n-nodes-datto-rmm

Version:

n8n node for Datto RMM integration

333 lines 20.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeAuditOperation = executeAuditOperation; const n8n_workflow_1 = require("n8n-workflow"); const api_helper_1 = require("../../helpers/api.helper"); const errorHandler_1 = require("../../helpers/errorHandler"); async function executeAuditOperation() { const items = this.getInputData(); const operation = this.getNodeParameter('operation', 0); const returnData = []; return (0, errorHandler_1.handleErrors)(this, async () => { var _a, _b, _c; for (let i = 0; i < items.length; i++) { try { let responseData; switch (operation) { case 'getDeviceAudit': { const deviceUid = this.getNodeParameter('deviceUid', i); const includeArchived = this.getNodeParameter('includeArchived', i, false); const startDate = this.getNodeParameter('startDate', i, ''); const endDate = this.getNodeParameter('endDate', i, ''); const queryParams = {}; if (includeArchived) { queryParams.includeArchived = true; if (startDate === null || startDate === void 0 ? void 0 : startDate.trim()) { queryParams.startDate = startDate.trim(); } if (endDate === null || endDate === void 0 ? void 0 : endDate.trim()) { queryParams.endDate = endDate.trim(); } } responseData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', `/api/v2/audit/device/${deviceUid}`, {}, queryParams); } break; case 'getSoftwareAudit': { const deviceUid = this.getNodeParameter('deviceUid', i); const includeArchived = this.getNodeParameter('includeArchived', i, false); const startDate = this.getNodeParameter('startDate', i, ''); const endDate = this.getNodeParameter('endDate', i, ''); const softwareName = this.getNodeParameter('softwareName', i, ''); const includeSystemSoftware = this.getNodeParameter('includeSystemSoftware', i, true); const queryParams = {}; if (includeArchived) { queryParams.includeArchived = true; if (startDate === null || startDate === void 0 ? void 0 : startDate.trim()) { queryParams.startDate = startDate.trim(); } if (endDate === null || endDate === void 0 ? void 0 : endDate.trim()) { queryParams.endDate = endDate.trim(); } } if (softwareName === null || softwareName === void 0 ? void 0 : softwareName.trim()) { queryParams.softwareName = softwareName.trim(); } if (!includeSystemSoftware) { queryParams.includeSystemSoftware = false; } responseData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', `/api/v2/audit/device/${deviceUid}/software`, {}, queryParams); } break; case 'getHardwareAudit': { const deviceUid = this.getNodeParameter('deviceUid', i); const includeArchived = this.getNodeParameter('includeArchived', i, false); const startDate = this.getNodeParameter('startDate', i, ''); const endDate = this.getNodeParameter('endDate', i, ''); const hardwareCategory = this.getNodeParameter('hardwareCategory', i, ''); const queryParams = {}; if (includeArchived) { queryParams.includeArchived = true; if (startDate === null || startDate === void 0 ? void 0 : startDate.trim()) { queryParams.startDate = startDate.trim(); } if (endDate === null || endDate === void 0 ? void 0 : endDate.trim()) { queryParams.endDate = endDate.trim(); } } if (hardwareCategory === null || hardwareCategory === void 0 ? void 0 : hardwareCategory.trim()) { queryParams.category = hardwareCategory.trim(); } responseData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', `/api/v2/audit/device/${deviceUid}`, {}, queryParams); } break; case 'getPrinterAudit': { const deviceUid = this.getNodeParameter('deviceUid', i); responseData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', `/api/v2/audit/printer/${deviceUid}`); } break; case 'getEsxiAudit': { const deviceUid = this.getNodeParameter('deviceUid', i); responseData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', `/api/v2/audit/esxihost/${deviceUid}`); } break; case 'getAuditByMac': { const macAddress = this.getNodeParameter('macAddress', i); const includeArchived = this.getNodeParameter('includeArchived', i, false); const cleanMac = macAddress.replace(/[^a-fA-F0-9]/g, ''); if (cleanMac.length !== 12) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'MAC address must be 12 characters (XXXXXXXXXXXX format, no separators)', { itemIndex: i }); } const queryParams = {}; if (includeArchived) { queryParams.includeArchived = true; } const endpoint = `/api/v2/audit/device/macAddress/${cleanMac}`; responseData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', endpoint, {}, queryParams); } break; case 'runSiteAudit': { const siteUid = this.getNodeParameter('siteUid', i); const auditType = this.getNodeParameter('siteAuditType', i, 'device'); const includeArchived = this.getNodeParameter('includeArchived', i, false); const deviceFilters = this.getNodeParameter('deviceFilters', i, {}); const executionOptions = this.getNodeParameter('executionOptions', i, {}); const continueOnError = (_a = executionOptions.continueOnError) !== null && _a !== void 0 ? _a : true; const maxConcurrent = Math.min(Math.max((_b = executionOptions.maxConcurrent) !== null && _b !== void 0 ? _b : 5, 1), 10); const includeSummary = (_c = executionOptions.includeSummary) !== null && _c !== void 0 ? _c : true; let devices = await api_helper_1.dattoRmmApiRequestAllItems.call(this, 'GET', `/api/v2/site/${siteUid}/devices`); if (!Array.isArray(devices) || devices.length === 0) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `No devices found in site ${siteUid}. The site may be empty or the site UID may be invalid.`, { itemIndex: i }); } if (deviceFilters.deviceTypes && deviceFilters.deviceTypes.length > 0) { devices = devices.filter((device) => { var _a; return deviceFilters.deviceTypes.includes((_a = device.deviceType) === null || _a === void 0 ? void 0 : _a.toLowerCase()); }); } if (deviceFilters.operatingSystems && deviceFilters.operatingSystems.length > 0) { devices = devices.filter((device) => { var _a; const osName = ((_a = device.operatingSystem) === null || _a === void 0 ? void 0 : _a.toLowerCase()) || ''; return deviceFilters.operatingSystems.some((os) => osName.includes(os.toLowerCase())); }); } if (deviceFilters.onlineStatus && deviceFilters.onlineStatus !== 'all') { const isOnlineFilter = deviceFilters.onlineStatus === 'online'; devices = devices.filter((device) => Boolean(device.online) === isOnlineFilter); } if (devices.length === 0) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No devices match the specified filters in the selected site', { itemIndex: i }); } const auditResults = []; const errors = []; for (let batchStart = 0; batchStart < devices.length; batchStart += maxConcurrent) { const batch = devices.slice(batchStart, batchStart + maxConcurrent); const batchPromises = batch.map(async (device) => { try { const queryParams = {}; if (includeArchived) { queryParams.includeArchived = true; } let endpoint; switch (auditType) { case 'device': case 'hardware': endpoint = `/api/v2/audit/device/${device.uid}`; break; case 'software': endpoint = `/api/v2/audit/device/${device.uid}/software`; break; default: throw new Error(`Unsupported audit type: ${auditType}`); } const deviceAuditData = await api_helper_1.dattoRmmApiRequest.call(this, 'GET', endpoint, {}, queryParams); return { success: true, deviceUid: device.uid, deviceName: device.hostname || device.displayName || device.uid, auditType, auditData: deviceAuditData, }; } catch (error) { const errorInfo = { success: false, deviceUid: device.uid, deviceName: device.hostname || device.displayName || device.uid, auditType, error: error.message || 'Unknown error occurred', }; if (!continueOnError) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Audit failed for device ${device.hostname || device.uid}: ${error.message}`, { itemIndex: i }); } return errorInfo; } }); const batchResults = await Promise.all(batchPromises); batchResults.forEach((result) => { if (result.success) { auditResults.push(result); } else { errors.push(result); } }); } const summaryData = { siteUid, auditType, totalDevices: devices.length, successfulAudits: auditResults.length, failedAudits: errors.length, executionOptions: { continueOnError, maxConcurrent, includeArchived, }, timestamp: new Date().toISOString(), }; responseData = { auditResults, errors: errors.length > 0 ? errors : undefined, summary: includeSummary ? summaryData : undefined, }; } break; default: throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not supported for audit resource`, { description: `Available operations: getDeviceAudit, getSoftwareAudit, getHardwareAudit, getPrinterAudit, getEsxiAudit, getAuditByMac, runSiteAudit`, }); } if (Array.isArray(responseData)) { responseData.forEach((item) => { returnData.push({ json: item, pairedItem: { item: i }, }); }); } else if (responseData && typeof responseData === 'object') { if (operation === 'runSiteAudit' && responseData.auditResults) { responseData.auditResults.forEach((auditResult) => { returnData.push({ json: auditResult, pairedItem: { item: i }, }); }); if (responseData.errors && Array.isArray(responseData.errors) && responseData.errors.length > 0) { responseData.errors.forEach((errorResult) => { returnData.push({ json: errorResult, pairedItem: { item: i }, }); }); } if (responseData.summary) { returnData.push({ json: { ...responseData.summary, itemType: 'site-audit-summary', }, pairedItem: { item: i }, }); } continue; } let dataArray = []; if (responseData.data && Array.isArray(responseData.data)) { dataArray = responseData.data; } else if (responseData.auditData && Array.isArray(responseData.auditData)) { dataArray = responseData.auditData; } else if (responseData.software && Array.isArray(responseData.software)) { dataArray = responseData.software; } else if (responseData.hardware && Array.isArray(responseData.hardware)) { dataArray = responseData.hardware; } else { returnData.push({ json: responseData, pairedItem: { item: i }, }); continue; } if (dataArray.length > 0) { dataArray.forEach((item) => { returnData.push({ json: item, pairedItem: { item: i }, }); }); } else { returnData.push({ json: { message: `No audit data found for ${operation}`, operation: operation, auditContext: { deviceUid: operation === 'getAuditByMac' ? undefined : this.getNodeParameter('deviceUid', i, ''), macAddress: operation === 'getAuditByMac' ? this.getNodeParameter('macAddress', i, '') : undefined, auditType: operation === 'getAuditByMac' ? this.getNodeParameter('auditType', i, 'device') : undefined, }, }, pairedItem: { item: i }, }); } } } catch (error) { if (this.continueOnFail()) { returnData.push({ json: { error: error.message || 'Unknown error occurred', itemIndex: i, operation: operation, resource: 'audit', }, pairedItem: { item: i, }, }); continue; } throw error; } } return [returnData]; }); } //# sourceMappingURL=execute.js.map