@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
  };
@@ -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({ filterByFormula: filter, view })
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 });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peopl-health/nexus",
3
- "version": "3.5.6",
3
+ "version": "3.5.8",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",