@tiledesk/tiledesk-server 2.2.6 → 2.2.13

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,7 +1,23 @@
1
- # 2.2.5
1
+ # 2.2.13
2
+ - Send message validation with empty text
3
+
4
+ # 2.2.12
5
+ - Add /bot endpoint
6
+ - Bot and subscription can manage bots
7
+
8
+ # 2.2.11
9
+ - Logfix
10
+
11
+ # 2.2.10
12
+ - Native mqtt auth fix
13
+
14
+ # 2.2.8
15
+ - Public trigger module
16
+
17
+ # 2.2.6
2
18
  - Quota license fix
3
19
 
4
- # 2.2.4
20
+ # 2.2.4 -> PROD
5
21
  - email invitation fix
6
22
 
7
23
  # 2.2.3
@@ -92,8 +108,10 @@
92
108
  - Added email notification for new message and new request for email and form channel (ticket)
93
109
  - Added microLanguageTransformationInterceptor enabled when message.attributes.microlanguage==true
94
110
 
111
+ # 2.1.40.35
112
+ - Quota license fix
95
113
 
96
- # 2.1.40.34 -> PROD
114
+ # 2.1.40.34
97
115
  - logfix
98
116
 
99
117
  # 2.1.40.33
@@ -106,7 +124,7 @@
106
124
  # 2.1.40.31
107
125
  - Concierge bot fix to reroute only for temp conversation without a bot. Race condition issue when you try manually route a request for example inside a chatbot webhook
108
126
 
109
- # 2.1.40.30 -> PROD
127
+ # 2.1.40.30
110
128
  - logfix
111
129
 
112
130
  # 2.1.40.29
