@tiledesk/tiledesk-server 2.4.38 → 2.4.39

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -5,12 +5,20 @@
5
5
  🚀 IN PRODUCTION 🚀
6
6
  (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
7
7
 
8
+ # 2.4.39
9
+ - Queued botSubscriptionNotifier
10
+ - added lead.create to the queue????? testare di nuovo
11
+ - @tiledesk/tiledesk-tybot-connector: 0.1.89
12
+ - jobsManager.listen(); //listen after pubmodules to enabled queued *.queueEnabled events
13
+
14
+ # 2.4.38
15
+ - str fix
8
16
 
9
17
  # 2.4.37
10
18
  - added replyto to email endpoint
11
19
  - tiledesk/tiledesk-tybot-connector: 0.1.88
12
20
  - added lead.create to the queue
13
- - added subscriptionNotifiedQueued for the most common events (request.create, request.update, request.close, lead.create, project_user.update)
21
+ - added subscriptionNotifiedQueued for the most common events (message.create, request.create, request.update, request.close, lead.create, project_user.update)
14
22
 
15
23
 
16
24
  # 2.4.36
@@ -19,7 +27,7 @@
19
27
  # 2.4.35
20
28
  - tiledesk/tiledesk-tybot-connector: 0.1.87
21
29
 
22
- # 2.4.34
30
+ # 2.4.34 -> ERRORE PAGAMENTO
23
31
  - tiledesk/tiledesk-tybot-connector:0.1.83
24
32
  - stateless as default for Google Strategy
25
33
  - added redis session for google auth. To enable it put ENABLE_REDIS_SESSION to true otherwise standard passport session is used
package/app.js CHANGED
@@ -135,6 +135,7 @@ var RouterLogger = require('./models/routerLogger');
135
135
  var cacheEnabler = require("./services/cacheEnabler");
136
136
  const session = require('express-session');
137
137
  const RedisStore = require("connect-redis").default
138
+ const botEvent = require('./event/botEvent');
138
139
 
139
140
  require('./services/mongoose-cache-fn')(mongoose);
140
141
 
@@ -146,7 +147,9 @@ var subscriptionNotifierQueued = require('./services/subscriptionNotifierQueued'
146
147
 
147
148
 
148
149
  var botSubscriptionNotifier = require('./services/BotSubscriptionNotifier');
149
- botSubscriptionNotifier.start();
150
+ // botSubscriptionNotifier.start(); //queued
151
+
152
+ // botEvent.listen(); queued
150
153
 
151
154
  var trainingService = require('./services/trainingService');
152
155
  trainingService.start();
@@ -164,10 +167,7 @@ if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED ==
164
167
  }
165
168
  winston.info("JobsManager jobWorkerEnabled: "+ jobWorkerEnabled);
166
169
 
167
- let jobsManager = new JobsManager(jobWorkerEnabled, geoService, subscriptionNotifierQueued);
168
- jobsManager.listen();
169
-
170
-
170
+ let jobsManager = new JobsManager(jobWorkerEnabled, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier);
171
171
 
172
172
  var faqBotHandler = require('./services/faqBotHandler');
173
173
  faqBotHandler.listen();
@@ -175,6 +175,8 @@ faqBotHandler.listen();
175
175
  var pubModulesManager = require('./pubmodules/pubModulesManager');
176
176
  pubModulesManager.init({express:express, mongoose:mongoose, passport:passport, databaseUri:databaseUri, routes:{}, jobsManager:jobsManager});
177
177
 
178
+ jobsManager.listen(); //listen after pubmodules to enabled queued *.queueEnabled events
179
+
178
180
  var channelManager = require('./channels/channelManager');
179
181
  channelManager.listen();
180
182
 
package/event/botEvent.js CHANGED
@@ -14,6 +14,102 @@ class BotEvent extends EventEmitter {
14
14
  this.queueEnabled = false;
15
15
  this.setMaxListeners(11);
16
16
  }
17
+
18
+
19
+ listen() {
20
+ //TODO modify to async
21
+ //messageEvent.on('message.received', function(message) {
22
+
23
+
24
+ var messageCreateKey = 'message.create';
25
+ if (messageEvent.queueEnabled) {
26
+ messageCreateKey = 'message.create.queue';
27
+ }
28
+
29
+ winston.info("Listening messageCreateKey" + messageCreateKey + " for Chatbot messages");
30
+
31
+ messageEvent.on(messageCreateKey, function(message) {
32
+
33
+ winston.debug("message", message);
34
+
35
+ // TODO usa meglio se attributes.reply_always=true
36
+ if (message.sender === "system" && message.text && message.text!="\\start") {
37
+ winston.debug("it s a message sent from system, exit");
38
+ return null;
39
+ }
40
+
41
+ if (message.text && ( message.text.indexOf("\\agent") > -1 || message.text.indexOf("\\close") > -1)) { //not reply to a message containing \\agent
42
+ return 0;
43
+ }
44
+
45
+ // if (message.text.startsWith("\\")) { //not reply to a message containing \
46
+ // return null;
47
+ // }
48
+
49
+ var botId = getBotId(message);
50
+
51
+ winston.debug("botId: " + botId);
52
+
53
+ if (!botId) {
54
+ return null;
55
+ }else {
56
+ //loop fix for messages sent from external bot
57
+ // botprefix
58
+ if (message.sender === 'bot_'+botId || message.sender === botId) {
59
+ winston.debug("it s a message sent from bot, exit");
60
+ return null;
61
+ }else {
62
+ messageEvent.emit('message.received.for.bot', message); //UNUSED
63
+ }
64
+
65
+ }
66
+
67
+ // qui potresti leggere anche +secret ed evitare prossima query in botNotification
68
+ let qbot = Faq_kb.findById(botId); //TODO add cache_bot_here
69
+ //TODO unselect secret. secret is unselectable by default in the model
70
+
71
+ if (cacheEnabler.faq_kb) {
72
+ winston.debug('message.id_project+":faq_kbs:id:"+botId: '+ message.id_project+":faq_kbs:id:"+botId);
73
+ qbot.cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+botId)
74
+ winston.debug('faq_kb cache enabled');
75
+ }
76
+
77
+ qbot.exec(function(err, bot) {
78
+
79
+
80
+
81
+ if (err) {
82
+ winston.error('Error getting object.', err);
83
+ return 0;
84
+ }
85
+ if (!bot) {
86
+ winston.warn('Bot not found with id '+botId);
87
+ }
88
+
89
+ winston.debug("bot debug", bot);
90
+
91
+ if (bot) {
92
+ if (bot.type==="internal") {
93
+ botEvent.emit('bot.message.received.notify.internal', message);
94
+
95
+ }else { //external
96
+ if (bot.url) {
97
+ var botNotification = {bot: bot, message: message};
98
+ botEvent.emit('bot.message.received.notify.external', botNotification);
99
+ }else {
100
+ winston.warn("bot url is not defined", bot);
101
+ }
102
+ }
103
+ }
104
+
105
+ });
106
+
107
+
108
+
109
+ });
110
+
111
+ }
112
+
17
113
  }
