UNPKG

n8n-nodes-walichat

Version:

n8n plugin for WaliChat

540 lines (539 loc) 20.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.executeNumberOperations = exports.numberProperties = void 0; const request_1 = require("../request"); exports.numberProperties = [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, displayOptions: { show: { resource: ['numbers'], }, }, options: [ { name: 'Get Numbers', value: 'getNumbers', description: 'Get a list of all WhatsApp numbers in your account', }, { name: 'Get Number by ID', value: 'getNumberById', description: 'Get details of a specific WhatsApp number', }, { name: 'Create Number', value: 'createNumber', description: 'Create a new WhatsApp number with subscription plan', }, { name: 'Update Number', value: 'updateNumber', description: 'Update WhatsApp number settings', }, { name: 'Delete Number', value: 'deleteNumber', description: 'Delete a WhatsApp number', }, { name: 'Delete Chats', value: 'deleteChats', description: 'Delete chats for a WhatsApp number', }, ], default: 'getNumbers', }, // GET NUMBERS FILTERS { displayName: 'Filters', name: 'filters', type: 'collection', placeholder: 'Add Filter', default: {}, displayOptions: { show: { resource: ['numbers'], operation: ['getNumbers'], }, }, options: [ { displayName: 'WhatsApp Number IDs', name: 'ids', type: 'string', typeOptions: { multipleValues: true, loadOptionsMethod: 'getDevices', }, default: [], description: 'Filter WhatsApp numbers by specific IDs', }, { displayName: 'Status', name: 'status', type: 'options', options: [ { name: 'Operative', value: 'operative' }, { name: 'Pending', value: 'pending' }, { name: 'Disabled', value: 'disabled' }, { name: 'Removed', value: 'removed' }, ], default: '', description: 'Filter WhatsApp numbers by status', }, { displayName: 'Session Status', name: 'sessionStatus', type: 'options', options: [ { name: 'Authorize', value: 'authorize' }, { name: 'Online', value: 'online' }, { name: 'Timeout', value: 'timeout' }, { name: 'Offline', value: 'offline' }, { name: 'Error', value: 'error' }, ], default: '', description: 'Filter WhatsApp numbers by session status', }, { displayName: 'Search Term', name: 'search', type: 'string', default: '', description: 'Search WhatsApp numbers by phone number, alias or ID', }, { displayName: 'Results Page Size', name: 'size', type: 'number', default: 50, description: 'Number of results per page', }, { displayName: 'Page Number', name: 'page', type: 'number', default: 0, description: 'Page number (starting from 0)', }, ], }, // PARAMS FOR OPERATIONS THAT REQUIRE NUMBER ID { displayName: 'WhatsApp Number ID', name: 'device', type: 'string', required: true, default: '', typeOptions: { loadOptionsMethod: 'getDevices', }, displayOptions: { show: { resource: ['numbers'], operation: ['getNumberById', 'updateNumber', 'deleteNumber', 'deleteChats'], }, }, description: 'ID of the WhatsApp number', }, // GET NUMBER BY ID - INCLUDE OPTIONS { displayName: 'Include Options', name: 'includeOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['numbers'], operation: ['getNumberById'], }, }, options: [ { displayName: 'Include', name: 'include', type: 'multiOptions', options: [ { name: 'Agents', value: 'agents' }, { name: 'Catalog', value: 'catalog' }, { name: 'Quick Replies', value: 'quickReplies' }, ], default: [], description: 'Additional information to include in the response', }, { displayName: 'Exclude', name: 'exclude', type: 'multiOptions', options: [ { name: 'Session', value: 'session' }, { name: 'Profile', value: 'profile' }, { name: 'Stats', value: 'stats' }, { name: 'Queue', value: 'queue' }, ], default: [], description: 'Information to exclude from the response', }, ], }, // CREATE NUMBER PARAMETERS { displayName: 'Alias', name: 'alias', type: 'string', required: true, default: '', displayOptions: { show: { resource: ['numbers'], operation: ['createNumber'], }, }, description: 'Alias/name for the WhatsApp number (2-30 characters)', }, { displayName: 'Billing Plan', name: 'billingPlan', type: 'options', required: true, options: [ { name: 'Professional', value: 'professional' }, { name: 'Business', value: 'business' }, { name: 'Enterprise', value: 'enterprise' }, { name: 'Gateway Professional', value: 'gateway-professional' }, { name: 'Gateway Business', value: 'gateway-business' }, { name: 'Gateway Enterprise', value: 'gateway-enterprise' }, { name: 'Platform Professional', value: 'io-professional' }, { name: 'Platform Business', value: 'io-business' }, { name: 'Platform Enterprise', value: 'io-enterprise' }, ], default: 'professional', displayOptions: { show: { resource: ['numbers'], operation: ['createNumber'], }, }, description: 'Subscription plan for the WhatsApp number', }, { displayName: 'Additional Options', name: 'additionalOptions', type: 'collection', placeholder: 'Add Option', default: {}, displayOptions: { show: { resource: ['numbers'], operation: ['createNumber'], }, }, options: [ { displayName: 'Description', name: 'description', type: 'string', default: '', description: 'Description for the WhatsApp number (max 80 characters)', }, { displayName: 'Agent IDs', name: 'agents', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Agent IDs to provide shared chat access (Platform plans only)', }, { displayName: 'Payment Intent', name: 'paymentIntent', type: 'string', default: '', description: 'Payment intent ID (starts with pi_)', }, ], }, // UPDATE NUMBER PARAMETERS { displayName: 'Update Fields', name: 'updateFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { resource: ['numbers'], operation: ['updateNumber'], }, }, options: [ { displayName: 'Enable', name: 'enable', type: 'boolean', default: true, description: 'Whether to enable or disable the WhatsApp number', }, { displayName: 'Alias', name: 'alias', type: 'string', default: '', description: 'New alias/name for the WhatsApp number (2-30 characters)', }, { displayName: 'Description', name: 'description', type: 'string', default: '', description: 'New description for the WhatsApp number (max 80 characters)', }, { displayName: 'Billing Plan', name: 'plan', type: 'options', options: [ { name: 'Professional', value: 'professional' }, { name: 'Business', value: 'business' }, { name: 'Enterprise', value: 'enterprise' }, { name: 'Gateway Professional', value: 'gateway-professional' }, { name: 'Gateway Business', value: 'gateway-business' }, { name: 'Gateway Enterprise', value: 'gateway-enterprise' }, { name: 'Platform Professional', value: 'io-professional' }, { name: 'Platform Business', value: 'io-business' }, { name: 'Platform Enterprise', value: 'io-enterprise' }, ], default: '', description: 'New billing plan (charges may apply)', }, { displayName: 'Webhook IDs', name: 'webhooks', type: 'string', typeOptions: { multipleValues: true, }, default: [], description: 'Restrict webhook notifications to these webhook endpoint IDs', }, { displayName: 'Reboot Policy', name: 'rebootPolicy', type: 'options', options: [ { name: 'Disabled', value: 'disabled' }, { name: '10 Minutes', value: '10m' }, { name: '15 Minutes', value: '15m' }, { name: '20 Minutes', value: '20m' }, { name: '25 Minutes', value: '25m' }, { name: '30 Minutes', value: '30m' }, { name: '45 Minutes', value: '45m' }, { name: '1 Hour', value: '1h' }, { name: '2 Hours', value: '2h' }, { name: '3 Hours', value: '3h' }, { name: '4 Hours', value: '4h' }, { name: '5 Hours', value: '5h' }, { name: '6 Hours', value: '6h' }, { name: '8 Hours', value: '8h' }, { name: '10 Hours', value: '10h' }, { name: '12 Hours', value: '12h' }, { name: '18 Hours', value: '18h' }, ], default: '', description: 'Device session reboot policy', }, { displayName: 'Retention Policy', name: 'retentionPolicy', type: 'options', options: [ { name: 'Plan Defaults', value: 'plan_defaults' }, { name: 'Never', value: 'never' }, { name: '5 Minutes', value: '5m' }, { name: '15 Minutes', value: '15m' }, { name: '30 Minutes', value: '30m' }, { name: '1 Hour', value: '1h' }, { name: '12 Hours', value: '12h' }, { name: '24 Hours', value: '24h' }, { name: '2 Days', value: '2d' }, { name: '3 Days', value: '3d' }, { name: '4 Days', value: '4d' }, { name: '5 Days', value: '5d' }, { name: '6 Days', value: '6d' }, { name: '7 Days', value: '7d' }, { name: '10 Days', value: '10d' }, ], default: '', description: 'Data retention policy', }, { displayName: 'Delivery Speed', name: 'deliverySpeed', type: 'options', options: [ { name: 'Plan Default', value: 0 }, { name: '0.1 Per Minute', value: 0.1 }, { name: '0.2 Per Minute', value: 0.2 }, { name: '0.3 Per Minute', value: 0.3 }, { name: '0.4 Per Minute', value: 0.4 }, { name: '0.5 Per Minute', value: 0.5 }, { name: '0.6 Per Minute', value: 0.6 }, { name: '0.7 Per Minute', value: 0.7 }, { name: '0.8 Per Minute', value: 0.8 }, { name: '0.9 Per Minute', value: 0.9 }, { name: '1 Per Minute', value: 1 }, { name: '2 Per Minute', value: 2 }, { name: '3 Per Minute', value: 3 }, { name: '4 Per Minute', value: 4 }, { name: '5 Per Minute', value: 5 }, { name: '6 Per Minute', value: 6 }, { name: '7 Per Minute', value: 7 }, { name: '8 Per Minute', value: 8 }, { name: '9 Per Minute', value: 9 }, { name: '10 Per Minute', value: 10 }, { name: '15 Per Minute', value: 15 }, { name: '20 Per Minute', value: 20 }, { name: '30 Per Minute', value: 30 }, { name: '40 Per Minute', value: 40 }, { name: '50 Per Minute', value: 50 }, { name: '60 Per Minute', value: 60 }, { name: '70 Per Minute', value: 70 }, { name: '80 Per Minute', value: 80 }, { name: '90 Per Minute', value: 90 }, { name: '100 Per Minute', value: 100 }, { name: '120 Per Minute', value: 120 }, { name: '140 Per Minute', value: 140 }, { name: '150 Per Minute', value: 150 }, ], default: 0, description: 'Maximum message delivery speed per minute', }, ], }, // DELETE CHATS PARAMETERS { displayName: 'Chat Phone Numbers', name: 'phoneNumbers', type: 'string', typeOptions: { multipleValues: true, minValue: 1, maxValue: 10, }, required: true, default: [], displayOptions: { show: { resource: ['numbers'], operation: ['deleteChats'], }, }, description: 'Phone numbers with international country code (1-10 numbers)', }, ]; async function executeNumberOperations(index) { const operation = this.getNodeParameter('operation', index); // GET NUMBERS if (operation === 'getNumbers') { const filters = this.getNodeParameter('filters', index, {}); const queryParameters = {}; // Add all filters to query parameters for (const [key, value] of Object.entries(filters)) { if (value !== undefined && value !== '' && (typeof value !== 'object' || (Array.isArray(value) && value.length > 0))) { queryParameters[key] = value; } } return (0, request_1.request)(this, 'GET', '/devices', undefined, queryParameters); } // GET NUMBER BY ID if (operation === 'getNumberById') { const device = this.getNodeParameter('device', index); const includeOptions = this.getNodeParameter('includeOptions', index, {}); const queryParameters = {}; if (includeOptions.include && includeOptions.include.length > 0) { queryParameters.include = includeOptions.include.join(','); } if (includeOptions.exclude && includeOptions.exclude.length > 0) { queryParameters.exclude = includeOptions.exclude.join(','); } return (0, request_1.request)(this, 'GET', `/devices/${device}`, undefined, queryParameters); } // CREATE NUMBER if (operation === 'createNumber') { const alias = this.getNodeParameter('alias', index); const billingPlan = this.getNodeParameter('billingPlan', index); const additionalOptions = this.getNodeParameter('additionalOptions', index, {}); const body = { alias, billingPlan, }; if (additionalOptions.description) { body.description = additionalOptions.description; } if (additionalOptions.agents && additionalOptions.agents.length > 0) { body.agents = additionalOptions.agents; } if (additionalOptions.paymentIntent) { body.paymentIntent = additionalOptions.paymentIntent; } return (0, request_1.request)(this, 'POST', '/devices', body); } // UPDATE NUMBER if (operation === 'updateNumber') { const device = this.getNodeParameter('device', index); const updateFields = this.getNodeParameter('updateFields', index, {}); const body = {}; const settings = {}; // Handle basic fields if (updateFields.enable !== undefined) body.enable = updateFields.enable; if (updateFields.alias) body.alias = updateFields.alias; if (updateFields.description) body.description = updateFields.description; if (updateFields.plan) body.plan = updateFields.plan; if (updateFields.webhooks && updateFields.webhooks.length > 0) { body.webhooks = updateFields.webhooks; } // Handle settings fields if (updateFields.rebootPolicy) settings.rebootPolicy = updateFields.rebootPolicy; if (updateFields.retentionPolicy) settings.retentionPolicy = updateFields.retentionPolicy; if (updateFields.deliverySpeed !== undefined) settings.deliverySpeed = updateFields.deliverySpeed; // Add settings to body if any settings were defined if (Object.keys(settings).length > 0) { body.settings = settings; } return (0, request_1.request)(this, 'PATCH', `/devices/${device}`, body); } // DELETE NUMBER if (operation === 'deleteNumber') { const device = this.getNodeParameter('device', index); return (0, request_1.request)(this, 'DELETE', `/devices/${device}`); } // DELETE CHATS if (operation === 'deleteChats') { const device = this.getNodeParameter('device', index); const phoneNumbers = this.getNodeParameter('phoneNumbers', index, []); if (!phoneNumbers || phoneNumbers.length === 0) { throw new Error('At least one phone number is required'); } if (phoneNumbers.length > 10) { throw new Error('Maximum of 10 phone numbers can be deleted at once'); } return (0, request_1.request)(this, 'DELETE', `/devices/${device}/chats`, phoneNumbers); } throw new Error(`The operation "${operation}" is not supported for WhatsApp numbers!`); } exports.executeNumberOperations = executeNumberOperations;