n8n-nodes-heyreach
Version:
n8n community node for HeyReach API - LinkedIn automation platform
236 lines • 11.2 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.HeyReachApi = void 0;
const generic_functions_1 = require("../generic.functions");
const OperationRouter_1 = require("./operations/OperationRouter");
// Import parameter definitions (will be created in Phase 2)
const CampaignParameters_1 = require("./parameters/CampaignParameters");
const LeadParameters_1 = require("./parameters/LeadParameters");
const ListParameters_1 = require("./parameters/ListParameters");
const AnalyticsParameters_1 = require("./parameters/AnalyticsParameters");
const ConversationParameters_1 = require("./parameters/ConversationParameters");
const NetworkParameters_1 = require("./parameters/NetworkParameters");
/**
* Main HeyReach API Node
*/
class HeyReachApi {
constructor() {
this.description = {
displayName: 'HeyReach',
name: 'heyreach',
icon: 'file:heyreach.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["resource"] + ": " + $parameter["operation"]}}',
description: 'Interact with HeyReach API for LinkedIn automation',
defaults: {
name: 'HeyReach',
},
inputs: ["main" /* NodeConnectionType.Main */],
outputs: ["main" /* NodeConnectionType.Main */],
credentials: [
{
name: 'heyReachApi',
required: true,
},
],
properties: [
{
displayName: 'Resource',
name: 'resource',
type: 'options',
noDataExpression: true,
options: [
{
name: 'Campaign',
value: 'campaign',
description: 'Manage LinkedIn automation campaigns',
},
{
name: 'Lead',
value: 'lead',
description: 'Manage individual leads and prospects',
},
{
name: 'List',
value: 'list',
description: 'Manage lead and company lists',
},
{
name: 'Analytics',
value: 'analytics',
description: 'Access campaign performance analytics',
},
{
name: 'Conversation',
value: 'conversation',
description: 'Manage LinkedIn conversations and inbox',
},
{
name: 'Network',
value: 'network',
description: 'Access LinkedIn network connections',
},
],
default: 'campaign',
},
// Import all parameter definitions from modular files
...CampaignParameters_1.campaignParameters,
...LeadParameters_1.leadParameters,
...ListParameters_1.listParameters,
...AnalyticsParameters_1.analyticsParameters,
...ConversationParameters_1.conversationParameters,
...NetworkParameters_1.networkParameters,
],
};
this.methods = {
listSearch: {
// Search campaigns for resource locator
async getCampaigns(filter) {
try {
const campaigns = await generic_functions_1.heyReachApiRequest.call(this, 'POST', '/campaign/GetAll', {
offset: 0,
limit: 100,
});
const results = [];
if (campaigns.items && Array.isArray(campaigns.items)) {
for (const campaign of campaigns.items) {
const name = `${campaign.name} (${campaign.status})`;
// Apply filter if provided
if (!filter || name.toLowerCase().includes(filter.toLowerCase())) {
results.push({
name,
value: campaign.id.toString(),
description: `Campaign ID: ${campaign.id}, Status: ${campaign.status}`,
});
}
}
}
return {
results: results.sort((a, b) => a.name.localeCompare(b.name)),
};
}
catch (error) {
console.error('Error fetching campaigns for resource locator:', error);
return { results: [] };
}
},
// Search lists for resource locator
async getLists(filter) {
try {
const lists = await generic_functions_1.heyReachApiRequest.call(this, 'POST', '/list/GetAll', {
offset: 0,
limit: 100,
});
const results = [];
if (lists.items && Array.isArray(lists.items)) {
for (const list of lists.items) {
const name = `${list.name} (${list.totalItemsCount || 0} items)`;
// Apply filter if provided
if (!filter || name.toLowerCase().includes(filter.toLowerCase())) {
results.push({
name,
value: list.id.toString(),
description: `List ID: ${list.id}, Items: ${list.totalItemsCount || 0}`,
});
}
}
}
return {
results: results.sort((a, b) => a.name.localeCompare(b.name)),
};
}
catch (error) {
console.error('Error fetching lists for resource locator:', error);
return { results: [] };
}
},
},
loadOptions: {
// Get campaigns for dropdown selection
async getCampaigns() {
try {
const campaigns = await generic_functions_1.heyReachApiRequest.call(this, 'POST', '/campaign/GetAll', {
offset: 0,
limit: 100,
});
const campaignOptions = [];
if (campaigns.items && Array.isArray(campaigns.items)) {
for (const campaign of campaigns.items) {
campaignOptions.push({
name: `${campaign.name} (${campaign.status})`,
value: campaign.id,
description: `Campaign ID: ${campaign.id}, Status: ${campaign.status}`,
});
}
}
return campaignOptions.sort((a, b) => a.name.localeCompare(b.name));
}
catch (error) {
console.error('Error fetching campaigns for dropdown:', error);
return [];
}
},
// Get lists for dropdown selection
async getLists() {
try {
const lists = await generic_functions_1.heyReachApiRequest.call(this, 'POST', '/list/GetAll', {
offset: 0,
limit: 100,
});
const listOptions = [];
if (lists.items && Array.isArray(lists.items)) {
for (const list of lists.items) {
listOptions.push({
name: `${list.name} (${list.listType})`,
value: list.id,
description: `List ID: ${list.id}, Type: ${list.listType}, Count: ${list.count || 0}`,
});
}
}
return listOptions.sort((a, b) => a.name.localeCompare(b.name));
}
catch (error) {
console.error('Error fetching lists for dropdown:', error);
return [];
}
},
},
};
}
async execute() {
const items = this.getInputData();
const returnData = [];
for (let i = 0; i < items.length; i++) {
try {
const resource = this.getNodeParameter('resource', i);
const operation = this.getNodeParameter('operation', i);
// Route to appropriate operation handler using the modular system
const responseData = await OperationRouter_1.OperationRouter.execute(this, i, resource, operation);
// Handle array responses (like getMany operations) vs single item responses
let jsonArray;
if (Array.isArray(responseData)) {
// For getMany operations, responseData is already an array of items
jsonArray = responseData.map(item => ({ json: item }));
}
else {
// For single item operations, wrap in array
jsonArray = this.helpers.returnJsonArray(responseData);
}
const executionData = this.helpers.constructExecutionMetaData(jsonArray, { itemData: { item: i } });
returnData.push(...executionData);
}
catch (error) {
if (this.continueOnFail()) {
const executionData = this.helpers.constructExecutionMetaData([{ json: { error: error.message } }], { itemData: { item: i } });
returnData.push(...executionData);
continue;
}
throw error;
}
}
return [returnData];
}
}
exports.HeyReachApi = HeyReachApi;
//# sourceMappingURL=HeyReachApi.node.js.map