UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

207 lines 10.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Phantombuster = void 0; const n8n_workflow_1 = require("n8n-workflow"); const AgentDescription_1 = require("./AgentDescription"); const GenericFunctions_1 = require("./GenericFunctions"); // import { // sentenceCase, // } from 'change-case'; class Phantombuster { description = { displayName: 'Phantombuster', name: 'phantombuster', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg icon: 'file:phantombuster.png', group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume Phantombuster API', defaults: { name: 'Phantombuster', }, builderHint: { message: 'Recommended for scraping LinkedIn profiles and social media for leads, and company data. Use with AI Agent for lead generation workflows.', }, usableAsTool: true, inputs: [n8n_workflow_1.NodeConnectionTypes.Main], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'phantombusterApi', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Agent', value: 'agent', }, ], default: 'agent', }, ...AgentDescription_1.agentOperations, ...AgentDescription_1.agentFields, ], }; methods = { loadOptions: { async getAgents() { const returnData = []; const responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'GET', '/agents/fetch-all'); for (const item of responseData) { returnData.push({ name: item.name, value: item.id, }); } return returnData; }, // Get all the arguments to display them to user so that they can // select them easily // async getArguments( // this: ILoadOptionsFunctions, // ): Promise<INodePropertyOptions[]> { // const returnData: INodePropertyOptions[] = []; // const agentId = this.getCurrentNodeParameter('agentId') as string; // const { argument } = await phantombusterApiRequest.call( // this, // 'GET', // '/agents/fetch', // {}, // { id: agentId }, // ); // for (const key of Object.keys(JSON.parse(argument))) { // returnData.push({ // name: sentenceCase(key), // value: key, // }); // } // return returnData; // }, }, }; async execute() { const items = this.getInputData(); const returnData = []; const length = items.length; const qs = {}; let responseData; const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); for (let i = 0; i < length; i++) { try { if (resource === 'agent') { //https://hub.phantombuster.com/reference#post_agents-delete-1 if (operation === 'delete') { const agentId = this.getNodeParameter('agentId', i); responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'POST', '/agents/delete', { id: agentId, }); responseData = { success: true }; } //https://hub.phantombuster.com/reference#get_agents-fetch-1 if (operation === 'get') { const agentId = this.getNodeParameter('agentId', i); responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'GET', '/agents/fetch', {}, { id: agentId }); } //https://hub.phantombuster.com/reference#get_agents-fetch-output-1 if (operation === 'getOutput') { const agentId = this.getNodeParameter('agentId', i); const resolveData = this.getNodeParameter('resolveData', i); const additionalFields = this.getNodeParameter('additionalFields', i); Object.assign(qs, additionalFields); qs.id = agentId; responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'GET', '/agents/fetch-output', {}, qs); if (resolveData) { const { resultObject } = await GenericFunctions_1.phantombusterApiRequest.call(this, 'GET', '/containers/fetch-result-object', {}, { id: responseData.containerId }); if (resultObject === null) { responseData = {}; } else { responseData = JSON.parse(resultObject); } } } //https://api.phantombuster.com/api/v2/agents/fetch-all if (operation === 'getAll') { const returnAll = this.getNodeParameter('returnAll', i); responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'GET', '/agents/fetch-all'); if (!returnAll) { const limit = this.getNodeParameter('limit', 0); responseData = responseData.splice(0, limit); } } //https://hub.phantombuster.com/reference#post_agents-launch-1 if (operation === 'launch') { const agentId = this.getNodeParameter('agentId', i); const jsonParameters = this.getNodeParameter('jsonParameters', i); const resolveData = this.getNodeParameter('resolveData', i); const additionalFields = this.getNodeParameter('additionalFields', i); const body = { id: agentId, }; if (jsonParameters) { if (additionalFields.argumentsJson) { body.arguments = (0, GenericFunctions_1.validateJSON)(this, additionalFields.argumentsJson, 'Arguments'); delete additionalFields.argumentsJson; } if (additionalFields.bonusArgumentJson) { body.bonusArgument = (0, GenericFunctions_1.validateJSON)(this, additionalFields.bonusArgumentJson, 'Bonus Argument'); delete additionalFields.bonusArgumentJson; } } else { const argumentParameters = additionalFields.argumentsUi?.argumentValues || []; const argumentsObj = argumentParameters.reduce((object, currentValue) => { object[currentValue.key] = currentValue.value; return object; }, {}); // Only set arguments if not empty as per API requirements if (Object.keys(argumentsObj).length > 0) { body.arguments = argumentsObj; } delete additionalFields.argumentsUi; const bonusParameters = additionalFields.bonusArgumentUi ?.bonusArgumentValue || []; const bonusArgumentObj = bonusParameters.reduce((object, currentValue) => { object[currentValue.key] = currentValue.value; return object; }, {}); // Only set bonusArgument if not empty as per API requirements if (Object.keys(bonusArgumentObj).length > 0) { body.bonusArgument = bonusArgumentObj; } delete additionalFields.bonusArgumentUi; } Object.assign(body, additionalFields); responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'POST', '/agents/launch', body); if (resolveData) { responseData = await GenericFunctions_1.phantombusterApiRequest.call(this, 'GET', '/containers/fetch', {}, { id: responseData.containerId }); } } } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } }); returnData.push(...executionData); continue; } throw error; } } return [returnData]; } } exports.Phantombuster = Phantombuster; //# sourceMappingURL=Phantombuster.node.js.map