18
114
 
19
115
  const botEvent = new BotEvent();
@@ -79,87 +175,6 @@ function getBotId(message) {
79
175
 
80
176
  }
81
177
 
82
- //TODO modify to async
83
- //messageEvent.on('message.received', function(message) {
84
- messageEvent.on('message.create', function(message) {
85
-
86
- winston.debug("message", message);
87
-
88
- // TODO usa meglio se attributes.reply_always=true
89
- if (message.sender === "system" && message.text && message.text!="\\start") {
90
- winston.debug("it s a message sent from system, exit");
91
- return null;
92
- }
93
-
94
- if (message.text && ( message.text.indexOf("\\agent") > -1 || message.text.indexOf("\\close") > -1)) { //not reply to a message containing \\agent
95
- return 0;
96
- }
97
-
98
- // if (message.text.startsWith("\\")) { //not reply to a message containing \
99
- // return null;
100
- // }
101
-
102
- var botId = getBotId(message);
103
-
104
- winston.debug("botId: " + botId);
105
-
106
- if (!botId) {
107
- return null;
108
- }else {
109
- //loop fix for messages sent from external bot
110
- // botprefix
111
- if (message.sender === 'bot_'+botId || message.sender === botId) {
112
- winston.debug("it s a message sent from bot, exit");
113
- return null;
114
- }else {
115
- messageEvent.emit('message.received.for.bot', message);
116
- }
117
-
118
- }
119
-
120
-
121
- let qbot = Faq_kb.findById(botId); //TODO add cache_bot_here
122
- //TODO unselect secret. secret is unselectable by default in the model
123
-
124
- if (cacheEnabler.faq_kb) {
125
- winston.debug('message.id_project+":faq_kbs:id:"+botId: '+ message.id_project+":faq_kbs:id:"+botId);
126
- qbot.cache(cacheUtil.defaultTTL, message.id_project+":faq_kbs:id:"+botId)
127
- winston.debug('faq_kb cache enabled');
128
- }
129
-
130
- qbot.exec(function(err, bot) {
131
-
132
-
133
-
134
- if (err) {
135
- winston.error('Error getting object.', err);
136
- return 0;
137
- }
138
- if (!bot) {
139
- winston.warn('Bot not found with id '+botId);
140
- }
141
-
142
- winston.debug("bot", bot);
143
-
144
- if (bot) {
145
- if (bot.type==="internal") {
146
- botEvent.emit('bot.message.received.notify.internal', message);
147
-
148
- }else { //external
149
- if (bot.url) {
150
- var botNotification = {bot: bot, message: message};
151
- botEvent.emit('bot.message.received.notify.external', botNotification);
152
- }else {
153
- winston.warn("bot url is not defined", bot);
154
- }
155
- }
156
- }
157
-
158
- });
159
-
160
-
161
-
162
- });
163
178
 
