UNPKG

n8n-nodes-livo

Version:

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

146 lines (145 loc) 6.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProductNode = void 0; const n8n_workflow_1 = require("n8n-workflow"); class ProductNode { constructor() { this.description = { displayName: 'Sản phẩm', name: 'productNode', icon: 'file:return.svg', group: ['trigger'], version: 1, subtitle: '={{$parameter["event"]}}', description: 'Trigger webhook events cho sản phẩm (tạo, nhận hàng, hoàn tiền, hủy)', defaults: { name: 'Sản phẩm', }, inputs: [], outputs: ['main'], webhooks: [ { name: 'default', httpMethod: 'POST', responseMode: 'onReceived', path: 'webhook', }, ], properties: [ { displayName: 'Event', name: 'event', type: 'options', options: [ { name: 'Lấy danh sách sản phẩm', value: 'product.list', description: 'Trigger khi lấy danh sách sản phẩm', }, { name: 'Chi tiết sản phẩm', value: 'product.detail', description: 'Trigger khi xem chi tiết sản phẩm', }, { name: 'Tạo sản phẩm', value: 'product.created', description: 'Trigger khi tạo mới sản phẩm', }, { name: 'Cập nhật sản phẩm', value: 'product.updated', description: 'Trigger khi cập nhật sản phẩm', }, { name: 'Xóa sản phẩm', value: 'product.deleted', description: 'Trigger khi xóa sản phẩm', }, ], default: 'product.created', required: true, } ], }; } async webhook() { const bodyData = this.getBodyData(); const headers = this.getHeaderData(); const query = this.getQueryData(); const req = this.getRequestObject(); const expectedEvent = this.getNodeParameter('event'); const advancedFilters = this.getNodeParameter('advancedFilters', {}); const authentication = this.getNodeParameter('authentication', {}); if (authentication.secretToken) { const headerName = authentication.headerName || 'X-Webhook-Secret'; const receivedToken = headers[headerName.toLowerCase()] || headers[headerName]; if (!receivedToken || receivedToken !== authentication.secretToken) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Xác thực webhook thất bại: Token không hợp lệ'); } } if (!bodyData || typeof bodyData !== 'object') { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Dữ liệu webhook không hợp lệ'); } const returnData = bodyData; const receivedEvent = returnData.event || headers['x-event-type']; if (receivedEvent !== expectedEvent) { return { noWebhookResponse: true }; } if (advancedFilters.customerId && returnData.customer_id !== advancedFilters.customerId) { return { noWebhookResponse: true }; } if (advancedFilters.originalOrderId && returnData.original_order_id !== advancedFilters.originalOrderId) { return { noWebhookResponse: true }; } if (advancedFilters.minAmount && (returnData.return_amount || 0) < advancedFilters.minAmount) { return { noWebhookResponse: true }; } if (advancedFilters.returnReason && returnData.return_reason !== advancedFilters.returnReason) { return { noWebhookResponse: true }; } if (advancedFilters.assignedStaff && returnData.assigned_staff !== advancedFilters.assignedStaff) { return { noWebhookResponse: true }; } const outputData = { event: receivedEvent, event_time: new Date().toISOString(), event_category: 'product', return_id: returnData.return_id || returnData.ma_tra_hang, return_code: returnData.return_code || returnData.ma_tra_hang, original_order_id: returnData.original_order_id || returnData.don_hang_goc, original_order_code: returnData.original_order_code || returnData.ma_don_hang_goc, customer_id: returnData.customer_id || returnData.ma_khach_hang, customer_name: returnData.customer_name || returnData.ten_khach_hang, customer_phone: returnData.customer_phone || returnData.so_dien_thoai, customer_email: returnData.customer_email || returnData.email, return_amount: returnData.return_amount || returnData.gia_tri_tra, refund_amount: returnData.refund_amount || returnData.tien_hoan, refund_method: returnData.refund_method || returnData.phuong_thuc_hoan, return_reason: returnData.return_reason || returnData.ly_do_tra_hang, return_condition: returnData.return_condition || returnData.tinh_trang_hang_tra, return_items: returnData.return_items || returnData.san_pham_tra || [], return_quantity: returnData.return_quantity || returnData.so_luong_tra, status: returnData.status || returnData.trang_thai, created_date: returnData.created_date || returnData.ngay_tao, processed_date: returnData.processed_date || returnData.ngay_xu_ly, assigned_staff: returnData.assigned_staff || returnData.nhan_vien_xu_ly, branch: returnData.branch || returnData.chi_nhanh, notes: returnData.notes || returnData.ghi_chu, raw_data: returnData, headers: headers, query: query, webhook_url: req.url, }; return { workflowData: [ [ { json: outputData, }, ], ], }; } } exports.ProductNode = ProductNode;