UNPKG

n8n-nodes-livo

Version:

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

187 lines (186 loc) 8.72 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OrderNodeCredentials = exports.OrderNode = void 0; const n8n_workflow_1 = require("n8n-workflow"); class OrderNode { constructor() { this.description = { displayName: 'Đơn hàng', name: 'orderNode', icon: 'file:order.svg', group: ['trigger'], version: 1, subtitle: '={{$parameter["event"]}}', description: 'Trigger webhook events cho đơn hàng (tạo, cập nhật, hủy, ...)', defaults: { name: 'Đơn hàng', }, 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 đơn hàng', value: 'order.list', description: 'Trigger khi lấy danh sách đơn hàng', }, { name: 'Chi tiết đơn hàng', value: 'order.detail', description: 'Trigger khi xem chi tiết đơn hàng', }, { name: 'Tạo đơn hàng', value: 'order.created', description: 'Trigger khi tạo mới đơn hàng', }, { name: 'Cập nhật đơn hàng', value: 'order.updated', description: 'Trigger khi cập nhật đơn hàng', }, { name: 'Thanh toán đơn hàng', value: 'order.paid', description: 'Trigger khi thanh toán đơn hàng', }, ], default: 'order.created', required: true, } ], }; } async webhook() { var _a; 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 orderData = bodyData; const receivedEvent = orderData.event || headers['x-event-type']; if (receivedEvent !== expectedEvent) { return { noWebhookResponse: true, }; } if (advancedFilters.customerId && orderData.customer_id !== advancedFilters.customerId) { return { noWebhookResponse: true }; } if (advancedFilters.minAmount && (orderData.total_amount || 0) < advancedFilters.minAmount) { return { noWebhookResponse: true }; } if (advancedFilters.maxAmount && advancedFilters.maxAmount > 0 && (orderData.total_amount || 0) > advancedFilters.maxAmount) { return { noWebhookResponse: true }; } if (advancedFilters.shippingLocation && !((_a = orderData.shipping_address) === null || _a === void 0 ? void 0 : _a.includes(advancedFilters.shippingLocation))) { return { noWebhookResponse: true }; } if (advancedFilters.assignedStaff && orderData.assigned_staff !== advancedFilters.assignedStaff) { return { noWebhookResponse: true }; } const outputData = { event: receivedEvent, event_time: new Date().toISOString(), event_category: receivedEvent.split('.')[0], id: orderData.id || orderData.order_id || orderData.repair_id || orderData.return_id || orderData.customer_id, code: orderData.code || orderData.order_code || orderData.repair_code || orderData.return_code, customer_id: orderData.customer_id || orderData.ma_khach_hang, customer_name: orderData.customer_name || orderData.ten_khach_hang, customer_phone: orderData.customer_phone || orderData.so_dien_thoai, customer_email: orderData.customer_email || orderData.email, customer_address: orderData.customer_address || orderData.dia_chi_khach_hang, total_amount: orderData.total_amount || orderData.tong_tien || orderData.gia_tri, paid_amount: orderData.paid_amount || orderData.da_thanh_toan, refund_amount: orderData.refund_amount || orderData.tien_hoan, discount_amount: orderData.discount_amount || orderData.giam_gia, items: orderData.items || orderData.san_pham || [], quantity: orderData.quantity || orderData.so_luong, description: orderData.description || orderData.mo_ta, shipping_address: orderData.shipping_address || orderData.dia_chi_giao_hang, shipping_method: orderData.shipping_method || orderData.phuong_thuc_giao_hang, delivery_date: orderData.delivery_date || orderData.ngay_giao_hang, device_info: orderData.device_info || orderData.thong_tin_thiet_bi, issue_description: orderData.issue_description || orderData.mo_ta_su_co, repair_status: orderData.repair_status || orderData.trang_thai_sua_chua, technician: orderData.technician || orderData.ky_thuat_vien, estimated_time: orderData.estimated_time || orderData.thoi_gian_du_kien, repair_cost: orderData.repair_cost || orderData.chi_phi_sua_chua, return_reason: orderData.return_reason || orderData.ly_do_tra_hang, return_condition: orderData.return_condition || orderData.tinh_trang_hang_tra, original_order_id: orderData.original_order_id || orderData.don_hang_goc, status: orderData.status || orderData.trang_thai, created_date: orderData.created_date || orderData.ngay_tao, updated_date: orderData.updated_date || orderData.ngay_cap_nhat, assigned_staff: orderData.assigned_staff || orderData.nhan_vien_phu_trach, branch: orderData.branch || orderData.chi_nhanh, notes: orderData.notes || orderData.ghi_chu, raw_data: orderData, headers: headers, query: query, webhook_url: req.url, }; return { workflowData: [ [ { json: outputData, }, ], ], }; } } exports.OrderNode = OrderNode; class OrderNodeCredentials { constructor() { this.name = 'orderNodeApi'; this.displayName = 'Order Node API'; this.properties = [ { displayName: 'API Key', name: 'apiKey', type: 'string', typeOptions: { password: true, }, default: '', }, { displayName: 'Base URL', name: 'baseUrl', type: 'string', default: 'https://api.yourstore.com', }, ]; } } exports.OrderNodeCredentials = OrderNodeCredentials;