@wesell/n8n-nodes-confirmx 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +77 -0
  3. package/credentials/ConfirmXApi.credentials.d.ts +18 -0
  4. package/credentials/ConfirmXApi.credentials.js +31 -0
  5. package/credentials/ConfirmXApi.credentials.js.map +1 -0
  6. package/credentials/ConfirmXApi.credentials.ts +40 -0
  7. package/index.d.ts +14 -0
  8. package/index.js +26 -0
  9. package/nodes/ConfirmX/ConfirmXAccount.node.d.ts +5 -0
  10. package/nodes/ConfirmX/ConfirmXAccount.node.js +81 -0
  11. package/nodes/ConfirmX/ConfirmXAccount.node.js.map +1 -0
  12. package/nodes/ConfirmX/ConfirmXAccount.node.ts +81 -0
  13. package/nodes/ConfirmX/ConfirmXConversation.node.d.ts +13 -0
  14. package/nodes/ConfirmX/ConfirmXConversation.node.js +266 -0
  15. package/nodes/ConfirmX/ConfirmXConversation.node.js.map +1 -0
  16. package/nodes/ConfirmX/ConfirmXConversation.node.ts +263 -0
  17. package/nodes/ConfirmX/ConfirmXMessage.node.d.ts +13 -0
  18. package/nodes/ConfirmX/ConfirmXMessage.node.js +364 -0
  19. package/nodes/ConfirmX/ConfirmXMessage.node.js.map +1 -0
  20. package/nodes/ConfirmX/ConfirmXMessage.node.ts +361 -0
  21. package/nodes/ConfirmX/ConfirmXShippingZone.node.d.ts +5 -0
  22. package/nodes/ConfirmX/ConfirmXShippingZone.node.js +100 -0
  23. package/nodes/ConfirmX/ConfirmXShippingZone.node.js.map +1 -0
  24. package/nodes/ConfirmX/ConfirmXShippingZone.node.ts +103 -0
  25. package/nodes/ConfirmX/ConfirmXTemplate.node.d.ts +13 -0
  26. package/nodes/ConfirmX/ConfirmXTemplate.node.js +310 -0
  27. package/nodes/ConfirmX/ConfirmXTemplate.node.js.map +1 -0
  28. package/nodes/ConfirmX/ConfirmXTemplate.node.ts +310 -0
  29. package/nodes/ConfirmX/ConfirmXTrigger.node.d.ts +29 -0
  30. package/nodes/ConfirmX/ConfirmXTrigger.node.js +190 -0
  31. package/nodes/ConfirmX/ConfirmXTrigger.node.js.map +1 -0
  32. package/nodes/ConfirmX/ConfirmXTrigger.node.ts +245 -0
  33. package/nodes/ConfirmX/ConfirmXWebhook.node.d.ts +5 -0
  34. package/nodes/ConfirmX/ConfirmXWebhook.node.js +169 -0
  35. package/nodes/ConfirmX/ConfirmXWebhook.node.js.map +1 -0
  36. package/nodes/ConfirmX/ConfirmXWebhook.node.ts +163 -0
  37. package/nodes/ConfirmX/confirmx.svg +4 -0
  38. package/package.json +69 -0
  39. package/transports/http.d.ts +43 -0
  40. package/transports/http.js +117 -0
  41. package/transports/http.js.map +1 -0
  42. package/transports/http.ts +170 -0
  43. package/transports/signature.d.ts +21 -0
  44. package/transports/signature.js +50 -0
  45. package/transports/signature.js.map +1 -0
  46. package/transports/signature.ts +55 -0
  47. package/types/api.d.ts +199 -0
  48. package/types/api.js +21 -0
  49. package/types/api.js.map +1 -0
  50. package/types/api.ts +238 -0
