UNPKG

n8n-nodes-walichat

Version:

n8n plugin for WaliChat

304 lines (303 loc) 9.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeQueueOperations = exports.queueProperties = void 0; const request_1 = require("../request"); exports.queueProperties = [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['queue'], }, }, options: [ { name: 'Get Queue Status', value: 'getQueueStatus', description: 'Get WhatsApp number queue messages stats information', }, { name: 'Set Queue Status', value: 'setQueueStatus', description: 'Update WhatsApp number queue processing status', }, { name: 'Route Queue', value: 'routeQueue', description: 'Re-route queued messages to a different WhatsApp number', }, { name: 'Empty Queue', value: 'emptyQueue', description: 'Remove all or specific queued messages', }, ], default: 'getQueueStatus', }, { displayName: 'WhatsApp Number', name: 'device', type: 'options', typeOptions: { loadOptionsMethod: 'getDevices', }, required: true, default: '', displayOptions: { show: { resource: ['queue'], }, }, description: 'The ID of the WhatsApp number', }, // SET QUEUE STATUS OPTIONS { displayName: 'Status', name: 'status', type: 'options', required: true, options: [ { name: 'Active', value: 'active', description: 'Deliver messages and accept new messages' }, { name: 'Pause', value: 'pause', description: 'Do not deliver messages but accept new ones' }, { name: 'Reject', value: 'reject', description: 'Deliver existing messages but reject new ones' }, { name: 'Freeze', value: 'freeze', description: 'Do not deliver messages and reject new ones' }, ], default: 'active', displayOptions: { show: { resource: ['queue'], operation: ['setQueueStatus'], }, }, description: 'Set messages queue processing status', }, { displayName: 'Force Delivery', name: 'force', type: 'boolean', required: false, default: false, displayOptions: { show: { resource: ['queue'], operation: ['setQueueStatus'], }, }, description: 'Force delivery of all queued messages with no delay for 30 minutes (only works with "active" or "reject" status)', }, // ROUTE QUEUE OPTIONS { displayName: 'Target WhatsApp Number ID', name: 'device', type: 'options', typeOptions: { loadOptionsMethod: 'getDevices', }, required: true, default: '', displayOptions: { show: { resource: ['queue'], operation: ['routeQueue'], }, }, description: 'Target device ID to reroute queued messages (24 characters hexadecimal value)', }, // EMPTY QUEUE OPTIONS { displayName: 'Wait for Completion', name: 'wait', type: 'boolean', required: false, default: false, displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], }, }, description: 'Wait until all queued messages are deleted (response may take up to 90 seconds)', }, { displayName: 'Skip Scheduled Messages', name: 'skipScheduled', type: 'boolean', required: false, default: false, displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], }, }, description: 'Do not delete scheduled messages that will be delivered in the future', }, { displayName: 'Filter Type', name: 'filterType', type: 'options', options: [ { name: 'None (Delete All)', value: 'none' }, { name: 'Message IDs', value: 'ids' }, { name: 'Phone Numbers', value: 'phones' }, { name: 'Group/Broadcast IDs', value: 'groups' }, { name: 'Date Range', value: 'dateRange' }, ], default: 'none', displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], }, }, description: 'Type of filter to apply when emptying the queue', }, { displayName: 'Message IDs', name: 'ids', type: 'string', typeOptions: { multipleValues: true, }, required: true, default: [], displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], filterType: ['ids'], }, }, description: 'IDs of queued messages to delete (24 characters hexadecimal value)', }, { displayName: 'Phone Numbers', name: 'phones', type: 'string', typeOptions: { multipleValues: true, }, required: true, default: [], displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], filterType: ['phones'], }, }, description: 'Phone numbers in E164 format (e.g. +447362053576)', }, { displayName: 'Group/Broadcast IDs', name: 'groups', type: 'string', typeOptions: { multipleValues: true, }, required: true, default: [], displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], filterType: ['groups'], }, }, description: 'Group/broadcast list WhatsApp IDs (e.g. 447362053576-000000000@g.us)', }, { displayName: 'Date Filters', name: 'dateFilters', type: 'collection', placeholder: 'Add Date Filter', default: {}, displayOptions: { show: { resource: ['queue'], operation: ['emptyQueue'], filterType: ['dateRange'], }, }, options: [ { displayName: 'Created Before', name: 'before', type: 'dateTime', default: '', description: 'Delete messages created before this date', }, { displayName: 'Created After', name: 'after', type: 'dateTime', default: '', description: 'Delete messages created after this date', }, ], }, ]; async function executeQueueOperations(index) { const operation = this.getNodeParameter('operation', index); const device = this.getNodeParameter('device', index); // GET QUEUE STATUS if (operation === 'getQueueStatus') { return (0, request_1.request)(this, 'GET', `/devices/${device}/queue`); } // SET QUEUE STATUS if (operation === 'setQueueStatus') { const status = this.getNodeParameter('status', index); const force = this.getNodeParameter('force', index, false); const body = { status, }; if (force) { body.force = true; } return (0, request_1.request)(this, 'POST', `/devices/${device}/queue`, body); } // ROUTE QUEUE if (operation === 'routeQueue') { const device = this.getNodeParameter('device', index); return (0, request_1.request)(this, 'PATCH', `/devices/${device}/queue`, { device }); } // EMPTY QUEUE if (operation === 'emptyQueue') { const wait = this.getNodeParameter('wait', index, false); const skipScheduled = this.getNodeParameter('skipScheduled', index, false); const filterType = this.getNodeParameter('filterType', index, 'none'); const queryParameters = {}; if (wait) { queryParameters.wait = 'true'; } const body = {}; if (skipScheduled) { body.skipScheduled = true; } if (filterType === 'ids') { const ids = this.getNodeParameter('ids', index, []); body.ids = ids; } else if (filterType === 'phones') { const phones = this.getNodeParameter('phones', index, []); body.phones = phones; } else if (filterType === 'groups') { const groups = this.getNodeParameter('groups', index, []); body.groups = groups; } else if (filterType === 'dateRange') { const dateFilters = this.getNodeParameter('dateFilters', index, {}); if (dateFilters.before) body.before = dateFilters.before; if (dateFilters.after) body.after = dateFilters.after; } return (0, request_1.request)(this, 'DELETE', `/devices/${device}/queue`, Object.keys(body).length ? body : undefined, queryParameters); } throw new Error(`The operation "${operation}" is not supported for queue!`); } exports.executeQueueOperations = executeQueueOperations;