164
179
 
165
180
  module.exports = botEvent;
@@ -1,10 +1,14 @@
1
1
  const EventEmitter = require('events');
2
2
 
3
- class LeadEvent extends EventEmitter {}
3
+ class LeadEvent extends EventEmitter {
4
+ constructor() {
5
+ super();
6
+ this.queueEnabled = false;
7
+ this.setMaxListeners(11);
8
+ }
9
+ }
4
10
 
5
11
  const leadEvent = new LeadEvent();
6
12
 
7
13
 
8
-
9
-
10
14
  module.exports = leadEvent;
package/jobs.js CHANGED
@@ -23,6 +23,9 @@ let JobsManager = require('./jobsManager');
23
23
  let geoService = require('./services/geoService');
24
24
  // let subscriptionNotifier = require('./services/subscriptionNotifier');
25
25
  var subscriptionNotifierQueued = require('./services/subscriptionNotifierQueued');
26
+ var botSubscriptionNotifier = require('./services/BotSubscriptionNotifier');
27
+
28
+ const botEvent = require('./event/botEvent');
26
29
 
27
30
  require('./services/mongoose-cache-fn')(mongoose);
28
31
 
@@ -60,7 +63,7 @@ async function main()
60
63
 
61
64
  // require('@tiledesk-ent/tiledesk-server-queue');
62
65
 
63
- let jobsManager = new JobsManager(undefined, geoService, subscriptionNotifierQueued);
66
+ let jobsManager = new JobsManager(undefined, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier);
64
67
 
65
68
  jobsManager.listen();
66
69
 
@@ -72,6 +75,8 @@ async function main()
72
75
  let activityArchiver = require('./pubmodules/activities').activityArchiver;
73
76
  jobsManager.listenActivityArchiver(activityArchiver);
74
77
 
78
+
79
+
75
80
  winston.info("Jobs started");
76
81
 
77
82
  await new Promise(function () {});
package/jobsManager.js CHANGED
@@ -2,15 +2,16 @@
2
2
  var winston = require('./config/winston');
3
3
 
