@peopl-health/nexus 4.2.15 → 4.3.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.
@@ -75,11 +75,6 @@ class TwilioProvider extends MessageProvider {
75
75
  }
76
76
 
77
77
  if (contentSid) {
78
- const renderedMessage = await this.renderTemplate(contentSid, variables);
79
- if (renderedMessage) {
80
- messageData.body = renderedMessage;
81
- }
82
-
83
78
  messageParams.contentSid = contentSid;
84
79
  if (variables && Object.keys(variables).length > 0) {
85
80
  const formattedVariables = {};
@@ -144,7 +139,7 @@ class TwilioProvider extends MessageProvider {
144
139
  provider: 'twilio',
145
140
  status: result.status,
146
141
  result,
147
- finalize: { sid: chunks ? null : result.sid, status: result.status?.toLowerCase() || null, body: contentSid ? messageData.body : null }
142
+ finalize: { sid: chunks ? null : result.sid, status: result.status?.toLowerCase() || null }
148
143
  };
149
144
  }
150
145
 
@@ -85,7 +85,8 @@ class NexusMessaging {
85
85
  this.scheduledMessageJob = new ScheduledMessageJob({
86
86
  queueAdapter: this.queueAdapter,
87
87
  sendMessage: this.sendMessage.bind(this),
88
- requireMessageStorage: () => this.messageStorage
88
+ requireMessageStorage: () => this.messageStorage,
89
+ requireProvider: () => this.getProvider()
89
90
  });
90
91
 
91
92
  this.templateApprovalJob = new TemplateApprovalJob({
@@ -237,6 +238,11 @@ class NexusMessaging {
237
238
 
238
239
  if (messageData._fromConversationReply) messageData.processed = true;
239
240
 
241
+ if (messageData.contentSid && !messageData.body && this.provider.renderTemplate) {
242
+ const rendered = await this.provider.renderTemplate(messageData.contentSid, messageData.variables);
243
+ if (rendered) messageData.body = rendered;
244
+ }
245
+
240
246
  if (this._needsTemplateRoute(messageData) && !(await isWithin24HourWindow(messageData.code))) {
241
247
  const parent = messageData.parentMessageId
242
248
  ? await Message.findById(messageData.parentMessageId)
@@ -267,7 +273,7 @@ class NexusMessaging {
267
273
  await this.messageStorage.finalizePendingMessage(parentId, result.finalize.sid, {
268
274
  status: result.finalize.status,
269
275
  updatedAt: new Date()
270
- }, { body: result.finalize.body });
276
+ });
271
277
  }
272
278
 
273
279
  if (this.messageStorage && !providerStores) {
@@ -16,13 +16,14 @@ const TERMINAL_STATUSES = ['sent', 'cancelled'];
16
16
  const STALE_SENDING_MS = 5 * 60 * 1000;
17
17
 
18
18
  class ScheduledMessageJob extends BaseJob {
19
- constructor({ queueAdapter, sendMessage, requireMessageStorage = null } = {}) {
19
+ constructor({ queueAdapter, sendMessage, requireMessageStorage = null, requireProvider = null } = {}) {
20
20
  super({ queueAdapter, queueName: QUEUE_NAME });
21
21
  if (typeof sendMessage !== 'function') {
22
22
  throw new Error('ScheduledMessageJob requires a sendMessage function');
23
23
  }
24
24
  this.sendMessage = sendMessage;
25
25
  this.requireMessageStorage = requireMessageStorage;
26
+ this.requireProvider = requireProvider;
26
27
  }
27
28
 
28
29
  async schedule({ scheduledMessageId, sendTime }) {
@@ -95,6 +96,11 @@ class ScheduledMessageJob extends BaseJob {
95
96
  try {
96
97
  let parentMessageId = msg.parentMessageId || null;
97
98
  if (!parentMessageId) {
99
+ if (msg.contentSid && !msg.message) {
100
+ const provider = this.requireProvider?.();
101
+ const rendered = await provider?.renderTemplate?.(msg.contentSid, msg.variables);
102
+ if (rendered) msg.message = rendered;
103
+ }
98
104
  const storage = this.requireMessageStorage?.();
99
105
  if (storage?.savePendingMessage) {
100
106
  const parent = await storage.savePendingMessage({
@@ -57,12 +57,11 @@ class MongoStorage {
57
57
  return doc;
58
58
  }
59
59
 
60
- async finalizePendingMessage(docId, sid, statusInfo = null, extras = null) {
60
+ async finalizePendingMessage(docId, sid, statusInfo = null) {
61
61
  const set = {};
62
62
  if (statusInfo) {
63
63
  for (const [k, v] of Object.entries(statusInfo)) set[`statusInfo.${k}`] = v;
64
64
  }
65
- if (extras?.body) set.body = extras.body;
66
65
  if (Object.keys(set).length) {
67
66
  await Message.updateOne({ _id: docId }, { $set: set });
68
67
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peopl-health/nexus",
3
- "version": "4.2.15",
3
+ "version": "4.3.0",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",