@panoptic-it-solutions/n8n-nodes-datto-rmm
Version:
n8n node for Datto RMM integration
293 lines • 15.1 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.DattoRmm = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const execute_1 = require("./resources/account/execute");
const execute_2 = require("./resources/device/execute");
const execute_3 = require("./resources/site/execute");
const execute_4 = require("./resources/alert/execute");
const execute_5 = require("./resources/job/execute");
const execute_6 = require("./resources/audit/execute");
const execute_7 = require("./resources/system/execute");
const execute_8 = require("./resources/filter/execute");
const execute_9 = require("./resources/activity-log/execute");
const definitions_1 = require("./resources/definitions");
const description_1 = require("./resources/account/description");
const description_2 = require("./resources/device/description");
const description_3 = require("./resources/site/description");
const description_4 = require("./resources/alert/description");
const description_5 = require("./resources/job/description");
const description_6 = require("./resources/audit/description");
const description_7 = require("./resources/system/description");
const description_8 = require("./resources/filter/description");
const description_9 = require("./resources/activity-log/description");
const resource_operations_helper_1 = require("./helpers/resource-operations.helper");
const resourceMapper_1 = require("./helpers/resourceMapper");
class DattoRmm {
constructor() {
this.description = {
displayName: 'Datto RMM',
name: 'dattoRmm',
icon: 'file:datto-rmm.svg',
group: ['transform'],
usableAsTool: true,
version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Interact with Datto RMM API to manage devices, sites, alerts, and monitoring',
defaults: {
name: 'Datto RMM',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
{
name: 'dattoRmmApi',
required: true,
},
],
requestDefaults: {
baseURL: '={{$credentials.apiUrl}}',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
},
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: definitions_1.RESOURCE_DEFINITIONS,
default: 'account',
required: true,
},
...(0, resource_operations_helper_1.addOperationsToResource)(description_1.accountFields, { resourceName: 'account' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_2.deviceFields, { resourceName: 'device' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_3.siteFields, { resourceName: 'site' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_4.alertFields, { resourceName: 'alert' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_5.jobFields, { resourceName: 'job' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_6.auditFields, { resourceName: 'audit' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_7.systemFields, { resourceName: 'system' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_8.filterFields, { resourceName: 'filter' }),
...(0, resource_operations_helper_1.addOperationsToResource)(description_9.activityLogFields, { resourceName: 'activityLog' }),
],
};
this.methods = {
resourceMapping: {
async getFields() {
const resource = this.getNodeParameter('resource', 0);
return resourceMapper_1.getResourceMapperFields.call(this, resource);
},
},
loadOptions: {
async getResources() {
return definitions_1.RESOURCE_DEFINITIONS.map((resource) => ({
name: resource.name,
value: resource.value,
}));
},
async getSelectColumns() {
const resource = this.getNodeParameter('resource', 0);
try {
const { fields } = await resourceMapper_1.getResourceMapperFields.call(this, resource);
return fields.map((field) => ({
name: field.displayName || field.id,
value: field.id,
}));
}
catch (error) {
console.error(`Error loading select columns options: ${error.message}`);
return [];
}
},
async getSites() {
try {
const { dattoRmmApiRequestAllItems } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const sites = await dattoRmmApiRequestAllItems.call(this, 'GET', '/api/v2/account/sites');
return sites.map((site) => ({
name: `${site.name} (${site.deviceCount || 0} devices)`,
value: site.uid,
}));
}
catch (error) {
console.error('Error loading sites:', error.message);
return [];
}
},
async getOpenAlerts() {
try {
const { dattoRmmApiRequestAllItems } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const alerts = await dattoRmmApiRequestAllItems.call(this, 'GET', '/api/v2/account/alerts/open');
return alerts.map((alert) => ({
name: `${alert.alertType || 'Alert'} - ${alert.deviceName || alert.uid} (${alert.priority || 'Normal'})`,
value: alert.uid,
}));
}
catch (error) {
console.error('Error loading alerts:', error.message);
return [];
}
},
async getDevices() {
try {
const { dattoRmmApiRequestAllItems } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const devices = await dattoRmmApiRequestAllItems.call(this, 'GET', '/api/v2/account/devices');
return devices.map((device) => ({
name: `${device.hostname || device.displayName || 'Unknown'} - ${device.deviceType || 'Device'} (${device.intIpAddress || 'No IP'})`,
value: device.uid,
}));
}
catch (error) {
console.error('Error loading devices:', error.message);
return [];
}
},
async getJobs() {
try {
const { dattoRmmApiRequestAllItems } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const jobs = await dattoRmmApiRequestAllItems.call(this, 'GET', '/api/v2/job');
return jobs.map((job) => ({
name: `${job.name} (${job.status})`,
value: job.uid,
}));
}
catch (error) {
console.error('Error loading jobs:', error.message);
return [];
}
},
async getSiteDevices() {
try {
const siteUid = this.getNodeParameter('siteUid', 0);
if (!siteUid)
return [];
const { dattoRmmApiRequest } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const response = await dattoRmmApiRequest.call(this, 'GET', `/api/v2/site/${siteUid}/devices`);
if ((response === null || response === void 0 ? void 0 : response.data) && Array.isArray(response.data)) {
return response.data.map((device) => ({
name: `${device.hostname || device.displayName || 'Unknown'} - ${device.deviceType || 'Device'}`,
value: device.uid,
}));
}
return [];
}
catch (error) {
console.error('Error loading site devices:', error.message);
return [];
}
},
async getSiteOpenAlerts() {
try {
const siteUid = this.getNodeParameter('siteUid', 0);
if (!siteUid)
return [];
const { dattoRmmApiRequest } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const response = await dattoRmmApiRequest.call(this, 'GET', `/api/v2/site/${siteUid}/alerts/open`);
if ((response === null || response === void 0 ? void 0 : response.data) && Array.isArray(response.data)) {
return response.data.map((alert) => ({
name: `${alert.alertType || 'Alert'} - ${alert.deviceName || 'Unknown Device'} (${alert.priority || 'Normal'})`,
value: alert.uid,
}));
}
return [];
}
catch (error) {
console.error('Error loading site alerts:', error.message);
return [];
}
},
async getCustomFilters() {
try {
const { dattoRmmApiRequest } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const response = await dattoRmmApiRequest.call(this, 'GET', '/api/v2/filter/custom');
if ((response === null || response === void 0 ? void 0 : response.data) && Array.isArray(response.data)) {
return response.data.map((filter) => ({
name: `${filter.name} - ${filter.category || 'General'} (${filter.uid})`,
value: filter.uid,
}));
}
return [];
}
catch (error) {
console.error('Error loading custom filters:', error.message);
return [];
}
},
async getComponents() {
try {
const { dattoRmmApiRequestAllItems } = await Promise.resolve().then(() => __importStar(require('./helpers/api.helper')));
const components = await dattoRmmApiRequestAllItems.call(this, 'GET', '/api/v2/account/components');
return components.map((component) => ({
name: `${component.name} - ${component.description || 'No description'}`,
value: component.uid,
}));
}
catch {
return [];
}
},
},
};
}
async execute() {
const resource = this.getNodeParameter('resource', 0);
switch (resource) {
case 'account':
return execute_1.executeAccountOperation.call(this);
case 'device':
return execute_2.executeDeviceOperation.call(this);
case 'site':
return execute_3.executeSiteOperation.call(this);
case 'alert':
return execute_4.executeAlertOperation.call(this);
case 'job':
return execute_5.executeJobOperation.call(this);
case 'audit':
return execute_6.executeAuditOperation.call(this);
case 'system':
return execute_7.executeSystemOperation.call(this);
case 'filter':
return execute_8.executeFilterOperation.call(this);
case 'activityLog':
return execute_9.executeActivityLogOperation.call(this);
default:
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Resource ${resource} is not supported yet. Please check back later or contribute to the implementation.`);
}
}
}
exports.DattoRmm = DattoRmm;
//# sourceMappingURL=DattoRmm.node.js.map