UNPKG

n8n-nodes-tenable-community

Version:

n8n node for the Tenable One platform

128 lines (127 loc) 5.96 kB
"use strict"; /** * @file Node definition for Tenable Vulnerability Management. * This node provides access to the Tenable Vulnerability Management API, allowing users to manage * assets, scans, policies, and vulnerabilities. It is a product-specific node refactored from * the monolithic Tenable node. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.TenableVulnerabilityManagement = void 0; const n8n_workflow_1 = require("n8n-workflow"); const GenericFunctions_1 = require("./GenericFunctions"); const VulnerabilityManagement_node_options_1 = require("./VulnerabilityManagement.node.options"); /** * @class TenableVulnerabilityManagement * @implements {INodeType} * @description The main class for the n8n Tenable Vulnerability Management node. */ class TenableVulnerabilityManagement { constructor() { this.description = { displayName: 'Tenable Vulnerability Management', name: 'tenableVulnerabilityManagement', icon: 'file:../icons/Tenable.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Interact with the Tenable Vulnerability Management API', defaults: { name: 'Tenable VM', }, inputs: ["main" /* NodeConnectionType.Main */], outputs: ["main" /* NodeConnectionType.Main */], credentials: [ { name: 'tenableApi', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: VulnerabilityManagement_node_options_1.resourceOptions, default: '', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['assets'], }, }, options: VulnerabilityManagement_node_options_1.operationOptions.assets, default: '', }, ...VulnerabilityManagement_node_options_1.vulnerabilityManagementFields, { displayName: 'Return All', name: 'returnAll', type: 'boolean', default: false, displayOptions: { show: { operation: VulnerabilityManagement_node_options_1.paginableOperations } }, description: 'Whether to return all results or only up to a given limit', }, ], }; } async execute() { const items = this.getInputData(); let responseData; const returnData = []; for (let i = 0; i < items.length; i++) { try { const resource = this.getNodeParameter('resource', i, ''); const operation = this.getNodeParameter('operation', i, ''); const body = {}; const qs = {}; if (resource === 'assets') { if (operation === 'getAssetDetails') { qs.assetUuid = this.getNodeParameter('assetUuid', i, ''); } else if (operation === 'importAssets') { body.assets = this.getNodeParameter('assets', i, []); body.source = this.getNodeParameter('source', i, ''); } else if (operation === 'getImportJobStatus') { qs.assetImportJobUuid = this.getNodeParameter('assetImportJobUuid', i, ''); } else if (operation === 'bulkUpdateAcr') { body.acr_score = this.getNodeParameter('acrScore', i, 0); body.reason = this.getNodeParameter('reason', i, []); body.note = this.getNodeParameter('note', i, ''); body.asset = this.getNodeParameter('asset', i, {}); } else if (operation === 'moveAssets') { body.source = this.getNodeParameter('source', i, ''); body.destination = this.getNodeParameter('destination', i, ''); body.targets = this.getNodeParameter('targets', i, ''); } else if (operation === 'bulkDeleteAssets') { body.query = this.getNodeParameter('query', i, {}); body.hard_delete = this.getNodeParameter('hardDelete', i, false); } } // TODO: Add pagination handling for 'returnAll' responseData = await GenericFunctions_1.vulnerabiltyManagementApiRequest.call(this, resource, operation, body, qs); const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { const nodeError = new n8n_workflow_1.NodeOperationError(this.getNode(), error, { itemIndex: i }); returnData.push({ json: { error: nodeError.message }, error: nodeError }); continue; } throw error; } } return [this.helpers.returnJsonArray(returnData)]; } } exports.TenableVulnerabilityManagement = TenableVulnerabilityManagement;