4
4
  class JobsManager {
5
- constructor(jobWorkerEnabled, geoService, subscriptionNotifierQueued) {
5
+ constructor(jobWorkerEnabled, geoService, botEvent, subscriptionNotifierQueued, botSubscriptionNotifier) {
6
6
  this.geoService = geoService;
7
+ this.botEvent = botEvent;
7
8
  // this.subscriptionNotifier = subscriptionNotifier;
8
9
  this.subscriptionNotifierQueued = subscriptionNotifierQueued;
10
+ this.botSubscriptionNotifier = botSubscriptionNotifier;
9
11
 
10
12
  this.emailNotificatio = undefined;
11
13
  this.activityArchiver = undefined;
12
-
13
-
14
+
14
15
  this.jobWorkerEnabled = jobWorkerEnabled;
15
16
  // this.jobWorkerEnabled = false;
16
17
  // if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
@@ -26,8 +27,12 @@ class JobsManager {
26
27
  return winston.info("JobsManager jobWorkerEnabled is enabled. Skipping listeners");
27
28
  }
28
29
  this.geoService.listen();
30
+ this.botEvent.listen();
31
+
29
32
  // this.subscriptionNotifier.start();
30
33
  this.subscriptionNotifierQueued.start();
34
+
35
+ this.botSubscriptionNotifier.start();
31
36
  }
32
37
 
33
38
  listenEmailNotification(emailNotification) {
@@ -39,7 +44,7 @@ class JobsManager {
39
44
  this.emailNotification.requestNotification.listen();
40
45
  }
41
46
 
42
-
47
+
43
48
 
44
49
  listenActivityArchiver(activityArchiver) {
45
50
  winston.info("JobsManager listenActivityArchiver started");
package/models/user.js CHANGED
@@ -15,7 +15,7 @@ var UserSchema = new Schema({
15
15
  type: String,
16
16
  required: true,
17
17
  // https://stackoverflow.com/questions/12096262/how-to-protect-the-password-field-in-mongoose-mongodb-so-it-wont-return-in-a-qu
18
- select: false
18
+ select: false
19
19
  },
20
20
  firstname: {
21
21
  type: String,
@@ -31,10 +31,10 @@ var UserSchema = new Schema({
31
31
  },
32
32
  resetpswrequestid: {
33
33
  type: String,
34
- select: false
34
+ select: false
35
35
  },
36
36
  signedInAt: {
37
- type:Date
37
+ type: Date
38
38
  },
39
39
 
40
40
  // db.users.find({authUrl: {$exists : false }}).forEach(function(mydoc) {
@@ -43,7 +43,7 @@ var UserSchema = new Schema({
43
43
 
44
44
  authUrl: {
45
45
  type: String,
46
- index:true
46
+ index: true
47
47
  },
48
48
  attributes: {
49
49
  type: Object,
@@ -54,10 +54,18 @@ var UserSchema = new Schema({
54
54
  default: 100,
55
55
  index: true,
56
56
  // select: false
57
- },
57
+ },
58
58
  description: {
59
59
  type: String,
60
60
  },
61
+ public_email: {
62
+ type: String,
63
+ required: false
64
+ },
65
+ public_website: {
66
+ type: String,
67
+ required: false
68
+ }
61
69
  // authType: { // update db old data
62
70
  // type: String,
63
71
  // index:true,
@@ -68,9 +76,9 @@ var UserSchema = new Schema({
68
76
  // ref: 'auth',
69
77
  // //required: true
70
78
  // },
71
- },{
72
- timestamps: true
73
- }
79
+ }, {
80
+ timestamps: true
81
+ }
74
82
  );
75
83
 
76
84
  // UserSchema.set('toJSON', {
@@ -111,8 +119,8 @@ UserSchema.methods.comparePassword = function (passw, cb) {
111
119
 
112
120
  UserSchema.virtual('fullName').get(function () {
113
121
  return (this.firstname || '') + ' ' + (this.lastname || '');
114
- });
115
-
122
+ });
123
+
116
124
 
117
125
  //UserSchema.index({ email: 1, authType: 1 }, { unique: true });
118
126
 
@@ -126,6 +134,6 @@ var UserModel = mongoose.model('user', UserSchema);
126
134
  if (process.env.MONGOOSE_SYNCINDEX) {
127
135
  UserModel.syncIndexes();
128
136
  winston.info("UserModel syncIndexes")
129
- }
137
+ }
130
138
 
131
139
  module.exports = UserModel;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-server",
3
3
  "description": "The Tiledesk server module",
4
- "version": "2.4.38",
4
+ "version": "2.4.39",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -44,7 +44,7 @@
44
44
  "@tiledesk/tiledesk-kaleyra-proxy": "^0.1.7",
45
45
  "@tiledesk/tiledesk-messenger-connector": "0.1.9",
46
46
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
47
- "@tiledesk/tiledesk-tybot-connector": "^0.1.87",
47
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.89",
48
48
  "@tiledesk/tiledesk-whatsapp-connector": "^0.1.50",
49
49
  "amqplib": "^0.5.5",
50
50
  "app-root-path": "^3.0.0",
package/routes/users.js CHANGED
@@ -7,23 +7,36 @@ var winston = require('../config/winston');
7
7
  const authEvent = require('../event/authEvent');
8
8
  const uuidv4 = require('uuid/v4');
9
9
 
10
-
11
-
12
-
13
-
14
10
  router.put('/', function (req, res) {
15
11
 
16
12
  winston.debug('UPDATE USER - REQ BODY ', req.body);
17
13
 
18
14
  var update = {};
19
-
20
- update.firstname = req.body.firstname;
21
- update.lastname = req.body.lastname;
22
- update.attributes = req.body.attributes;
23
- update.description = req.body.description;
24
-
25
-
26
15
 
16
+ // update.firstname = req.body.firstname;
17
+ // update.lastname = req.body.lastname;
18
+ // update.attributes = req.body.attributes;
19
+ // update.description = req.body.description;
20
+
21
+ if (req.body.firstname != undefined) {
22
+ update.firstname = req.body.firstname;
23
+ }
24
+ if (req.body.lastname != undefined) {
25
+ update.lastname = req.body.lastname;
26
+ }
27
+ if (req.body.attributes != undefined) {
28
+ update.attributes = req.body.attributes;
29
+ }
30
+ if (req.body.description != undefined) {
31
+ update.description = req.body.description;
32
+ }
33
+ if (req.body.public_email != undefined) {
34
+ update.public_email = req.body.public_email;
35
+ }
36
+ if (req.body.public_website != undefined) {
37
+ update.public_website = req.body.public_website;
38
+ }
39
+
27
40
  User.findByIdAndUpdate(req.user.id, update, { new: true, upsert: true }, function (err, updatedUser) {
28
41
  if (err) {
29
42
  winston.error("Error putting user",err);
@@ -27,11 +27,13 @@ class SubscriptionNotifierQueued {
27
27
  if (messageEvent.queueEnabled) {
28
28
  messageCreateKey = 'message.create.queue';
29
29
  }
30
+ winston.debug('SubscriptionNotifierQueued messageCreateKey: ' + messageCreateKey);
31
+
30
32
  messageEvent.on(messageCreateKey, function(message) { //queued tested
31
33
  setImmediate(() => {
32
- winston.debug('SubscriptionNotifier message.create');
34
+ winston.debug('SubscriptionNotifierQueued message.create');
33
35
  subscriptionNotifier.subscribe('message.create', message);
34
- winston.debug('SubscriptionNotifier message.create sent');
36
+ winston.debug('SubscriptionNotifierQueued message.create sent');
35
37
  });
36
38
  });
37
39
 
@@ -643,7 +643,7 @@ class WebSocketServer {
643
643
  if (messageEvent.queueEnabled) {
644
644
  messageCreateKey = 'message.create.queue.pubsub';
645
645
  }
646
- winston.debug('messageCreateKey: ' + messageCreateKey);
646
+ winston.debug('WS messageCreateKey: ' + messageCreateKey);
647
647
 
648
648
  messageEvent.on(messageCreateKey, function (message) {
649
649
  setImmediate(async () => {