mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 20:54:07 -08:00
d6239d5bfb
* Update Compression node * Update Crypto node * Update DateTime node * Update EditImage node * Update EmailSend node * Update ExecuteWorkflow node * Update FTP node * Update Function node * Update FunctionItem node * Update ExecuteCommand node * Update OpenWeatherMap node * Update ReadBinaryFile node * Update ReadPdf node * Update RssFeedRead node & add URL validation * Update SpreadsheetFile node * Update Switch node * Update WriteBinaryFile node * Update Xml node * Update ActiveCampaign node * Update Airtable node * Update ApiTemplateIo node * Update Asana node * Update AwsLambda node * Update AwsSns node * Update AwsComprehend node * Update AwsRekognition node * Update AwsS3 node * Fix Error item * Update AwsSes node * Update AwsSqs node * Update Amqp node * Update Bitly node * Update Box node * Update Brandfetch node * Update CircleCi node * Update Clearbit node * Update ClickUp node * Update Cockpit node * Update CoinGecko node * Update Contentful node * Update ConvertKit node * Update Cortex node * Update CustomerIo node * Update DeepL node * Update Demio node * Update Disqus node * Update Drift node * Update Dropbox node * Update GetResponse node * Refactor & Update Ghost node * Update Github node * Update Gitlab node * Update GoogleAnalytics node * Update GoogleBooks node * Update GoogleCalendar node * Update GoogleDrive node * Update Gmail node * Update GoogleSheets node * Update GoogleSlides node * Update GoogleTasks node * Update Gotify node * Update GraphQL node * Update HackerNews node * Update Harvest node * Update HtmlExtract node * Update Hubspot node * Update Hunter node * Update Intercom node * Update Kafka node * Refactor & update Line node * Update LinkedIn node * Update Mailchimp node * Update Mandrill node * Update Matrix node * Update Mautic node * Update Medium node * Update MessageBird node * Update Mindee node * Update Mocean node * Update MondayCom node * Update MicrosoftExcel node * Update MicrosoftOneDrive node * Update MicrosoftOutlook node * Update Affinity node * Update Chargebee node * Update Discourse node * Update Freshdesk node * Update YouTube node * Update InvoiceNinja node * Update MailerLite node * Update Mailgun node * Update Mailjet node * Update Mattermost node * Update Nasa node * Update NextCloud node * Update OpenThesaurus node * Update Orbit node * Update PagerDuty node * Update PayPal node * Update Peekalink node * Update Phantombuster node * Update PostHog node * Update ProfitWell node * Refactor & Update Pushbullet node * Update QuickBooks node * Update Raindrop node * Update Reddit node * Update Rocketchat node * Update S3 node * Update Salesforce node * Update SendGrid node * Update SentryIo node * Update Shopify node * Update Signl4 node * Update Slack node * Update Spontit node * Update Spotify node * Update Storyblok node * Refactor & Update Strapi node * Refactor & Update Strava node * Update Taiga node * Refactor & update Tapfiliate node * Update Telegram node * Update TheHive node * Update Todoist node * Update TravisCi node * Update Trello node * Update Twilio node * Update Twist node * Update Twitter node * Update Uplead node * Update UProc node * Update Vero node * Update Webflow node * Update Wekan node * Update Wordpress node * Update Xero node * Update Yourls node * Update Zendesk node * Update ZohoCrm node * Refactor & Update Zoom node * Update Zulip node * Update Clockify node * Update MongoDb node * Update MySql node * Update MicrosoftTeams node * Update Stackby node * Refactor Discourse node * Support corner-case in Github node update * Support corner-case in Gitlab node update * Refactor & Update GoogleContacts node * Refactor Mindee node * Update Coda node * Lint fixes * Update Beeminder node * Update Google Firebase RealtimeDatabase node * Update HelpScout node * Update Mailcheck node * Update Paddle node * Update Pipedrive node * Update Pushover node * Update Segment node * Refactor & Update Vonage node * Added new conditions to warnings on execute batch cmd * Added keep only properties flag * Fixed code for keep only props * Added dependencies for image editing Co-authored-by: dali <servfrdali@yahoo.fr>
161 lines
4.6 KiB
TypeScript
161 lines
4.6 KiB
TypeScript
import {
|
||
IExecuteFunctions,
|
||
} from 'n8n-core';
|
||
|
||
import {
|
||
IDataObject,
|
||
INodeExecutionData,
|
||
INodeType,
|
||
INodeTypeDescription,
|
||
} from 'n8n-workflow';
|
||
|
||
import {
|
||
clearbitApiRequest,
|
||
} from './GenericFunctions';
|
||
|
||
import {
|
||
companyFields,
|
||
companyOperations,
|
||
} from './CompanyDescription';
|
||
|
||
import {
|
||
personFields,
|
||
personOperations,
|
||
} from './PersonDescription';
|
||
|
||
export class Clearbit implements INodeType {
|
||
description: INodeTypeDescription = {
|
||
displayName: 'Clearbit',
|
||
name: 'clearbit',
|
||
icon: 'file:clearbit.svg',
|
||
group: ['output'],
|
||
version: 1,
|
||
subtitle: '={{$parameter["operation"] + ":" + $parameter["resource"]}}',
|
||
description: 'Consume Clearbit API',
|
||
defaults: {
|
||
name: 'Clearbit',
|
||
color: '#219ef9',
|
||
},
|
||
inputs: ['main'],
|
||
outputs: ['main'],
|
||
credentials: [
|
||
{
|
||
name: 'clearbitApi',
|
||
required: true,
|
||
},
|
||
],
|
||
properties: [
|
||
{
|
||
displayName: 'Resource',
|
||
name: 'resource',
|
||
type: 'options',
|
||
options: [
|
||
{
|
||
name: 'Company',
|
||
value: 'company',
|
||
description: 'The Company API allows you to look up a company by their domain',
|
||
},
|
||
{
|
||
name: 'Person',
|
||
value: 'person',
|
||
description: `The Person API lets you retrieve social information associated with an email address,<br/>
|
||
such as a person’s name, location and Twitter handle.`,
|
||
},
|
||
],
|
||
default: 'company',
|
||
description: 'Resource to consume.',
|
||
},
|
||
...companyOperations,
|
||
...companyFields,
|
||
...personOperations,
|
||
...personFields,
|
||
],
|
||
};
|
||
|
||
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
|
||
const items = this.getInputData();
|
||
const returnData: IDataObject[] = [];
|
||
const length = items.length as unknown as number;
|
||
const qs: IDataObject = {};
|
||
let responseData;
|
||
const resource = this.getNodeParameter('resource', 0) as string;
|
||
const operation = this.getNodeParameter('operation', 0) as string;
|
||
for (let i = 0; i < length; i++) {
|
||
try {
|
||
if (resource === 'person') {
|
||
if (operation === 'enrich') {
|
||
const email = this.getNodeParameter('email', i) as string;
|
||
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
||
qs.email = email;
|
||
if (additionalFields.givenName) {
|
||
qs.given_name = additionalFields.givenName as string;
|
||
}
|
||
if (additionalFields.familyName) {
|
||
qs.family_name = additionalFields.familyName as string;
|
||
}
|
||
if (additionalFields.ipAddress) {
|
||
qs.ip_address = additionalFields.ipAddress as string;
|
||
}
|
||
if (additionalFields.location) {
|
||
qs.location = additionalFields.location as string;
|
||
}
|
||
if (additionalFields.company) {
|
||
qs.company = additionalFields.company as string;
|
||
}
|
||
if (additionalFields.companyDomain) {
|
||
qs.company_domain = additionalFields.companyDomain as string;
|
||
}
|
||
if (additionalFields.linkedIn) {
|
||
qs.linkedin = additionalFields.linkedIn as string;
|
||
}
|
||
if (additionalFields.twitter) {
|
||
qs.twitter = additionalFields.twitter as string;
|
||
}
|
||
if (additionalFields.facebook) {
|
||
qs.facebook = additionalFields.facebook as string;
|
||
}
|
||
responseData = await clearbitApiRequest.call(this, 'GET', `${resource}-stream`, '/v2/people/find', {}, qs);
|
||
}
|
||
}
|
||
if (resource === 'company') {
|
||
if (operation === 'enrich') {
|
||
const domain = this.getNodeParameter('domain', i) as string;
|
||
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
|
||
qs.domain = domain;
|
||
if (additionalFields.companyName) {
|
||
qs.company_name = additionalFields.companyName as string;
|
||
}
|
||
if (additionalFields.linkedin) {
|
||
qs.linkedin = additionalFields.linkedin as string;
|
||
}
|
||
if (additionalFields.twitter) {
|
||
qs.twitter = additionalFields.twitter as string;
|
||
}
|
||
if (additionalFields.facebook) {
|
||
qs.facebook = additionalFields.facebook as string;
|
||
}
|
||
responseData = await clearbitApiRequest.call(this, 'GET', `${resource}-stream`, '/v2/companies/find', {}, qs);
|
||
}
|
||
if (operation === 'autocomplete') {
|
||
const name = this.getNodeParameter('name', i) as string;
|
||
qs.query = name;
|
||
responseData = await clearbitApiRequest.call(this, 'GET', 'autocomplete', '/v1/companies/suggest', {}, qs);
|
||
}
|
||
}
|
||
if (Array.isArray(responseData)) {
|
||
returnData.push.apply(returnData, responseData as IDataObject[]);
|
||
} else {
|
||
returnData.push(responseData as IDataObject);
|
||
}
|
||
} catch (error) {
|
||
if (this.continueOnFail()) {
|
||
returnData.push({ error: error.message });
|
||
continue;
|
||
}
|
||
throw error;
|
||
}
|
||
}
|
||
return [this.helpers.returnJsonArray(returnData)];
|
||
}
|
||
}
|