n8n/packages/nodes-base/nodes/Clearbit/Clearbit.node.ts
Mutasem Aldmour ce066a160f
Remove unnessasry <br/> (#2340)
* introduce analytics

* add user survey backend

* add user survey backend

* set answers on survey submit

Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>

* change name to personalization

* lint

Co-authored-by: Mutasem Aldmour <4711238+mutdmour@users.noreply.github.com>

* N8n 2495 add personalization modal (#2280)

* update modals

* add onboarding modal

* implement questions

* introduce analytics

* simplify impl

* implement survey handling

* add personalized cateogry

* update modal behavior

* add thank you view

* handle empty cases

* rename modal

* standarize modal names

* update image, add tags to headings

* remove unused file

* remove unused interfaces

* clean up footer spacing

* introduce analytics

* refactor to fix bug

* update endpoint

* set min height

* update stories

* update naming from questions to survey

* remove spacing after core categories

* fix bug in logic

* sort nodes

* rename types

* merge with be

* rename userSurvey

* clean up rest api

* use constants for keys

* use survey keys

* clean up types

* move personalization to its own file

Co-authored-by: ahsan-virani <ahsan.virani@gmail.com>

* update parameter inputs to be multiline

* update spacing

* Survey new options (#2300)

* split up options

* fix quotes

* remove unused import

* refactor node credentials

* add user created workflow event (#2301)

* update multi params

* simplify env vars

* fix versionCli on FE

* update personalization env

* clean up node detail settings

* fix event User opened Credentials panel

* fix font sizes across modals

* clean up input spacing

* fix select modal spacing

* increase spacing

* fix input copy

* fix webhook, tab spacing, retry button

* fix button sizes

* fix button size

* add mini xlarge sizes

* fix webhook spacing

* fix nodes panel event

* fix workflow id in workflow execute event

* improve telemetry error logging

* fix config and stop process events

* add flush call on n8n stop

* ready for release

* fix input error highlighting

* revert change

* update toggle spacing

* fix delete positioning

* keep tooltip while focused

* set strict size

* increase left spacing

* fix sort icons

* remove unnessasry <br/>

* remove unnessary break

* remove unnessary margin

* clean unused functionality

* remove unnessary css

* remove duplicate tracking

* only show tooltip when hovering over label

* remove extra space

* add br

* remove extra space

* clean up commas

* clean up commas

* remove extra space

* remove extra space

* rewrite desc

* add commas

* add space

* remove extra space

* add space

* add dot

* update credentials section

* use includes

Co-authored-by: ahsan-virani <ahsan.virani@gmail.com>
Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
2021-10-27 15:00:13 -05:00

161 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
such as a persons 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)];
}
}