UNPKG

n8n-nodes-wuzapi

Version:

n8n community nodes for Wuzapi - WhatsApp Multi-Device REST API

459 lines 22 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WuzapiWebhook = void 0; const GenericFunctions_1 = require("../GenericFunctions"); class WuzapiWebhook { constructor() { this.description = { displayName: 'Wuzapi Webhook', name: 'wuzapiWebhook', icon: 'file:wuzapi.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"]}}', description: 'Configure webhooks for Wuzapi WhatsApp API', defaults: { name: 'Wuzapi Webhook', }, inputs: ["main" /* NodeConnectionType.Main */], outputs: ["main" /* NodeConnectionType.Main */], credentials: [ { name: 'wuzapiApi', required: true, }, ], properties: [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, options: [ { name: 'Delete', value: 'delete', description: 'Remove webhook configuration', action: 'Delete webhook', }, { name: 'Get', value: 'get', description: 'Get current webhook configuration', action: 'Get webhook', }, { name: 'Set', value: 'set', description: 'Configure webhook URL and events', action: 'Set webhook', }, { name: 'Update', value: 'update', description: 'Update webhook configuration', action: 'Update webhook', }, ], default: 'get', }, // Set Webhook { displayName: 'Webhook URL', name: 'webhookUrl', type: 'string', default: '', placeholder: 'https://example.com/webhook', description: 'URL that will receive webhook events', required: true, displayOptions: { show: { operation: ['set'], }, }, }, { displayName: 'Events', name: 'events', type: 'multiOptions', default: ['All'], options: [ { name: 'All', value: 'All', description: 'Subscribe to all event types', }, { name: 'Chat Presence', value: 'ChatPresence', description: 'Typing indicators and chat presence', }, { name: 'History Sync', value: 'HistorySync', description: 'Message history synchronization', }, { name: 'Media Retry', value: 'MediaRetry', description: 'Media download retry events', }, { name: 'Message', value: 'Message', description: 'Incoming messages', }, { name: 'Presence', value: 'Presence', description: 'User online/offline status', }, { name: 'Read Receipt', value: 'ReadReceipt', description: 'Message read confirmations', }, { name: 'Receipt', value: 'Receipt', description: 'Message delivery receipts', }, ], description: 'Event types to subscribe to', displayOptions: { show: { operation: ['set'], }, }, }, // Update Webhook { displayName: 'Update Fields', name: 'updateFields', type: 'collection', placeholder: 'Add Field', default: {}, displayOptions: { show: { operation: ['update'], }, }, options: [ { displayName: 'Webhook URL', name: 'webhook', type: 'string', default: '', placeholder: 'https://example.com/webhook', description: 'New webhook URL', }, { displayName: 'Events', name: 'events', type: 'multiOptions', default: [], options: [ { name: 'All', value: 'All', description: 'Subscribe to all event types', }, { name: 'App State', value: 'AppState', description: 'Application state changes', }, { name: 'App State Sync Complete', value: 'AppStateSyncComplete', description: 'App state synchronization completed', }, { name: 'Blocklist', value: 'Blocklist', description: 'Full blocklist updates', }, { name: 'Blocklist Change', value: 'BlocklistChange', description: 'Contact block/unblock events', }, { name: 'Call Accept', value: 'CallAccept', description: 'Call accepted events', }, { name: 'Call Offer', value: 'CallOffer', description: 'Incoming call notifications', }, { name: 'Call Offer Notice', value: 'CallOfferNotice', description: 'Call offer notifications', }, { name: 'Call Relay Latency', value: 'CallRelayLatency', description: 'Call connection latency updates', }, { name: 'Call Terminate', value: 'CallTerminate', description: 'Call ended events', }, { name: 'CAT Refresh Error', value: 'CATRefreshError', description: 'Crypto auth token refresh errors', }, { name: 'Chat Presence', value: 'ChatPresence', description: 'Typing indicators and chat presence', }, { name: 'Client Outdated', value: 'ClientOutdated', description: 'WhatsApp client version outdated', }, { name: 'Connect Failure', value: 'ConnectFailure', description: 'Connection attempt failed', }, { name: 'Connected', value: 'Connected', description: 'WhatsApp connection established', }, { name: 'Disconnected', value: 'Disconnected', description: 'WhatsApp connection lost', }, { name: 'FB Message', value: 'FBMessage', description: 'Facebook bridge messages', }, { name: 'Group Info', value: 'GroupInfo', description: 'Group information updates', }, { name: 'History Sync', value: 'HistorySync', description: 'Message history synchronization', }, { name: 'Identity Change', value: 'IdentityChange', description: 'Contact security identity changes', }, { name: 'Joined Group', value: 'JoinedGroup', description: 'Group join notifications', }, { name: 'Keep Alive Restored', value: 'KeepAliveRestored', description: 'Connection keep-alive restored', }, { name: 'Keep Alive Timeout', value: 'KeepAliveTimeout', description: 'Connection keep-alive timeout', }, { name: 'Logged Out', value: 'LoggedOut', description: 'User logged out event', }, { name: 'Media Retry', value: 'MediaRetry', description: 'Media download retry events', }, { name: 'Message', value: 'Message', description: 'Incoming messages', }, { name: 'Newsletter Join', value: 'NewsletterJoin', description: 'Channel join notifications', }, { name: 'Newsletter Leave', value: 'NewsletterLeave', description: 'Channel leave notifications', }, { name: 'Newsletter Live Update', value: 'NewsletterLiveUpdate', description: 'Live updates from channels', }, { name: 'Newsletter Mute Change', value: 'NewsletterMuteChange', description: 'Channel mute status changes', }, { name: 'Offline Sync Completed', value: 'OfflineSyncCompleted', description: 'Offline message sync completed', }, { name: 'Offline Sync Preview', value: 'OfflineSyncPreview', description: 'Preview of offline messages to sync', }, { name: 'Pair Error', value: 'PairError', description: 'Device pairing failed', }, { name: 'Pair Success', value: 'PairSuccess', description: 'Device pairing successful', }, { name: 'Picture', value: 'Picture', description: 'Profile picture updates', }, { name: 'Presence', value: 'Presence', description: 'User online/offline status', }, { name: 'Privacy Settings', value: 'PrivacySettings', description: 'Privacy settings updates', }, { name: 'Push Name Setting', value: 'PushNameSetting', description: 'Push notification name changes', }, { name: 'QR', value: 'QR', description: 'QR code generated for pairing', }, { name: 'QR Scanned Without Multidevice', value: 'QRScannedWithoutMultidevice', description: 'QR code scanned without multidevice support', }, { name: 'Read Receipt', value: 'ReadReceipt', description: 'Message read confirmations', }, { name: 'Receipt', value: 'Receipt', description: 'Message delivery receipts', }, { name: 'Stream Error', value: 'StreamError', description: 'Connection stream error', }, { name: 'Stream Replaced', value: 'StreamReplaced', description: 'Connection stream replaced', }, { name: 'Temporary Ban', value: 'TemporaryBan', description: 'Account temporarily banned', }, { name: 'Undecryptable Message', value: 'UndecryptableMessage', description: 'Messages that could not be decrypted', }, { name: 'User About', value: 'UserAbout', description: 'User status/about updates', }, ], description: 'Event types to subscribe to', }, { displayName: 'Active', name: 'active', type: 'boolean', default: true, description: 'Whether the webhook should be active', }, ], }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; for (let i = 0; i < items.length; i++) { try { const operation = this.getNodeParameter('operation', i); let responseData; if (operation === 'get') { responseData = await GenericFunctions_1.wuzapiApiRequest.call(this, 'GET', '/webhook'); } else if (operation === 'set') { const webhookUrl = this.getNodeParameter('webhookUrl', i); const events = this.getNodeParameter('events', i); const body = { webhook: webhookUrl, events: events.includes('All') ? ['All'] : events, }; responseData = await GenericFunctions_1.wuzapiApiRequest.call(this, 'POST', '/webhook', body); } else if (operation === 'update') { const updateFields = this.getNodeParameter('updateFields', i); const body = {}; if (updateFields.webhook) { body.webhook = updateFields.webhook; } if (updateFields.events) { const events = updateFields.events; body.events = events.includes('All') ? ['All'] : events; } if (updateFields.active !== undefined) { body.Active = updateFields.active; } responseData = await GenericFunctions_1.wuzapiApiRequest.call(this, 'PUT', '/webhook', body); } else if (operation === 'delete') { responseData = await GenericFunctions_1.wuzapiApiRequest.call(this, 'DELETE', '/webhook'); } const executionData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray(responseData), { itemData: { item: i } }); returnData.push(...executionData); } catch (error) { if (this.continueOnFail()) { const executionErrorData = this.helpers.constructExecutionMetaData(this.helpers.returnJsonArray({ error: error.message }), { itemData: { item: i } }); returnData.push(...executionErrorData); continue; } throw error; } } return [returnData]; } } exports.WuzapiWebhook = WuzapiWebhook; //# sourceMappingURL=WuzapiWebhook.node.js.map