@peopl-health/nexus 4.3.0 → 4.3.2
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.
|
@@ -57,10 +57,10 @@ const _sendBulkMessages = async (payloads, res, logMessage) => {
|
|
|
57
57
|
|
|
58
58
|
const sendMessageController = async (req, res) => {
|
|
59
59
|
if (!_validateMessagingDeps(res)) return;
|
|
60
|
-
|
|
60
|
+
|
|
61
61
|
const {
|
|
62
62
|
fileUrl, message, fileType, code,
|
|
63
|
-
sendTime
|
|
63
|
+
sendTime,
|
|
64
64
|
timeZone = 'Etc/GMT',
|
|
65
65
|
hidePreview = false,
|
|
66
66
|
contentSid = null,
|
|
@@ -71,12 +71,30 @@ const sendMessageController = async (req, res) => {
|
|
|
71
71
|
|
|
72
72
|
try {
|
|
73
73
|
const finalVariables = contentSid ? await ensureFlowTokenInVariables(contentSid, variables) : variables;
|
|
74
|
+
const formattedCode = ensureWhatsAppFormat(code);
|
|
75
|
+
|
|
76
|
+
if (!sendTime) {
|
|
77
|
+
const result = await sendMessage({
|
|
78
|
+
fileUrl, body: message, fileType, contentSid, hidePreview,
|
|
79
|
+
variables: finalVariables, code: formattedCode,
|
|
80
|
+
frontendId, triggeredBy
|
|
81
|
+
});
|
|
82
|
+
return res.status(200).json({
|
|
83
|
+
success: result?.success ?? true,
|
|
84
|
+
messageId: _pickMessageId(result, null),
|
|
85
|
+
status: result?.status || null,
|
|
86
|
+
...(result?.preemptive && {
|
|
87
|
+
preemptive: true,
|
|
88
|
+
note: 'Recipient outside 24h window; template approval in progress, delivery not guaranteed within the next 15 min'
|
|
89
|
+
})
|
|
90
|
+
});
|
|
91
|
+
}
|
|
74
92
|
|
|
75
93
|
const payload = {
|
|
76
94
|
fileUrl, message, fileType, contentSid, hidePreview, variables: finalVariables,
|
|
77
95
|
timeZone: timeZone || null,
|
|
78
|
-
sendTime:
|
|
79
|
-
code:
|
|
96
|
+
sendTime: moment.tz(sendTime, timeZone) + 2500,
|
|
97
|
+
code: formattedCode,
|
|
80
98
|
frontendId,
|
|
81
99
|
triggeredBy
|
|
82
100
|
};
|
|
@@ -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 }));
|