UNPKG

n8n-nodes-livo

Version:

n8n Livo App integration with triggers and actions for orders, products, customers, and repairs

178 lines (177 loc) 7.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LivoOrderTrigger = void 0; const n8n_workflow_1 = require("n8n-workflow"); class LivoOrderTrigger { constructor() { this.description = { displayName: 'Livo Order Trigger', name: 'livoOrderTrigger', icon: 'file:livo.svg', group: ['trigger'], version: 1, subtitle: '={{$parameter["event"]}}', description: 'Starts the workflow when Livo order events occur', defaults: { name: 'Livo Order Trigger', }, inputs: [], outputs: ['main'], webhooks: [ { name: 'default', httpMethod: 'POST', responseMode: 'onReceived', path: 'webhook', }, ], properties: [ { displayName: 'Event', name: 'event', type: 'options', options: [ { name: 'Order Created', displayName: 'Order Created', value: 'order.created', description: 'Triggered when a new order is created', }, { name: 'Order Updated', displayName: 'Order Updated', value: 'order.updated', description: 'Triggered when an order is updated', }, { name: 'Order Paid', displayName: 'Order Paid', value: 'order.paid', description: 'Triggered when an order is paid', }, { name: 'Order Cancelled', displayName: 'Order Cancelled', value: 'order.cancelled', description: 'Triggered when an order is cancelled', }, { name: 'Order Delivered', displayName: 'Order Delivered', value: 'order.delivered', description: 'Triggered when an order is delivered', }, ], default: 'order.created', required: true, description: 'The order event that will trigger the webhook', }, { displayName: 'Additional Options', name: 'additionalOptions', type: 'collection', placeholder: 'Add Option', default: {}, options: [ { displayName: 'Include Raw Data', name: 'includeRawData', type: 'boolean', default: true, description: 'Whether to include the raw webhook data in the output', }, { displayName: 'Webhook Secret', name: 'webhookSecret', type: 'string', typeOptions: { password: true, }, default: '', description: 'Optional secret for webhook verification', }, { displayName: 'Customer ID Filter', name: 'customerIdFilter', type: 'string', default: '', description: 'Only trigger for specific customer ID', }, { displayName: 'Min Amount Filter', name: 'minAmountFilter', type: 'number', default: 0, description: 'Only trigger for orders above this amount', }, ], }, ], }; } async webhook() { const bodyData = this.getBodyData(); const headers = this.getHeaderData(); const expectedEvent = this.getNodeParameter('event'); const additionalOptions = this.getNodeParameter('additionalOptions', {}); if (!bodyData || typeof bodyData !== 'object') { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid webhook data received'); } const eventData = bodyData; if (additionalOptions.webhookSecret) { const receivedSecret = headers['x-livo-signature'] || headers['x-webhook-signature']; if (!receivedSecret || receivedSecret !== additionalOptions.webhookSecret) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Webhook signature verification failed'); } } const receivedEvent = eventData.event || headers['x-event-type']; if (receivedEvent !== expectedEvent) { return { noWebhookResponse: true, }; } if (additionalOptions.customerIdFilter && eventData.customer_id !== additionalOptions.customerIdFilter) { return { noWebhookResponse: true }; } if (additionalOptions.minAmountFilter && (eventData.total_amount || 0) < additionalOptions.minAmountFilter) { return { noWebhookResponse: true }; } const processedData = { event: receivedEvent, resource: 'orders', timestamp: eventData.timestamp || new Date().toISOString(), event_id: eventData.id || eventData.event_id, order_id: eventData.order_id || eventData.id, order_number: eventData.order_number || eventData.number, customer_id: eventData.customer_id, customer_name: eventData.customer_name, customer_email: eventData.customer_email, customer_phone: eventData.customer_phone, total_amount: eventData.total_amount || eventData.total, currency: eventData.currency || 'VND', items: eventData.items || eventData.line_items || [], shipping_address: eventData.shipping_address, billing_address: eventData.billing_address, payment_status: eventData.payment_status, fulfillment_status: eventData.fulfillment_status, status: eventData.status, created_at: eventData.created_at, updated_at: eventData.updated_at, }; if (additionalOptions.includeRawData) { processedData.raw_data = eventData; } return { workflowData: [ [ { json: processedData, }, ], ], }; } } exports.LivoOrderTrigger = LivoOrderTrigger;