n8n-nodes-wuzapi
Version:
n8n community nodes for Wuzapi - WhatsApp Multi-Device REST API
459 lines • 22 kB
JavaScript
;
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