@tiledesk/tiledesk-server 2.3.75 → 2.3.76

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.
@@ -33,9 +33,26 @@ const maskOptions = {
33
33
  unmaskedEndDigits : 3 // Should be positive Integer
34
34
  };
35
35
 
36
+ var alg = process.env.GLOBAL_SECRET_ALGORITHM;
37
+ winston.info('Authentication Global Algorithm : ' + alg);
36
38
 
37
- var configSecret = process.env.GLOBAL_SECRET_OR_PUB_KEY || process.env.GLOBAL_SECRET || config.secret;
39
+ // TODO STAMPA ANCHE PUBLIC
38
40
 
41
+ var configSecret = process.env.GLOBAL_SECRET || config.secret;
42
+
43
+ var pKey = process.env.GLOBAL_SECRET_OR_PUB_KEY;
44
+ // console.log("pKey",pKey);
45
+
46
+ if (pKey) {
47
+ configSecret = pKey.replace(/\\n/g, '\n');
48
+ }
49
+ // console.log("configSecret",configSecret);
50
+ // if (process.env.GLOBAL_SECRET_OR_PUB_KEY) {
51
+ // console.log("GLOBAL_SECRET_OR_PUB_KEY defined");
52
+
53
+ // }else {
54
+ // console.log("GLOBAL_SECRET_OR_PUB_KEY undefined");
55
+ // }
39
56
 
40
57
  var maskedconfigSecret = MaskData.maskPhone(configSecret, maskOptions);
41
58
  winston.info('Authentication Global Secret : ' + maskedconfigSecret);
package/models/faq_kb.js CHANGED
@@ -84,7 +84,10 @@ var Faq_kbSchema = new Schema({
84
84
  type: String,
85
85
  required: false,
86
86
  default: 'none'
87
- }
87
+ },
88
+ tags: [{
89
+ type: String
90
+ }]
88
91
  },{
89
92
  timestamps: true
90
93
  }
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.3.75",
4
+ "version": "2.3.76",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -37,14 +37,15 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@tiledesk/tiledesk-apps": "^1.0.12",
40
- "@tiledesk/tiledesk-whatsapp-connector": "^0.1.19",
41
- "@tiledesk/tiledesk-kaleyra-proxy": "^0.1.6",
42
40
  "@tiledesk/tiledesk-chat21-app": "^1.1.7",
43
41
  "@tiledesk/tiledesk-chatbot-util": "^0.8.33",
42
+ "@tiledesk/tiledesk-dialogflow-connector": "^1.8.3",
44
43
  "@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
44
+ "@tiledesk/tiledesk-kaleyra-proxy": "^0.1.6",
45
45
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
46
- "@tiledesk/tiledesk-tybot-connector": "^0.1.51",
47
- "@tiledesk/tiledesk-dialogflow-connector": "^1.8.3",
46
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.53",
47
+ "@tiledesk/tiledesk-whatsapp-connector": "^0.1.19",
48
+ "amqplib": "^0.5.5",
48
49
  "app-root-path": "^3.0.0",
49
50
  "bcrypt-nodejs": "0.0.3",
50
51
  "body-parser": "^1.20.0",
@@ -54,7 +55,6 @@
54
55
  "csv-express": "^1.2.2",
55
56
  "debug": "^4.3.4",
56
57
  "dotenv": "^8.6.0",
57
- "amqplib": "^0.5.5",
58
58
  "email-templates": "^8.1.0",
59
59
  "eventemitter2": "^6.4.4",
60
60
  "express": "^4.17.3",
@@ -64,6 +64,7 @@
64
64
  "fast-csv": "^4.3.6",
65
65
  "geoip-lite": "^1.4.5",
66
66
  "handlebars": "^4.7.7",
67
+ "handlebars-dateformat": "^1.1.3",
67
68
  "html-entities": "^2.3.3",
68
69
  "http": "0.0.0",
69
70
  "immutable": "^4.1.0",
