@tiledesk/tiledesk-server 2.2.8 → 2.2.14

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -1,10 +1,23 @@
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
+
1
14
  # 2.2.8
2
15
  - Public trigger module
3
16
 
4
17
  # 2.2.6
5
18
  - Quota license fix
6
19
 
7
- # 2.2.4
20
+ # 2.2.4 -> PROD
8
21
  - email invitation fix
9
22
 
10
23
  # 2.2.3
@@ -111,7 +124,7 @@
111
124
  # 2.1.40.31
112
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
113
126
 
114
- # 2.1.40.30 -> PROD
127
+ # 2.1.40.30
115
128
  - logfix
116
129
 
117
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.8",
4
+ "version": "2.2.14",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -39,12 +39,12 @@
39
39
  "@tiledesk-ent/tiledesk-server-jwthistory": "^1.1.9",
40
40
  "@tiledesk-ent/tiledesk-server-mt": "^1.1.7",
41
41
  "@tiledesk-ent/tiledesk-server-payments": "^1.1.5",
42
- "@tiledesk-ent/tiledesk-server-queue": "^1.1.10",
42
+ "@tiledesk-ent/tiledesk-server-queue": "^1.1.11",
43
43
  "@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
44
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.78",
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
 
@@ -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
 
@@ -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