@tiledesk/tiledesk-server 2.3.6 → 2.3.7-1.2
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/.github/workflows/docker-community-worker-push-latest.yml +23 -0
- package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
- package/CHANGELOG.md +361 -3
- package/Dockerfile-jobs +31 -0
- package/app.js +62 -69
- package/channels/chat21/chat21Handler.js +37 -6
- package/channels/chat21/chat21WebHook.js +62 -34
- package/channels/chat21/package-lock.json +663 -706
- package/channels/chat21/package.json +2 -2
- package/config/labels/widget.json +337 -136
- package/deploy.sh +2 -0
- package/event/messageEvent.js +110 -9
- package/jobs.js +80 -0
- package/jobsManager.js +47 -0
- package/middleware/has-role.js +10 -3
- package/middleware/ipFilter.js +220 -0
- package/middleware/passport.js +8 -2
- package/models/department.js +1 -1
- package/models/faq.js +77 -25
- package/models/faq_kb.js +19 -0
- package/models/message.js +10 -8
- package/models/project.js +10 -0
- package/models/project_user.js +10 -0
- package/models/request.js +12 -1
- package/package.json +12 -11
- package/pubmodules/activities/activityArchiver.js +216 -90
- package/pubmodules/activities/routes/activity.js +1 -1
- package/pubmodules/apps/index.js +8 -0
- package/pubmodules/apps/listener.js +27 -0
- package/pubmodules/cache/index.js +2 -0
- package/pubmodules/cache/mongoose-cachegoose-fn.js +630 -0
- package/pubmodules/canned/cannedResponse.js +4 -0
- package/pubmodules/canned/cannedResponseRoute.js +10 -5
- package/pubmodules/dialogflow/index.js +10 -0
- package/pubmodules/dialogflow/listener.js +66 -0
- package/pubmodules/emailNotification/requestNotification.js +58 -28
- package/pubmodules/events/eventRoute.js +49 -24
- package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +6 -1
- package/pubmodules/messageTransformer/messageTransformerInterceptor.js +10 -4
- package/pubmodules/pubModulesManager.js +173 -7
- package/pubmodules/queue/index.js +4 -0
- package/pubmodules/queue/reconnect.js +331 -0
- package/pubmodules/queue/reconnectFanout.js +256 -0
- package/pubmodules/rasa/listener.js +5 -5
- package/pubmodules/routing-queue/index.js +3 -0
- package/pubmodules/routing-queue/listener.js +328 -0
- package/pubmodules/rules/conciergeBot.js +2 -2
- package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +6 -1
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +7 -1
- package/pubmodules/tilebot/index.js +11 -0
- package/pubmodules/tilebot/listener.js +85 -0
- package/pubmodules/trigger/rulesTrigger.js +137 -14
- package/pubmodules/trigger/start.js +5 -1
- package/pubmodules/whatsapp/index.js +7 -0
- package/pubmodules/whatsapp/listener.js +32 -0
- package/routes/auth.js +7 -2
- package/routes/campaigns.js +3 -3
- package/routes/department.js +3 -2
- package/routes/email.js +32 -2
- package/routes/faq.js +37 -2
- package/routes/faq_kb.js +496 -133
- package/routes/faqpub.js +5 -0
- package/routes/lead.js +56 -0
- package/routes/message.js +196 -14
- package/routes/messagesRoot.js +39 -0
- package/routes/project.js +76 -4
- package/routes/project_user.js +11 -1
- package/routes/project_user_test.js +19 -0
- package/routes/request.js +134 -30
- package/routes/troubleshooting.js +12 -0
- package/routes/users-util.js +39 -0
- package/routes/users.js +1 -1
- package/routes/widget.js +64 -2
- package/services/BotSubscriptionNotifier.js +5 -0
- package/services/banUserNotifier.js +86 -0
- package/services/cacheEnabler.js +56 -0
- package/services/chatbotService.js +101 -0
- package/services/departmentService.js +25 -3
- package/services/emailService.js +170 -28
- package/services/faqBotHandler.js +2 -3
- package/services/faqService.js +28 -3
- package/services/geoService.js +36 -6
- package/services/labelService.js +1 -1
- package/services/leadService.js +3 -2
- package/services/messageService.js +4 -2
- package/services/modulesManager.js +23 -76
- package/services/operatingHoursService.js +9 -4
- package/services/requestService.js +75 -39
- package/services/subscriptionNotifier.js +9 -4
- package/services/trainingService.js +106 -0
- package/template/email/assignedEmailMessage.html +21 -11
- package/template/email/assignedRequest.html +21 -11
- package/template/email/beenInvitedExistingUser.html +16 -6
- package/template/email/beenInvitedNewUser.html +16 -6
- package/template/email/emailDirect.html +130 -0
- package/template/email/newMessage.html +18 -8
- package/template/email/newMessageFollower.html +22 -12
- package/template/email/passwordChanged.html +15 -5
- package/template/email/pooledEmailMessage.html +21 -11
- package/template/email/pooledRequest.html +20 -10
- package/template/email/resetPassword.html +15 -5
- package/template/email/sendTranscript.html +7 -4
- package/template/email/ticket.html +17 -7
- package/template/email/verify.html +15 -5
- package/test/cannedRoute.js +157 -0
- package/test/chatbot-mock.js +127 -0
- package/test/example-json-intents.txt +1 -0
- package/test/example-json.txt +1 -0
- package/test/example.json +1 -0
- package/test/faqRoute.js +353 -208
- package/test/faqkbRoute.js +669 -64
- package/test/imageRoute.js +1 -1
- package/test/messageRoute.js +387 -5
- package/test/requestRoute.js +6 -6
- package/test/requestService.js +55 -4
- package/test-int/cache-project.js +90 -0
- package/test-int/cache-project_user.js +88 -0
- package/utils/UIDGenerator.js +20 -0
- package/utils/cacheUtil.js +2 -2
- package/utils/orgUtil.js +3 -3
- package/utils/promiseUtil.js +31 -0
- package/utils/recipientEmailUtil.js +66 -0
- package/utils/sendEmailUtil.js +34 -0
- package/utils/sendMessageUtil.js +1 -1
- package/utils/stringUtil.js +12 -0
- package/websocket/webSocketServer.js +33 -10
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
|
|
2
|
+
process.env.NODE_ENV = 'test';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
//Require the dev-dependencies
|
|
6
|
+
let chai = require('chai');
|
|
7
|
+
let chaiHttp = require('chai-http');
|
|
8
|
+
let server = require('../app');
|
|
9
|
+
var projectService = require('../services/projectService');
|
|
10
|
+
var userService = require('../services/userService');
|
|
11
|
+
let should = chai.should();
|
|
12
|
+
var Project_user = require("../models/project_user");
|
|
13
|
+
|
|
14
|
+
var expect = chai.expect;
|
|
15
|
+
var assert = chai.assert;
|
|
16
|
+
|
|
17
|
+
//server client
|
|
18
|
+
var express = require('express');
|
|
19
|
+
const bodyParser = require('body-parser');
|
|
20
|
+
|
|
21
|
+
//end server client
|
|
22
|
+
|
|
23
|
+
chai.use(chaiHttp);
|
|
24
|
+
|
|
25
|
+
describe('Cache', () => {
|
|
26
|
+
|
|
27
|
+
if (process.env.CACHE_ENABLED == "true") {
|
|
28
|
+
|
|
29
|
+
}else {
|
|
30
|
+
console.log("Cache disabled");
|
|
31
|
+
expect(true).to.equal(false);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe('/project_user', () => {
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
// mocha test-int/bot.js --grep 'createSimpleExatMatch'
|
|
38
|
+
it('getCurrentProjectUser', (done) => {
|
|
39
|
+
|
|
40
|
+
var email = "test-bot-" + Date.now() + "@email.com";
|
|
41
|
+
var pwd = "pwd";
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
userService.signup( email ,pwd, "Test Firstname", "Test lastname").then(function(savedUser) {
|
|
46
|
+
projectService.create("test-getCurrentProjectUser", savedUser._id).then(function(savedProject) {
|
|
47
|
+
|
|
48
|
+
chai.request(server)
|
|
49
|
+
.get('/'+ savedProject._id + '/project_users_test/test')
|
|
50
|
+
.auth(email, pwd)
|
|
51
|
+
.set('content-type', 'application/json')
|
|
52
|
+
.send()
|
|
53
|
+
.end((err, res) => {
|
|
54
|
+
console.log("res.body", JSON.stringify(res.body));
|
|
55
|
+
// console.dir("res.body 1", res.body);
|
|
56
|
+
console.log("res.headers", res.headers);
|
|
57
|
+
res.should.have.status(200);
|
|
58
|
+
res.body.should.be.a('object');
|
|
59
|
+
expect(res.body.role).to.equal("owner");
|
|
60
|
+
expect(res.body.isAuthenticated).to.equal(true);
|
|
61
|
+
expect(res.body.id_project).to.equal(savedProject._id.toString());
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
chai.request(server)
|
|
65
|
+
.get('/'+ savedProject._id + '/project_users_test/test')
|
|
66
|
+
.auth(email, pwd)
|
|
67
|
+
.set('content-type', 'application/json') //from cache
|
|
68
|
+
.send()
|
|
69
|
+
.end((err, res) => {
|
|
70
|
+
console.log("res.body", JSON.stringify(res.body));
|
|
71
|
+
// console.dir("res.body 1", res.body);
|
|
72
|
+
console.log("res.headers", res.headers);
|
|
73
|
+
res.should.have.status(200);
|
|
74
|
+
res.body.should.be.a('object');
|
|
75
|
+
expect(res.body.role).to.equal("owner");
|
|
76
|
+
expect(res.body.isAuthenticated).to.equal(true);
|
|
77
|
+
expect(res.body.id_project).to.equal(savedProject._id.toString());
|
|
78
|
+
|
|
79
|
+
done()
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
let stringUtil = require("../utils/stringUtil");
|
|
2
|
+
const uuidv4 = require('uuid/v4');
|
|
3
|
+
|
|
4
|
+
class UIDGenerator {
|
|
5
|
+
|
|
6
|
+
generate() {
|
|
7
|
+
let uid = uuidv4();
|
|
8
|
+
// console.log("uid",uid);
|
|
9
|
+
let uidWithoutChar = stringUtil.replaceAll(uid, "-", "");
|
|
10
|
+
// console.log("uidWithoutChar",uidWithoutChar);
|
|
11
|
+
return uidWithoutChar;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var uidGenerator = new UIDGenerator();
|
|
16
|
+
|
|
17
|
+
module.exports = uidGenerator;
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
package/utils/cacheUtil.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module.exports = {
|
|
2
|
-
defaultTTL: Number(process.env.CACHE_DEFAULT_TTL) ||
|
|
2
|
+
defaultTTL: Number(process.env.CACHE_DEFAULT_TTL) || 300, //5 minutes
|
|
3
3
|
queryTTL: Number(process.env.CACHE_QUERY_TTL) || 30,
|
|
4
|
-
longTTL: Number(process.env.CACHE_LONG_TTL) ||
|
|
4
|
+
longTTL: Number(process.env.CACHE_LONG_TTL) || 3600, //1 hour
|
|
5
5
|
};
|
|
6
6
|
|
package/utils/orgUtil.js
CHANGED
|
@@ -36,10 +36,10 @@ class OrgUtil {
|
|
|
36
36
|
// winston.info("host: "+ host );
|
|
37
37
|
|
|
38
38
|
let origin = req.get('origin');
|
|
39
|
-
winston.
|
|
39
|
+
winston.debug("origin: "+ origin );
|
|
40
40
|
|
|
41
41
|
// winston.info("email: " + email.baseUrl);
|
|
42
|
-
winston.
|
|
42
|
+
winston.debug("this.ORGANIZATION_BASE_URL: " + this.ORGANIZATION_BASE_URL);
|
|
43
43
|
// global.organizationBaseUrl
|
|
44
44
|
// if (host !=email.baseUrl ) {
|
|
45
45
|
if (origin && origin.indexOf(this.ORGANIZATION_BASE_URL)>-1) {
|
|
@@ -49,7 +49,7 @@ class OrgUtil {
|
|
|
49
49
|
winston.info("origin found: "+ origin );
|
|
50
50
|
return origin;
|
|
51
51
|
}
|
|
52
|
-
winston.
|
|
52
|
+
winston.debug("origin not found: "+ origin );
|
|
53
53
|
|
|
54
54
|
// winston.info("host not found: "+ host );
|
|
55
55
|
// if (host.indexOf("localhost1")>-1) {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class PromiseUtil {
|
|
2
|
+
|
|
3
|
+
async doAllSequentually(promises) {
|
|
4
|
+
// return new Promise(async function (resolve, reject) {
|
|
5
|
+
// console.log("promises",promises);
|
|
6
|
+
var values = [];
|
|
7
|
+
for (let i=0; i < promises.length; i++) {
|
|
8
|
+
// console.log("promises[i]",promises[i]);
|
|
9
|
+
|
|
10
|
+
// const val = await
|
|
11
|
+
var value = await promises[i]
|
|
12
|
+
// .then(function(value) {
|
|
13
|
+
// console.log("done promises[i]",value);
|
|
14
|
+
// values.push(value);
|
|
15
|
+
// console.log("values before",values);
|
|
16
|
+
// });
|
|
17
|
+
values.push(value);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
console.log("values",values);
|
|
21
|
+
// return resolve(values);
|
|
22
|
+
|
|
23
|
+
// });
|
|
24
|
+
return values;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var promiseUtil = new PromiseUtil();
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
module.exports = promiseUtil;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
var Project_user = require("../models/project_user");
|
|
2
|
+
var Group = require("../models/group");
|
|
3
|
+
var RoleConstants = require("../models/roleConstants");
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RecipientEmailUtil {
|
|
7
|
+
|
|
8
|
+
iterateProjectUser(project_users) {
|
|
9
|
+
let arr = [];
|
|
10
|
+
if (project_users && project_users.length>0) {
|
|
11
|
+
project_users.forEach(project_user => {
|
|
12
|
+
if (project_user.id_user && project_user.id_user.email) {
|
|
13
|
+
// tonew = tonew + project_user.id_user.email + ", ";
|
|
14
|
+
arr.push(project_user.id_user.email)
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return arr;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async process(to, projectid) {
|
|
22
|
+
|
|
23
|
+
if (to.startsWith('@')) { //mention
|
|
24
|
+
// console.log("startsWith", to);
|
|
25
|
+
|
|
26
|
+
let project_users = await Project_user.find({ id_project: projectid, role: { $in : [RoleConstants.OWNER, RoleConstants.ADMIN]}, status: "active"} ).populate('id_user').exec();
|
|
27
|
+
|
|
28
|
+
let tonewArr = this.iterateProjectUser(project_users);
|
|
29
|
+
|
|
30
|
+
let tonew = tonewArr.toString();
|
|
31
|
+
// console.log("tonew mention", tonew);
|
|
32
|
+
return tonew;
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
}
|
|
37
|
+
if (to.indexOf('@')==-1) { //group
|
|
38
|
+
// console.log("indexOf-1", to);
|
|
39
|
+
let tonewArr = []
|
|
40
|
+
let group = await Group.findOne({name: to, id_project: projectid}).exec();
|
|
41
|
+
if (group) {
|
|
42
|
+
// console.log("group", group);
|
|
43
|
+
let project_users = await Project_user.find({ id_project: projectid, id_user: { $in : group.members}, role: { $in : [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.SUPERVISOR, RoleConstants.AGENT]}, status: "active" }).populate('id_user').exec();
|
|
44
|
+
// console.log("project_users", project_users);
|
|
45
|
+
tonewArr = this.iterateProjectUser(project_users);
|
|
46
|
+
}
|
|
47
|
+
let tonew = tonewArr.toString();
|
|
48
|
+
// console.log("tonew group", tonew);
|
|
49
|
+
return tonew;
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
// console.log("to.indexOf('@')",to.indexOf('@'));
|
|
53
|
+
if (to.indexOf('@')>0) { //standard email
|
|
54
|
+
// console.log("indexOf>0", to);
|
|
55
|
+
// console.log("tonew standard", to);
|
|
56
|
+
|
|
57
|
+
return to;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
var recipientEmailUtil = new RecipientEmailUtil();
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
module.exports = recipientEmailUtil;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
var winston = require('../config/winston');
|
|
2
|
+
const emailService = require("../services/emailService");
|
|
3
|
+
const Project = require("../models/project");
|
|
4
|
+
var handlebars = require('handlebars');
|
|
5
|
+
|
|
6
|
+
class SendEmailUtil {
|
|
7
|
+
async sendEmailDirect(to, text, id_project, recipient, subject, message) {
|
|
8
|
+
|
|
9
|
+
let project = await Project.findById(id_project);
|
|
10
|
+
winston.debug("project", project);
|
|
11
|
+
|
|
12
|
+
winston.debug("text: " + text);
|
|
13
|
+
winston.debug("recipient:"+ recipient);
|
|
14
|
+
winston.debug("to:" + to);
|
|
15
|
+
|
|
16
|
+
var template = handlebars.compile(text);
|
|
17
|
+
|
|
18
|
+
var replacements = {
|
|
19
|
+
message: message,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
var finaltext = template(replacements);
|
|
23
|
+
winston.debug("finaltext:" + finaltext);
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// sendEmailDirect(to, text, project, request_id, subject, tokenQueryString, sourcePage) {
|
|
27
|
+
emailService.sendEmailDirect(to, finaltext, project, recipient, subject, undefined, undefined);
|
|
28
|
+
// emailService.sendEmailDirect(to, text, project, recipient, subject, undefined, undefined);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
var sendEmailUtil = new SendEmailUtil();
|
|
33
|
+
|
|
34
|
+
module.exports = sendEmailUtil;
|
package/utils/sendMessageUtil.js
CHANGED
|
@@ -30,7 +30,7 @@ async send(sender, senderFullname, recipient, text, id_project, createdBy, attri
|
|
|
30
30
|
} else {
|
|
31
31
|
winston.debug("user id: "+sender);
|
|
32
32
|
var user = await User.findById(sender)
|
|
33
|
-
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+sender)
|
|
33
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+sender) //user_cache
|
|
34
34
|
.exec()
|
|
35
35
|
winston.debug("user", user);
|
|
36
36
|
senderFullname = user.fullName;
|
|
@@ -23,7 +23,7 @@ var mongoose = require('mongoose');
|
|
|
23
23
|
const requestConstants = require("../models/requestConstants");
|
|
24
24
|
var RoleConstants = require('../models/roleConstants');
|
|
25
25
|
let configSecret = process.env.GLOBAL_SECRET || config.secret;
|
|
26
|
-
|
|
26
|
+
var cacheEnabler = require("../services/cacheEnabler");
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
var lastRequestsLimit = process.env.WS_HISTORY_REQUESTS_LIMIT || 100;
|
|
@@ -93,7 +93,7 @@ class WebSocketServer {
|
|
|
93
93
|
// winston.debug('ok websocket');
|
|
94
94
|
|
|
95
95
|
User.findOne({_id: identifier, status: 100}, 'email firstname lastname emailverified id')
|
|
96
|
-
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier)
|
|
96
|
+
//@DISABLED_CACHE .cache(cacheUtil.defaultTTL, "users:id:"+identifier) //user_cache
|
|
97
97
|
.exec(function (err, user) {
|
|
98
98
|
|
|
99
99
|
|
|
@@ -169,15 +169,30 @@ class WebSocketServer {
|
|
|
169
169
|
|
|
170
170
|
winston.debug(' req.user._id: '+ req.user);
|
|
171
171
|
|
|
172
|
+
if (!topic) {
|
|
173
|
+
winston.error('WebSocket - Error getting topic. Topic can t be null');
|
|
174
|
+
return reject('WebSocket - Error getting topic. Topic can t be null');
|
|
175
|
+
}
|
|
172
176
|
var urlSub = topic.split('/');
|
|
173
177
|
|
|
178
|
+
if (!urlSub || (urlSub && urlSub.length==0)) {
|
|
179
|
+
winston.error('WebSocket - Error getting topic. Topic is not properly configured');
|
|
180
|
+
return reject('WebSocket - Error getting topic. Topic is not properly configured');
|
|
181
|
+
}
|
|
182
|
+
// Error getting Project Cast to ObjectId failed for value "N7VJlLZ1" (type string) at path "_id" for model "project" {"kind":"ObjectId","path":"_id","reason":{},"stack":"CastError: Cast to ObjectId failed for value \"N7VJlLZ1\" (type string) at path \"_id\" for model \"project\"\n at model.Query.exec (/usr/src/app/node_modules/mongoose/lib/query.js:4498:21)\n at /usr/src/app/websocket/webSocketServer.js:180:14\n at new Promise (<anonymous>)\n at Object.onSubscribeCallback [as onSubscribe] (/usr/src/app/websocket/webSocketServer.js:167:14)\n at PubSub.handleReceivedClientMessage (/usr/src/app/websocket/pubsub.js:358:57)\n at runMicrotasks (<anonymous>)\n at processTicksAndRejections (internal/process/task_queues.js:97:5)","stringValue":"\"N7VJlLZ1\"","value":"N7VJlLZ1","valueType":"string"}
|
|
183
|
+
|
|
174
184
|
var projectId = urlSub[1];
|
|
175
185
|
winston.debug('projectId: '+projectId);
|
|
176
186
|
|
|
177
187
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
.
|
|
188
|
+
let q = Project.findOne({ _id: projectId, status: 100})
|
|
189
|
+
|
|
190
|
+
if (cacheEnabler.project) {
|
|
191
|
+
q.cache(cacheUtil.defaultTTL, "projects:id:"+projectId) //project_cache
|
|
192
|
+
winston.debug('project cache enabled');
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return q.exec(function(err, project) {
|
|
181
196
|
if (err) {
|
|
182
197
|
winston.error('WebSocket - Error getting Project', err);
|
|
183
198
|
return reject(err);
|
|
@@ -590,11 +605,12 @@ class WebSocketServer {
|
|
|
590
605
|
winston.debug('messageCreateKey: ' + messageCreateKey);
|
|
591
606
|
|
|
592
607
|
messageEvent.on(messageCreateKey, function (message) {
|
|
608
|
+
setImmediate(async () => {
|
|
593
609
|
winston.debug('messageEvent websocket server: '+messageCreateKey, message);
|
|
594
610
|
if (message.request) {
|
|
595
611
|
pubSubServer.handlePublishMessage ('/'+message.id_project+'/requests/'+message.request.request_id+'/messages', message, undefined, true, "CREATE");
|
|
596
612
|
}
|
|
597
|
-
|
|
613
|
+
});
|
|
598
614
|
});
|
|
599
615
|
|
|
600
616
|
// var reconnect = require('./reconnect');
|
|
@@ -604,7 +620,8 @@ class WebSocketServer {
|
|
|
604
620
|
}
|
|
605
621
|
winston.debug('requestCreateKey: ' + requestCreateKey);
|
|
606
622
|
requestEvent.on(requestCreateKey, async function (request) {
|
|
607
|
-
|
|
623
|
+
setImmediate(async () => {
|
|
624
|
+
|
|
608
625
|
winston.debug('requestEvent websocket server: '+requestCreateKey, request);
|
|
609
626
|
// TODO scarta riquesta se agente (req.user._id) non sta ne in participants ne in agents
|
|
610
627
|
|
|
@@ -643,7 +660,7 @@ class WebSocketServer {
|
|
|
643
660
|
pubSubServer.handlePublishMessage ('/'+request.id_project+'/requests', request, undefined, true, "CREATE");
|
|
644
661
|
pubSubServer.handlePublishMessage ('/'+request.id_project+'/requests/'+request.request_id, request, undefined, true, "CREATE");
|
|
645
662
|
}
|
|
646
|
-
|
|
663
|
+
});
|
|
647
664
|
});
|
|
648
665
|
|
|
649
666
|
var requestUpdateKey = 'request.update';
|
|
@@ -653,6 +670,8 @@ class WebSocketServer {
|
|
|
653
670
|
|
|
654
671
|
winston.debug('requestUpdateKey: ' + requestUpdateKey);
|
|
655
672
|
requestEvent.on(requestUpdateKey, async function(request) {
|
|
673
|
+
setImmediate(async () => {
|
|
674
|
+
|
|
656
675
|
// TODO setImmediate(() => {
|
|
657
676
|
winston.debug('requestEvent websocket server: '+requestUpdateKey, request);
|
|
658
677
|
if (request.preflight===false && request.status > requestConstants.TEMP) {
|
|
@@ -694,7 +713,7 @@ class WebSocketServer {
|
|
|
694
713
|
pubSubServer.handlePublishMessage ('/'+request.id_project+'/requests', requestJSON, undefined, true, "UPDATE");
|
|
695
714
|
pubSubServer.handlePublishMessage ('/'+request.id_project+'/requests/'+request.request_id, requestJSON, undefined, true, "UPDATE");
|
|
696
715
|
}
|
|
697
|
-
|
|
716
|
+
});
|
|
698
717
|
});
|
|
699
718
|
|
|
700
719
|
|
|
@@ -709,6 +728,8 @@ class WebSocketServer {
|
|
|
709
728
|
}
|
|
710
729
|
winston.debug('projectuserUpdateKey: ' + projectuserUpdateKey);
|
|
711
730
|
authEvent.on(projectuserUpdateKey,function(data) {
|
|
731
|
+
setImmediate(async () => {
|
|
732
|
+
|
|
712
733
|
var pu = data.updatedProject_userPopulated;
|
|
713
734
|
winston.debug('ws pu', pu);
|
|
714
735
|
|
|
@@ -724,7 +745,7 @@ class WebSocketServer {
|
|
|
724
745
|
}
|
|
725
746
|
winston.debug('userId:'+ userId);
|
|
726
747
|
pubSubServer.handlePublishMessage ('/'+pu.id_project+'/project_users/users/'+userId, pu, undefined, true, "UPDATE");
|
|
727
|
-
|
|
748
|
+
});
|
|
728
749
|
});
|
|
729
750
|
|
|
730
751
|
|
|
@@ -735,6 +756,7 @@ class WebSocketServer {
|
|
|
735
756
|
}
|
|
736
757
|
winston.debug('eventEmitKey: ' + eventEmitKey);
|
|
737
758
|
eventEvent.on(eventEmitKey,function(event) {
|
|
759
|
+
setImmediate(async () => {
|
|
738
760
|
winston.debug('event', event);
|
|
739
761
|
if (event.project_user === undefined) {
|
|
740
762
|
//with "faqbot.answer_not_found" project_user is undefined but it's ok
|
|
@@ -743,6 +765,7 @@ class WebSocketServer {
|
|
|
743
765
|
}
|
|
744
766
|
pubSubServer.handlePublishMessage ('/'+event.id_project+'/events/'+event.project_user._id, event, undefined, true, "CREATE");
|
|
745
767
|
});
|
|
768
|
+
});
|
|
746
769
|
|
|
747
770
|
|
|
748
771
|
// https://github.com/websockets/ws/blob/master/examples/express-session-parse/index.js
|