@@ -0,0 +1,364 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConfirmXMessage = void 0;
4
+ const http_1 = require("../../transports/http");
5
+ class ConfirmXMessage {
6
+ constructor() {
7
+ this.description = {
8
+ displayName: 'ConfirmX Message',
9
+ name: 'confirmXMessage',
10
+ icon: 'file:confirmx.svg',
11
+ group: ['transform'],
12
+ version: 1,
13
+ subtitle: '={{$parameter["operation"]}}',
14
+ description: 'Send WhatsApp messages, list messages in a conversation, start a new conversation with a template, or retry a failed message.',
15
+ defaults: { name: 'ConfirmX Message' },
16
+ inputs: ['main'],
17
+ outputs: ['main'],
18
+ credentials: [{ name: 'confirmXApi', required: true }],
19
+ properties: [
20
+ {
21
+ displayName: 'Operation',
22
+ name: 'operation',
23
+ type: 'options',
24
+ noDataExpression: true,
25
+ options: [
26
+ {
27
+ name: 'Send Text',
28
+ value: 'sendText',
29
+ action: 'Send text message',
30
+ description: 'Send a free-form text message in an existing conversation. Use ONLY when the conversation is open (within 24h of the customer\'s last inbound message); otherwise use `startConversation` with a template. Requires `conversationId` and `body`. Optional `replyToMessageId` to quote a previous message.',
31
+ },
32
+ {
33
+ name: 'Send Media',
34
+ value: 'sendMedia',
35
+ action: 'Send media message',
36
+ description: 'Send a media message (image, video, document, audio) inside an existing conversation. Requires `conversationId` and `mediaUrl` (publicly fetchable URL); for documents/audio/voice also supply `mediaFilename`. Use ONLY within the 24h messaging window.',
37
+ },
38
+ {
39
+ name: 'Start Conversation',
40
+ value: 'startConversation',
41
+ action: 'Start conversation with template',
42
+ description: "Open a new WhatsApp conversation with a customer by sending an approved template. This bypasses the 24h messaging window — it's how you reach a customer proactively. Requires `accountId`, `phoneNumber` (E.164), and `templateName`. Returns the new conversation id you can use for follow-up messages.",
43
+ },
44
+ {
45
+ name: 'List Messages',
46
+ value: 'listMessages',
47
+ action: 'List messages in conversation',
48
+ description: 'Page through the messages in a conversation. Returns up to `limit` messages per page with an opaque `nextCursor` for the next page. Requires `conversationId`.',
49
+ },
50
+ {
51
+ name: 'Retry',
52
+ value: 'retry',
53
+ action: 'Retry a failed message',
54
+ description: 'Retry a previously failed outbound message. Requires `messageId`. Only failed messages can be retried — calling on a delivered/sent message returns 400.',
55
+ },
56
+ ],
57
+ default: 'sendText',
58
+ },
59
+ // --- Account (only for startConversation) ---
60
+ {
61
+ displayName: 'Account',
62
+ name: 'accountId',
63
+ type: 'resourceLocator',
64
+ default: { mode: 'list', value: '' },
65
+ required: true,
66
+ displayOptions: { show: { operation: ['startConversation'] } },
67
+ modes: [
68
+ { displayName: 'From List', name: 'list', type: 'list', typeOptions: { searchable: true } },
69
+ { displayName: 'By ID', name: 'id', type: 'string' },
70
+ ],
71
+ typeOptions: { loadOptionsMethod: 'getAccounts' },
72
+ description: 'WhatsApp account to send from',
73
+ },
74
+ // --- Send Text ---
75
+ {
76
+ displayName: 'Conversation ID',
77
+ name: 'sendConversationId',
78
+ type: 'string',
79
+ default: '',
80
+ required: true,
81
+ displayOptions: { show: { operation: ['sendText', 'sendMedia'] } },
82
+ },
83
+ {
84
+ displayName: 'Body',
85
+ name: 'textBody',
86
+ type: 'string',
87
+ typeOptions: { rows: 4 },
88
+ default: '',
89
+ required: true,
90
+ displayOptions: { show: { operation: ['sendText'] } },
91
+ },
92
+ {
93
+ displayName: 'Reply To Message ID',
94
+ name: 'replyToMessageId',
95
+ type: 'string',
96
+ default: '',
97
+ displayOptions: { show: { operation: ['sendText', 'sendMedia'] } },
98
+ description: 'Optional — quote an existing message',
99
+ },
100
+ // --- Send Media ---
101
+ {
102
+ displayName: 'Media Type',
103
+ name: 'mediaType',
104
+ type: 'options',
105
+ default: 'image',
106
+ required: true,
107
+ displayOptions: { show: { operation: ['sendMedia'] } },
108
+ options: [
109
+ { name: 'Image', value: 'image' },
110
+ { name: 'Video', value: 'video' },
111
+ { name: 'Document', value: 'document' },
112
+ { name: 'Audio', value: 'audio' },
113
+ { name: 'Voice', value: 'voice' },
114
+ ],
115
+ },
116
+ {
117
+ displayName: 'Media URL',
118
+ name: 'mediaUrl',
119
+ type: 'string',
120
+ default: '',
121
+ required: true,
122
+ displayOptions: { show: { operation: ['sendMedia'] } },
123
+ description: 'Public URL of the media file',
124
+ },
125
+ {
126
+ displayName: 'Media Caption',
127
+ name: 'mediaCaption',
128
+ type: 'string',
129
+ default: '',
130
+ displayOptions: { show: { operation: ['sendMedia'] } },
131
+ },
132
+ {
133
+ displayName: 'Media Filename',
134
+ name: 'mediaFilename',
135
+ type: 'string',
136
+ default: '',
137
+ displayOptions: {
138
+ show: { operation: ['sendMedia'], mediaType: ['document', 'audio', 'voice'] },
139
+ },
140
+ description: 'Required for document/audio/voice; controls how the file is named on receipt.',
141
+ },
142
+ // --- Start Conversation ---
143
+ {
144
+ displayName: 'Phone Number (E.164)',
145
+ name: 'phoneNumber',
146
+ type: 'string',
147
+ default: '',
148
+ required: true,
149
+ displayOptions: { show: { operation: ['startConversation'] } },
150
+ placeholder: '+201234567890',
151
+ description: 'Customer phone in E.164 format',
152
+ },
153
+ {
154
+ displayName: 'Template Name',
155
+ name: 'templateName',
156
+ type: 'string',
157
+ default: '',
158
+ required: true,
159
+ displayOptions: { show: { operation: ['startConversation'] } },
160
+ },
161
+ {
162
+ displayName: 'Template Language',
163
+ name: 'templateLanguage',
164
+ type: 'string',
165
+ default: 'en',
166
+ displayOptions: { show: { operation: ['startConversation'] } },
167
+ },
168
+ {
169
+ displayName: 'Template Components (JSON)',
170
+ name: 'templateComponents',
171
+ type: 'json',
172
+ default: '[]',
173
+ displayOptions: { show: { operation: ['startConversation'] } },
174
+ description: 'Optional JSON array matching Meta template components. Example: `[{"type":"body","parameters":[{"type":"text","text":"Order #12345"}]}]`.',
175
+ },
176
+ // --- List Messages ---
177
+ {
178
+ displayName: 'Conversation ID',
179
+ name: 'listConversationId',
180
+ type: 'string',
181
+ default: '',
182
+ required: true,
183
+ displayOptions: { show: { operation: ['listMessages'] } },
184
+ },
185
+ {
186
+ displayName: 'Cursor',
187
+ name: 'cursor',
188
+ type: 'string',
189
+ default: '',
190
+ displayOptions: { show: { operation: ['listMessages'] } },
191
+ description: 'Opaque cursor from previous page response',
192
+ },
193
+ {
194
+ displayName: 'Limit',
195
+ name: 'messagesLimit',
196
+ type: 'number',
197
+ default: 50,
198
+ typeOptions: { minValue: 1, maxValue: 100 },
199
+ displayOptions: { show: { operation: ['listMessages'] } },
200
+ },
201
+ // --- Retry ---
202
+ {
203
+ displayName: 'Message ID',
204
+ name: 'messageId',
205
+ type: 'string',
206
+ default: '',
207
+ required: true,
208
+ displayOptions: { show: { operation: ['retry'] } },
209
+ },
210
+ // --- Common ---
211
+ {
212
+ displayName: 'Integration Label',
213
+ name: 'integrationLabel',
214
+ type: 'string',
215
+ default: '',
216
+ displayOptions: { show: { operation: ['sendText', 'sendMedia', 'startConversation'] } },
217
+ description: 'Optional human-readable label shown in inbox (max 64 chars). Example: "n8n: Order Confirmation".',
218
+ },
219
+ {
220
+ displayName: 'Idempotency Key (X-Request-Id)',
221
+ name: 'requestId',
222
+ type: 'string',
223
+ default: '',
224
+ displayOptions: { show: { operation: ['sendText', 'sendMedia', 'startConversation', 'retry'] } },
225
+ description: 'Optional UUID — replay-safe debits. Replays with the same id return the cached debit without re-charging.',
226
+ },
227
+ ],
228
+ usableAsTool: true,
229
+ };
230
+ this.methods = {
231
+ loadOptions: {
232
+ async getAccounts() {
233
+ return await (0, http_1.loadAccountOptions)(this);
234
+ },
235
+ },
236
+ };
237
+ }
238
+ async execute() {
239
+ const items = this.getInputData();
240
+ const returnData = [];
241
+ const resolveAccountId = (i) => {
242
+ const v = this.getNodeParameter('accountId', i, '');
243
+ if (!v)
244
+ return undefined;
245
+ return typeof v === 'string' ? v : v?.value;
246
+ };
247
+ for (let i = 0; i < items.length; i++) {
248
+ const operation = this.getNodeParameter('operation', i);
249
+ const extraHeaders = {};
250
+ const requestId = this.getNodeParameter('requestId', i, '').trim();
251
+ if (requestId)
252
+ extraHeaders['X-Request-Id'] = requestId;
253
+ if (operation === 'sendText') {
254
+ const conversationId = this.getNodeParameter('sendConversationId', i);
255
+ const body = this.getNodeParameter('textBody', i);
256
+ const replyToMessageId = this.getNodeParameter('replyToMessageId', i, '') || undefined;
257
+ const integrationLabel = this.getNodeParameter('integrationLabel', i, '') || undefined;
258
+ const payload = { conversationId, type: 'text', body };
259
+ if (replyToMessageId)
260
+ payload.replyToMessageId = replyToMessageId;
261
+ if (integrationLabel)
262
+ payload.integrationLabel = integrationLabel;
263
+ const res = await (0, http_1.confirmxApiRequest)(this, {
264
+ method: 'POST',
265
+ endpoint: '/messages/send',
266
+ body: payload,
267
+ headers: extraHeaders,
268
+ });
269
+ returnData.push({ json: res.message });
270
+ }
271
+ else if (operation === 'sendMedia') {
272
+ const conversationId = this.getNodeParameter('sendConversationId', i);
273
+ const mediaType = this.getNodeParameter('mediaType', i);
274
+ const mediaUrl = this.getNodeParameter('mediaUrl', i);
275
+ const mediaCaption = this.getNodeParameter('mediaCaption', i, '') || undefined;
276
+ const mediaFilename = this.getNodeParameter('mediaFilename', i, '') || undefined;
277
+ const replyToMessageId = this.getNodeParameter('replyToMessageId', i, '') || undefined;
278
+ const integrationLabel = this.getNodeParameter('integrationLabel', i, '') || undefined;
279
+ const payload = {
280
+ conversationId,
281
+ type: mediaType,
282
+ mediaUrl,
283
+ };
284
+ if (mediaCaption)
285
+ payload.mediaCaption = mediaCaption;
286
+ if (mediaFilename)
287
+ payload.mediaFilename = mediaFilename;
288
+ if (replyToMessageId)
289
+ payload.replyToMessageId = replyToMessageId;
290
+ if (integrationLabel)
291
+ payload.integrationLabel = integrationLabel;
292
+ const res = await (0, http_1.confirmxApiRequest)(this, {
293
+ method: 'POST',
294
+ endpoint: '/messages/send',
295
+ body: payload,
296
+ headers: extraHeaders,
297
+ });
298
+ returnData.push({ json: res.message });
299
+ }
300
+ else if (operation === 'startConversation') {
301
+ const accountId = resolveAccountId(i);
302
+ const phoneNumber = this.getNodeParameter('phoneNumber', i);
303
+ const templateName = this.getNodeParameter('templateName', i);
304
+ const templateLanguage = this.getNodeParameter('templateLanguage', i) || 'en';
305
+ const templateComponentsRaw = this.getNodeParameter('templateComponents', i, '[]') || '[]';
306
+ const integrationLabel = this.getNodeParameter('integrationLabel', i, '') || undefined;
307
+ let templateComponents = [];
308
+ try {
309
+ const parsed = JSON.parse(templateComponentsRaw);
310
+ if (Array.isArray(parsed) && parsed.length)
311
+ templateComponents = parsed;
312
+ }
313
+ catch {
314
+ throw new Error('Template Components must be valid JSON array');
315
+ }
316
+ const payload = {
317
+ accountId,
318
+ phoneNumber,
319
+ templateName,
320
+ templateLanguage,
321
+ };
322
+ if (templateComponents.length)
323
+ payload.templateComponents = templateComponents;
324
+ if (integrationLabel)
325
+ payload.integrationLabel = integrationLabel;
326
+ const res = await (0, http_1.confirmxApiRequest)(this, {
327
+ method: 'POST',
328
+ endpoint: '/messages/start-conversation',
329
+ body: payload,
330
+ headers: extraHeaders,
331
+ });
332
+ returnData.push({ json: { conversation: res.conversation, message: res.message } });
333
+ }
334
+ else if (operation === 'listMessages') {
335
+ const conversationId = this.getNodeParameter('listConversationId', i);
336
+ const cursor = this.getNodeParameter('cursor', i, '') || undefined;
337
+ const limit = this.getNodeParameter('messagesLimit', i) || 50;
338
+ const qs = { limit };
339
+ if (cursor)
340
+ qs.cursor = cursor;
341
+ const res = await (0, http_1.confirmxApiRequest)(this, {
342
+ method: 'GET',
343
+ endpoint: `/conversations/${conversationId}/messages`,
344
+ qs,
345
+ });
346
+ for (const m of res.messages || []) {
347
+ returnData.push({ json: m });
348
+ }
349
+ }
350
+ else if (operation === 'retry') {
351
+ const messageId = this.getNodeParameter('messageId', i);
352
+ const res = await (0, http_1.confirmxApiRequest)(this, {
353
+ method: 'POST',
354
+ endpoint: `/messages/${messageId}/retry`,
355
+ headers: extraHeaders,
356
+ });
357
+ returnData.push({ json: { messageId, ...res } });
358
+ }
359
+ }
360
+ return [returnData];
361
+ }
362
+ }
363
+ exports.ConfirmXMessage = ConfirmXMessage;
364
+ //# sourceMappingURL=ConfirmXMessage.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmXMessage.node.js","sourceRoot":"","sources":["ConfirmXMessage.node.ts"],"names":[],"mappings":"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"}