@peopl-health/nexus 4.2.8 → 4.2.10

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.
@@ -6,6 +6,8 @@ const { recordDeliveryAttempt } = require('./deliveryAttemptHelper');
6
6
 
7
7
  const getMessaging = () => require('../core/NexusMessaging');
8
8
 
9
+ const TEMPLATE_BODY_LIMIT = 1024;
10
+
9
11
  async function triggerTemplateRecovery(messageDoc, { source = 'reactive', messageSid = null } = {}) {
10
12
  try {
11
13
  if (!messageDoc?.body || !messageDoc?.numero || !messageDoc?._id) return;
@@ -45,12 +47,16 @@ async function triggerTemplateRecovery(messageDoc, { source = 'reactive', messag
45
47
 
46
48
  let twilioContent;
47
49
  let setupErr = null;
48
- try {
49
- twilioContent = await template.save();
50
- const approvalName = `${templateName}_${Date.now()}`.toLowerCase().replace(/[^a-z0-9_]/g, '_');
51
- await provider.submitForApproval(twilioContent.sid, approvalName, 'UTILITY');
52
- } catch (err) {
53
- setupErr = err;
50
+ if (messageDoc.body.length > TEMPLATE_BODY_LIMIT) {
51
+ setupErr = new Error(`Body exceeds ${TEMPLATE_BODY_LIMIT}-char template limit (${messageDoc.body.length})`);
52
+ } else {
53
+ try {
54
+ twilioContent = await template.save();
55
+ const approvalName = `${templateName}_${Date.now()}`.toLowerCase().replace(/[^a-z0-9_]/g, '_');
56
+ await provider.submitForApproval(twilioContent.sid, approvalName, 'UTILITY');
57
+ } catch (err) {
58
+ setupErr = err;
59
+ }
54
60
  }
55
61
 
56
62
  await recordDeliveryAttempt({
@@ -1,5 +1,6 @@
1
1
  const { logger } = require('../utils/logger');
2
2
  const { Message } = require('../models/messageModel');
3
+ const { DeliveryAttempt } = require('../models/deliveryAttemptModel');
3
4
  const { BaseJob } = require('./BaseJob');
4
5
 
5
6
  const QUEUE_NAME = 'template-approval';
@@ -139,6 +140,11 @@ class TemplateApprovalJob extends BaseJob {
139
140
 
140
141
  logger.info('[TemplateApprovalJob] Recovered', { originalMessageSid, recoveryMessageId: sendResult.messageId, templateSid });
141
142
 
143
+ await DeliveryAttempt.updateOne(
144
+ { messageId: message._id, kind: 'recovery_template_setup', twilioSid: templateSid },
145
+ { $set: { status: 'sent', completedAt: new Date() } }
146
+ );
147
+
142
148
  provider.deleteTemplate(templateSid).catch((deleteErr) =>
143
149
  logger.warn('[TemplateApprovalJob] Failed to delete template after send', { templateSid, error: deleteErr.message })
144
150
  );
@@ -152,6 +158,16 @@ class TemplateApprovalJob extends BaseJob {
152
158
  { $set: { 'statusInfo.recoveryRejectedAt': new Date() } }
153
159
  );
154
160
 
161
+ await DeliveryAttempt.updateOne(
162
+ { messageId: message._id, kind: 'recovery_template_setup', twilioSid: templateSid },
163
+ { $set: {
164
+ status: 'failed',
165
+ errorSource: 'server',
166
+ errorMessage: 'Rejected by WhatsApp',
167
+ completedAt: new Date()
168
+ } }
169
+ );
170
+
155
171
  try {
156
172
  await provider.deleteTemplate(templateSid);
157
173
  logger.info('[TemplateApprovalJob] Rejected template deleted', { templateSid, messageId: message._id });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peopl-health/nexus",
3
- "version": "4.2.8",
3
+ "version": "4.2.10",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",