@peopl-health/nexus 3.5.6 → 3.5.8
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.
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const { Logging_ID } = require('../config/airtableConfig');
|
|
2
|
+
const runtimeConfig = require('../config/runtimeConfig');
|
|
2
3
|
|
|
3
4
|
const { logger } = require('../utils/logger');
|
|
4
5
|
|
|
@@ -7,7 +8,7 @@ const { getBug, VALID_SEVERITIES } = require('../models/bugModel');
|
|
|
7
8
|
|
|
8
9
|
const { addRecord, getRecordByFilter } = require('../services/airtableService');
|
|
9
10
|
|
|
10
|
-
async function logBugReportToAirtable(reporter, whatsapp_id, description, severity, messageIds = []) {
|
|
11
|
+
async function logBugReportToAirtable(reporter, whatsapp_id, description, severity, messageIds = [], server) {
|
|
11
12
|
try {
|
|
12
13
|
let conversation = null;
|
|
13
14
|
if (messageIds?.length) {
|
|
@@ -30,7 +31,8 @@ async function logBugReportToAirtable(reporter, whatsapp_id, description, severi
|
|
|
30
31
|
await addRecord(Logging_ID, 'bug_reports', {
|
|
31
32
|
reporter, description, severity,
|
|
32
33
|
...(patientId && { patient_id: [patientId] }),
|
|
33
|
-
...(conversation && { conversation })
|
|
34
|
+
...(conversation && { conversation }),
|
|
35
|
+
server
|
|
34
36
|
});
|
|
35
37
|
logger.debug('Bug report logged to Airtable successfully');
|
|
36
38
|
} catch (error) {
|
|
@@ -48,10 +50,12 @@ const reportBugController = async (req, res) => {
|
|
|
48
50
|
return res.status(400).json({ success: false, error: `Severity must be one of: ${VALID_SEVERITIES.join(', ')}` });
|
|
49
51
|
}
|
|
50
52
|
|
|
53
|
+
const server = runtimeConfig.get('SERVICE_NAME');
|
|
54
|
+
|
|
51
55
|
const Bug = getBug();
|
|
52
|
-
const bug = await Bug.create({ reporter, whatsapp_id, description, severity, messages: messages || [] });
|
|
56
|
+
const bug = await Bug.create({ reporter, whatsapp_id, description, severity, messages: messages || [] , server});
|
|
53
57
|
|
|
54
|
-
logBugReportToAirtable(reporter, whatsapp_id, description, severity, messages).catch(err =>
|
|
58
|
+
logBugReportToAirtable(reporter, whatsapp_id, description, severity, messages, server).catch(err =>
|
|
55
59
|
logger.error('Background bug report logging failed:', { error: err.message })
|
|
56
60
|
);
|
|
57
61
|
|
|
@@ -5,7 +5,6 @@ const llmConfigModule = require('../config/llmConfig');
|
|
|
5
5
|
const { connect } = require('../config/mongoConfig');
|
|
6
6
|
|
|
7
7
|
const { logger } = require('../utils/logger');
|
|
8
|
-
const { createEvent, safeEmit } = require('../utils/eventUtils');
|
|
9
8
|
|
|
10
9
|
const { Message, getMessageValues, insertMessage } = require('../models/messageModel');
|
|
11
10
|
const { Thread } = require('../models/threadModel');
|
|
@@ -275,19 +274,6 @@ class NexusMessaging {
|
|
|
275
274
|
}
|
|
276
275
|
|
|
277
276
|
const chatId = messageData.from || messageData.From;
|
|
278
|
-
const messageId = messageData.id || messageData.message_id;
|
|
279
|
-
|
|
280
|
-
if (chatId && messageId) {
|
|
281
|
-
safeEmit(this.events, 'message:new', createEvent('message:new', {
|
|
282
|
-
messageId,
|
|
283
|
-
from: chatId,
|
|
284
|
-
body: messageData.body || messageData.message || '',
|
|
285
|
-
media: messageData.media || null,
|
|
286
|
-
type: messageData.interactive ? 'interactive' : messageData.media ? 'media' : 'message'
|
|
287
|
-
}));
|
|
288
|
-
} else {
|
|
289
|
-
logger.warn('[processIncomingMessage] Skipping event emission: missing chatId or messageId', { chatId, messageId });
|
|
290
|
-
}
|
|
291
277
|
|
|
292
278
|
if (chatId) {
|
|
293
279
|
ensureThreadExists(chatId);
|
|
@@ -488,6 +474,8 @@ const sendScheduledMessage = async (scheduledMessage) => {
|
|
|
488
474
|
return await requireDefaultInstance().sendScheduledMessage(scheduledMessage);
|
|
489
475
|
};
|
|
490
476
|
|
|
477
|
+
const getEventBus = () => getDefaultInstance()?.getEventBus();
|
|
478
|
+
|
|
491
479
|
const _resetDefaultInstance = () => { defaultInstance = null; };
|
|
492
480
|
|
|
493
481
|
module.exports = {
|
|
@@ -498,5 +486,6 @@ module.exports = {
|
|
|
498
486
|
getDefaultInstance,
|
|
499
487
|
getProvider,
|
|
500
488
|
requireProvider,
|
|
489
|
+
getEventBus,
|
|
501
490
|
_resetDefaultInstance
|
|
502
491
|
};
|
package/lib/models/bugModel.js
CHANGED
|
@@ -10,7 +10,8 @@ const bugSchema = new mongoose.Schema({
|
|
|
10
10
|
whatsapp_id: { type: String, required: true, index: true },
|
|
11
11
|
description: { type: String, required: true },
|
|
12
12
|
severity: { type: String, required: true, enum: VALID_SEVERITIES },
|
|
13
|
-
messages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Message' }]
|
|
13
|
+
messages: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Message' }],
|
|
14
|
+
server: { type: String }
|
|
14
15
|
}, { timestamps: true });
|
|
15
16
|
|
|
16
17
|
const getBug = () => {
|
|
@@ -48,13 +48,15 @@ async function getRecords(baseID, tableName) {
|
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
async function getRecordByFilter(baseID, tableName, filter, view = 'Grid view') {
|
|
51
|
+
async function getRecordByFilter(baseID, tableName, filter, view = 'Grid view', fields) {
|
|
52
52
|
try {
|
|
53
|
+
const selectOptions = { filterByFormula: filter, view };
|
|
54
|
+
if (fields && fields.length) selectOptions.fields = fields;
|
|
53
55
|
return await collectRecords(
|
|
54
|
-
getBase(baseID)(tableName).select(
|
|
56
|
+
getBase(baseID)(tableName).select(selectOptions)
|
|
55
57
|
);
|
|
56
58
|
} catch (error) {
|
|
57
|
-
logger.error('[getRecordByFilter] Failed', { tableName, filter, error: error.message });
|
|
59
|
+
logger.error('[getRecordByFilter] Failed', { tableName, filter, fields, error: error.message });
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
|
|
@@ -2,6 +2,7 @@ const { connect: mongoConnect, disconnect: mongoDisconnect, getDb } = require('.
|
|
|
2
2
|
const runtimeConfig = require('../config/runtimeConfig');
|
|
3
3
|
|
|
4
4
|
const { logger } = require('../utils/logger');
|
|
5
|
+
const { createEvent, safeEmit } = require('../utils/eventUtils');
|
|
5
6
|
|
|
6
7
|
const { Message, insertMessage } = require('../models/messageModel');
|
|
7
8
|
const { Thread } = require('../models/threadModel');
|
|
@@ -9,6 +10,8 @@ const { Thread } = require('../models/threadModel');
|
|
|
9
10
|
const { ensureWhatsAppFormat } = require('../helpers/twilioHelper');
|
|
10
11
|
const { enrichMessageWithTwilioMedia } = require('../helpers/twilioMediaHelper');
|
|
11
12
|
|
|
13
|
+
const { getEventBus: getStatusEventBus } = require('../core/NexusMessaging');
|
|
14
|
+
|
|
12
15
|
class MongoStorage {
|
|
13
16
|
constructor(config) {
|
|
14
17
|
this.mongoUri = config.mongoUri;
|
|
@@ -38,6 +41,22 @@ class MongoStorage {
|
|
|
38
41
|
const values = this.buildMessageValues(enrichedMessage);
|
|
39
42
|
await insertMessage(values);
|
|
40
43
|
logger.info('[MongoStorage] Message stored');
|
|
44
|
+
|
|
45
|
+
const chatId = messageData.from || messageData.From;
|
|
46
|
+
const messageId = messageData.id || messageData.message_id;
|
|
47
|
+
|
|
48
|
+
if (chatId && messageId) {
|
|
49
|
+
safeEmit(getStatusEventBus(), 'message:new', createEvent('message:new', {
|
|
50
|
+
messageId,
|
|
51
|
+
from: chatId,
|
|
52
|
+
body: messageData.body || messageData.message || '',
|
|
53
|
+
media: messageData.media || null,
|
|
54
|
+
type: messageData.interactive ? 'interactive' : messageData.media ? 'media' : 'message'
|
|
55
|
+
}));
|
|
56
|
+
} else {
|
|
57
|
+
logger.warn('[processIncomingMessage] Skipping event emission: missing chatId or messageId', { chatId, messageId });
|
|
58
|
+
}
|
|
59
|
+
|
|
41
60
|
return values;
|
|
42
61
|
} catch (error) {
|
|
43
62
|
logger.error('Error saving message', { error });
|