UNPKG

@socradar/n8n-nodes-socradar

Version:

Production-ready n8n integration for SOCRadar Extended Threat Intelligence platform

215 lines 8.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleDigitalFootprintOperations = handleDigitalFootprintOperations; const n8n_workflow_1 = require("n8n-workflow"); const axios_1 = __importDefault(require("axios")); async function handleDigitalFootprintOperations(baseUrl, headers, i) { var _a; const operation = this.getNodeParameter('operation', i); const companyId = this.getNodeParameter('companyId', i); try { if (operation === 'getDigitalAssets') { return await handleGetDigitalAssets.call(this, baseUrl, headers, companyId, i); } else if (operation === 'addAsset') { return await handleAddAsset.call(this, baseUrl, headers, companyId, i); } else if (operation === 'markFalsePositive') { return await handleMarkFalsePositive.call(this, baseUrl, headers, companyId, i); } else if (operation === 'toggleMonitoring') { return await handleToggleMonitoring.call(this, baseUrl, headers, companyId, i); } throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The operation "${operation}" is not supported for resource "digitalFootprint"!`); } catch (error) { if (this.continueOnFail()) { return { json: { error: error.message, details: ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || 'No additional error details', }, pairedItem: { item: i }, }; } throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Digital Footprint Error: ${error.message}`, { itemIndex: i }); } } async function handleGetDigitalAssets(baseUrl, headers, companyId, i) { const endpoint = `${baseUrl}/company/${companyId}/asm`; const assetType = this.getNodeParameter('assetType', i); const additionalFields = this.getNodeParameter('additionalFields', i, {}); const queryParams = { assetType, }; if (additionalFields.pageNumber !== undefined) { queryParams.pageNumber = additionalFields.pageNumber; } if (additionalFields.pageLimit !== undefined) { queryParams.pageLimit = additionalFields.pageLimit; } if (additionalFields.sortBy) { queryParams.sortBy = additionalFields.sortBy; } if (additionalFields.sortDesc !== undefined) { queryParams.sortDesc = additionalFields.sortDesc; } const options = { method: 'GET', url: endpoint, headers, params: queryParams, }; const response = await (0, axios_1.default)(options); return { json: response.data, pairedItem: { item: i }, }; } async function handleAddAsset(baseUrl, headers, companyId, i) { const assetType = this.getNodeParameter('assetType', i); const assetName = this.getNodeParameter('assetName', i); const endpoint = `${baseUrl}/company/${companyId}/asm/add/${assetType}`; const body = { asset_name: assetName, source: 'manual', }; switch (assetType) { case 'domain': body.domain = this.getNodeParameter('domain', i); body.domain_type = this.getNodeParameter('domainType', i); break; case 'cloudBuckets': body.cloud_platform_name = this.getNodeParameter('cloudPlatformName', i); body.access_state = this.getNodeParameter('accessState', i); body.service_name = 'manual_entry'; break; case 'ipAddress': body.ip_address = this.getNodeParameter('ipAddress', i); break; case 'website': body.url = assetName; break; case 'loginPage': body.url = assetName; break; case 'dnsRecord': body.record_type = 'A'; break; case 'sslCertificate': body.hostname = assetName; break; case 'ipBlock': body.cidr = assetName; break; case 'mobileApplication': body.platform = 'android'; break; case 'technology': body.category = 'web'; break; case 'socialAccounts': body.platform = 'twitter'; break; case 'sourceCodeRepo': body.platform = 'github'; break; default: throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Asset type '${assetType}' is not supported for the addAsset operation!`); } const options = { method: 'POST', url: endpoint, headers, data: body, }; const response = await (0, axios_1.default)(options); return { json: response.data, pairedItem: { item: i }, }; } async function handleMarkFalsePositive(baseUrl, headers, companyId, i) { const endpoint = `${baseUrl}/company/${companyId}/asm/fp`; const assetId = this.getNodeParameter('assetId', i); const assetType = this.getNodeParameter('assetType', i); const subType = this.getNodeParameter('subType', i); const notes = this.getNodeParameter('notes', i, ''); const validAssetTypes = [ 'domain', 'ipAddress', 'website', 'loginPage', 'dnsRecord', 'sslCertificate', 'ipBlock', 'mobileApplication', 'technology', 'cloudBuckets', 'socialAccounts', 'sourceCodeRepo' ]; if (!validAssetTypes.includes(assetType)) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Asset type '${assetType}' is not supported for the markFalsePositive operation!`); } const assetIdNum = parseInt(assetId, 10); if (isNaN(assetIdNum)) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid asset ID: '${assetId}'. Asset ID must be a number.`); } const body = { asset_id: assetIdNum, asset_type: assetType, sub_type: subType, notes, }; const options = { method: 'POST', url: endpoint, headers, data: body, }; try { const response = await (0, axios_1.default)(options); return { json: response.data, pairedItem: { item: i }, }; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error marking asset as false positive: ${error.message}`, { itemIndex: i }); } } async function handleToggleMonitoring(baseUrl, headers, companyId, i) { const endpoint = `${baseUrl}/company/${companyId}/asm/monitor`; const assetId = this.getNodeParameter('assetId', i); const assetType = this.getNodeParameter('assetType', i); const monitor = this.getNodeParameter('monitor', i); const validAssetTypes = [ 'domain', 'ipAddress', 'website', 'loginPage', 'dnsRecord', 'sslCertificate', 'ipBlock', 'mobileApplication', 'technology', 'cloudBuckets', 'socialAccounts', 'sourceCodeRepo' ]; if (!validAssetTypes.includes(assetType)) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Asset type '${assetType}' is not supported for the toggleMonitoring operation!`); } const assetIdNum = parseInt(assetId, 10); if (isNaN(assetIdNum)) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Invalid asset ID: '${assetId}'. Asset ID must be a number.`); } const body = { asset_id: assetIdNum, asset_type: assetType, is_monitor_on: monitor, }; const options = { method: 'POST', url: endpoint, headers, data: body, }; try { const response = await (0, axios_1.default)(options); return { json: response.data, pairedItem: { item: i }, }; } catch (error) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error toggling monitoring for asset: ${error.message}`, { itemIndex: i }); } } //# sourceMappingURL=digitalFootprint.js.map