UNPKG

n8n-nodes-hdw

Version:

n8n node to access Horizon Data Wave API services

1,045 lines 90.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.HdwLinkedin = void 0; class HdwLinkedin { constructor() { this.description = { displayName: 'HDW LinkedIn', name: 'hdwLinkedin', icon: 'file:hdw_logo.png', group: ['transform'], version: 1, usableAsTool: true, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Integrate with Horizon Data Wave LinkedIn API', defaults: { name: 'HDW LinkedIn', }, inputs: ["main" /* NodeConnectionType.Main */], outputs: ["main" /* NodeConnectionType.Main */], credentials: [ { name: 'hdwLinkedinApi', required: true, }, ], requestDefaults: { baseURL: 'https://api.horizondatawave.ai', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, }, properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'User', value: 'user' }, { name: 'Email', value: 'email' }, { name: 'Post', value: 'post' }, { name: 'Company', value: 'company' }, { name: 'Search', value: 'search' }, { name: 'Google', value: 'google' }, { name: 'Group', value: 'group' }, ], default: 'user', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['user'] } }, options: [ { name: 'Search', value: 'search', description: 'Search for LinkedIn users', action: 'Search for linked in users', routing: { request: { method: 'POST', url: '/api/linkedin/search/users', body: { keywords: '={{$parameter["keywords"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Get Profile', value: 'getProfile', description: 'Get LinkedIn user profile', action: 'Get linked in user profile', routing: { request: { method: 'POST', url: '/api/linkedin/user', body: { user: '={{$parameter["user"]}}', with_experience: '={{$parameter["withExperience"]}}', with_education: '={{$parameter["withEducation"]}}', with_skills: '={{$parameter["withSkills"]}}', }, }, }, }, { name: 'Get Posts', value: 'getPosts', description: 'Get LinkedIn user posts', action: 'Get linked in user posts', routing: { request: { method: 'POST', url: '/api/linkedin/user/posts', body: { urn: '={{$parameter["urn"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Get Reactions', value: 'getReactions', description: 'Get LinkedIn user reactions', action: 'Get linked in user reactions', routing: { request: { method: 'POST', url: '/api/linkedin/user/reactions', body: { urn: '={{$parameter["urn"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Get User Comments', value: 'getUserComments', description: 'Get LinkedIn user comments', action: 'Get linkedin user comments', }, ], default: 'search', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['email'] } }, options: [ { name: 'Get User by Email', value: 'getUserByEmail', description: 'Find LinkedIn user by email', action: 'Find linked in user by email', routing: { request: { method: 'POST', url: '/api/linkedin/email/user', body: { email: '={{$parameter["email"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, ], default: 'getUserByEmail', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['post'] } }, options: [ { name: 'Get Post Comments', value: 'getPostComments', description: 'Get comments on a LinkedIn post', action: 'Get linked in post comments', routing: { request: { method: 'POST', url: '/api/linkedin/post/comments', body: { urn: '={{$parameter["urn"]}}', sort: '={{$parameter["sort"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Get Post Reposts', value: 'getPostReposts', description: 'Get reposts of a LinkedIn post', action: 'Get linked in post reposts', routing: { request: { method: 'POST', url: '/api/linkedin/post/reposts', body: { urn: '={{$parameter["urn"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, ], default: 'getPostComments', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['company'] } }, options: [ { name: 'Get Company', value: 'getCompany', description: 'Get LinkedIn company information', action: 'Get linked in company information', routing: { request: { method: 'POST', url: '/api/linkedin/company', body: { company: '={{$parameter["company"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Get Company Employees', value: 'getCompanyEmployees', description: 'Get employees of a LinkedIn company', action: 'Get linked in company employees', routing: { request: { method: 'POST', url: '/api/linkedin/company/employees', body: { companies: '={{$parameter["companies"]}}', keywords: '={{$parameter["keywords"]}}', first_name: '={{$parameter["firstName"]}}', last_name: '={{$parameter["lastName"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Get Company Posts', value: 'getCompanyPosts', description: 'Get posts from a LinkedIn company', action: 'Get linked in company posts', routing: { request: { method: 'POST', url: '/api/linkedin/company/posts', body: { urn: '={{$parameter["urn"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, // Add the new operation here: { name: 'Get Company Employee Stats', value: 'getCompanyEmployeeStats', description: 'Get employee statistics of a LinkedIn company', action: 'Get linked in company employee statistics', routing: { request: { method: 'POST', url: '/api/linkedin/company/employee_stats', body: { urn: '={{$parameter["urn"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, ], default: 'getCompany', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['search'] } }, options: [ { name: 'Sales Navigator Search', value: 'salesNavigatorSearch', description: 'Advanced LinkedIn search using Sales Navigator', action: 'Search linked in with sales navigator', routing: { request: { method: 'POST', url: '/api/linkedin/sn_search/users', body: { keywords: '={{$parameter["keywords"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Search Jobs', value: 'searchJobs', description: 'Search for LinkedIn jobs', action: 'Search for linked in jobs', routing: { request: { method: 'POST', url: '/api/linkedin/search/jobs', body: { keywords: '={{$parameter["keywords"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Search Companies', value: 'searchCompanies', description: 'Search for LinkedIn companies', action: 'Search for linked in companies', routing: { request: { method: 'POST', url: '/api/linkedin/search/companies', body: { keywords: '={{$parameter["keywords"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Search Industries', value: 'searchIndustries', description: 'Search for LinkedIn industries', action: 'Search for linked in industries', routing: { request: { method: 'POST', url: '/api/linkedin/search/industries', body: { name: '={{$parameter["name"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Search Locations', value: 'searchLocations', description: 'Search for LinkedIn locations', action: 'Search for linked in locations', routing: { request: { method: 'POST', url: '/api/linkedin/search/locations', body: { name: '={{$parameter["name"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, ], default: 'salesNavigatorSearch', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['google'] } }, options: [ { name: 'Search Companies', value: 'searchCompanies', description: 'Search for LinkedIn companies using Google', action: 'Search for linked in companies via google', routing: { request: { method: 'POST', url: '/api/linkedin/google/company', body: { keywords: '={{$parameter["keywords"]}}', with_urn: '={{$parameter["withUrn"]}}', count_per_keyword: '={{$parameter["countPerKeyword"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, { name: 'Google Search', value: 'googleSearch', description: 'Perform a Google search', action: 'Perform a google search', routing: { request: { method: 'POST', url: '/api/google/search', body: { query: '={{$parameter["query"]}}', count: '={{$parameter["count"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, ], default: 'searchCompanies', }, { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['group'] } }, options: [ { name: 'Get Group', value: 'getGroup', description: 'Get LinkedIn group information', action: 'Get linked in group information', routing: { request: { method: 'POST', url: '/api/linkedin/group', body: { group: '={{$parameter["group"]}}', timeout: '={{$parameter["timeout"]}}', }, }, }, }, ], default: 'getGroup', }, { displayName: 'Keywords', name: 'keywords', type: 'string', default: '', placeholder: 'software engineer', description: 'Any keyword for searching in the user page', displayOptions: { show: { resource: ['user'], operation: ['search'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 10, description: 'Maximum number of results (max 1000)', displayOptions: { show: { resource: ['user'], operation: ['search'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds (20-1500)', displayOptions: { show: { resource: ['user'], operation: ['search'] } }, }, { displayName: 'Additional Fields', name: 'additionalFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['user'], operation: ['search'] } }, options: [ { displayName: 'First Name', name: 'first_name', type: 'string', default: '', description: 'Exact first name', routing: { request: { body: { first_name: '={{$value}}' } } }, }, { displayName: 'Last Name', name: 'last_name', type: 'string', default: '', description: 'Exact last name', routing: { request: { body: { last_name: '={{$value}}' } } }, }, { displayName: 'Title', name: 'title', type: 'string', default: '', description: 'Exact word in the title', routing: { request: { body: { title: '={{$value}}' } } }, }, { displayName: 'Company Keywords', name: 'company_keywords', type: 'string', default: '', description: 'Exact word in the company name', routing: { request: { body: { company_keywords: '={{$value}}' } } }, }, { displayName: 'School Keywords', name: 'school_keywords', type: 'string', default: '', description: 'Exact word in the school name', routing: { request: { body: { school_keywords: '={{$value}}' } } }, }, { displayName: 'Current Company', name: 'current_company', type: 'string', default: '', description: 'Company URN or name', routing: { request: { body: { current_company: '={{$value}}' } } }, }, { displayName: 'Past Company', name: 'past_company', type: 'string', default: '', description: 'Past company URN or name', routing: { request: { body: { past_company: '={{$value}}' } } }, }, { displayName: 'Location', name: 'location', type: 'string', default: '', description: 'Location name or URN', routing: { request: { body: { location: '={{$value}}' } } }, }, { displayName: 'Industry', name: 'industry', type: 'string', default: '', description: 'Industry URN or name', routing: { request: { body: { industry: '={{$value}}' } } }, }, { displayName: 'Education', name: 'education', type: 'string', default: '', description: 'Education URN or name', routing: { request: { body: { education: '={{$value}}' } } }, }, ], }, { displayName: 'User', name: 'user', type: 'string', required: true, default: '', description: 'User alias, URL, or URN', displayOptions: { show: { resource: ['user'], operation: ['getProfile'] } }, }, { displayName: 'Include Experience', name: 'withExperience', type: 'boolean', default: true, description: 'Whether to include experience information', displayOptions: { show: { resource: ['user'], operation: ['getProfile'] } }, }, { displayName: 'Include Education', name: 'withEducation', type: 'boolean', default: true, description: 'Whether to include education information', displayOptions: { show: { resource: ['user'], operation: ['getProfile'] } }, }, { displayName: 'Include Skills', name: 'withSkills', type: 'boolean', default: true, description: 'Whether to include skills information', displayOptions: { show: { resource: ['user'], operation: ['getProfile'] } }, }, { displayName: 'User URN', name: 'urn', type: 'string', required: true, default: '', description: 'User URN (must include prefix, e.g. fsd_profile:ACoAA...)', displayOptions: { show: { resource: ['user'], operation: ['getPosts', 'getReactions', 'getUserComments'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 10, description: 'Maximum number of results', displayOptions: { show: { resource: ['user'], operation: ['getPosts', 'getReactions', 'getUserComments'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['user'], operation: ['getPosts', 'getReactions', 'getUserComments'] } }, }, { displayName: 'Commented After', name: 'commented_after', type: 'number', default: '', description: 'Filter comments that created after the specified timestamp (optional)', displayOptions: { show: { resource: ['user'], operation: ['getUserComments'] } }, }, { displayName: 'Email', name: 'email', type: 'string', placeholder: 'name@email.com', required: true, default: '', description: 'Email address to search for', displayOptions: { show: { resource: ['email'], operation: ['getUserByEmail'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 5, description: 'Maximum number of results', displayOptions: { show: { resource: ['email'], operation: ['getUserByEmail'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['email'], operation: ['getUserByEmail'] } }, }, { displayName: 'Post URN', name: 'urn', type: 'string', required: true, default: '', description: 'Post URN (must include prefix, e.g. activity:7234173400267538433)', displayOptions: { show: { resource: ['post'], operation: ['getPostComments', 'getPostReposts'] }, }, }, { displayName: 'Sort', name: 'sort', type: 'options', options: [ { name: 'Relevance', value: 'relevance' }, { name: 'Recent', value: 'recent' }, ], default: 'relevance', description: 'Sort type for comments', displayOptions: { show: { resource: ['post'], operation: ['getPostComments'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 10, description: 'Maximum number of results', displayOptions: { show: { resource: ['post'], operation: ['getPostComments', 'getPostReposts'] }, }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['post'], operation: ['getPostComments', 'getPostReposts'] }, }, }, { displayName: 'Text', name: 'text', type: 'string', required: true, default: '', description: 'Text content of the post', displayOptions: { show: { resource: ['post'], operation: ['createPost'] } }, }, { displayName: 'Visibility', name: 'visibility', type: 'options', options: [ { name: 'Anyone', value: 'ANYONE' }, { name: 'Connections Only', value: 'CONNECTIONS_ONLY' }, ], default: 'ANYONE', description: 'Post visibility', displayOptions: { show: { resource: ['post'], operation: ['createPost'] } }, }, { displayName: 'Comment Scope', name: 'commentScope', type: 'options', options: [ { name: 'All', value: 'ALL' }, { name: 'Connections Only', value: 'CONNECTIONS_ONLY' }, { name: 'None', value: 'NONE' }, ], default: 'ALL', description: 'Who can comment on the post', displayOptions: { show: { resource: ['post'], operation: ['createPost'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['post'], operation: ['createPost'] } }, }, { displayName: 'Company', name: 'company', type: 'string', required: true, default: '', description: 'Company alias, URL or URN (e.g. "openai" or "company:1441")', displayOptions: { show: { resource: ['company'], operation: ['getCompany'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['company'], operation: ['getCompany'] } }, }, { displayName: 'Companies', name: 'companies', type: 'string', required: true, default: '', description: 'Company URNs (comma-separated list, e.g. "company:14064608,company:1441")', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployees'] } }, routing: { send: { type: 'body', property: 'companies', value: '={{ $value.split(",").map(item => item.trim()) }}', }, }, }, { displayName: 'Keywords', name: 'keywords', type: 'string', default: '', description: 'Any keyword for searching employees', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployees'] } }, }, { displayName: 'First Name', name: 'firstName', type: 'string', default: '', description: 'Search for exact first name', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployees'] } }, }, { displayName: 'Last Name', name: 'lastName', type: 'string', default: '', description: 'Search for exact last name', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployees'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 10, description: 'Maximum number of results', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployees'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployees'] } }, }, { displayName: 'Company URN', name: 'urn', type: 'string', required: true, default: '', description: 'Company URN, only company urn type is allowed (e.g. "company:11130470")', displayOptions: { show: { resource: ['company'], operation: ['getCompanyPosts'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 10, description: 'Maximum number of results', displayOptions: { show: { resource: ['company'], operation: ['getCompanyPosts'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['company'], operation: ['getCompanyPosts'] } }, }, { displayName: 'Company URN', name: 'urn', type: 'string', required: true, default: '', description: 'Company URN (must include prefix, e.g. "company:79111745")', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployeeStats'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['company'], operation: ['getCompanyEmployeeStats'] } }, }, { displayName: 'Group', name: 'group', type: 'string', required: true, default: '', description: 'Group URN or URL', displayOptions: { show: { resource: ['group'], operation: ['getGroup'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds', displayOptions: { show: { resource: ['group'], operation: ['getGroup'] } }, }, { displayName: 'Keywords', name: 'keywords', type: 'string', default: '', description: 'Any keyword for searching in the user profile', displayOptions: { show: { resource: ['search'], operation: ['salesNavigatorSearch'] } }, }, { displayName: 'Count', name: 'count', type: 'number', default: 10, description: 'Maximum number of results (max 2500)', displayOptions: { show: { resource: ['search'], operation: ['salesNavigatorSearch'] } }, }, { displayName: 'Timeout', name: 'timeout', type: 'number', default: 300, description: 'Timeout in seconds (20-1500)', displayOptions: { show: { resource: ['search'], operation: ['salesNavigatorSearch'] } }, }, { displayName: 'Additional Filters', name: 'additionalFilters', type: 'collection', placeholder: 'Add Filter', default: {}, displayOptions: { show: { resource: ['search'], operation: ['salesNavigatorSearch'] } }, options: [ { displayName: 'First Names', name: 'first_names', type: 'string', default: '', description: 'Comma-separated list of exact first names', routing: { send: { type: 'body', property: 'first_names', value: '={{ $value ? $value.split(",").map(item => item.trim()).filter(Boolean) : [] }}', }, }, }, { displayName: 'Last Names', name: 'last_names', type: 'string', default: '', description: 'Comma-separated list of exact last names', routing: { send: { type: 'body', property: 'last_names', value: '={{ $value ? $value.split(",").map(item => item.trim()).filter(Boolean) : [] }}', }, }, }, { displayName: 'Current Titles', name: 'current_titles', type: 'string', default: '', description: 'Comma-separated list of exact words in current titles', routing: { send: { type: 'body', property: 'current_titles', value: '={{ $value ? $value.split(",").map(item => item.trim()).filter(Boolean) : [] }}', }, }, }, { displayName: 'Past Titles', name: 'past_titles', type: 'string', default: '', description: 'Comma-separated list of exact words in past titles', routing: { send: { type: 'body', property: 'past_titles', value: '={{ $value ? $value.split(",").map(item => item.trim()).filter(Boolean) : [] }}', }, }, }, { displayName: 'Company Keyword', name: 'company_keyword', type: 'string', default: '', description: 'Keyword for current company text filter in Sales Navigator', routing: { request: { body: { company_keyword: '={{$value}}' } } }, }, { displayName: 'Past Company Keyword', name: 'past_company_keyword', type: 'string', default: '', description: 'Keyword for past company text filter in Sales Navigator', routing: { request: { body: { past_company_keyword: '={{$value}}' } } }, }, { displayName: 'Location', name: 'location', type: 'string', default: '', description: 'Location name or URN', routing: { send: { type: 'body', property: 'location', value: '={{ $value ? ($value.includes(",") ? $value.split(",").map(item => item.trim()).filter(Boolean) : $value) : "" }}', }, }, }, { displayName: 'Industry', name: 'industry', type: 'string', default: '', description: 'Industry URN or name', }, { displayName: 'Current Companies', name: 'current_companies', type: 'string', default: '', description: 'Current company URN or name', routing: { send: { type: 'body', property: 'current_companies', value: '={{ $value ? ($value.includes(",") ? $value.split(",").map(item => item.trim()).filter(Boolean) : $value) : "" }}', }, }, }, { displayName: 'Past Companies', name: 'past_companies', type: 'string', default: '', description: 'Past company URN or name', routing: { send: { type: 'body', property: 'past_companies', value: '={{ $value ? ($value.includes(",") ? $value.split(",").map(item => item.trim()).filter(Boolean) : $value) : "" }}', }, }, }, { displayName: 'Education', name: 'education', type: 'string', default: '', description: 'Education URN or name', routing: { send: { type: 'body', property: 'education', value: '={{ $value ? ($value.includes(",") ? $value.split(",").map(item => item.trim()).filter(Boolean) : $value) : "" }}', }, }, }, { displayName: