diff --git a/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts b/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts index 0b63c45a02..1ae440fd0c 100644 --- a/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts +++ b/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts @@ -34,7 +34,16 @@ import { ecomCustomerOperations, ecomCustomerFields } from './EcomCustomerDescription'; -import { ecomOrderProductsOperations, ecomOrderProductsFields } from './EcomOrderProductsDescription'; + +import { + ecomOrderProductsOperations, + ecomOrderProductsFields +} from './EcomOrderProductsDescription'; + +import { + connectionOperations, + connectionFields +} from './ConnectionDescription'; interface CustomProperty { name: string; @@ -98,6 +107,10 @@ export class ActiveCampaign implements INodeType { name: 'Deal', value: 'deal', }, + { + name: 'Connection', + value: 'connection' + } { name: 'E-commerce Order', value: 'ecommerceOrder', @@ -120,10 +133,14 @@ export class ActiveCampaign implements INodeType { // ---------------------------------- ...contactOperations, ...dealOperations, + ...connectionOperations, ...ecomOrderOperations, ...ecomCustomerOperations, ...ecomOrderProductsOperations, + // ---------------------------------- + // fields + // ---------------------------------- // ---------------------------------- // contact // ---------------------------------- @@ -134,6 +151,11 @@ export class ActiveCampaign implements INodeType { // ---------------------------------- ...dealFields, + // ---------------------------------- + // connection + // ---------------------------------- + ...connectionFields, + // ---------------------------------- // ecommerceOrder // ---------------------------------- @@ -368,6 +390,83 @@ export class ActiveCampaign implements INodeType { const dealNoteId = this.getNodeParameter('dealNoteId', i) as number; endpoint = `/api/3/deals/${dealId}/notes/${dealNoteId}`; + } else { + throw new Error(`The operation "${operation}" is not known`); + } + } else if (resource === 'connection') { + if (operation === 'create') { + // ---------------------------------- + // connection:create + // ---------------------------------- + + requestMethod = 'POST'; + + const updateIfExists = this.getNodeParameter('updateIfExists', i) as boolean; + if (updateIfExists === true) { + endpoint = '/api/3/connection/sync'; + } else { + endpoint = '/api/3/connections'; + } + + dataKey = 'connection'; + + body.connection = { + email: this.getNodeParameter('email', i) as string, + } as IDataObject; + + const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject; + addAdditionalFields(body.connection as IDataObject, additionalFields); + + } else if (operation === 'delete') { + // ---------------------------------- + // connection:delete + // ---------------------------------- + + requestMethod = 'DELETE'; + + const connectionId = this.getNodeParameter('connectionId', i) as number; + endpoint = `/api/3/connections/${connectionId}`; + + } else if (operation === 'get') { + // ---------------------------------- + // connection:get + // ---------------------------------- + + requestMethod = 'GET'; + + const connectionId = this.getNodeParameter('connectionId', i) as number; + endpoint = `/api/3/connections/${connectionId}`; + + } else if (operation === 'getAll') { + // ---------------------------------- + // connections:getAll + // ---------------------------------- + + requestMethod = 'GET'; + + returnAll = this.getNodeParameter('returnAll', i) as boolean; + if (returnAll === false) { + qs.limit = this.getNodeParameter('limit', i) as number; + } + + dataKey = 'connections'; + endpoint = `/api/3/connections`; + + } else if (operation === 'update') { + // ---------------------------------- + // connection:update + // ---------------------------------- + + requestMethod = 'PUT'; + + const connectionId = this.getNodeParameter('connectionId', i) as number; + endpoint = `/api/3/connections/${connectionId}`; + + dataKey = 'connection'; + body.connection = {} as IDataObject; + const updateFields = this.getNodeParameter('updateFields', i) as IDataObject; + addAdditionalFields(body.connection as IDataObject, updateFields); + } else { throw new Error(`The operation "${operation}" is not known`); } diff --git a/packages/nodes-base/nodes/ActiveCampaign/ConnectionDescription.ts b/packages/nodes-base/nodes/ActiveCampaign/ConnectionDescription.ts new file mode 100644 index 0000000000..f8c7d1ede4 --- /dev/null +++ b/packages/nodes-base/nodes/ActiveCampaign/ConnectionDescription.ts @@ -0,0 +1,324 @@ +import { INodeProperties } from "n8n-workflow"; + +import { allCurrencies } from './currencies'; + +export const connectionOperations = [ + { + displayName: 'Operation', + name: 'operation', + type: 'options', + displayOptions: { + show: { + resource: [ + 'connection', + ], + }, + }, + options: [ + { + name: 'Create', + value: 'create', + description: 'Create a connection', + }, + { + name: 'Delete', + value: 'delete', + description: 'Delete a connection', + }, + { + name: 'Get', + value: 'get', + description: 'Get data of a connection', + }, + { + name: 'Get All', + value: 'getAll', + description: 'Get data of all connections', + }, + { + name: 'Update', + value: 'update', + description: 'Update a connection', + }, + ], + default: 'create', + description: 'The operation to perform.', + }, + +] as INodeProperties[]; + +export const connectionFields = [ + // ---------------------------------- + // connection:create + // ---------------------------------- + { + displayName: 'Service', + name: 'service', + type: 'string', + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'create', + ], + resource: [ + 'connection', + ], + }, + }, + description: 'The name of the service.', + }, + { + displayName: 'External accout ID', + name: 'externalid', + type: 'string', + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'create', + ], + resource: [ + 'connection', + ], + }, + }, + description: 'The id of the account in the external service.', + }, + { + displayName: 'Account Name', + name: 'name', + type: 'string', + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'create', + ], + resource: [ + 'connection', + ], + }, + }, + description: 'The name associated with the account in the external service. Often this will be a company name (e.g., "My Toystore, Inc.").', + }, + { + displayName: 'Logo URL', + name: 'logoUrl', + type: 'string', + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'create', + ], + resource: [ + 'connection', + ], + }, + }, + description: 'The URL to a logo image for the external service.', + }, + { + displayName: 'Link URL', + name: 'linkUrl', + type: 'string', + default: '', + required: true, + displayOptions: { + show: { + operation: [ + 'create', + ], + resource: [ + 'connection', + ], + }, + }, + description: 'The URL to a page where the integration with the external service can be managed in the third-party\'s website.', + }, + + // ---------------------------------- + // connection:update + // ---------------------------------- + { + displayName: 'Connection ID', + name: 'connectionId', + type: 'number', + displayOptions: { + show: { + operation: [ + 'update', + ], + resource: [ + 'connection', + ], + }, + }, + default: 0, + required: true, + description: 'ID of the connection to update.', + }, + { + displayName: 'Update Fields', + name: 'updateFields', + type: 'collection', + description: 'The fields to update.', + placeholder: 'Add Field', + displayOptions: { + show: { + operation: [ + 'update', + ], + resource: [ + 'connection', + ], + }, + }, + default: {}, + options: [ + { + displayName: 'Service', + name: 'service', + type: 'string', + default: '', + description: 'The name of the service.', + }, + { + displayName: 'External accout ID', + name: 'externalid', + type: 'string', + default: '', + description: 'The id of the account in the external service.', + }, + { + displayName: 'Account Name', + name: 'name', + type: 'string', + default: '', + description: 'The name associated with the account in the external service. Often this will be a company name (e.g., "My Toystore, Inc.").', + }, + { + displayName: 'Logo URL', + name: 'logoUrl', + type: 'string', + default: '', + description: 'The URL to a logo image for the external service.', + }, + { + displayName: 'Link URL', + name: 'linkUrl', + type: 'string', + default: '', + description: 'The URL to a page where the integration with the external service can be managed in the third-party\'s website.', + }, + { + displayName: 'Status', + name: 'status', + type: 'number', + default: 1, + description: 'The status of the connection (0 = error; 1 = connected)', + }, + { + displayName: 'Syncronisation Status', + name: 'syncStatus', + type: 'number', + default: 1, + description: 'The status of a sync triggered on the connection (0 = sync stopped; 1 = sync running).', + }, + ] + }, + + // ---------------------------------- + // connection:delete + // ---------------------------------- + { + displayName: 'Connection ID', + name: 'connectionId', + type: 'number', + displayOptions: { + show: { + operation: [ + 'update', + ], + resource: [ + 'connection', + ], + }, + }, + default: 0, + required: true, + description: 'ID of the connection to delete.', + }, + + // ---------------------------------- + // connection:get + // ---------------------------------- + { + displayName: 'Connection ID', + name: 'connectionId', + type: 'number', + displayOptions: { + show: { + operation: [ + 'update', + ], + resource: [ + 'connection', + ], + }, + }, + default: 0, + required: true, + description: 'ID of the connection to get.', + }, + + // ---------------------------------- + // connection:getAll + // ---------------------------------- + { + displayName: 'Return All', + name: 'returnAll', + type: 'boolean', + displayOptions: { + show: { + operation: [ + 'getAll', + ], + resource: [ + 'connection', + ], + }, + }, + default: false, + description: 'If all results should be returned or only up to a given limit.', + }, + { + displayName: 'Limit', + name: 'limit', + type: 'number', + displayOptions: { + show: { + operation: [ + 'getAll', + ], + resource: [ + 'connection', + ], + returnAll: [ + false, + ], + }, + }, + typeOptions: { + minValue: 1, + maxValue: 500, + }, + default: 100, + description: 'How many results to return.', + }, +] as INodeProperties[]; \ No newline at end of file diff --git a/packages/nodes-base/nodes/ActiveCampaign/ContactDescription.ts b/packages/nodes-base/nodes/ActiveCampaign/ContactDescription.ts index 02c699e4b0..8b7a264c09 100644 --- a/packages/nodes-base/nodes/ActiveCampaign/ContactDescription.ts +++ b/packages/nodes-base/nodes/ActiveCampaign/ContactDescription.ts @@ -64,7 +64,7 @@ export const contactFields = [ ], }, }, - description: 'The email of the contact to create', + description: 'The email of the contact to create.', }, { displayName: 'Update if exists', @@ -105,14 +105,14 @@ export const contactFields = [ name: 'firstName', type: 'string', default: '', - description: 'The first name of the contact to create', + description: 'The first name of the contact to create.', }, { displayName: 'Last Name', name: 'lastName', type: 'string', default: '', - description: 'The last name of the contact to create', + description: 'The last name of the contact to create.', }, { displayName: 'Phone', @@ -208,14 +208,14 @@ export const contactFields = [ name: 'firstName', type: 'string', default: '', - description: 'First name of the contact', + description: 'First name of the contact.', }, { displayName: 'Last Name', name: 'lastName', type: 'string', default: '', - description: 'Last name of the contact', + description: 'Last name of the contact.', }, { displayName: 'Phone', diff --git a/packages/nodes-base/nodes/ActiveCampaign/DealDescription.ts b/packages/nodes-base/nodes/ActiveCampaign/DealDescription.ts index dac1b0aa3d..e5219177d7 100644 --- a/packages/nodes-base/nodes/ActiveCampaign/DealDescription.ts +++ b/packages/nodes-base/nodes/ActiveCampaign/DealDescription.ts @@ -359,7 +359,7 @@ export const dealFields = [ ], }, }, - description: 'The ID of the deal', + description: 'The ID of the deal to delete.', }, // ---------------------------------- @@ -381,7 +381,7 @@ export const dealFields = [ ], }, }, - description: 'The ID of the deal', + description: 'The ID of the deal to get.', }, // ---------------------------------- diff --git a/packages/nodes-base/nodes/ActiveCampaign/EcomCustomerDescription.ts b/packages/nodes-base/nodes/ActiveCampaign/EcomCustomerDescription.ts index 78c09afad8..f7f75e3fbb 100644 --- a/packages/nodes-base/nodes/ActiveCampaign/EcomCustomerDescription.ts +++ b/packages/nodes-base/nodes/ActiveCampaign/EcomCustomerDescription.ts @@ -148,7 +148,7 @@ export const ecomCustomerFields = [ }, default: 0, required: true, - description: 'ID of the ecommerceCustomer to update.', + description: 'ID of the E-commerce customer to update.', }, { displayName: 'Update Fields', @@ -218,7 +218,7 @@ export const ecomCustomerFields = [ }, default: 0, required: true, - description: 'ID of the ecommerceCustomer to update.', + description: 'ID of the E-commerce customer to delete.', }, // ---------------------------------- @@ -240,7 +240,7 @@ export const ecomCustomerFields = [ }, default: 0, required: true, - description: 'ID of the ecommerceCustomer to update.', + description: 'ID of the E-commerce customer to get.', }, // ----------------------------------