UNPKG

n8n-nodes-livo

Version:

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

191 lines (190 loc) 8.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LivoRepairTrigger = void 0; const n8n_workflow_1 = require("n8n-workflow"); class LivoRepairTrigger { constructor() { this.description = { displayName: 'Livo Repair Trigger', name: 'livoRepairTrigger', icon: 'file:livo.svg', group: ['trigger'], version: 1, subtitle: '={{$parameter["event"]}}', description: 'Starts the workflow when Livo repair events occur', defaults: { name: 'Livo Repair Trigger', }, inputs: [], outputs: ['main'], webhooks: [ { name: 'default', httpMethod: 'POST', responseMode: 'onReceived', path: 'webhook', }, ], properties: [ { displayName: 'Event', name: 'event', type: 'options', options: [ { name: 'Repair Created', displayName: 'Repair Created', value: 'repair.created', description: 'Triggered when a new repair ticket is created', }, { name: 'Repair Updated', displayName: 'Repair Updated', value: 'repair.updated', description: 'Triggered when a repair ticket is updated', }, { name: 'Repair Completed', displayName: 'Repair Completed', value: 'repair.completed', description: 'Triggered when a repair is completed', }, { name: 'Repair Delivered', displayName: 'Repair Delivered', value: 'repair.delivered', description: 'Triggered when a repaired item is delivered', }, ], default: 'repair.created', required: true, description: 'The repair 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: 'Device Type Filter', name: 'deviceTypeFilter', type: 'string', default: '', description: 'Only trigger for specific device type', }, { displayName: 'Technician Filter', name: 'technicianFilter', type: 'string', default: '', description: 'Only trigger for specific technician', }, { displayName: 'Priority Filter', name: 'priorityFilter', type: 'options', options: [ { name: 'Low', value: 'low' }, { name: 'Normal', value: 'normal' }, { name: 'High', value: 'high' }, { name: 'Urgent', value: 'urgent' }, ], default: '', description: 'Only trigger for specific priority level', }, ], }, ], }; } 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.deviceTypeFilter && eventData.device_type !== additionalOptions.deviceTypeFilter) { return { noWebhookResponse: true }; } if (additionalOptions.technicianFilter && eventData.technician !== additionalOptions.technicianFilter) { return { noWebhookResponse: true }; } if (additionalOptions.priorityFilter && eventData.priority !== additionalOptions.priorityFilter) { return { noWebhookResponse: true }; } const processedData = { event: receivedEvent, resource: 'repairs', timestamp: eventData.timestamp || new Date().toISOString(), event_id: eventData.id || eventData.event_id, repair_id: eventData.repair_id || eventData.id, ticket_number: eventData.ticket_number, customer_id: eventData.customer_id, customer_name: eventData.customer_name, customer_phone: eventData.customer_phone, device_info: eventData.device_info, device_type: eventData.device_type, device_brand: eventData.device_brand, issue_description: eventData.issue_description, status: eventData.status, priority: eventData.priority, technician: eventData.technician, estimated_completion: eventData.estimated_completion, total_cost: eventData.total_cost, repair_cost: eventData.repair_cost, parts_cost: eventData.parts_cost, created_at: eventData.created_at, updated_at: eventData.updated_at, }; if (additionalOptions.includeRawData) { processedData.raw_data = eventData; } return { workflowData: [ [ { json: processedData, }, ], ], }; } } exports.LivoRepairTrigger = LivoRepairTrigger;