UNPKG

n8n-nodes-zuckzapgo

Version:

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

706 lines 30.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ZuckZapGoNewsletter = void 0; const GenericFunctions_1 = require("../GenericFunctions"); class ZuckZapGoNewsletter { constructor() { this.description = { displayName: 'ZuckZapGo Newsletter', name: 'zuckzapgoNewsletter', icon: 'file:zuckzapgo.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"]}}', description: 'Manage WhatsApp newsletters/channels using ZuckZapGo API', defaults: { name: 'ZuckZapGo Newsletter', }, inputs: ["main" /* NodeConnectionType.Main */], outputs: ["main" /* NodeConnectionType.Main */], credentials: [ { name: 'zuckzapgoApi', required: true, }, ], properties: [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, options: [ { name: 'List Newsletters', value: 'listNewsletters', description: 'List all newsletters', action: 'List newsletters', }, { name: 'Create Newsletter', value: 'createNewsletter', description: 'Create a new newsletter', action: 'Create newsletter', }, { name: 'Get Newsletter Info', value: 'getNewsletterInfo', description: 'Get information about a specific newsletter', action: 'Get newsletter info', }, { name: 'Get Subscribed Newsletters', value: 'getSubscribedNewsletters', description: 'Get list of subscribed newsletters', action: 'Get subscribed newsletters', }, { name: 'Send Newsletter Message', value: 'sendNewsletterMessage', description: 'Send a message to newsletter', action: 'Send newsletter message', }, { name: 'Subscribe Newsletter', value: 'subscribeNewsletter', description: 'Subscribe to a newsletter', action: 'Subscribe newsletter', }, { name: 'Subscribe with Invite', value: 'subscribeNewsletterInvite', description: 'Subscribe using invite code', action: 'Subscribe with invite', }, { name: 'Unsubscribe Newsletter', value: 'unsubscribeNewsletter', description: 'Unsubscribe from newsletter', action: 'Unsubscribe newsletter', }, { name: 'Unsubscribe with Invite', value: 'unsubscribeNewsletterInvite', description: 'Unsubscribe using invite code', action: 'Unsubscribe with invite', }, { name: 'Mute Newsletter', value: 'muteNewsletter', description: 'Mute/unmute newsletter notifications', action: 'Mute newsletter', }, { name: 'Get Newsletter Messages', value: 'getNewsletterMessages', description: 'Get messages from newsletter', action: 'Get newsletter messages', }, { name: 'Send Newsletter Reaction', value: 'sendNewsletterReaction', description: 'React to newsletter message', action: 'Send newsletter reaction', }, { name: 'Mark Newsletter Viewed', value: 'markNewsletterViewed', description: 'Mark newsletter messages as viewed', action: 'Mark newsletter viewed', }, { name: 'Subscribe Live Updates', value: 'subscribeNewsletterLiveUpdates', description: 'Subscribe to live updates', action: 'Subscribe live updates', }, { name: 'Get Message Updates', value: 'getNewsletterMessageUpdates', description: 'Get newsletter message updates', action: 'Get message updates', }, { name: 'Accept TOS Notice', value: 'acceptTOSNotice', description: 'Accept terms of service notice', action: 'Accept tos notice', }, { name: 'Send Admin Invite', value: 'sendNewsletterAdminInvite', description: 'Send admin invite to newsletter', action: 'Send admin invite', }, ], default: 'listNewsletters', }, // Create Newsletter fields { displayName: 'Newsletter Name', name: 'name', type: 'string', default: '', placeholder: 'My Newsletter', description: 'Name of the newsletter (max 25 characters)', required: true, displayOptions: { show: { operation: ['createNewsletter'], }, }, }, { displayName: 'Description', name: 'description', type: 'string', default: '', placeholder: 'Newsletter description', description: 'Description of the newsletter (optional)', displayOptions: { show: { operation: ['createNewsletter'], }, }, }, { displayName: 'Picture', name: 'picture', type: 'string', default: '', placeholder: 'data:image/jpeg;base64,... or https://...', description: 'Base64 encoded image or URL for newsletter picture (optional)', displayOptions: { show: { operation: ['createNewsletter'], }, }, }, // Newsletter JID field (common) { displayName: 'Newsletter JID', name: 'newsletterJid', type: 'string', default: '', placeholder: '120363025246943103@newsletter', description: 'The JID of the newsletter', required: true, displayOptions: { show: { operation: [ 'getNewsletterInfo', 'sendNewsletterMessage', 'subscribeNewsletter', 'unsubscribeNewsletter', 'muteNewsletter', 'getNewsletterMessages', 'sendNewsletterReaction', 'markNewsletterViewed', 'subscribeNewsletterLiveUpdates', 'getNewsletterMessageUpdates', 'sendNewsletterAdminInvite', ], }, }, }, // Invite Code field { displayName: 'Invite Code', name: 'inviteCode', type: 'string', default: '', placeholder: 'ABCD1234EFGH', description: 'Newsletter invite code', required: true, displayOptions: { show: { operation: ['subscribeNewsletterInvite', 'unsubscribeNewsletterInvite'], }, }, }, // Send Message fields { displayName: 'Message Type', name: 'messageType', type: 'options', default: 'text', options: [ { name: 'Text', value: 'text', description: 'Send text message', }, { name: 'Image', value: 'image', description: 'Send image message', }, { name: 'Video', value: 'video', description: 'Send video message', }, { name: 'Document', value: 'document', description: 'Send document message', }, { name: 'Audio', value: 'audio', description: 'Send audio message', }, ], displayOptions: { show: { operation: ['sendNewsletterMessage'], }, }, }, { displayName: 'Message', name: 'message', type: 'string', default: '', placeholder: 'Your newsletter message', description: 'Text message content', required: true, displayOptions: { show: { operation: ['sendNewsletterMessage'], messageType: ['text'], }, }, }, { displayName: 'Media', name: 'media', type: 'string', default: '', placeholder: 'data:image/jpeg;base64,... or https://...', description: 'Base64 encoded media or URL', required: true, displayOptions: { show: { operation: ['sendNewsletterMessage'], messageType: ['image', 'video', 'document', 'audio'], }, }, }, { displayName: 'Caption', name: 'caption', type: 'string', default: '', placeholder: 'Media caption', description: 'Caption for media messages (optional)', displayOptions: { show: { operation: ['sendNewsletterMessage'], messageType: ['image', 'video', 'document', 'audio'], }, }, }, { displayName: 'File Name', name: 'fileName', type: 'string', default: '', placeholder: 'document.pdf', description: 'File name for document messages', displayOptions: { show: { operation: ['sendNewsletterMessage'], messageType: ['document'], }, }, }, // Mute Newsletter field { displayName: 'Mute', name: 'mute', type: 'boolean', default: true, description: 'Whether to mute or unmute the newsletter', displayOptions: { show: { operation: ['muteNewsletter'], }, }, }, // Get Messages fields { displayName: 'Count', name: 'count', type: 'number', default: 25, description: 'Number of messages to retrieve', displayOptions: { show: { operation: ['getNewsletterMessages', 'getNewsletterMessageUpdates'], }, }, }, { displayName: 'Before Message ID', name: 'before', type: 'string', default: '', placeholder: '123456', description: 'Get messages before this message server ID (optional)', displayOptions: { show: { operation: ['getNewsletterMessages'], }, }, }, // Reaction fields { displayName: 'Server ID', name: 'serverId', type: 'number', default: 0, description: 'Server ID of the message to react to', required: true, displayOptions: { show: { operation: ['sendNewsletterReaction'], }, }, }, { displayName: 'Reaction', name: 'reaction', type: 'string', default: '', placeholder: '👍', description: 'Emoji reaction to send', required: true, displayOptions: { show: { operation: ['sendNewsletterReaction'], }, }, }, // Mark Viewed fields { displayName: 'Server IDs', name: 'serverIds', type: 'string', default: '', placeholder: '123,456,789', description: 'Comma-separated list of server IDs to mark as viewed', required: true, displayOptions: { show: { operation: ['markNewsletterViewed'], }, }, }, // Message Updates fields { displayName: 'Since Timestamp', name: 'since', type: 'number', default: 0, description: 'Unix timestamp to get updates since (optional)', displayOptions: { show: { operation: ['getNewsletterMessageUpdates'], }, }, }, { displayName: 'After Server ID', name: 'after', type: 'number', default: 0, description: 'Get updates after this server ID (optional)', displayOptions: { show: { operation: ['getNewsletterMessageUpdates'], }, }, }, // TOS Notice fields { displayName: 'Notice ID', name: 'noticeId', type: 'string', default: '20601218', description: 'Notice ID for TOS acceptance (default for newsletter creation)', displayOptions: { show: { operation: ['acceptTOSNotice'], }, }, }, { displayName: 'Stage', name: 'stage', type: 'string', default: '5', description: 'Stage for TOS acceptance (default for newsletter creation)', displayOptions: { show: { operation: ['acceptTOSNotice'], }, }, }, // Admin Invite fields { displayName: 'Phone Number', name: 'phone', type: 'string', default: '', placeholder: '5491155553934', description: 'Phone number to send admin invite to', required: true, displayOptions: { show: { operation: ['sendNewsletterAdminInvite'], }, }, }, { displayName: 'Image', name: 'inviteImage', type: 'string', default: '', placeholder: 'data:image/jpeg;base64,... or https://...', description: 'Base64 encoded image or URL for invite', required: true, displayOptions: { show: { operation: ['sendNewsletterAdminInvite'], }, }, }, { displayName: 'Invite Caption', name: 'inviteCaption', type: 'string', default: '', placeholder: 'Join as admin to our newsletter!', description: 'Caption for the admin invite', required: true, displayOptions: { show: { operation: ['sendNewsletterAdminInvite'], }, }, }, { displayName: 'Newsletter Name', name: 'inviteName', type: 'string', default: '', placeholder: 'My Newsletter', description: 'Name of the newsletter for the invite', required: true, displayOptions: { show: { operation: ['sendNewsletterAdminInvite'], }, }, }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; for (let i = 0; i < items.length; i++) { try { const operation = this.getNodeParameter('operation', i); let endpoint = ''; let method = 'GET'; let body = {}; switch (operation) { case 'listNewsletters': endpoint = '/newsletter/list'; method = 'GET'; break; case 'createNewsletter': endpoint = '/newsletter/create'; method = 'POST'; body = { name: this.getNodeParameter('name', i), }; const description = this.getNodeParameter('description', i); if (description) { body.description = description; } const picture = this.getNodeParameter('picture', i); if (picture) { body.picture = picture; } break; case 'getNewsletterInfo': endpoint = '/newsletter/info'; method = 'POST'; body = { NewsletterID: this.getNodeParameter('newsletterJid', i), }; break; case 'getSubscribedNewsletters': endpoint = '/newsletter/subscribed'; method = 'GET'; break; case 'sendNewsletterMessage': endpoint = '/newsletter/send'; method = 'POST'; const messageType = this.getNodeParameter('messageType', i); const newsletterJid = this.getNodeParameter('newsletterJid', i); body = { jid: newsletterJid }; if (messageType === 'text') { body.message = this.getNodeParameter('message', i); } else { const media = this.getNodeParameter('media', i); const caption = this.getNodeParameter('caption', i); body[messageType] = media; if (caption) { body.caption = caption; } if (messageType === 'document') { const fileName = this.getNodeParameter('fileName', i); if (fileName) { body.file_name = fileName; } } } break; case 'subscribeNewsletter': endpoint = '/newsletter/follow'; method = 'POST'; body = { NewsletterID: this.getNodeParameter('newsletterJid', i), }; break; case 'subscribeNewsletterInvite': endpoint = '/newsletter/follow-invite'; method = 'POST'; body = { NewsletterInviteCode: this.getNodeParameter('inviteCode', i), }; break; case 'unsubscribeNewsletter': endpoint = '/newsletter/unfollow'; method = 'POST'; body = { NewsletterID: this.getNodeParameter('newsletterJid', i), }; break; case 'unsubscribeNewsletterInvite': endpoint = '/newsletter/unfollow-invite'; method = 'POST'; body = { NewsletterInviteCode: this.getNodeParameter('inviteCode', i), }; break; case 'muteNewsletter': endpoint = '/newsletter/mute'; method = 'POST'; body = { jid: this.getNodeParameter('newsletterJid', i), mute: this.getNodeParameter('mute', i), }; break; case 'getNewsletterMessages': endpoint = '/newsletter/messages'; method = 'POST'; body = { NewsletterID: this.getNodeParameter('newsletterJid', i), }; const count = this.getNodeParameter('count', i); if (count) { body.count = count; } const before = this.getNodeParameter('before', i); if (before) { body.before = before; } break; case 'sendNewsletterReaction': endpoint = '/newsletter/reaction'; method = 'POST'; body = { jid: this.getNodeParameter('newsletterJid', i), server_id: this.getNodeParameter('serverId', i), reaction: this.getNodeParameter('reaction', i), }; break; case 'markNewsletterViewed': endpoint = '/newsletter/mark-viewed'; method = 'POST'; const serverIds = this.getNodeParameter('serverIds', i); body = { jid: this.getNodeParameter('newsletterJid', i), server_ids: serverIds.split(',').map(id => parseInt(id.trim(), 10)), }; break; case 'subscribeNewsletterLiveUpdates': endpoint = '/newsletter/subscribe-live-updates'; method = 'POST'; body = { jid: this.getNodeParameter('newsletterJid', i), }; break; case 'getNewsletterMessageUpdates': endpoint = '/newsletter/message-updates'; method = 'POST'; body = { jid: this.getNodeParameter('newsletterJid', i), }; const countUpdates = this.getNodeParameter('count', i); if (countUpdates) { body.count = countUpdates; } const since = this.getNodeParameter('since', i); if (since) { body.since = since; } const after = this.getNodeParameter('after', i); if (after) { body.after = after; } break; case 'acceptTOSNotice': endpoint = '/newsletter/accept-tos'; method = 'POST'; body = { notice_id: this.getNodeParameter('noticeId', i), stage: this.getNodeParameter('stage', i), }; break; case 'sendNewsletterAdminInvite': endpoint = '/newsletter/admin-invite'; method = 'POST'; body = { phone: this.getNodeParameter('phone', i), newsletter_jid: this.getNodeParameter('newsletterJid', i), image: this.getNodeParameter('inviteImage', i), caption: this.getNodeParameter('inviteCaption', i), name: this.getNodeParameter('inviteName', i), }; break; } const responseData = await GenericFunctions_1.zuckzapgoApiRequest.call(this, method, endpoint, body); 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.ZuckZapGoNewsletter = ZuckZapGoNewsletter; //# sourceMappingURL=ZuckZapGoNewsletter.node.js.map