n8n-nodes-gohighlevel
Version:
n8n node for GoHighLevel API v2
136 lines (103 loc) • 4.14 kB
text/typescript
import { IExecuteFunctions, IDataObject } from 'n8n-workflow';
import { GoHighLevelManager } from '@src/utils/gohighlevel';
import { IContact } from './contact.types';
function formatCustomFields(data: any) {
if (data.customFields) {
data.customFields = data.customFields.values as unknown as IContact['customFields'];
}
}
export async function handleContactOperations(
this: IExecuteFunctions,
operation: string,
i: number,
): Promise<IDataObject | IDataObject[]> {
const GHLEngine = await GoHighLevelManager.getInstance(this);
if (operation === 'create') {
const data = {
email: this.getNodeParameter('email', i) as string,
phone: this.getNodeParameter('phone', i) as string,
...this.getNodeParameter('additionalFields', i, {}) as IDataObject,
};
return GHLEngine.createContact(data);
}
if (operation === 'update') {
const contactId = this.getNodeParameter('contactId', i) as string;
const data = {
...this.getNodeParameter('additionalFields', i, {}) as IDataObject,
};
formatCustomFields(data);
return GHLEngine.updateContact(contactId, data);
}
if (operation === 'get') {
const contactId = this.getNodeParameter('contactId', i) as string;
return GHLEngine.getContact(contactId);
}
if (operation === 'getAll') {
const returnAll = this.getNodeParameter('returnAll', i) as boolean;
const filters = this.getNodeParameter('filters', i) as IDataObject;
if (returnAll) {
return GHLEngine.getContacts({ params: filters });
} else {
const limit = this.getNodeParameter('limit', i) as number;
return GHLEngine.getContacts({ params: { ...filters, limit } });
}
}
if (operation === 'delete') {
const contactId = this.getNodeParameter('contactId', i) as string;
return GHLEngine.deleteContact(contactId);
}
if (operation === 'addTag') {
const contactId = this.getNodeParameter('contactId', i) as string;
const tags = (this.getNodeParameter('tags', i) as string).split(',').map(tag => tag.trim());
return GHLEngine.addTagToContact(contactId, tags);
}
if (operation === 'removeTag') {
const contactId = this.getNodeParameter('contactId', i) as string;
const tags = (this.getNodeParameter('tags', i) as string).split(',').map(tag => tag.trim());
return GHLEngine.removeTagFromContact(contactId, tags);
}
// if (operation === 'addToSequence') {
// const contactId = this.getNodeParameter('contactId', i) as string;
// const sequenceId = this.getNodeParameter('sequenceId', i) as string;
// return goHighLevelApiRequest.call(this, 'POST', `/v2/${resource}/${contactId}/sequences/${sequenceId}`);
// }
// if (operation === 'removeFromSequence') {
// const contactId = this.getNodeParameter('contactId', i) as string;
// const sequenceId = this.getNodeParameter('sequenceId', i) as string;
// return goHighLevelApiRequest.call(this, 'DELETE', `/v2/${resource}/${contactId}/sequences/${sequenceId}`);
// }
// find
if (operation === 'find') {
const email = this.getNodeParameter('email', i) as string;
return await GHLEngine.findContactByEmail(email);
}
// findOrCreate
if (operation === 'findOrCreate') {
const email = this.getNodeParameter('email', i) as string;
const contact = await GHLEngine.findContactByEmail(email);
if (!contact) {
const data = {
email,
...this.getNodeParameter('additionalFields', i, {}) as IDataObject,
};
formatCustomFields(data);
return GHLEngine.createContact(data);
}
return contact;
}
// updateOrCreate
if (operation === 'updateOrCreate') {
const email = this.getNodeParameter('email', i) as string;
const data = {
email,
...this.getNodeParameter('additionalFields', i, {}) as IDataObject,
};
formatCustomFields(data);
const contact = await GHLEngine.findContactByEmail(email);
if (!contact?.id) {
return GHLEngine.createContact(data);
}
return GHLEngine.updateContact(contact.id, data);
}
throw new Error(`Unknown operation: ${operation}`);
}