@tiledesk/tiledesk-server 2.4.41 → 2.4.43
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.
- package/CHANGELOG.md +14 -1
- package/package.json +2 -2
- package/routes/auth.js +14 -1
- package/routes/faq.js +12 -0
- package/services/leadService.js +14 -3
- package/test/messageRoute.js +172 -0
package/CHANGELOG.md
CHANGED
@@ -5,9 +5,22 @@
|
|
5
5
|
🚀 IN PRODUCTION 🚀
|
6
6
|
(https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
|
7
7
|
|
8
|
+
|
9
|
+
# 2.4.42
|
10
|
+
- createIfNotExistsWithLeadId now update the lead email if jwt email changes
|
11
|
+
|
12
|
+
# 2.4.41
|
13
|
+
- Whatsapp updates
|
14
|
+
|
15
|
+
# 2.4.40
|
16
|
+
- botSubscriptionNotifier and botEvent queued disabled
|
17
|
+
- added lead.create to the queue
|
18
|
+
- queued scheduler (close chat)
|
19
|
+
- added chat21 channel, cache, rules
|
20
|
+
|
8
21
|
# 2.4.39
|
9
22
|
- Queued botSubscriptionNotifier
|
10
|
-
- added lead.create to the queue
|
23
|
+
- added lead.create to the queue
|
11
24
|
- @tiledesk/tiledesk-tybot-connector: 0.1.89
|
12
25
|
- jobsManager.listen(); //listen after pubmodules to enabled queued *.queueEnabled events
|
13
26
|
|
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.
|
4
|
+
"version": "2.4.43",
|
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.
|
47
|
+
"@tiledesk/tiledesk-tybot-connector": "^0.1.91",
|
48
48
|
"@tiledesk/tiledesk-whatsapp-connector": "^0.1.51",
|
49
49
|
"amqplib": "^0.5.5",
|
50
50
|
"app-root-path": "^3.0.0",
|
package/routes/auth.js
CHANGED
@@ -458,13 +458,23 @@ function (req, res) {
|
|
458
458
|
|
459
459
|
// http://localhost:3000/auth/google?redirect_url=%2F%23%2Fproject%2F6452281f6d68c5f419c1c577%2Fhome
|
460
460
|
|
461
|
+
// http://localhost:3000/auth/google?redirect_url=%23%2Fcreate-project-gs
|
461
462
|
|
463
|
+
// http://localhost:3000/auth/google?forced_redirect_url=https%3A%2F%2Fpanel.tiledesk.com%2Fv3%2Fchat%2F%23conversation-detail%3Ffrom%3Dgoogle
|
464
|
+
|
465
|
+
// https://tiledesk-server-pre.herokuapp.com/auth/google?redirect_url=%23%2Fcreate-project-gs
|
466
|
+
|
467
|
+
// https://tiledesk-server-pre.herokuapp.com/auth/google
|
462
468
|
|
463
469
|
// Redirect the user to the Google signin page</em>
|
464
470
|
// router.get("/google", passport.authenticate("google", { scope: ["email", "profile"] }));
|
465
471
|
router.get("/google", function(req,res,next){
|
466
472
|
winston.info("redirect_url: "+ req.query.redirect_url );
|
467
473
|
req.session.redirect_url = req.query.redirect_url;
|
474
|
+
|
475
|
+
winston.info("forced_redirect_url: "+ req.query.forced_redirect_url );
|
476
|
+
req.session.forced_redirect_url = req.query.forced_redirect_url;
|
477
|
+
|
468
478
|
// req._toParam = 'Hello';
|
469
479
|
passport.authenticate(
|
470
480
|
// 'google', { scope : ["email", "profile"], state: base64url(JSON.stringify({blah: 'text'})) } //custom redirect_url req.query.state
|
@@ -487,7 +497,7 @@ router.get("/google/callback", passport.authenticate("google", { session: false
|
|
487
497
|
// winston.info("req._toParam: "+ req._toParam);
|
488
498
|
// winston.info("req.query.redirect_url: "+ req.query.redirect_url);
|
489
499
|
// winston.info("req.query.state: "+ req.query.state);
|
490
|
-
winston.
|
500
|
+
winston.debug("req.session.redirect_url: "+ req.session.redirect_url);
|
491
501
|
|
492
502
|
|
493
503
|
var userJson = user.toObject();
|
@@ -526,6 +536,9 @@ router.get("/google/callback", passport.authenticate("google", { session: false
|
|
526
536
|
|
527
537
|
var url = dashboard_base_url+homeurl+"?token=JWT "+token;
|
528
538
|
|
539
|
+
if (req.session.forced_redirect_url) {
|
540
|
+
url = req.session.forced_redirect_url+"&token=JWT "+token;
|
541
|
+
}
|
529
542
|
|
530
543
|
winston.info("Google Redirect: "+ url);
|
531
544
|
|
package/routes/faq.js
CHANGED
@@ -28,6 +28,7 @@ router.post('/uploadcsv', upload.single('uploadFile'), function (req, res, next)
|
|
28
28
|
winston.debug('delimiter: ' + delimiter);
|
29
29
|
|
30
30
|
var csv = req.file.buffer.toString('utf8');
|
31
|
+
winston.debug("--> csv: ", csv)
|
31
32
|
// winston.debug(' -> CSV STRING ', csv);
|
32
33
|
|
33
34
|
// res.json({ success: true, msg: 'Importing CSV...' });
|
@@ -51,6 +52,8 @@ router.post('/uploadcsv', upload.single('uploadFile'), function (req, res, next)
|
|
51
52
|
.on("data", function (data) {
|
52
53
|
winston.debug('PARSED CSV ', data);
|
53
54
|
|
55
|
+
winston.debug('--> PARSED CSV ', data);
|
56
|
+
|
54
57
|
var question = data[0]
|
55
58
|
//var answer = data[1]
|
56
59
|
var intent_id = data[2];
|
@@ -104,6 +107,8 @@ router.post('/uploadcsv', upload.single('uploadFile'), function (req, res, next)
|
|
104
107
|
updatedBy: req.user.id
|
105
108
|
});
|
106
109
|
|
110
|
+
winston.debug("--> newFaq: ", JSON.stringify(newFaq, null, 2));
|
111
|
+
|
107
112
|
newFaq.save(function (err, savedFaq) {
|
108
113
|
if (err) {
|
109
114
|
winston.error('--- > ERROR uploadcsv', err)
|
@@ -194,6 +199,7 @@ router.post('/', function (req, res) {
|
|
194
199
|
|
195
200
|
router.patch('/:faqid/attributes', function (req, res) {
|
196
201
|
let data = req.body;
|
202
|
+
winston.debug("data: ", data);
|
197
203
|
|
198
204
|
Faq.findById(req.params.faqid, function (err, updatedFaq) {
|
199
205
|
if (err) {
|
@@ -206,6 +212,7 @@ router.patch('/:faqid/attributes', function (req, res) {
|
|
206
212
|
}
|
207
213
|
|
208
214
|
if (!updatedFaq.attributes) {
|
215
|
+
winston.debug("empty attributes");
|
209
216
|
winston.debug("empty attributes");
|
210
217
|
updatedFaq.attributes = {};
|
211
218
|
}
|
@@ -218,6 +225,9 @@ router.patch('/:faqid/attributes', function (req, res) {
|
|
218
225
|
updatedFaq.attributes[key] = val;
|
219
226
|
})
|
220
227
|
|
228
|
+
winston.debug("updatedFaq: ", updatedFaq);
|
229
|
+
winston.debug("updatedFaq attributes: ", updatedFaq.attributes);
|
230
|
+
|
221
231
|
winston.debug("updatedBot attributes", updatedFaq.attributes)
|
222
232
|
|
223
233
|
updatedFaq.markModified('attributes');
|
@@ -229,6 +239,8 @@ router.patch('/:faqid/attributes', function (req, res) {
|
|
229
239
|
return res.status(500).send({ success: false, msg: 'Error saving object.' });
|
230
240
|
}
|
231
241
|
|
242
|
+
winston.debug("saved faq attributes", savedFaq.toObject());
|
243
|
+
|
232
244
|
winston.verbose("saved faq attributes", savedFaq.toObject());
|
233
245
|
faqBotEvent.emit('faq.update', savedFaq);
|
234
246
|
res.json(savedFaq);
|
package/services/leadService.js
CHANGED
@@ -5,6 +5,7 @@ const uuidv4 = require('uuid/v4');
|
|
5
5
|
const leadEvent = require('../event/leadEvent');
|
6
6
|
var winston = require('../config/winston');
|
7
7
|
var cacheUtil = require('../utils/cacheUtil');
|
8
|
+
var cacheEnabler = require("../services/cacheEnabler");
|
8
9
|
|
9
10
|
|
10
11
|
class LeadService {
|
@@ -67,8 +68,18 @@ class LeadService {
|
|
67
68
|
if (!lead) {
|
68
69
|
return resolve(that.createWitId(lead_id, fullname, email, id_project, createdBy, attributes, status));
|
69
70
|
}
|
70
|
-
|
71
|
-
|
71
|
+
|
72
|
+
winston.debug("lead.email: " + lead.email);
|
73
|
+
winston.debug("email: " + email);
|
74
|
+
|
75
|
+
if (lead.email == email) {
|
76
|
+
winston.debug("lead already exists createIfNotExistsWithLeadId with the same email");
|
77
|
+
return resolve(lead);
|
78
|
+
} else {
|
79
|
+
winston.debug("lead already exists createIfNotExistsWithLeadId but with different email");
|
80
|
+
return resolve(that.updateWitId(lead_id, fullname, email, id_project, status));
|
81
|
+
}
|
82
|
+
|
72
83
|
|
73
84
|
});
|
74
85
|
});
|
@@ -101,7 +112,7 @@ class LeadService {
|
|
101
112
|
}
|
102
113
|
|
103
114
|
updateWitId(lead_id, fullname, email, id_project, status) {
|
104
|
-
winston.debug("lead_id: "+ lead_id);
|
115
|
+
winston.debug("updateWitId lead_id: "+ lead_id);
|
105
116
|
winston.debug("fullname: "+ fullname);
|
106
117
|
winston.debug("email: "+ email);
|
107
118
|
winston.debug("id_project: "+ id_project);
|
package/test/messageRoute.js
CHANGED
@@ -1431,11 +1431,183 @@ describe('/SendMessageSigninWithCustomToken', () => {
|
|
1431
1431
|
|
1432
1432
|
});
|
1433
1433
|
|
1434
|
+
|
1435
|
+
|
1436
|
+
|
1437
|
+
|
1438
|
+
|
1439
|
+
// mocha test/messageRoute.js --grep 'sendMessageSigninWithCustomTokenModified'
|
1440
|
+
|
1441
|
+
it('sendMessageSigninWithCustomTokenModified', (done) => {
|
1442
|
+
|
1443
|
+
|
1444
|
+
var email = "test-sendmessagesigninwithcustomtokenModified-" + Date.now() + "@email.com";
|
1445
|
+
var pwd = "pwd";
|
1446
|
+
|
1447
|
+
userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
|
1448
|
+
// create(name, createdBy, settings)
|
1449
|
+
projectService.create("test-sendMessageSigninWithCustomTokenModified", savedUser._id).then(function(savedProject) {
|
1450
|
+
|
1451
|
+
chai.request(server)
|
1452
|
+
.post('/'+ savedProject._id + '/keys/generate')
|
1453
|
+
.auth(email, pwd)
|
1454
|
+
.send()
|
1455
|
+
.end((err, res) => {
|
1456
|
+
//console.log("res", res);
|
1457
|
+
console.log("res.body", res.body);
|
1458
|
+
res.should.have.status(200);
|
1459
|
+
res.body.should.be.a('object');
|
1460
|
+
expect(res.body.jwtSecret).to.not.equal(null);
|
1461
|
+
|
1462
|
+
// 'E11000 duplicate key error collection: tiledesk-test.users index: email_1 dup key: { email: "email@email.com" }' }
|
1463
|
+
var externalUserId = "123";
|
1464
|
+
var externalUserObj = {_id: externalUserId, firstname:"andrea", lastname:"leo", email: "email2@email.com"};
|
1465
|
+
|
1466
|
+
console.log("externalUserObj", externalUserObj);
|
1467
|
+
|
1468
|
+
|
1469
|
+
var signOptions = {
|
1470
|
+
subject: 'userexternal',
|
1471
|
+
audience: 'https://tiledesk.com/projects/'+savedProject._id ,
|
1472
|
+
};
|
1473
|
+
|
1474
|
+
|
1475
|
+
var secret = res.body.jwtSecret;
|
1476
|
+
var jwtToken = jwt.sign(externalUserObj, res.body.jwtSecret,signOptions);
|
1477
|
+
|
1478
|
+
console.log("jwtToken", jwtToken);
|
1479
|
+
|
1480
|
+
|
1481
|
+
chai.request(server)
|
1482
|
+
.post('/auth/signinWithCustomToken' )
|
1483
|
+
.set('Authorization', 'JWT '+jwtToken)
|
1484
|
+
//.send({ id_project: savedProject._id})
|
1485
|
+
.send()
|
1486
|
+
.end((err, res) => {
|
1487
|
+
//console.log("res", res);
|
1488
|
+
console.log("res.body", res.body);
|
1489
|
+
res.should.have.status(200);
|
1490
|
+
res.body.should.be.a('object');
|
1491
|
+
expect(res.body.success).to.equal(true);
|
1492
|
+
expect(res.body.user.email).to.equal("email2@email.com");
|
1493
|
+
expect(res.body.user.firstname).to.equal("andrea");
|
1494
|
+
|
1495
|
+
expect(res.body.token).to.not.equal(undefined);
|
1496
|
+
expect(res.body.token).to.equal('JWT '+jwtToken);
|
1497
|
+
|
1498
|
+
|
1499
|
+
chai.request(server)
|
1500
|
+
.post('/'+ savedProject._id + '/requests/sendMessageSigninWithCustomTokenModified/messages')
|
1501
|
+
.set('Authorization', 'JWT '+jwtToken)
|
1502
|
+
.set('content-type', 'application/json')
|
1503
|
+
.send({"text":"text"})
|
1504
|
+
.end(function(err, res) {
|
1505
|
+
//console.log("res", res);
|
1506
|
+
console.log("res.body", res.body);
|
1507
|
+
res.should.have.status(200);
|
1508
|
+
res.body.should.be.a('object');
|
1509
|
+
|
1510
|
+
expect(res.body.sender).to.equal(externalUserId);
|
1511
|
+
// expect(res.body.sender).to.equal(savedProjectAndPU.project_user._id.toString());
|
1512
|
+
// expect(res.body.senderFullname).to.equal("senderFullname");
|
1513
|
+
expect(res.body.recipient).to.equal("sendMessageSigninWithCustomTokenModified");
|
1514
|
+
expect(res.body.text).to.equal("text");
|
1515
|
+
expect(res.body.id_project).to.equal(savedProject._id.toString());
|
1516
|
+
expect(res.body.createdBy).to.equal(externalUserId);
|
1517
|
+
expect(res.body.status).to.equal(0);
|
1518
|
+
|
1519
|
+
expect(res.body.request.request_id).to.equal("sendMessageSigninWithCustomTokenModified");
|
1520
|
+
expect(res.body.request.first_text).to.equal("text");
|
1521
|
+
expect(res.body.request.id_project).to.equal(savedProject._id.toString());
|
1522
|
+
expect(res.body.request.createdBy).to.equal(externalUserId);
|
1523
|
+
|
1524
|
+
// expect(res.body.request.messages_count).to.equal(1);
|
1525
|
+
|
1526
|
+
expect(res.body.request.status).to.equal(200);
|
1527
|
+
expect(res.body.request.snapshot.agents.length).to.equal(1);
|
1528
|
+
expect(res.body.request.participants.length).to.equal(1);
|
1529
|
+
expect(res.body.request.department).to.not.equal(null);
|
1530
|
+
expect(res.body.request.lead).to.not.equal(null);
|
1531
|
+
expect(res.body.request.lead.email).to.equal("email2@email.com");
|
1532
|
+
|
1533
|
+
|
1534
|
+
chai.request(server)
|
1535
|
+
.get('/'+ savedProject._id + '/requests/sendMessageSigninWithCustomTokenModified')
|
1536
|
+
.auth(email, pwd)
|
1537
|
+
.set('content-type', 'application/json')
|
1538
|
+
.end(function(err, res) {
|
1539
|
+
//console.log("res", res);
|
1540
|
+
console.log("res.body", res.body);
|
1541
|
+
expect(res.body.lead.lead_id).to.equal(externalUserId);
|
1542
|
+
expect(res.body.lead.email).to.equal("email2@email.com");
|
1543
|
+
expect(res.body.lead.fullname).to.equal("andrea leo");
|
1544
|
+
expect(res.body.requester.role).to.equal("user");
|
1545
|
+
expect(res.body.requester.uuid_user).to.equal(externalUserId);
|
1546
|
+
expect(res.body.requester.id_user).to.equal(undefined);
|
1547
|
+
|
1548
|
+
|
1549
|
+
|
1550
|
+
|
1551
|
+
externalUserObj.email = "email33@email.com";
|
1552
|
+
|
1553
|
+
jwtToken = jwt.sign(externalUserObj,secret, signOptions);
|
1554
|
+
console.log("jwtToken2", jwtToken);
|
1555
|
+
|
1556
|
+
chai.request(server)
|
1557
|
+
.post('/auth/signinWithCustomToken' )
|
1558
|
+
.set('Authorization', 'JWT '+jwtToken)
|
1559
|
+
//.send({ id_project: savedProject._id})
|
1560
|
+
.send()
|
1561
|
+
.end((err, res) => {
|
1562
|
+
//console.log("res", res);
|
1563
|
+
console.log("res.body", res.body);
|
1564
|
+
res.should.have.status(200);
|
1565
|
+
res.body.should.be.a('object');
|
1566
|
+
expect(res.body.success).to.equal(true);
|
1567
|
+
expect(res.body.user.email).to.equal("email33@email.com");
|
1568
|
+
expect(res.body.user.firstname).to.equal("andrea");
|
1569
|
+
|
1570
|
+
chai.request(server)
|
1571
|
+
.post('/'+ savedProject._id + '/requests/sendMessageSigninWithCustomTokenModified33/messages')
|
1572
|
+
.set('Authorization', 'JWT '+jwtToken)
|
1573
|
+
.set('content-type', 'application/json')
|
1574
|
+
.send({"text":"text"})
|
1575
|
+
.end(function(err, res) {
|
1576
|
+
//console.log("res", res);
|
1577
|
+
console.log("res.body", res.body);
|
1578
|
+
res.should.have.status(200);
|
1579
|
+
res.body.should.be.a('object');
|
1580
|
+
|
1581
|
+
expect(res.body.request.lead.email).to.equal("email33@email.com");
|
1582
|
+
done()
|
1583
|
+
|
1584
|
+
|
1585
|
+
});
|
1586
|
+
|
1587
|
+
|
1588
|
+
});
|
1589
|
+
|
1590
|
+
|
1591
|
+
});
|
1592
|
+
|
1593
|
+
});
|
1594
|
+
});
|
1595
|
+
});
|
1596
|
+
});
|
1597
|
+
});
|
1598
|
+
|
1434
1599
|
});
|
1435
1600
|
|
1436
1601
|
|
1437
1602
|
|
1438
1603
|
|
1604
|
+
});
|
1605
|
+
|
1606
|
+
|
1607
|
+
|
1608
|
+
|
1609
|
+
|
1610
|
+
|
1439
1611
|
|
1440
1612
|
// mocha test/messageRoute.js --grep 'sendMessageSigninAnonym'
|
1441
1613
|
|