UNPKG

n8n-nodes-base

Version:

Base nodes of n8n

289 lines 10.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConvertKitTrigger = void 0; const change_case_1 = require("change-case"); const n8n_workflow_1 = require("n8n-workflow"); const GenericFunctions_1 = require("./GenericFunctions"); class ConvertKitTrigger { description = { displayName: 'ConvertKit Trigger', name: 'convertKitTrigger', icon: 'file:convertKit.svg', subtitle: '={{$parameter["event"]}}', group: ['trigger'], version: 1, description: 'Handle ConvertKit events via webhooks', defaults: { name: 'ConvertKit Trigger', }, inputs: [], outputs: [n8n_workflow_1.NodeConnectionTypes.Main], credentials: [ { name: 'convertKitApi', required: true, }, ], webhooks: [ { name: 'default', httpMethod: 'POST', responseMode: 'onReceived', path: 'webhook', }, ], properties: [ { displayName: 'Event', name: 'event', type: 'options', required: true, default: '', description: 'The events that can trigger the webhook and whether they are enabled', options: [ { name: 'Form Subscribe', value: 'formSubscribe', }, { name: 'Link Click', value: 'linkClick', }, { name: 'Product Purchase', value: 'productPurchase', }, { name: 'Purchase Created', value: 'purchaseCreate', }, { name: 'Sequence Complete', value: 'courseComplete', }, { name: 'Sequence Subscribe', value: 'courseSubscribe', }, { name: 'Subscriber Activated', value: 'subscriberActivate', }, { name: 'Subscriber Unsubscribe', value: 'subscriberUnsubscribe', }, { name: 'Tag Add', value: 'tagAdd', }, { name: 'Tag Remove', value: 'tagRemove', }, ], }, { displayName: 'Form Name or ID', name: 'formId', type: 'options', description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', typeOptions: { loadOptionsMethod: 'getForms', }, required: true, default: '', displayOptions: { show: { event: ['formSubscribe'], }, }, }, { displayName: 'Sequence Name or ID', name: 'courseId', type: 'options', description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', typeOptions: { loadOptionsMethod: 'getSequences', }, required: true, default: '', displayOptions: { show: { event: ['courseSubscribe', 'courseComplete'], }, }, }, { displayName: 'Initiating Link', name: 'link', type: 'string', required: true, default: '', description: 'The URL of the initiating link', displayOptions: { show: { event: ['linkClick'], }, }, }, { displayName: 'Product ID', name: 'productId', type: 'string', required: true, default: '', displayOptions: { show: { event: ['productPurchase'], }, }, }, { displayName: 'Tag Name or ID', name: 'tagId', type: 'options', description: 'Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>', typeOptions: { loadOptionsMethod: 'getTags', }, required: true, default: '', displayOptions: { show: { event: ['tagAdd', 'tagRemove'], }, }, }, ], }; methods = { loadOptions: { // Get all the tags to display them to user so that they can // select them easily async getTags() { const returnData = []; const { tags } = await GenericFunctions_1.convertKitApiRequest.call(this, 'GET', '/tags'); for (const tag of tags) { const tagName = tag.name; const tagId = tag.id; returnData.push({ name: tagName, value: tagId, }); } return returnData; }, // Get all the forms to display them to user so that they can // select them easily async getForms() { const returnData = []; const { forms } = await GenericFunctions_1.convertKitApiRequest.call(this, 'GET', '/forms'); for (const form of forms) { const formName = form.name; const formId = form.id; returnData.push({ name: formName, value: formId, }); } return returnData; }, // Get all the sequences to display them to user so that they can // select them easily async getSequences() { const returnData = []; const { courses } = await GenericFunctions_1.convertKitApiRequest.call(this, 'GET', '/sequences'); for (const course of courses) { const courseName = course.name; const courseId = course.id; returnData.push({ name: courseName, value: courseId, }); } return returnData; }, }, }; webhookMethods = { default: { async checkExists() { const webhookData = this.getWorkflowStaticData('node'); // THe API does not have an endpoint to list all webhooks if (webhookData.webhookId) { return true; } return false; }, async create() { const webhookUrl = this.getNodeWebhookUrl('default'); let event = this.getNodeParameter('event', 0); const endpoint = '/automations/hooks'; if (event === 'purchaseCreate') { event = `purchase.${(0, change_case_1.snakeCase)(event)}`; } else { event = `subscriber.${(0, change_case_1.snakeCase)(event)}`; } const body = { target_url: webhookUrl, event: { name: event, }, }; if (event === 'subscriber.form_subscribe') { //@ts-ignore body.event.form_id = this.getNodeParameter('formId', 0); } if (event === 'subscriber.course_subscribe' || event === 'subscriber.course_complete') { //@ts-ignore body.event.sequence_id = this.getNodeParameter('courseId', 0); } if (event === 'subscriber.link_click') { //@ts-ignore body.event.initiator_value = this.getNodeParameter('link', 0); } if (event === 'subscriber.product_purchase') { //@ts-ignore body.event.product_id = this.getNodeParameter('productId', 0); } if (event === 'subscriber.tag_add' || event === 'subscriber.tag_remove') { //@ts-ignore body.event.tag_id = this.getNodeParameter('tagId', 0); } const webhook = await GenericFunctions_1.convertKitApiRequest.call(this, 'POST', endpoint, body); if (webhook.rule.id === undefined) { return false; } const webhookData = this.getWorkflowStaticData('node'); webhookData.webhookId = webhook.rule.id; return true; }, async delete() { const webhookData = this.getWorkflowStaticData('node'); if (webhookData.webhookId !== undefined) { const endpoint = `/automations/hooks/${webhookData.webhookId}`; try { await GenericFunctions_1.convertKitApiRequest.call(this, 'DELETE', endpoint); } catch (error) { return false; } delete webhookData.webhookId; } return true; }, }, }; async webhook() { const returnData = []; returnData.push(this.getBodyData()); return { workflowData: [this.helpers.returnJsonArray(returnData)], }; } } exports.ConvertKitTrigger = ConvertKitTrigger; //# sourceMappingURL=ConvertKitTrigger.node.js.map