package/app.js CHANGED
@@ -339,7 +339,9 @@ app.use('/:projectid/faq', [passport.authenticate(['basic', 'jwt'], { session: f
339
339
  //Deprecated??
340
340
  app.use('/:projectid/faqpub', faqpub);
341
341
 
342
- app.use('/:projectid/faq_kb', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRole('agent')], faq_kb);
342
+ //deprecated
343
+ app.use('/:projectid/faq_kb', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], faq_kb);
344
+ app.use('/:projectid/bot', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], faq_kb);
343
345
 
344
346
 
345
347
 
@@ -42,6 +42,7 @@ router.post('/createCustomToken', function (req, res) {
42
42
  const scope = [
43
43
  `rabbitmq.read:*/*/apps.${appid}.users.${userid}.*`,
44
44
  `rabbitmq.write:*/*/apps.${appid}.users.${userid}.*`,
45
+ `rabbitmq.write:*/*/apps.${appid}.outgoing.users.${userid}.*`,
45
46
  'rabbitmq.configure:*/*/*'
46
47
  ]
47
48
 
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.2.6",
4
+ "version": "2.2.13",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -41,10 +41,10 @@
41
41
  "@tiledesk-ent/tiledesk-server-payments": "^1.1.5",
42
42
  "@tiledesk-ent/tiledesk-server-queue": "^1.1.10",
43
43
  "@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
44
- "@tiledesk-ent/tiledesk-server-resthook": "^1.1.50",
44
+ "@tiledesk-ent/tiledesk-server-resthook": "^1.1.51",
45
45
  "@tiledesk-ent/tiledesk-server-routing-queue": "^1.1.11",
46
46
  "@tiledesk-ent/tiledesk-server-tags": "^1.1.1",
47
- "@tiledesk-ent/tiledesk-server-triggers": "^1.1.77",
47
+ "@tiledesk-ent/tiledesk-server-triggers": "^1.1.79",
48
48
  "@tiledesk-ent/tiledesk-server-visitorcounter": "^1.1.1"
49
49
  },
50
50
  "dependencies": {
package/routes/message.js CHANGED
@@ -26,13 +26,21 @@ csv.separator = ';';
26
26
  // var roleChecker = require('../middleware/has-role');
27
27
 
28
28
  router.post('/',
29
- // se type image text può essere empty validare meglio.
30
29
  // [
31
- // check('text').notEmpty(),
30
+ // check('text').custom(value => {
31
+ // console.log("value",value);
32
+ // console.log("req.body.type",this.type);
33
+ // if (this.type === "text" && (value == undefined || value == "" ) ) {
34
+ // // if (this.type === "text" && ( (!value) || (value === "") ) ) {
35
+ // console.log("sono qui ",value);
36
+ // return Promise.reject('Text field is required for text message');
37
+ // }else {
38
+ // console.log("sono qua ",value);
39
+ // return Promise.resolve();
40
+ // }
41
+ // })
32
42
  // ],
33
- //
34
43
  async (req, res) => {
35
- // function(req, res) {
36
44
 
37
45
  winston.debug('req.body post message', req.body);
38
46
  winston.debug('req.params: ', req.params);
@@ -95,7 +103,7 @@ async (req, res) => {
95
103
  winston.debug("queryProjectUser", queryProjectUser);
96
104
 
97
105
  project_user = await Project_user.findOne(queryProjectUser).populate({path:'id_user', select:{'firstname':1, 'lastname':1, 'email':1}})
98
- winston.debug("queryProjectUser", queryProjectUser);
106
+ winston.info("project_user", project_user);
99
107
 
100
108
  if (!project_user) {
101
109
  return res.status(403).send({success: false, msg: 'Unauthorized. Project_user not found with user id : '+ sender });
@@ -130,14 +138,25 @@ async (req, res) => {
130
138
  return leadService.createIfNotExistsWithLeadId(sender || req.user._id, fullname, email, req.projectid, null, req.body.attributes || req.user.attributes)
131
139
  .then(function(createdLead) {
132
140
 
133
-
134
-
141
+
135
142
 
136
- var new_request = { // problema
137
- request_id: req.params.request_id, project_user_id: project_user._id, lead_id: createdLead._id, id_project:req.projectid,
138
- first_text: req.body.text, departmentid: req.body.departmentid, sourcePage:req.body.sourcePage,
139
- language: req.body.language, userAgent:req.body.userAgent, status:null, createdBy: req.user._id,
140
- attributes: req.body.attributes, subject: req.body.subject, preflight:undefined, channel: req.body.channel, location: req.body.location,
143
+ var new_request = {
144
+ request_id: req.params.request_id,
145
+ project_user_id: project_user._id,
146
+ lead_id: createdLead._id,
147
+ id_project:req.projectid,
148
+ first_text: req.body.text,
149
+ departmentid: req.body.departmentid,
150
+ sourcePage:req.body.sourcePage,
151
+ language: req.body.language,
152
+ userAgent:req.body.userAgent,
153
+ status:null,
154
+ createdBy: req.user._id,
155
+ attributes: req.body.attributes,
156
+ subject: req.body.subject,
157
+ preflight:undefined,
158
+ channel: req.body.channel,
159
+ location: req.body.location,
141
160
  participants: req.body.participants,
142
161
  lead: createdLead, requester: project_user,
143
162
  priority: req.body.priority
@@ -183,7 +202,15 @@ async (req, res) => {
183
202
  return res.json(message);
184
203
  });
185
204
  });
186
- });
205
+ }).catch(function(err){ //pubblica questo
206
+ winston.log({
207
+ level: 'error',
208
+ message: 'Error creating request: '+ JSON.stringify(err) + " " + JSON.stringify(req.body) ,
209
+ label: req.projectid
210
+ });
211
+ // winston.error("Error creating message", err);
212
+ return res.status(500).send({success: false, msg: 'Error creating request', err:err });
213
+ });
187
214
 
188
215
  });
189
216
 
@@ -519,13 +519,13 @@ class EmailService {
519
519
 
520
520
  let inReplyTo;
521
521
  let references;
522
- if (message.attributes) {
523
- if (message.attributes.email_messageId) {
524
- inReplyTo = message.attributes.email_messageId;
525
- }
526
- if (message.attributes.email_references) {
527
- references = message.attributes.email_references;
528
- }
522
+ if (message.request.attributes) {
523
+ if (message.request.attributes.email_messageId) {
524
+ inReplyTo = message.request.attributes.email_messageId;
525
+ }
526
+ if (message.request.attributes.email_references) {
527
+ references = message.request.attributes.email_references;
528
+ }
529
529
  }
530
530
  winston.verbose("sendNewAssignedAgentMessageEmailNotification email inReplyTo: "+ inReplyTo);
531
531
  winston.verbose("sendNewAssignedAgentMessageEmailNotification email references: "+ references);
@@ -804,13 +804,13 @@ class EmailService {
804
804
 
805
805
  let inReplyTo;
806
806
  let references;
807
- if (message.attributes) {
808
- if (message.attributes.email_messageId) {
809
- inReplyTo = message.attributes.email_messageId;
810
- }
811
- if (message.attributes.email_references) {
812
- references = message.attributes.email_references;
813
- }
807
+ if (message.request.attributes) {
808
+ if (message.request.attributes.email_messageId) {
809
+ inReplyTo = message.request.attributes.email_messageId;
810
+ }
811
+ if (message.request.attributes.email_references) {
812
+ references = message.request.attributes.email_references;
813
+ }
814
814
  }
815
815
  winston.verbose("sendNewPooledMessageEmailNotification email inReplyTo: "+ inReplyTo);
816
816
  winston.verbose("sendNewPooledMessageEmailNotification email references: "+ references);
@@ -947,13 +947,13 @@ class EmailService {
947
947
 
948
948
  let inReplyTo;
949
949
  let references;
950
- if (message.attributes) {
951
- if (message.attributes.email_messageId) {
952
- inReplyTo = message.attributes.email_messageId;
953
- }
954
- if (message.attributes.email_references) {
955
- references = message.attributes.email_references;
956
- }
950
+ if (message.request.attributes) {
951
+ if (message.request.attributes.email_messageId) {
952
+ inReplyTo = message.request.attributes.email_messageId;
953
+ }
954
+ if (message.attributes.email_references) {
955
+ references = message.request.attributes.email_references;
956
+ }
957
957
  }
958
958
  winston.verbose("email inReplyTo: "+ inReplyTo);
959
959
  winston.verbose("email references: "+ references);
@@ -1086,24 +1086,24 @@ class EmailService {
1086
1086
  let cc;
1087
1087
  let ccString;
1088
1088
 
1089
- if (message.attributes) {
1089
+ if (message.request && message.request.attributes) {
1090
+ winston.debug("email message.request.attributes: ", message.request.attributes);
1090
1091
 
1091
- winston.verbose("email message.attributes: ", message.attributes);
1092
- // per email touching manca
1093
- if (message.attributes.email_messageId) {
1094
- inReplyTo = message.attributes.email_messageId;
1095
- }
1096
- if (message.attributes.email_references) {
1097
- references = message.attributes.email_references;
1098
- }
1099
- if (message.attributes.email_cc) {
1100
- cc = message.attributes.email_cc;
1101
- }
1102
- winston.verbose("email message.attributes.email_ccStr: "+ message.attributes.email_ccStr);
1103
- if (message.attributes.email_ccStr!=undefined) {
1104
- ccString = message.attributes.email_ccStr;
1105
- winston.verbose("email set ccString");
1106
- }
1092
+ if (message.request.attributes.email_messageId) {
1093
+ inReplyTo = message.request.attributes.email_messageId;
1094
+ }
1095
+ if (message.request.attributes.email_references) {
1096
+ references = message.request.attributes.email_references;
1097
+ }
1098
+
1099
+ if (message.request.attributes.email_cc) {
1100
+ cc = message.request.attributes.email_cc;
1101
+ }
1102
+ winston.debug("email message.request.attributes.email_ccStr: "+ message.request.attributes.email_ccStr);
1103
+ if (message.request.attributes.email_ccStr!=undefined) {
1104
+ ccString = message.request.attributes.email_ccStr;
1105
+ winston.debug("email set ccString");
1106
+ }
1107
1107
  }
1108
1108
  winston.verbose("email inReplyTo: "+ inReplyTo);
1109
1109
  winston.verbose("email references: "+ references);
@@ -121,7 +121,7 @@ class MessageService {
121
121
 
122
122
  return newMessage.save(function(err, savedMessage) {
123
123
  if (err) {
124
- winston.error(err);
124
+ winston.error("Error savig the message", {err:err, message: message, newMessage: newMessage});
125
125
  return reject(err);
126
126
  }
127
127
  winston.verbose("Message created", savedMessage.toObject());
@@ -91,7 +91,66 @@ describe('MessageRoute', () => {
91
91
  });
92
92
 
93
93
 
94
+ // mocha test/messageRoute.js --grep 'createSimpleEmptyText'
94
95
 
96
+ it('createSimpleEmptyText', function (done) {
97
+ // this.timeout(10000);
98
+
99
+ var email = "test-message-create-" + Date.now() + "@email.com";
100
+ var pwd = "pwd";
101
+
102
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
103
+ projectService.createAndReturnProjectAndProjectUser("message-create", savedUser._id).then(function(savedProjectAndPU) {
104
+
105
+ var savedProject = savedProjectAndPU.project;
106
+
107
+ chai.request(server)
108
+ .post('/'+ savedProject._id + '/requests/req123/messages')
109
+ .auth(email, pwd)
110
+ .set('content-type', 'application/json')
111
+ .send({"text":""})
112
+ .end(function(err, res) {
113
+ //console.log("res", res);
114
+ console.log("res.body", res.body);
115
+ res.should.have.status(500);
116
+
117
+ done();
118
+ });
119
+ });
120
+ });
121
+ });
122
+
123
+
124
+
125
+
126
+ // mocha test/messageRoute.js --grep 'createSimpleNoText'
127
+
128
+ it('createSimpleNoText', function (done) {
129
+ // this.timeout(10000);
130
+
131
+ var email = "test-message-create-" + Date.now() + "@email.com";
132
+ var pwd = "pwd";
133
+
134
+ userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
135
+ projectService.createAndReturnProjectAndProjectUser("message-create", savedUser._id).then(function(savedProjectAndPU) {
136
+
137
+ var savedProject = savedProjectAndPU.project;
138
+
139
+ chai.request(server)
140
+ .post('/'+ savedProject._id + '/requests/req123/messages')
141
+ .auth(email, pwd)
142
+ .set('content-type', 'application/json')
143
+ .send({})
144
+ .end(function(err, res) {
145
+ //console.log("res", res);
146
+ console.log("res.body", res.body);
147
+ res.should.have.status(500);
148
+
149
+ done();
150
+ });
151
+ });
152
+ });
153
+ });
95
154
 
96
155
 
97
156
 
@@ -205,7 +205,6 @@ it('createUpperCaseEmail', function (done) {
205
205
  });
206
206
  // mocha test/requestRoute.js --grep 'getbyidWithPartecipatingBots'
207
207
 
208
-
209
208
  it('getbyidWithPartecipatingBots', function (done) {
210
209
  // this.timeout(10000);
211
210
 
@@ -710,7 +710,7 @@ class WebSocketServer {
710
710
  winston.debug('projectuserUpdateKey: ' + projectuserUpdateKey);
711
711
  authEvent.on(projectuserUpdateKey,function(data) {
712
712
  var pu = data.updatedProject_userPopulated;
713
- winston.debug('pu', pu);
713
+ winston.debug('ws pu', pu);
714
714
 
715
715
  //TODO pubSubServer.handlePublishMessage ('/'+pu.id_project+'/project_users/', pu, undefined, true, "UPDATE");
716
716