@panoptic-it-solutions/n8n-nodes-datto-rmm
Version:
n8n node for Datto RMM integration
333 lines • 20.1 kB
JavaScript
;
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