@@ -50,6 +50,7 @@ class Listener {
50
50
  if (err) {
51
51
  return winston.error('error saving faqkb dialogflow ', err)
52
52
  }
53
+ botEvent.emit("faqbot.update",savedFaq_kb); //cache invalidation
53
54
  winston.verbose('Saved faqkb dialogflow', savedFaq_kb.toObject())
54
55
  });
55
56
  }
@@ -24,7 +24,16 @@ var configGlobal = require('../../config/global');
24
24
 
25
25
  var widgetConfig = require('../../config/widget');
26
26
  var widgetTestLocation = process.env.WIDGET_TEST_LOCATION || widgetConfig.testLocation;
27
- let configSecret = process.env.GLOBAL_SECRET_OR_PRIVATE_KEY || process.env.GLOBAL_SECRET || config.secret;
27
+
28
+
29
+ let configSecret = process.env.GLOBAL_SECRET || config.secret;
30
+
31
+ var pKey = process.env.GLOBAL_SECRET_OR_PRIVATE_KEY;
32
+ // console.log("pKey",pKey);
33
+
34
+ if (pKey) {
35
+ configSecret = pKey.replace(/\\n/g, '\n');
36
+ }
28
37
 
29
38
  let apiUrl = process.env.API_URL || configGlobal.apiUrl;
30
39
  winston.debug('********* RequestNotification apiUrl: ' + apiUrl);
@@ -56,6 +56,7 @@ class Listener {
56
56
  if (err) {
57
57
  return winston.error('error saving faqkb rasa ', err)
58
58
  }
59
+ botEvent.emit("faqbot.update",savedFaq_kb); //cache invalidation
59
60
  winston.verbose('Saved faqkb rasa', savedFaq_kb.toObject())
60
61
  });
61
62
  }
@@ -69,6 +69,7 @@ class Listener {
69
69
  if (err) {
70
70
  return winston.error('error saving faqkb tilebot ', err)
71
71
  }
72
+ botEvent.emit("faqbot.update",savedFaq_kb); //cache invalidation
72
73
  winston.verbose('Saved faqkb tilebot', savedFaq_kb.toObject())
73
74
  });
74
75
  }
package/routes/auth.js CHANGED
@@ -24,7 +24,15 @@ var validtoken = require('../middleware/valid-token');
24
24
  var PendingInvitation = require("../models/pending-invitation");
25
25
  const { check, validationResult } = require('express-validator');
26
26
  var UserUtil = require('../utils/userUtil');
27
- let configSecret = process.env.GLOBAL_SECRET_OR_PRIVATE_KEY || process.env.GLOBAL_SECRET || config.secret;
27
+
28
+ let configSecret = process.env.GLOBAL_SECRET || config.secret;
29
+ var pKey = process.env.GLOBAL_SECRET_OR_PRIVATE_KEY;
30
+ // console.log("pKey",pKey);
31
+
32
+ if (pKey) {
33
+ configSecret = pKey.replace(/\\n/g, '\n');
34
+ }
35
+
28
36
  // const fs = require('fs');
29
37
  // var configSecret = fs.readFileSync('private.key');
30
38
 
