@peopl-health/nexus 4.2.16 → 4.3.1
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
|
|
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
|
-
}
|
|
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({
|
|
@@ -8,6 +8,7 @@ class RedisQueueAdapter extends QueueAdapter {
|
|
|
8
8
|
this.queues = new Map();
|
|
9
9
|
this.Bull = null;
|
|
10
10
|
this.redisConfig = config.redis || { host: 'localhost', port: 6379 };
|
|
11
|
+
this.prefix = typeof config.prefix === 'string' ? config.prefix.replace(/:+$/, '') : null;
|
|
11
12
|
this.defaultJobOptions = config.defaultJobOptions || {
|
|
12
13
|
attempts: 3,
|
|
13
14
|
backoff: { type: 'exponential', delay: 1000 },
|
|
@@ -30,7 +31,9 @@ class RedisQueueAdapter extends QueueAdapter {
|
|
|
30
31
|
if (this.queues.has(jobType)) return this.queues.get(jobType);
|
|
31
32
|
|
|
32
33
|
const Bull = this._loadBull();
|
|
33
|
-
const
|
|
34
|
+
const queueOptions = { redis: this.redisConfig };
|
|
35
|
+
if (this.prefix) queueOptions.prefix = this.prefix;
|
|
36
|
+
const queue = new Bull(jobType, queueOptions);
|
|
34
37
|
|
|
35
38
|
queue.on('error', (err) => logger.error('[RedisQueueAdapter] Queue error', { jobType, error: err.message }));
|
|
36
39
|
queue.on('failed', (job, err) => logger.error('[RedisQueueAdapter] Job failed', { jobId: job.id, error: err.message }));
|
|
@@ -57,20 +57,13 @@ class MongoStorage {
|
|
|
57
57
|
return doc;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
|
-
async finalizePendingMessage(docId, sid, statusInfo = 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
|
-
|
|
68
|
-
if (extras?.body && doc?.numero) {
|
|
69
|
-
await Thread.updateOne(
|
|
70
|
-
{ code: doc.numero, lastMessageBody: '' },
|
|
71
|
-
{ $set: { lastMessageBody: extras.body } }
|
|
72
|
-
);
|
|
73
|
-
}
|
|
66
|
+
await Message.updateOne({ _id: docId }, { $set: set });
|
|
74
67
|
}
|
|
75
68
|
if (sid) {
|
|
76
69
|
await Message.updateOne(
|