UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

167 lines 6.67 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.theHiveApiRequest = theHiveApiRequest; exports.mapResource = mapResource; exports.splitTags = splitTags; exports.prepareOptional = prepareOptional; exports.prepareCustomFields = prepareCustomFields; exports.buildCustomFieldSearch = buildCustomFieldSearch; exports.prepareSortQuery = prepareSortQuery; exports.prepareRangeQuery = prepareRangeQuery; const moment_timezone_1 = __importDefault(require("moment-timezone")); const n8n_workflow_1 = require("n8n-workflow"); const QueryFunctions_1 = require("./QueryFunctions"); async function theHiveApiRequest(method, resource, body = {}, query = {}, uri, option = {}) { const credentials = await this.getCredentials('theHiveApi'); let options = { method, qs: query, uri: uri || `${credentials.url}/api${resource}`, body, rejectUnauthorized: !credentials.allowUnauthorizedCerts, json: true, }; if (Object.keys(option).length !== 0) { options = Object.assign({}, options, option); } if (Object.keys(body).length === 0) { delete options.body; } if (Object.keys(query).length === 0) { delete options.qs; } return await this.helpers.requestWithAuthentication.call(this, 'theHiveApi', options); } // Helpers functions function mapResource(resource) { switch (resource) { case 'alert': return 'alert'; case 'case': return 'case'; case 'observable': return 'case_artifact'; case 'task': return 'case_task'; case 'log': return 'case_task_log'; default: return ''; } } function splitTags(tags) { return tags.split(',').filter((tag) => tag !== ' ' && tag); } function prepareOptional(optionals) { const response = {}; for (const key in optionals) { if (optionals[key] !== undefined && optionals[key] !== null && optionals[key] !== '') { if (['customFieldsJson', 'customFieldsUi'].indexOf(key) > -1) { continue; // Ignore customFields, they need special treatment } else if ((0, moment_timezone_1.default)(optionals[key], moment_timezone_1.default.ISO_8601).isValid()) { response[key] = Date.parse(optionals[key]); } else if (key === 'artifacts') { try { response[key] = (0, n8n_workflow_1.jsonParse)(optionals[key]); } catch (error) { throw new n8n_workflow_1.ApplicationError('Invalid JSON for artifacts', { level: 'warning' }); } } else if (key === 'tags') { response[key] = splitTags(optionals[key]); } else { response[key] = optionals[key]; } } } return response; } async function prepareCustomFields(additionalFields, jsonParameters = false) { // Check if the additionalFields object contains customFields if (jsonParameters) { let customFieldsJson = additionalFields.customFieldsJson; // Delete from additionalFields as some operations (e.g. alert:update) do not run prepareOptional // which would remove the extra fields delete additionalFields.customFieldsJson; if (typeof customFieldsJson === 'string') { try { customFieldsJson = (0, n8n_workflow_1.jsonParse)(customFieldsJson); } catch (error) { throw new n8n_workflow_1.ApplicationError('Invalid JSON for customFields', { level: 'warning' }); } } if (typeof customFieldsJson === 'object') { const customFields = Object.keys(customFieldsJson).reduce((acc, curr) => { acc[`customFields.${curr}`] = customFieldsJson[curr]; return acc; }, {}); return customFields; } else if (customFieldsJson) { throw new n8n_workflow_1.ApplicationError('customFieldsJson value is invalid', { level: 'warning' }); } } else if (additionalFields.customFieldsUi) { // Get Custom Field Types from TheHive const credentials = await this.getCredentials('theHiveApi'); const version = credentials.apiVersion; const endpoint = version === 'v1' ? '/customField' : '/list/custom_fields'; const requestResult = await theHiveApiRequest.call(this, 'GET', endpoint); // Convert TheHive3 response to the same format as TheHive 4 // [{name, reference, type}] const hiveCustomFields = version === 'v1' ? requestResult : Object.keys(requestResult).map((key) => requestResult[key]); // Build reference to type mapping object const referenceTypeMapping = hiveCustomFields.reduce((acc, curr) => ((acc[curr.reference] = curr.type), acc), {}); // Build "fieldName": {"type": "value"} objects const customFieldsUi = additionalFields.customFieldsUi; const customFields = (customFieldsUi?.customFields).reduce((acc, curr) => { const fieldName = curr.field; // Might be able to do some type conversions here if needed, TODO const updatedField = `customFields.${fieldName}.${[referenceTypeMapping[fieldName]]}`; acc[updatedField] = curr.value; return acc; }, {}); delete additionalFields.customFieldsUi; return customFields; } return undefined; } function buildCustomFieldSearch(customFields) { const searchQueries = []; Object.keys(customFields).forEach((customFieldName) => { searchQueries.push((0, QueryFunctions_1.Eq)(customFieldName, customFields[customFieldName])); }); return searchQueries; } function prepareSortQuery(sort, body) { if (sort) { const field = sort.substring(1); const value = sort.charAt(0) === '+' ? 'asc' : 'desc'; const sortOption = {}; sortOption[field] = value; body.query.push({ _name: 'sort', _fields: [sortOption], }); } } function prepareRangeQuery(range, body) { if (range && range !== 'all') { body.query.push({ _name: 'page', from: parseInt(range.split('-')[0], 10), to: parseInt(range.split('-')[1], 10), }); } } //# sourceMappingURL=GenericFunctions.js.map