@tiledesk/tiledesk-server 2.3.5 → 2.3.7-1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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 +52 -29
- 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 +4 -4
- 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
|