@@ -540,7 +548,7 @@ router.put('/requestresetpsw', function (req, res) {
540
548
  emailService.sendPasswordResetRequestEmail(updatedUser.email, updatedUser.resetpswrequestid, updatedUser.firstname, updatedUser.lastname);
541
549
 
542
550
 
543
-
551
+ // TODO emit user.update?
544
552
  authEvent.emit('user.requestresetpassword', {updatedUser:updatedUser, req:req});
545
553
 
546
554
 
@@ -598,7 +606,7 @@ router.put('/resetpsw/:resetpswrequestid', function (req, res) {
598
606
 
599
607
  emailService.sendYourPswHasBeenChangedEmail(saveUser.email, saveUser.firstname, saveUser.lastname);
600
608
 
601
-
609
+ // TODO emit user.update?
602
610
  authEvent.emit('user.resetpassword', {saveUser:saveUser, req:req});
603
611
 
604
612
 
package/routes/faq_kb.js CHANGED
@@ -12,6 +12,7 @@ const { forEach } = require('lodash');
12
12
  var multer = require('multer')
13
13
  var upload = multer()
14
14
  var configGlobal = require('../config/global');
15
+ const faq = require('../models/faq');
15
16
 
16
17
  let chatbot_templates_api_url = process.env.CHATBOT_TEMPLATES_API_URL
17
18
 
@@ -250,6 +251,10 @@ router.put('/:faq_kbid', function (req, res) {
250
251
  update.intentsEngine = req.body.intentsEngine;
251
252
  }
252
253
 
254
+ if (req.body.tags != undefined) {
255
+ update.tags = req.body.tags;
256
+ }
257
+
253
258
  Faq_kb.findByIdAndUpdate(req.params.faq_kbid, update, { new: true, upsert: true }, function (err, updatedFaq_kb) {
254
259
  if (err) {
255
260
  return res.status(500).send({ success: false, msg: 'Error updating object.' });
@@ -314,6 +319,7 @@ router.delete('/:faq_kbid', function (req, res) {
314
319
 
315
320
  winston.debug(req.body);
316
321
 
322
+
317
323
  Faq_kb.remove({ _id: req.params.faq_kbid }, function (err, faq_kb) {
318
324
  if (err) {
319
325
  return res.status(500).send({ success: false, msg: 'Error deleting object.' });
@@ -475,6 +481,7 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), (req, res) =>
475
481
  id_project: req.projectid,
476
482
  createdBy: req.user.id,
477
483
  intent_display_name: intent.intent_display_name,
484
+ intent_id: intent.intent_id,
478
485
  question: intent.question,
479
486
  answer: intent.answer,
480
487
  reply: intent.reply,
@@ -524,7 +531,7 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), (req, res) =>
524
531
  } else {
525
532
 
526
533
  if (req.query.create && req.query.create == 'true') {
527
- faqService.create(json.name, undefined, req.projectid, req.user.id, "tilebot", json.description, json.webhook_url, json.webhook_enabled, json.language, undefined, undefined, undefined).then((savedFaq_kb) => {
534
+ faqService.create(json.name, undefined, req.projectid, req.user.id, "tilebot", json.description, json.webhook_url, json.webhook_enabled, json.language, undefined, undefined, undefined, json.attributes).then((savedFaq_kb) => {
528
535
  winston.debug("saved (and imported) faq kb: ", savedFaq_kb);
529
536
  botEvent.emit('faqbot.create', savedFaq_kb);
530
537
 
@@ -535,6 +542,7 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), (req, res) =>
535
542
  id_project: req.projectid,
536
543
  createdBy: req.user.id,
537
544
  intent_display_name: intent.intent_display_name,
545
+ intent_id: intent.intent_id,
538
546
  question: intent.question,
539
547
  answer: intent.answer,
540
548
  reply: intent.reply,
@@ -617,6 +625,9 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), (req, res) =>
617
625
  if (json.description) {
618
626
  faq_kb.description = json.description;
619
627
  }
628
+ if (json.attributes) {
629
+ faq_kb.attributes = json.attributes;
630
+ }
620
631
 
621
632
  Faq_kb.findByIdAndUpdate(id_faq_kb, faq_kb, { new: true }, (err, updatedFaq_kb) => {
622
633
  if (err) {
@@ -632,6 +643,7 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), (req, res) =>
632
643
  id_project: req.projectid,
633
644
  createdBy: req.user.id,
634
645
  intent_display_name: intent.intent_display_name,
646
+ intent_id: intent.intent_id,
635
647
  question: intent.question,
636
648
  answer: intent.answer,
637
649
  reply: intent.reply,
@@ -687,7 +699,6 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), (req, res) =>
687
699
  }
688
700
 
689
701
  }
690
-
691
702
  })
692
703
 
693
704
  router.get('/exportjson/:id_faq_kb', (req, res) => {
@@ -704,10 +715,10 @@ router.get('/exportjson/:id_faq_kb', (req, res) => {
704
715
  } else {
705
716
  winston.debug('FAQ-KB: ', faq_kb)
706
717
 
707
-
708
718
  faqService.getAll(id_faq_kb).then((faqs) => {
709
719
 
710
- const intents = faqs.map(({ _id, id_project, topic, status, id_faq_kb, createdBy, intent_id, createdAt, updatedAt, __v, ...keepAttrs }) => keepAttrs)
720
+ // delete from exclude map intent_id
721
+ const intents = faqs.map(({ _id, id_project, topic, status, id_faq_kb, createdBy, createdAt, updatedAt, __v, ...keepAttrs }) => keepAttrs)
711
722
 
712
723
  let json = {
713
724
  webhook_enabled: faq_kb.webhook_enabled,
@@ -715,6 +726,7 @@ router.get('/exportjson/:id_faq_kb', (req, res) => {
715
726
  language: faq_kb.language,
716
727
  name: faq_kb.name,
717
728
  description: faq_kb.description,
729
+ attributes: faq_kb.attributes,
718
730
  intents: intents
719
731
  }
720
732
 
package/routes/images.js CHANGED
@@ -192,11 +192,11 @@ uploadAvatar.single('file'), (req, res, next) => {
192
192
 
193
193
 
194
194
  var destinationFolder = 'uploads/users/' + userid + "/images/";
195
- winston.info("destinationFolder:"+destinationFolder);
195
+ winston.debug("destinationFolder:"+destinationFolder);
196
196
 
197
197
  var thumFilename = destinationFolder+'thumbnails_200_200-photo.jpg';
198
198
 
199
- winston.info("req.file.filename:"+req.file.filename);
199
+ winston.debug("req.file.filename:"+req.file.filename);
200
200
  fileService.getFileDataAsBuffer(req.file.filename).then(function(buffer) {
201
201
 
202
202
  sharp(buffer).resize(200, 200).toBuffer((err, resizeImage, info) => {
@@ -8,7 +8,7 @@ const ActionsConstants = require('../models/actionsConstants');
8
8
  class FaqService {
9
9
 
10
10
 
11
- create(name, url, projectid, user_id, type, description, webhook_url, webhook_enabled, language, template, mainCategory, intentsEngine) {
11
+ create(name, url, projectid, user_id, type, description, webhook_url, webhook_enabled, language, template, mainCategory, intentsEngine, attributes) {
12
12
  var that = this;
13
13
  return new Promise(function (resolve, reject) {
14
14
 
@@ -28,7 +28,8 @@ class FaqService {
28
28
  intentsEngine: intentsEngine,
29
29
  trashed: false,
30
30
  createdBy: user_id,
31
- updatedBy: user_id
31
+ updatedBy: user_id,
32
+ attributes: attributes
32
33
  });
33
34
 
34
35
 
@@ -101,9 +102,55 @@ class FaqService {
101
102
 
102
103
  if (template==="blank") {
103
104
 
105
+ // faqsArray = [
106
+ // { 'question': '\\start', 'answer': 'Hello', 'intent_display_name': 'start', 'topic': 'internal' },
107
+ // { 'question': 'defaultFallback', 'answer': 'I can not provide an adequate answer. Write a new question or talk to a human agent.\n* Back to start tdAction:start\n* See the docs https://docs.tiledesk.com/\n* 👨🏻‍🦰 I want an agent', 'intent_display_name': 'defaultFallback', 'topic': 'internal' }, //TODO se metto spazio n * nn va
108
+ // ]
104
109
  faqsArray = [
105
- { 'question': '\\start', 'answer': 'Hello', 'intent_display_name': 'start', 'topic': 'internal' },
106
- { 'question': 'defaultFallback', 'answer': 'I can not provide an adequate answer. Write a new question or talk to a human agent.\n* Back to start tdAction:start\n* See the docs https://docs.tiledesk.com/\n* 👨🏻‍🦰 I want an agent', 'intent_display_name': 'defaultFallback', 'topic': 'internal' }, //TODO se metto spazio n * nn va
110
+ {
111
+ 'question': '\\start',
112
+ "actions" : [
113
+ {
114
+ "_tdActionType" : "reply",
115
+ "text" : "Hi, how can I help you?",
116
+ "attributes" : {
117
+ "commands" : [
118
+ {
119
+ "type" : "message",
120
+ "message" : {
121
+ "type" : "text",
122
+ "text" : "Hi, how can I help you?"
123
+ }
124
+ }
125
+ ]
126
+ }
127
+ }
128
+ ],
129
+ 'intent_display_name': 'start',
130
+ 'topic': 'internal'
131
+ },
132
+ {
133
+ 'question': 'defaultFallback',
134
+ "actions" : [
135
+ {
136
+ "_tdActionType" : "reply",
137
+ "text" : "I didn't understand. Can you rephrase your question?",
138
+ "attributes" : {
139
+ "commands" : [
140
+ {
141
+ "type" : "message",
142
+ "message" : {
143
+ "type" : "text",
144
+ "text" : "I didn't understand. Can you rephrase your question?"
145
+ }
146
+ }
147
+ ]
148
+ }
149
+ }
150
+ ],
151
+ 'intent_display_name': 'defaultFallback',
152
+ 'topic': 'internal'
153
+ }, //TODO se metto spazio n * nn va
107
154
  ]
108
155
 
109
156
  }
@@ -92,7 +92,15 @@ class SubscriptionNotifier {
92
92
  signOptions.algorithm = alg;
93
93
  }
94
94
 
95
- secret = process.env.GLOBAL_SECRET_OR_PRIVATE_KEY || process.env.GLOBAL_SECRET || config.secret;
95
+ secret = process.env.GLOBAL_SECRET || config.secret;
96
+ var pKey = process.env.GLOBAL_SECRET_OR_PRIVATE_KEY;
97
+ // console.log("pKey",pKey);
98
+
99
+ if (pKey) {
100
+ secret = pKey.replace(/\\n/g, '\n');
101
+ }
102
+
103
+
96
104
  }
97
105
 
98
106
  var token = jwt.sign(sJson, secret, signOptions); //priv_jwt pp_jwt
@@ -22,7 +22,16 @@ var cacheUtil = require('../utils/cacheUtil');
22
22
  var mongoose = require('mongoose');
23
23
  const requestConstants = require("../models/requestConstants");
24
24
  var RoleConstants = require('../models/roleConstants');
25
- let configSecretOrPubicKay = process.env.GLOBAL_SECRET_OR_PUB_KEY || process.env.GLOBAL_SECRET || config.secret;
25
+
26
+ let configSecretOrPubicKay = process.env.GLOBAL_SECRET || config.secret;
27
+
28
+ var pKey = process.env.GLOBAL_SECRET_OR_PUB_KEY;
29
+ // console.log("pKey",pKey);
30
+
31
+ if (pKey) {
32
+ configSecretOrPubicKay = pKey.replace(/\\n/g, '\n');
33
+ }
34
+
26
35
  var cacheEnabler = require("../services/cacheEnabler");
27
36
 
28
37
 
@@ -92,7 +101,7 @@ class WebSocketServer {
92
101
  // winston.debug('hasRoleAsPromise project_user',project_user);
93
102
  // winston.debug('ok websocket');
94
103
 
95
- User.findOne({_id: identifier, status: 100}, 'email firstname lastname emailverified id')
104
+ User.findOne({_id: identifier, status: 100}, 'email firstname lastname emailverified id') //TODO user_cache_here ma attento select.. ATTENTO SERVER SELECT??
96
105
  //@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier) //user_cache
97
106
  .exec(function (err, user) {
98
107