diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000000..cce72ec974 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,50 @@ +{ + "env": { + "browser": true, + "es6": true + }, + "extends": [ + "eslint:recommended", + "plugin:vue/essential", + "tslint-eslint-rules" + ], + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018, + "parser": "@typescript-eslint/parser", + "sourceType": "module" + }, + "plugins": [ + "vue", + "@typescript-eslint" + ], + "parser": "@typescript-eslint/parser", + "rules": { + "indent": [ + "error", + "tab" + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "always" + ], + "sort-imports": ["error", { + "ignoreCase": false, + "ignoreMemberSort": false, + "memberSyntaxSortOrder": ["none", "all", "multiple", "single"] + }], + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": ["error"] + } +} \ No newline at end of file diff --git a/package.json b/package.json index b045830f51..0fd1747984 100644 --- a/package.json +++ b/package.json @@ -16,5 +16,9 @@ "lerna": "^3.13.1", "run-script-os": "^1.0.7" }, - "postcss": {} + "postcss": {}, + "dependencies": { + "@typescript-eslint/parser": "^2.31.0", + "tslint-eslint-rules": "^5.4.0" + } } diff --git a/packages/nodes-base/nodes/AgileCrm/AgileCrm.node.ts b/packages/nodes-base/nodes/AgileCrm/AgileCrm.node.ts index 50d0cc548a..be217de2ed 100644 --- a/packages/nodes-base/nodes/AgileCrm/AgileCrm.node.ts +++ b/packages/nodes-base/nodes/AgileCrm/AgileCrm.node.ts @@ -1,36 +1,36 @@ import { IExecuteFunctions } from 'n8n-core'; import { + IDataObject, INodeExecutionData, INodeType, - INodeTypeDescription, - IDataObject + INodeTypeDescription } from 'n8n-workflow'; import { - contactOperations, - contactFields + contactFields, + contactOperations } from './ContactDescription'; import { - companyOperations, - companyFields + companyFields, + companyOperations } from './CompanyDescription'; import { - dealOperations, - dealFields + dealFields, + dealOperations } from './DealDescription'; -import { agileCrmApiRequest, validateJSON, agileCrmApiRequestUpdate} from './GenericFunctions'; -import { IContact, IProperty, IContactUpdate } from './ContactInterface'; +import { IContact, IContactUpdate } from './ContactInterface'; +import { agileCrmApiRequest, agileCrmApiRequestUpdate, validateJSON} from './GenericFunctions'; import { IDeal } from './DealInterface'; export class AgileCrm implements INodeType { description: INodeTypeDescription = { displayName: 'AgileCRM', - name: 'agileCrm', - icon: 'file:agilecrm.png', + name: 'agileCrm', + icon: 'file:agilecrm.png', group: ['transform'], version: 1, description: 'Consume AgileCRM API', @@ -39,8 +39,8 @@ export class AgileCrm implements INodeType { color: '#772244', }, inputs: ['main'], - outputs: ['main'], - credentials: [ + outputs: ['main'], + credentials: [ { name: 'agileCrmApi', required: true, @@ -52,21 +52,21 @@ export class AgileCrm implements INodeType { { displayName: 'Resource', name: 'resource', - type: 'options', - options: [ + type: 'options', + options: [ { - name: 'Company', - value: 'company' - }, - { - name: 'Contact', - value: 'contact' + name: 'Company', + value: 'company' }, { - name: 'Deal', - value: 'deal' - }, - ], + name: 'Contact', + value: 'contact' + }, + { + name: 'Deal', + value: 'deal' + }, + ], default: 'contact', description: 'Resource to consume.', }, @@ -92,14 +92,13 @@ export class AgileCrm implements INodeType { const returnData: IDataObject[] = []; const length = items.length as unknown as number; let responseData; - const qs: IDataObject = {}; const resource = this.getNodeParameter('resource', 0) as string; const operation = this.getNodeParameter('operation', 0) as string; for (let i = 0; i < length; i++) { if(resource === 'contact' || resource === 'company'){ - let idGetter = resource === 'contact' ? 'contactId' : 'companyId'; + const idGetter = resource === 'contact' ? 'contactId' : 'companyId'; if(operation === 'get'){ const contactId = this.getNodeParameter(idGetter, i) as string; @@ -122,7 +121,7 @@ export class AgileCrm implements INodeType { if(resource === 'contact'){ if (returnAll) { - const endpoint = `api/contacts`; + const endpoint = 'api/contacts'; responseData = await agileCrmApiRequest.call(this, 'GET', endpoint, {}); } else { const limit = this.getNodeParameter('limit', i) as number; @@ -131,7 +130,7 @@ export class AgileCrm implements INodeType { } } else { if (returnAll) { - const endpoint = `api/contacts/companies/list`; + const endpoint = 'api/contacts/companies/list'; responseData = await agileCrmApiRequest.call(this, 'POST', endpoint, {}); } else { const limit = this.getNodeParameter('limit', i) as number; @@ -145,7 +144,7 @@ export class AgileCrm implements INodeType { if(operation === 'create'){ const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean; const body: IContact = {}; - let properties : IDataObject[] = []; + const properties : IDataObject[] = []; if (jsonParameters) { const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i) as string; @@ -218,7 +217,7 @@ export class AgileCrm implements INodeType { name: 'email', value: property.email as string } as IDataObject); - }) + }); } if(additionalFields.addressOptions){ //@ts-ignore @@ -229,7 +228,7 @@ export class AgileCrm implements INodeType { name: 'address', value: property.address as string } as IDataObject); - }) + }); } if(additionalFields.phoneOptions){ @@ -241,7 +240,7 @@ export class AgileCrm implements INodeType { name: 'phone', value: property.number as string } as IDataObject); - }) + }); } } else if (resource === 'company') { if(additionalFields.email){ @@ -279,7 +278,7 @@ export class AgileCrm implements INodeType { name: 'webiste', value: property.url as string } as IDataObject); - }) + }); } if(additionalFields.customProperties){ @@ -291,7 +290,7 @@ export class AgileCrm implements INodeType { name: property.name, value: property.value as string } as IDataObject); - }) + }); } body.properties = properties; @@ -302,10 +301,10 @@ export class AgileCrm implements INodeType { if(operation === 'update') { const contactId = this.getNodeParameter(idGetter, i) as string; - let contactUpdatePayload : IContactUpdate = {id: contactId}; + const contactUpdatePayload : IContactUpdate = {id: contactId}; const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean; const body: IContact = {}; - let properties : IDataObject[] = []; + const properties : IDataObject[] = []; if (jsonParameters) { const additionalFieldsJson = this.getNodeParameter('additionalFieldsJson', i) as string; @@ -372,7 +371,7 @@ export class AgileCrm implements INodeType { name: 'email', value: property.email as string } as IDataObject); - }) + }); } if(additionalFields.addressOptions){ //@ts-ignore @@ -383,7 +382,7 @@ export class AgileCrm implements INodeType { name: 'address', value: property.address as string } as IDataObject); - }) + }); } if(additionalFields.phoneOptions){ @@ -395,7 +394,7 @@ export class AgileCrm implements INodeType { name: 'phone', value: property.number as string } as IDataObject); - }) + }); } } else if (resource === 'company') { if(additionalFields.email){ @@ -433,7 +432,7 @@ export class AgileCrm implements INodeType { name: 'webiste', value: property.url as string } as IDataObject); - }) + }); } if(additionalFields.customProperties){ //@ts-ignore @@ -444,7 +443,7 @@ export class AgileCrm implements INodeType { name: property.name, value: property.value as string } as IDataObject); - }) + }); } body.properties = properties; } @@ -476,7 +475,7 @@ export class AgileCrm implements INodeType { const returnAll = this.getNodeParameter('returnAll', i) as boolean; if (returnAll) { - const endpoint = `api/opportunity`; + const endpoint = 'api/opportunity'; responseData = await agileCrmApiRequest.call(this, 'GET', endpoint, {}); } else { const limit = this.getNodeParameter('limit', i) as number; @@ -524,7 +523,7 @@ export class AgileCrm implements INodeType { } - let endpoint = 'api/opportunity' + const endpoint = 'api/opportunity'; responseData = await agileCrmApiRequest.call(this, 'POST', endpoint, body); } @@ -574,7 +573,7 @@ export class AgileCrm implements INodeType { } - let endpoint = 'api/opportunity/partial-update' + const endpoint = 'api/opportunity/partial-update'; responseData = await agileCrmApiRequest.call(this, 'PUT', endpoint, body); } } diff --git a/packages/nodes-base/nodes/AgileCrm/CompanyDescription.ts b/packages/nodes-base/nodes/AgileCrm/CompanyDescription.ts index 56db0f4abc..066b33260c 100644 --- a/packages/nodes-base/nodes/AgileCrm/CompanyDescription.ts +++ b/packages/nodes-base/nodes/AgileCrm/CompanyDescription.ts @@ -1,6 +1,6 @@ import { INodeProperties, - } from 'n8n-workflow'; +} from 'n8n-workflow'; export const companyOperations = [ { @@ -70,9 +70,9 @@ export const companyFields = [ }, -/* -------------------------------------------------------------------------- */ -/* company:get all */ -/* -------------------------------------------------------------------------- */ + /* -------------------------------------------------------------------------- */ + /* company:get all */ + /* -------------------------------------------------------------------------- */ { displayName: 'Return All', name: 'returnAll', @@ -110,623 +110,623 @@ export const companyFields = [ } }, -/* -------------------------------------------------------------------------- */ -/* company:create */ -/* -------------------------------------------------------------------------- */ + /* -------------------------------------------------------------------------- */ + /* company:create */ + /* -------------------------------------------------------------------------- */ -{ - displayName: 'JSON Parameters', - name: 'jsonParameters', - type: 'boolean', - default: false, - description: '', - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'create', - ], + { + displayName: 'JSON Parameters', + name: 'jsonParameters', + type: 'boolean', + default: false, + description: '', + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'create', + ], + }, }, }, -}, -{ - displayName: ' Additional Fields', - name: 'additionalFieldsJson', - type: 'json', - typeOptions: { - alwaysOpenEditWindow: true, - }, - default: '', - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'create', - ], - jsonParameters: [ - true, - ], + { + displayName: ' Additional Fields', + name: 'additionalFieldsJson', + type: 'json', + typeOptions: { + alwaysOpenEditWindow: true, + }, + default: '', + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'create', + ], + jsonParameters: [ + true, + ], + }, }, - }, - description: `Object of values to set as described here.`, -}, + description: 'Object of values to set as described here.', + }, -{ - displayName: 'Additional Fields', - name: 'additionalFields', - type: 'collection', - placeholder: 'Add Field', - default: {}, - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'create', - ], - jsonParameters: [ - false, - ], - }, - }, - options: [ - { - displayName: 'Star Value', - name: 'starValue', - type: 'options', - default: '', - required: false, - description: 'Rating of company (Max value 5). This is not applicable for companies.', - options: [ - { - name: '0', - value: 0 - }, - { - name: '1', - value: 1 - }, - { - name: '2', - value: 2 - }, - { - name: '3', - value: 3 - }, - { - name: '4', - value: 4 - }, - { - name: '5', - value: 5 - }, - ] - }, - { - displayName: 'Lead Score', - name: 'leadScore', - type: 'number', - default: '', - description: 'Score of company. This is not applicable for companies.', - required: false, - typeOptions: { - minValue: 0 - } - }, - { - displayName: 'Tags', - name: 'tags', - type: 'string', - typeOptions: { - multipleValues: true, - multipleValueButtonText: 'Add Tag', + { + displayName: 'Additional Fields', + name: 'additionalFields', + type: 'collection', + placeholder: 'Add Field', + default: {}, + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'create', + ], + jsonParameters: [ + false, + ], }, - default: [], - placeholder: 'Tag', - description: 'Unique identifiers added to company, for easy management of companys. This is not applicable for companies.', - }, - { - displayName: 'Name', - name: 'name', - type: 'string', - required: false, - default: "", - placeholder: 'Company name', - description: 'Company name.', }, - { - displayName: 'Email', - name: 'email', - type: 'string', - required: false, - default: '', - placeholder: 'Company email', - description: 'Company email.', - }, - { - displayName: 'Address', - name: 'email', - type: 'string', - required: false, - default: '', - placeholder: 'Company address', - description: 'Company address.', - }, - { - displayName: 'Website', - name: 'websiteOptions', - type: 'fixedCollection', - required: false, - description: 'companys websites.', - typeOptions: { - multipleValues: true, + options: [ + { + displayName: 'Star Value', + name: 'starValue', + type: 'options', + default: '', + required: false, + description: 'Rating of company (Max value 5). This is not applicable for companies.', + options: [ + { + name: '0', + value: 0 + }, + { + name: '1', + value: 1 + }, + { + name: '2', + value: 2 + }, + { + name: '3', + value: 3 + }, + { + name: '4', + value: 4 + }, + { + name: '5', + value: 5 + }, + ] }, - options: [ - { - displayName: 'Website properties.', - name: 'websiteProperties', - values: [ - { - displayName: 'Type', - name: 'subtype', - type: 'options', - required: true, - default: "", - placeholder: '', - description: 'Type of website.', - options: [ - { - name: 'URL', - value: 'url', - }, - { - name: 'SKYPE', - value: 'skype', - }, - { - name: 'TWITTER', - value: 'twitter', - }, - { - name: 'LINKEDIN', - value: 'linkedin', - }, - { - name: 'FACEBOOK', - value: 'facebook', - }, - { - name: 'XING', - value: 'xing', - }, - { - name: 'FEED', - value: 'feed', - }, - { - name: 'GOOGLE_PLUS', - value: 'googlePlus', - }, - { - name: 'FLICKR', - value: 'flickr', - }, - { - name: 'GITHUB', - value: 'github', - }, - { - name: 'YOUTUBE', - value: 'youtube', - }, - ] - }, - { - displayName: 'URL', - name: 'url', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Website URL', - } - ] + { + displayName: 'Lead Score', + name: 'leadScore', + type: 'number', + default: '', + description: 'Score of company. This is not applicable for companies.', + required: false, + typeOptions: { + minValue: 0 + } + }, + { + displayName: 'Tags', + name: 'tags', + type: 'string', + typeOptions: { + multipleValues: true, + multipleValueButtonText: 'Add Tag', }, + default: [], + placeholder: 'Tag', + description: 'Unique identifiers added to company, for easy management of companys. This is not applicable for companies.', + }, + { + displayName: 'Name', + name: 'name', + type: 'string', + required: false, + default: '', + placeholder: 'Company name', + description: 'Company name.', + }, + { + displayName: 'Email', + name: 'email', + type: 'string', + required: false, + default: '', + placeholder: 'Company email', + description: 'Company email.', + }, + { + displayName: 'Address', + name: 'email', + type: 'string', + required: false, + default: '', + placeholder: 'Company address', + description: 'Company address.', + }, + { + displayName: 'Website', + name: 'websiteOptions', + type: 'fixedCollection', + required: false, + description: 'companys websites.', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Website properties.', + name: 'websiteProperties', + values: [ + { + displayName: 'Type', + name: 'subtype', + type: 'options', + required: true, + default: '', + placeholder: '', + description: 'Type of website.', + options: [ + { + name: 'URL', + value: 'url', + }, + { + name: 'SKYPE', + value: 'skype', + }, + { + name: 'TWITTER', + value: 'twitter', + }, + { + name: 'LINKEDIN', + value: 'linkedin', + }, + { + name: 'FACEBOOK', + value: 'facebook', + }, + { + name: 'XING', + value: 'xing', + }, + { + name: 'FEED', + value: 'feed', + }, + { + name: 'GOOGLE_PLUS', + value: 'googlePlus', + }, + { + name: 'FLICKR', + value: 'flickr', + }, + { + name: 'GITHUB', + value: 'github', + }, + { + name: 'YOUTUBE', + value: 'youtube', + }, + ] + }, + { + displayName: 'URL', + name: 'url', + type: 'string', + required: true, + default: '', + placeholder: '', + description: 'Website URL', + } + ] + }, - ] - }, - { - displayName: 'Phone', - name: 'phone', - type: 'string', - required: false, - default: '', - placeholder: 'Company phone', - description: 'Company phone.', - }, - { - displayName: 'Custom Properties', - name: 'customProperties', - type: 'fixedCollection', - required: false, - description: 'Custom Properties', - typeOptions: { - multipleValues: true, + ] }, - options: [ - { - displayName: 'Property', - name: 'customProperty', - values: [ - { - displayName: 'Name', - name: 'name', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Property name.' - }, - { - displayName: 'Sub Type', - name: 'subtype', - type: 'string', - required: false, - default: "", - placeholder: '', - description: 'Property sub type.', - }, - { - displayName: 'Value', - name: 'value', - type: 'string', - required: false, - default: "", - placeholder: '', - description: 'Property value.', - } - ] + { + displayName: 'Phone', + name: 'phone', + type: 'string', + required: false, + default: '', + placeholder: 'Company phone', + description: 'Company phone.', + }, + { + displayName: 'Custom Properties', + name: 'customProperties', + type: 'fixedCollection', + required: false, + description: 'Custom Properties', + typeOptions: { + multipleValues: true, }, + options: [ + { + displayName: 'Property', + name: 'customProperty', + values: [ + { + displayName: 'Name', + name: 'name', + type: 'string', + required: true, + default: '', + placeholder: '', + description: 'Property name.' + }, + { + displayName: 'Sub Type', + name: 'subtype', + type: 'string', + required: false, + default: '', + placeholder: '', + description: 'Property sub type.', + }, + { + displayName: 'Value', + name: 'value', + type: 'string', + required: false, + default: '', + placeholder: '', + description: 'Property value.', + } + ] + }, - ] + ] + }, + ], + }, + /* -------------------------------------------------------------------------- */ + /* company:delete */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'company ID', + name: 'companyId', + type: 'string', + required: true, + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'delete', + ], + }, }, - ], -}, -/* -------------------------------------------------------------------------- */ -/* company:delete */ -/* -------------------------------------------------------------------------- */ -{ - displayName: 'company ID', - name: 'companyId', - type: 'string', - required: true, - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'delete', - ], + default: '', + description: 'Unique identifier for a particular company', + }, + /* -------------------------------------------------------------------------- */ + /* company:update */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'company ID', + name: 'companyId', + type: 'string', + required: true, + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'update', + ], + }, + }, + default: '', + description: 'Unique identifier for a particular company', + }, + { + displayName: 'JSON Parameters', + name: 'jsonParameters', + type: 'boolean', + default: false, + description: '', + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'update', + ], + }, }, }, - default: '', - description: 'Unique identifier for a particular company', -}, -/* -------------------------------------------------------------------------- */ -/* company:update */ -/* -------------------------------------------------------------------------- */ -{ - displayName: 'company ID', - name: 'companyId', - type: 'string', - required: true, - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'update', - ], + { + displayName: ' Additional Fields', + name: 'additionalFieldsJson', + type: 'json', + typeOptions: { + alwaysOpenEditWindow: true, }, - }, - default: '', - description: 'Unique identifier for a particular company', -}, -{ - displayName: 'JSON Parameters', - name: 'jsonParameters', - type: 'boolean', - default: false, - description: '', - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'update', - ], + default: '', + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'update', + ], + jsonParameters: [ + true, + ], + }, }, - }, -}, -{ - displayName: ' Additional Fields', - name: 'additionalFieldsJson', - type: 'json', - typeOptions: { - alwaysOpenEditWindow: true, - }, - default: '', - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'update', - ], - jsonParameters: [ - true, - ], - }, - }, - description: `Object of values to set as described here.`, -}, - -{ - displayName: 'Additional Fields', - name: 'additionalFields', - type: 'collection', - placeholder: 'Add Field', - default: {}, - displayOptions: { - show: { - resource: [ - 'company', - ], - operation: [ - 'update', - ], - jsonParameters: [ - false, - ], - }, + description: 'Object of values to set as described here.', }, - options: [ - { - displayName: 'Star Value', - name: 'starValue', - type: 'options', - default: '', - required: false, - description: 'Rating of company (Max value 5). This is not applicable for companies.', - options: [ - { - name: '0', - value: 0 - }, - { - name: '1', - value: 1 - }, - { - name: '2', - value: 2 - }, - { - name: '3', - value: 3 - }, - { - name: '4', - value: 4 - }, - { - name: '5', - value: 5 - }, - ] - }, - { - displayName: 'Lead Score', - name: 'leadScore', - type: 'number', - default: '', - description: 'Score of company. This is not applicable for companies.', - required: false, - typeOptions: { - minValue: 0 - } - }, - { - displayName: 'Tags', - name: 'tags', - type: 'string', - typeOptions: { - multipleValues: true, - multipleValueButtonText: 'Add Tag', + + { + displayName: 'Additional Fields', + name: 'additionalFields', + type: 'collection', + placeholder: 'Add Field', + default: {}, + displayOptions: { + show: { + resource: [ + 'company', + ], + operation: [ + 'update', + ], + jsonParameters: [ + false, + ], }, - default: [], - placeholder: 'Tag', - description: 'Unique identifiers added to company, for easy management of companys. This is not applicable for companies.', - }, - { - displayName: 'Name', - name: 'name', - type: 'string', - required: false, - default: "", - placeholder: 'Company name', - description: 'Company name.', }, - { - displayName: 'Email', - name: 'email', - type: 'string', - required: false, - default: '', - placeholder: 'Company email', - description: 'Company email.', - }, - { - displayName: 'Address', - name: 'email', - type: 'string', - required: false, - default: '', - placeholder: 'Company address', - description: 'Company address.', - }, - { - displayName: 'Website', - name: 'websiteOptions', - type: 'fixedCollection', - required: false, - description: 'companys websites.', - typeOptions: { - multipleValues: true, + options: [ + { + displayName: 'Star Value', + name: 'starValue', + type: 'options', + default: '', + required: false, + description: 'Rating of company (Max value 5). This is not applicable for companies.', + options: [ + { + name: '0', + value: 0 + }, + { + name: '1', + value: 1 + }, + { + name: '2', + value: 2 + }, + { + name: '3', + value: 3 + }, + { + name: '4', + value: 4 + }, + { + name: '5', + value: 5 + }, + ] }, - options: [ - { - displayName: 'Website properties.', - name: 'websiteProperties', - values: [ - { - displayName: 'Type', - name: 'subtype', - type: 'options', - required: true, - default: "", - placeholder: '', - description: 'Type of website.', - options: [ - { - name: 'URL', - value: 'url', - }, - { - name: 'SKYPE', - value: 'skype', - }, - { - name: 'TWITTER', - value: 'twitter', - }, - { - name: 'LINKEDIN', - value: 'linkedin', - }, - { - name: 'FACEBOOK', - value: 'facebook', - }, - { - name: 'XING', - value: 'xing', - }, - { - name: 'FEED', - value: 'feed', - }, - { - name: 'GOOGLE_PLUS', - value: 'googlePlus', - }, - { - name: 'FLICKR', - value: 'flickr', - }, - { - name: 'GITHUB', - value: 'github', - }, - { - name: 'YOUTUBE', - value: 'youtube', - }, - ] - }, - { - displayName: 'URL', - name: 'url', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Website URL', - } - ] + { + displayName: 'Lead Score', + name: 'leadScore', + type: 'number', + default: '', + description: 'Score of company. This is not applicable for companies.', + required: false, + typeOptions: { + minValue: 0 + } + }, + { + displayName: 'Tags', + name: 'tags', + type: 'string', + typeOptions: { + multipleValues: true, + multipleValueButtonText: 'Add Tag', }, + default: [], + placeholder: 'Tag', + description: 'Unique identifiers added to company, for easy management of companys. This is not applicable for companies.', + }, + { + displayName: 'Name', + name: 'name', + type: 'string', + required: false, + default: '', + placeholder: 'Company name', + description: 'Company name.', + }, + { + displayName: 'Email', + name: 'email', + type: 'string', + required: false, + default: '', + placeholder: 'Company email', + description: 'Company email.', + }, + { + displayName: 'Address', + name: 'email', + type: 'string', + required: false, + default: '', + placeholder: 'Company address', + description: 'Company address.', + }, + { + displayName: 'Website', + name: 'websiteOptions', + type: 'fixedCollection', + required: false, + description: 'companys websites.', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Website properties.', + name: 'websiteProperties', + values: [ + { + displayName: 'Type', + name: 'subtype', + type: 'options', + required: true, + default: '', + placeholder: '', + description: 'Type of website.', + options: [ + { + name: 'URL', + value: 'url', + }, + { + name: 'SKYPE', + value: 'skype', + }, + { + name: 'TWITTER', + value: 'twitter', + }, + { + name: 'LINKEDIN', + value: 'linkedin', + }, + { + name: 'FACEBOOK', + value: 'facebook', + }, + { + name: 'XING', + value: 'xing', + }, + { + name: 'FEED', + value: 'feed', + }, + { + name: 'GOOGLE_PLUS', + value: 'googlePlus', + }, + { + name: 'FLICKR', + value: 'flickr', + }, + { + name: 'GITHUB', + value: 'github', + }, + { + name: 'YOUTUBE', + value: 'youtube', + }, + ] + }, + { + displayName: 'URL', + name: 'url', + type: 'string', + required: true, + default: '', + placeholder: '', + description: 'Website URL', + } + ] + }, - ] - }, - { - displayName: 'Phone', - name: 'phone', - type: 'string', - required: false, - default: '', - placeholder: 'Company phone', - description: 'Company phone.', - }, - { - displayName: 'Custom Properties', - name: 'customProperties', - type: 'fixedCollection', - required: false, - description: 'Custom Properties', - typeOptions: { - multipleValues: true, + ] }, - options: [ - { - displayName: 'Property', - name: 'customProperty', - values: [ - { - displayName: 'Name', - name: 'name', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Property name.' - }, - { - displayName: 'Sub Type', - name: 'subtype', - type: 'string', - required: false, - default: "", - placeholder: '', - description: 'Property sub type.', - }, - { - displayName: 'Value', - name: 'value', - type: 'string', - required: false, - default: "", - placeholder: '', - description: 'Property value.', - } - ] + { + displayName: 'Phone', + name: 'phone', + type: 'string', + required: false, + default: '', + placeholder: 'Company phone', + description: 'Company phone.', + }, + { + displayName: 'Custom Properties', + name: 'customProperties', + type: 'fixedCollection', + required: false, + description: 'Custom Properties', + typeOptions: { + multipleValues: true, }, + options: [ + { + displayName: 'Property', + name: 'customProperty', + values: [ + { + displayName: 'Name', + name: 'name', + type: 'string', + required: true, + default: '', + placeholder: '', + description: 'Property name.' + }, + { + displayName: 'Sub Type', + name: 'subtype', + type: 'string', + required: false, + default: '', + placeholder: '', + description: 'Property sub type.', + }, + { + displayName: 'Value', + name: 'value', + type: 'string', + required: false, + default: '', + placeholder: '', + description: 'Property value.', + } + ] + }, - ] - }, - ], -}, + ] + }, + ], + }, ] as INodeProperties[]; diff --git a/packages/nodes-base/nodes/AgileCrm/ContactDescription.ts b/packages/nodes-base/nodes/AgileCrm/ContactDescription.ts index 96d0dfd3d0..1ee01634a7 100644 --- a/packages/nodes-base/nodes/AgileCrm/ContactDescription.ts +++ b/packages/nodes-base/nodes/AgileCrm/ContactDescription.ts @@ -1,6 +1,6 @@ import { INodeProperties, - } from 'n8n-workflow'; +} from 'n8n-workflow'; export const contactOperations = [ { @@ -110,484 +110,484 @@ export const contactFields = [ } }, -/* -------------------------------------------------------------------------- */ -/* contact:create */ -/* -------------------------------------------------------------------------- */ + /* -------------------------------------------------------------------------- */ + /* contact:create */ + /* -------------------------------------------------------------------------- */ -{ - displayName: 'JSON Parameters', - name: 'jsonParameters', - type: 'boolean', - default: false, - description: '', - displayOptions: { - show: { - resource: [ - 'contact', - ], - operation: [ - 'create', - ], + { + displayName: 'JSON Parameters', + name: 'jsonParameters', + type: 'boolean', + default: false, + description: '', + displayOptions: { + show: { + resource: [ + 'contact', + ], + operation: [ + 'create', + ], + }, }, }, -}, -{ - displayName: ' Additional Fields', - name: 'additionalFieldsJson', - type: 'json', - typeOptions: { - alwaysOpenEditWindow: true, - }, - default: '', - displayOptions: { - show: { - resource: [ - 'contact', - ], - operation: [ - 'create', - ], - jsonParameters: [ - true, - ], + { + displayName: ' Additional Fields', + name: 'additionalFieldsJson', + type: 'json', + typeOptions: { + alwaysOpenEditWindow: true, }, + default: '', + displayOptions: { + show: { + resource: [ + 'contact', + ], + operation: [ + 'create', + ], + jsonParameters: [ + true, + ], + }, + }, + + description: `Object of values to set as described here.`, }, - - description: `Object of values to set as described here.`, -}, -{ - displayName: 'Additional Fields', - name: 'additionalFields', - type: 'collection', - placeholder: 'Add Field', - default: {}, - displayOptions: { - show: { - resource: [ - 'contact', - ], - operation: [ - 'create', - ], - jsonParameters: [ - false, - ], + { + displayName: 'Additional Fields', + name: 'additionalFields', + type: 'collection', + placeholder: 'Add Field', + default: {}, + displayOptions: { + show: { + resource: [ + 'contact', + ], + operation: [ + 'create', + ], + jsonParameters: [ + false, + ], + }, }, + options: [ + { + displayName: 'Star Value', + name: 'starValue', + type: 'options', + default: '', + required: false, + description: 'Rating of contact (Max value 5). This is not applicable for companies.', + options: [ + { + name: '0', + value: 0 + }, + { + name: '1', + value: 1 + }, + { + name: '2', + value: 2 + }, + { + name: '3', + value: 3 + }, + { + name: '4', + value: 4 + }, + { + name: '5', + value: 5 + }, + ] + }, + { + displayName: 'Lead Score', + name: 'leadScore', + type: 'number', + default: '', + description: 'Score of contact. This is not applicable for companies.', + required: false, + typeOptions: { + minValue: 0 + } + }, + { + displayName: 'Tags', + name: 'tags', + type: 'string', + typeOptions: { + multipleValues: true, + multipleValueButtonText: 'Add Tag', + }, + default: [], + placeholder: 'Tag', + description: 'Unique identifiers added to contact, for easy management of contacts. This is not applicable for companies.', + }, + { + displayName: 'First Name', + name: 'firstName', + type: 'string', + required: false, + default: "", + placeholder: 'First Name', + description: 'Contact first name.', + }, + { + displayName: 'Last Name', + name: 'lastName', + type: 'string', + required: false, + default: "", + placeholder: 'Last Name', + description: 'Contact last name.', + }, + { + displayName: 'Company', + name: 'company', + type: 'string', + required: false, + default: "", + placeholder: 'Company', + description: 'Company Name.', + }, + { + displayName: 'Title', + name: 'title', + type: 'string', + required: false, + default: "", + placeholder: 'Title', + description: 'Professional title.', + }, + { + displayName: 'Email', + name: 'emailOptions', + type: 'fixedCollection', + required: false, + description: 'Contact email.', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Email Properties', + name: 'emailProperties', + values: [ + { + displayName: 'Type', + name: 'subtype', + type: 'options', + required: true, + default: "", + placeholder: '', + description: 'Type of Email', + options: [ + { + name: 'Work', + value: 'work' + }, + { + name: 'Personal', + value: 'personal' + } + ] + }, + { + displayName: 'Email', + name: 'email', + type: 'string', + required: true, + default: "", + placeholder: '', + description: 'Email', + } + ] + }, + + ] + }, + { + displayName: 'Address', + name: 'addressOptions', + type: 'fixedCollection', + required: false, + description: 'Contacts address.', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Address Properties', + name: 'addressProperties', + values: [ + { + displayName: 'Type', + name: 'subtype', + type: 'options', + required: true, + default: "", + placeholder: '', + description: 'Type of address.', + options: [ + { + name: 'Home', + value: 'home' + }, + { + name: 'Postal', + value: 'postal' + } + , + { + name: 'Office', + value: 'office' + } + ] + }, + { + displayName: 'Address', + name: 'address', + type: 'string', + required: true, + default: "", + placeholder: '', + description: 'Full address.', + } + ] + }, + + ] + }, + { + displayName: 'Website', + name: 'websiteOptions', + type: 'fixedCollection', + required: false, + description: 'Contacts websites.', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Website properties.', + name: 'websiteProperties', + values: [ + { + displayName: 'Type', + name: 'subtype', + type: 'options', + required: true, + default: "", + placeholder: '', + description: 'Type of website.', + options: [ + { + name: 'URL', + value: 'url', + }, + { + name: 'SKYPE', + value: 'skype', + }, + { + name: 'TWITTER', + value: 'twitter', + }, + { + name: 'LINKEDIN', + value: 'linkedin', + }, + { + name: 'FACEBOOK', + value: 'facebook', + }, + { + name: 'XING', + value: 'xing', + }, + { + name: 'FEED', + value: 'feed', + }, + { + name: 'GOOGLE_PLUS', + value: 'googlePlus', + }, + { + name: 'FLICKR', + value: 'flickr', + }, + { + name: 'GITHUB', + value: 'github', + }, + { + name: 'YOUTUBE', + value: 'youtube', + }, + ] + }, + { + displayName: 'URL', + name: 'url', + type: 'string', + required: true, + default: "", + placeholder: '', + description: 'Website URL', + } + ] + }, + + ] + }, + { + displayName: 'Phone', + name: 'phoneOptions', + type: 'fixedCollection', + required: false, + description: 'Contacts phone.', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Phone properties', + name: 'phoneProperties', + values: [ + { + displayName: 'Type', + name: 'subtype', + type: 'options', + required: true, + default: "", + placeholder: '', + description: 'Type of phone number.', + options: [ + { + name: 'Home', + value: 'home' + }, + { + name: 'Work', + value: 'work' + } + , + { + name: 'Mobile', + value: 'mobile' + }, + { + name: 'Main', + value: 'main' + }, + { + name: 'Home Fax', + value: 'homeFax' + }, + { + name: 'Work Fax', + value: 'workFax' + }, + { + name: 'Other', + value: 'other' + }, + ] + }, + { + displayName: 'Number', + name: 'number', + type: 'string', + required: true, + default: "", + placeholder: '', + description: 'Phone number.', + } + ] + }, + + ] + }, + { + displayName: 'Custom Properties', + name: 'customProperties', + type: 'fixedCollection', + required: false, + description: 'Custom Properties', + typeOptions: { + multipleValues: true, + }, + options: [ + { + displayName: 'Property', + name: 'customProperty', + values: [ + { + displayName: 'Name', + name: 'name', + type: 'string', + required: true, + default: "", + placeholder: '', + description: 'Property name.' + }, + { + displayName: 'Sub Type', + name: 'subtype', + type: 'string', + required: false, + default: "", + placeholder: '', + description: 'Property sub type.', + }, + { + displayName: 'Value', + name: 'value', + type: 'string', + required: false, + default: "", + placeholder: '', + description: 'Property value.', + } + ] + }, + + ] + }, + ], }, - options: [ - { - displayName: 'Star Value', - name: 'starValue', - type: 'options', - default: '', - required: false, - description: 'Rating of contact (Max value 5). This is not applicable for companies.', - options: [ - { - name: '0', - value: 0 - }, - { - name: '1', - value: 1 - }, - { - name: '2', - value: 2 - }, - { - name: '3', - value: 3 - }, - { - name: '4', - value: 4 - }, - { - name: '5', - value: 5 - }, - ] - }, - { - displayName: 'Lead Score', - name: 'leadScore', - type: 'number', - default: '', - description: 'Score of contact. This is not applicable for companies.', - required: false, - typeOptions: { - minValue: 0 - } - }, - { - displayName: 'Tags', - name: 'tags', - type: 'string', - typeOptions: { - multipleValues: true, - multipleValueButtonText: 'Add Tag', + /* -------------------------------------------------------------------------- */ + /* contact:delete */ + /* -------------------------------------------------------------------------- */ + { + displayName: 'Contact ID', + name: 'contactId', + type: 'string', + required: true, + displayOptions: { + show: { + resource: [ + 'contact', + ], + operation: [ + 'delete', + ], }, - default: [], - placeholder: 'Tag', - description: 'Unique identifiers added to contact, for easy management of contacts. This is not applicable for companies.', - }, - { - displayName: 'First Name', - name: 'firstName', - type: 'string', - required: false, - default: "", - placeholder: 'First Name', - description: 'Contact first name.', - }, - { - displayName: 'Last Name', - name: 'lastName', - type: 'string', - required: false, - default: "", - placeholder: 'Last Name', - description: 'Contact last name.', - }, - { - displayName: 'Company', - name: 'company', - type: 'string', - required: false, - default: "", - placeholder: 'Company', - description: 'Company Name.', - }, - { - displayName: 'Title', - name: 'title', - type: 'string', - required: false, - default: "", - placeholder: 'Title', - description: 'Professional title.', - }, - { - displayName: 'Email', - name: 'emailOptions', - type: 'fixedCollection', - required: false, - description: 'Contact email.', - typeOptions: { - multipleValues: true, - }, - options: [ - { - displayName: 'Email Properties', - name: 'emailProperties', - values: [ - { - displayName: 'Type', - name: 'subtype', - type: 'options', - required: true, - default: "", - placeholder: '', - description: 'Type of Email', - options: [ - { - name: 'Work', - value: 'work' - }, - { - name: 'Personal', - value: 'personal' - } - ] - }, - { - displayName: 'Email', - name: 'email', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Email', - } - ] - }, - - ] - }, - { - displayName: 'Address', - name: 'addressOptions', - type: 'fixedCollection', - required: false, - description: 'Contacts address.', - typeOptions: { - multipleValues: true, - }, - options: [ - { - displayName: 'Address Properties', - name: 'addressProperties', - values: [ - { - displayName: 'Type', - name: 'subtype', - type: 'options', - required: true, - default: "", - placeholder: '', - description: 'Type of address.', - options: [ - { - name: 'Home', - value: 'home' - }, - { - name: 'Postal', - value: 'postal' - } - , - { - name: 'Office', - value: 'office' - } - ] - }, - { - displayName: 'Address', - name: 'address', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Full address.', - } - ] - }, - - ] - }, - { - displayName: 'Website', - name: 'websiteOptions', - type: 'fixedCollection', - required: false, - description: 'Contacts websites.', - typeOptions: { - multipleValues: true, - }, - options: [ - { - displayName: 'Website properties.', - name: 'websiteProperties', - values: [ - { - displayName: 'Type', - name: 'subtype', - type: 'options', - required: true, - default: "", - placeholder: '', - description: 'Type of website.', - options: [ - { - name: 'URL', - value: 'url', - }, - { - name: 'SKYPE', - value: 'skype', - }, - { - name: 'TWITTER', - value: 'twitter', - }, - { - name: 'LINKEDIN', - value: 'linkedin', - }, - { - name: 'FACEBOOK', - value: 'facebook', - }, - { - name: 'XING', - value: 'xing', - }, - { - name: 'FEED', - value: 'feed', - }, - { - name: 'GOOGLE_PLUS', - value: 'googlePlus', - }, - { - name: 'FLICKR', - value: 'flickr', - }, - { - name: 'GITHUB', - value: 'github', - }, - { - name: 'YOUTUBE', - value: 'youtube', - }, - ] - }, - { - displayName: 'URL', - name: 'url', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Website URL', - } - ] - }, - - ] - }, - { - displayName: 'Phone', - name: 'phoneOptions', - type: 'fixedCollection', - required: false, - description: 'Contacts phone.', - typeOptions: { - multipleValues: true, - }, - options: [ - { - displayName: 'Phone properties', - name: 'phoneProperties', - values: [ - { - displayName: 'Type', - name: 'subtype', - type: 'options', - required: true, - default: "", - placeholder: '', - description: 'Type of phone number.', - options: [ - { - name: 'Home', - value: 'home' - }, - { - name: 'Work', - value: 'work' - } - , - { - name: 'Mobile', - value: 'mobile' - }, - { - name: 'Main', - value: 'main' - }, - { - name: 'Home Fax', - value: 'homeFax' - }, - { - name: 'Work Fax', - value: 'workFax' - }, - { - name: 'Other', - value: 'other' - }, - ] - }, - { - displayName: 'Number', - name: 'number', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Phone number.', - } - ] - }, - - ] - }, - { - displayName: 'Custom Properties', - name: 'customProperties', - type: 'fixedCollection', - required: false, - description: 'Custom Properties', - typeOptions: { - multipleValues: true, - }, - options: [ - { - displayName: 'Property', - name: 'customProperty', - values: [ - { - displayName: 'Name', - name: 'name', - type: 'string', - required: true, - default: "", - placeholder: '', - description: 'Property name.' - }, - { - displayName: 'Sub Type', - name: 'subtype', - type: 'string', - required: false, - default: "", - placeholder: '', - description: 'Property sub type.', - }, - { - displayName: 'Value', - name: 'value', - type: 'string', - required: false, - default: "", - placeholder: '', - description: 'Property value.', - } - ] - }, - - ] - }, - ], -}, -/* -------------------------------------------------------------------------- */ -/* contact:delete */ -/* -------------------------------------------------------------------------- */ -{ - displayName: 'Contact ID', - name: 'contactId', - type: 'string', - required: true, - displayOptions: { - show: { - resource: [ - 'contact', - ], - operation: [ - 'delete', - ], }, + default: '', + description: 'Unique identifier for a particular contact', }, - default: '', - description: 'Unique identifier for a particular contact', -}, /* -------------------------------------------------------------------------- */ /* contact:update */ /* -------------------------------------------------------------------------- */ diff --git a/packages/nodes-base/nodes/AgileCrm/ContactInterface.ts b/packages/nodes-base/nodes/AgileCrm/ContactInterface.ts index 656b95d3ac..373786bafb 100644 --- a/packages/nodes-base/nodes/AgileCrm/ContactInterface.ts +++ b/packages/nodes-base/nodes/AgileCrm/ContactInterface.ts @@ -10,7 +10,7 @@ import { } export interface IContact { - type?: string, + type?: string; star_value?: string; lead_score?: string; tags?: string[]; @@ -18,8 +18,8 @@ import { } export interface IContactUpdate { - id: string, - properties?: IDataObject[], + id: string; + properties?: IDataObject[]; star_value?: string; lead_score?: string; tags?: string[]; diff --git a/packages/nodes-base/nodes/AgileCrm/DealInterface.ts b/packages/nodes-base/nodes/AgileCrm/DealInterface.ts index 797fddcb7a..930831a870 100644 --- a/packages/nodes-base/nodes/AgileCrm/DealInterface.ts +++ b/packages/nodes-base/nodes/AgileCrm/DealInterface.ts @@ -1,19 +1,15 @@ -import { - IDataObject, - } from 'n8n-workflow'; - - export interface IDealCustomProperty { +export interface IDealCustomProperty { name: string; value: string; } export interface IDeal { - id?: number, - expected_value?: number, - probability?: number, - name?: string, - close_date?: number, - milestone?: string, - contactIds?: string[], - customData?: IDealCustomProperty[] + id?: number; + expected_value?: number; + probability?: number; + name?: string; + close_date?: number; + milestone?: string; + contactIds?: string[]; + customData?: IDealCustomProperty[]; } \ No newline at end of file diff --git a/packages/nodes-base/nodes/AgileCrm/GenericFunctions.ts b/packages/nodes-base/nodes/AgileCrm/GenericFunctions.ts index 897a17a3f0..a48c4e6860 100644 --- a/packages/nodes-base/nodes/AgileCrm/GenericFunctions.ts +++ b/packages/nodes-base/nodes/AgileCrm/GenericFunctions.ts @@ -1,5 +1,5 @@ import { - OptionsWithUri, + OptionsWithUri } from 'request'; import { @@ -12,7 +12,7 @@ import { import { IDataObject, } from 'n8n-workflow'; -import { IContactUpdate } from './ContactInterface'; +import { IContactUpdate, IProperty } from './ContactInterface'; export async function agileCrmApiRequest(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, endpoint: string, body: any = {}, query: IDataObject = {}, uri?: string): Promise { @@ -51,7 +51,7 @@ export async function agileCrmApiRequest(this: IHookFunctions | IExecuteFunction } -export async function agileCrmApiRequestUpdate(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string = 'PUT', endpoint?: string, body: any = {}, query: IDataObject = {}, uri?: string): Promise { +export async function agileCrmApiRequestUpdate(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method = 'PUT', endpoint?: string, body: any = {}, query: IDataObject = {}, uri?: string): Promise { const baseUri = 'https://n8nio.agilecrm.com/dev/'; const credentials = this.getCredentials('agileCrmApi'); const options: OptionsWithUri = { @@ -68,9 +68,9 @@ export async function agileCrmApiRequestUpdate(this: IHookFunctions | IExecuteFu json: true }; - let successfulUpdates = []; + const successfulUpdates = []; let lastSuccesfulUpdateReturn : any; - let payload : IContactUpdate = body; + const payload : IContactUpdate = body; try { // Due to API, we must update each property separately @@ -82,7 +82,7 @@ export async function agileCrmApiRequestUpdate(this: IHookFunctions | IExecuteFu // Iterate trough properties and show them as individial updates instead of only vague "properties" payload.properties?.map((property : any) => { successfulUpdates.push(`${property.name} `); - }) + }); delete options.body.properties; } @@ -102,7 +102,7 @@ export async function agileCrmApiRequestUpdate(this: IHookFunctions | IExecuteFu payload.tags?.map((tag : string) => { successfulUpdates.push(`(Tag) ${tag} `); - }) + }); delete options.body.tags; }