n8n-nodes-walichat
Version:
n8n plugin for WaliChat
304 lines (303 loc) • 9.84 kB
JavaScript
;
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;