@tiledesk/tiledesk-server 2.3.17 → 2.3.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-chat21-app",
3
3
  "description": "The Tiledesk Chat21 module",
4
- "version": "1.1.4",
4
+ "version": "1.1.7",
5
5
  "private": false,
6
6
  "author": "Andrea Leo - Frontiere21 SRL",
7
7
  "license": "AGPL-3.0",
@@ -11,7 +11,7 @@
11
11
  "url": "https://github.com/Tiledesk/tiledesk-server"
12
12
  },
13
13
  "dependencies": {
14
- "@chat21/chat21-node-sdk": "^1.1.4",
14
+ "@chat21/chat21-node-sdk": "^1.1.7",
15
15
  "winston": "^3.3.3",
16
16
  "firebase-admin": "^9.5.0"
17
17
  },
@@ -37,6 +37,9 @@ var TagSchema = require("../models/tag");
37
37
  index: true
38
38
  // required: true
39
39
  },
40
+ profileStatus: {
41
+ type: String,
42
+ },
40
43
  presence: PresenceSchema,
41
44
  attributes: {
42
45
  type: Object,
@@ -108,5 +111,6 @@ Project_userSchema.virtual('isAuthenticated').get(function () {
108
111
  // Project_user.find({ id_project: projectid, id_user: { $in : group[0].members}, role: { $in : [RoleConstants.OWNER, RoleConstants.ADMIN, RoleConstants.AGENT]} })
109
112
  Project_userSchema.index({ id_project: 1, id_user:1, role: 1 });
110
113
 
114
+
111
115
  module.exports = mongoose.model('project_user', Project_userSchema);;
112
116
 
package/models/request.js CHANGED
@@ -273,7 +273,16 @@ var RequestSchema = new Schema({
273
273
  required: true,
274
274
  index: true
275
275
  },
276
-
276
+ smartAssignment: {
277
+ type: Boolean,
278
+ default: true,
279
+ index: true
280
+ },
281
+ workingStatus: { //new, pending
282
+ type: String,
283
+ required: false,
284
+ index: true
285
+ },
277
286
  createdBy: {
278
287
  type: String,
279
288
  required: true
@@ -465,6 +474,8 @@ RequestSchema.index({ id_project: 1, createdAt: 1, preflight: 1});
465
474
  RequestSchema.index({ hasBot: 1, status: 1, createdAt: 1});
466
475
 
467
476
 
477
+
478
+
468
479
  // cannot index parallel arrays [agents] [participants] {"driv
469
480
  // RequestSchema.index({ id_project: 1, status: 1, preflight:1, participants:1, "agents.id_user":1, updatedAt: -1 }); //NN LO APPLICA
470
481
 
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.17",
4
+ "version": "2.3.19",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -33,18 +33,16 @@
33
33
  "@tiledesk-ent/tiledesk-server-dialogflow": "^1.1.6",
34
34
  "@tiledesk-ent/tiledesk-server-jwthistory": "^1.1.9",
35
35
  "@tiledesk-ent/tiledesk-server-payments": "^1.1.6",
36
- "@tiledesk-ent/tiledesk-server-queue": "^1.1.11",
37
36
  "@tiledesk-ent/tiledesk-server-request-history": "^1.1.5",
38
- "@tiledesk-ent/tiledesk-server-routing-queue": "^1.1.11",
39
37
  "@tiledesk-ent/tiledesk-server-visitorcounter": "^1.1.1",
40
38
  "@tiledesk-ent/tiledesk-server-enterprise": "^1.0.0"
41
39
  },
42
40
  "dependencies": {
43
- "@tiledesk/tiledesk-chat21-app": "^1.1.4",
41
+ "@tiledesk/tiledesk-chat21-app": "^1.1.7",
44
42
  "@tiledesk/tiledesk-chatbot-util": "^0.8.33",
45
43
  "@tiledesk/tiledesk-json-rules-engine": "^4.0.3",
46
44
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
47
- "@tiledesk/tiledesk-tybot-connector": "^0.1.4",
45
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.5",
48
46
  "app-root-path": "^3.0.0",
49
47
  "bcrypt-nodejs": "0.0.3",
50
48
  "body-parser": "^1.20.0",
@@ -275,7 +275,7 @@ class ActivityArchiver {
275
275
  setImmediate(() => {
276
276
 
277
277
  try {
278
- winston.error('ActivityArchiver close');
278
+ winston.debug('ActivityArchiver close');
279
279
 
280
280
  var activity = new Activity({actor: {type:"user", id: request.closed_by},
281
281
  verb: "REQUEST_CLOSE", actionObj: request,
@@ -154,7 +154,7 @@ router.get('/', function (req, res) {
154
154
  return (err);
155
155
  }
156
156
 
157
- return Activity.count(query, function (err, totalRowCount) {
157
+ return Activity.countDocuments(query, function (err, totalRowCount) {
158
158
  if (err) {
159
159
  winston.error('Activity ROUTE - REQUEST FIND ERR ', err)
160
160
  return (err);
@@ -14,6 +14,10 @@ var CannedResponseSchema = new Schema({
14
14
  type: String,
15
15
  required: true,
16
16
  },
17
+ shared: {
18
+ type: Boolean,
19
+ required: true
20
+ },
17
21
  attributes: {
18
22
  type: Object,
19
23
  },
@@ -12,12 +12,18 @@ router.post('/', function (req, res) {
12
12
 
13
13
  var newCannedResponse = new CannedResponse({
14
14
  title: req.body.title,
15
- text: req.body.text,
15
+ text: req.body.text,
16
16
  id_project: req.projectid,
17
17
  createdBy: req.user.id,
18
18
  updatedBy: req.user.id
19
19
  });
20
20
 
21
+ if (req.projectuser.role == 'owner' || req.projectuser.role == 'admin') {
22
+ newCannedResponse.shared = true;
23
+ } else {
24
+ newCannedResponse.shared = false;
25
+ }
26
+
21
27
  newCannedResponse.save(function (err, savedCannedResponse) {
22
28
  if (err) {
23
29
  winston.error('--- > ERROR ', err)
@@ -104,7 +110,7 @@ router.get('/:cannedResponseid', function (req, res) {
104
110
  });
105
111
 
106
112
  router.get('/', function (req, res) {
107
- var limit = 40; // Number of CannedResponses per page
113
+ var limit = 1000; // Number of CannedResponses per page
108
114
  var page = 0;
109
115
 
110
116
  if (req.query.page) {
@@ -114,15 +120,15 @@ router.get('/', function (req, res) {
114
120
  var skip = page * limit;
115
121
  winston.debug('CannedResponse ROUTE - SKIP PAGE ', skip);
116
122
 
117
-
118
- var query = { "id_project": req.projectid, "status": {$lt:1000}};
123
+ // var query = { "id_project": req.projectid, "status": {$lt:1000}};
124
+ console.log("canned_req.user: ", req.user);
125
+ var query = {"id_project": req.projectid, "status": { $lt:1000 }, $or:[ { shared: true }, { createdBy: req.user._id } ] }
119
126
 
120
127
  if (req.query.full_text) {
121
128
  winston.debug('CannedResponse ROUTE req.query.fulltext', req.query.full_text);
122
129
  query.$text = { "$search": req.query.full_text };
123
130
  }
124
131
 
125
-
126
132
  var direction = -1; //-1 descending , 1 ascending
127
133
  if (req.query.direction) {
128
134
  direction = req.query.direction;
@@ -31,11 +31,25 @@ winston.debug('********* RequestNotification apiUrl: ' + apiUrl);
31
31
 
32
32
  class RequestNotification {
33
33
 
34
+ constructor() {
35
+ this.enabled = true;
36
+ if (process.env.EMAIL_NOTIFICATION_ENABLED=="false" || process.env.EMAIL_NOTIFICATION_ENABLED==false) {
37
+ this.enabled = false;
38
+ }
39
+ winston.debug("RequestNotification this.enabled: "+ this.enabled);
40
+ }
34
41
 
35
42
  listen() {
36
- var that = this;
43
+ var that = this;
37
44
 
38
45
 
46
+
47
+ if (this.enabled==true) {
48
+ winston.info("RequestNotification listener started");
49
+ } else {
50
+ return winston.info("RequestNotification listener disabled");
51
+ }
52
+
39
53
 
40
54
  var messageCreateKey = 'message.create';
41
55
  if (messageEvent.queueEnabled) {
@@ -813,7 +827,12 @@ sendAgentEmail(projectid, savedRequest) {
813
827
  // send email
814
828
  try {
815
829
 
816
-
830
+ // console.log("sendAgentEmail")
831
+ if (savedRequest.preflight === true) { //only for channel email and form preflight is false otherwise request.participants.update is used i think?
832
+ winston.debug("preflight request sendAgentEmail disabled")
833
+ return 0;
834
+ }
835
+
817
836
  Project.findOne({_id: projectid, status: 100}).select("+settings").exec( async function(err, project){
818
837
  if (err) {
819
838
  return winston.error(err);
@@ -834,6 +853,8 @@ sendAgentEmail(projectid, savedRequest) {
834
853
  // TODO fare il controllo anche sul dipartimento con modalità assigned o pooled
835
854
  if (savedRequest.status==RequestConstants.UNASSIGNED) { //POOLED
836
855
 
856
+ winston.debug("savedRequest.status==RequestConstants.UNASSIGNED");
857
+
837
858
  if (project.settings && project.settings.email && project.settings.email.notification && project.settings.email.notification.conversation && project.settings.email.notification.conversation.pooled == false ) {
838
859
  return winston.info("RequestNotification email notification for the project with id : " + projectid + " for the pooled conversation is disabled");
839
860
  }
@@ -906,6 +927,8 @@ sendAgentEmail(projectid, savedRequest) {
906
927
  // TODO fare il controllo anche sul dipartimento con modalità assigned o pooled
907
928
  else if (savedRequest.status==RequestConstants.ASSIGNED) { //ASSIGNED
908
929
 
930
+ winston.debug("savedRequest.status==RequestConstants.ASSIGNED");
931
+
909
932
  if (project.settings && project.settings.email && project.settings.email.notification && project.settings.email.notification.conversation && project.settings.email.notification.conversation.assigned == false ) {
910
933
  return winston.verbose("RequestNotification email notification for the project with id : " + projectid + " for the assigned conversation is disabled");
911
934
  }
@@ -2,7 +2,6 @@ var express = require('express');
2
2
  var router = express.Router({mergeParams: true});
3
3
  var Event = require("./event");
4
4
  var winston = require('../../config/winston');
5
- const eventEvent = require('./eventEvent');
6
5
  var validtoken = require('../../middleware/valid-token');
7
6
  const eventService = require('./eventService');
8
7
  const { check, validationResult } = require('express-validator');
@@ -10,6 +9,9 @@ var passport = require('passport');
10
9
  require('../../middleware/passport')(passport);
11
10
  var roleChecker = require('../../middleware/has-role');
12
11
 
12
+ const messageEvent = require('../../event/messageEvent');
13
+
14
+
13
15
  router.post('/', [
14
16
  passport.authenticate(['basic', 'jwt'],
15
17
  { session: false }),
@@ -37,13 +39,41 @@ router.post('/', [
37
39
  pu = req.projectuser.id
38
40
  }
39
41
 
42
+ console.log("************* emit event"+new Date().toISOString());
43
+
44
+ // // message.senderFullname, message.recipient,
45
+ // // message.recipient_fullname, message.text, message.sender, attributes, message.type, message.metadata, timestamp, message.group
46
+ // var recipient = req.body.attributes.request_id;
47
+ // console.log("recipient",recipient);
48
+ // var sender = req.user.id;
49
+ // console.log("sender",sender);
50
+
51
+ // messageEvent.emit("message.test",
52
+ // {
53
+ // recipient: recipient,
54
+ // recipient_fullname: "pluto",
55
+ // // sender:"bb0d809b-b093-419b-8b48-11a192cc3619",
56
+ // sender: sender,
57
+ // senderFullname: "Tiledesk",
58
+ // text:"welcome",
59
+ // group: {
60
+ // members: {
61
+ // // "bb0d809b-b093-419b-8b48-11a192cc3619": 1,
62
+ // sender: 1
63
+
64
+ // }
65
+ // }
66
+ // }
67
+ // );
68
+
40
69
  // emit(name, attributes, id_project, project_user, createdBy, status, user) {
41
70
  eventService.emit(req.body.name, req.body.attributes, req.projectid, pu, req.user.id, undefined, req.user).then(function(event) {
42
- res.json(event);
43
- }).catch(function(err) {
44
- winston.error('Error saving the event '+ JSON.stringify(event), err)
45
- return res.status(500).send({success: false, msg: 'Error saving the event '+ JSON.stringify(event)});
46
- });
71
+
72
+ res.json(event);
73
+ }).catch(function(err) {
74
+ winston.error('Error saving the event '+ JSON.stringify(event), err)
75
+ return res.status(500).send({success: false, msg: 'Error saving the event '+ JSON.stringify(event)});
76
+ });
47
77
 
48
78
  // var newEvent = new Event({
49
79
  // name: req.body.name,
@@ -137,7 +167,7 @@ router.get('/', [passport.authenticate(['basic', 'jwt'],
137
167
  }
138
168
 
139
169
  // collection.count is deprecated, and will be removed in a future version. Use Collection.countDocuments or Collection.estimatedDocumentCount instead
140
- return Event.count(query, function (err, totalRowCount) {
170
+ return Event.countDocuments(query, function (err, totalRowCount) {
141
171
 
142
172
  var objectToReturn = {
143
173
  perPage: limit,
@@ -33,6 +33,12 @@ class PubModulesManager {
33
33
 
34
34
  this.tilebot = undefined;
35
35
  this.tilebotRoute = undefined;
36
+
37
+ this.queue = undefined;
38
+
39
+ this.jobsManager = undefined;
40
+
41
+ this.routingQueue = undefined;
36
42
  }
37
43
 
38
44
 
@@ -88,6 +94,8 @@ class PubModulesManager {
88
94
  init(config) {
89
95
  winston.debug("PubModulesManager init");
90
96
 
97
+ // this.jobsManager = config.jobsManager;
98
+
91
99
  try {
92
100
  this.appRules = require('./rules/appRules');
93
101
  // this.appRules.start();
@@ -128,7 +136,6 @@ class PubModulesManager {
128
136
  }
129
137
 
130
138
 
131
-
132
139
  try {
133
140
  this.emailNotification = require('./emailNotification');
134
141
  winston.debug("this.emailNotification:"+ this.emailNotification);
@@ -203,7 +210,6 @@ class PubModulesManager {
203
210
 
204
211
 
205
212
 
206
-
207
213
  try {
208
214
  this.activityArchiver = require('./activities').activityArchiver;
209
215
  // this.activityArchiver.listen();
@@ -282,6 +288,39 @@ class PubModulesManager {
282
288
  }
283
289
 
284
290
 
291
+
292
+
293
+ try {
294
+ this.queue = require('./queue');
295
+ winston.debug("this.queue:"+ this.queue);
296
+
297
+ winston.info("PubModulesManager initialized queue.");
298
+ } catch(err) {
299
+ if (err.code == 'MODULE_NOT_FOUND') {
300
+ winston.info("PubModulesManager init queue module not found");
301
+ }else {
302
+ winston.info("PubModulesManager error initializing init queue module", err);
303
+ }
304
+ }
305
+
306
+
307
+
308
+
309
+ try {
310
+ this.routingQueue = require('./routing-queue').listener;
311
+ // this.routingQueue.listen();
312
+ winston.debug("this.routingQueue:"+ this.routingQueue);
313
+
314
+ winston.info("PubModulesManager routing queue initialized");
315
+ } catch(err) {
316
+ if (err.code == 'MODULE_NOT_FOUND') {
317
+ winston.info("PubModulesManager init routing queue module not found");
318
+ }else {
319
+ winston.error("PubModulesManager error initializing init routing queue module", err);
320
+ }
321
+ }
322
+
323
+
285
324
  }
286
325
 
287
326
  start() {
@@ -316,9 +355,11 @@ class PubModulesManager {
316
355
 
317
356
  }
318
357
 
358
+ // job_here
319
359
  if (this.emailNotification) {
320
360
  try {
321
361
  this.emailNotification.requestNotification.listen();
362
+ // this.jobsManager.listenEmailNotification(this.emailNotification);
322
363
  winston.info("PubModulesManager emailNotification started.");
323
364
  } catch(err) {
324
365
  winston.info("PubModulesManager error starting requestNotification module", err);
@@ -334,13 +375,24 @@ class PubModulesManager {
334
375
  }
335
376
  }
336
377
 
337
-
378
+ // job_here
338
379
  if (this.activityArchiver) {
339
380
  try {
340
381
  this.activityArchiver.listen();
341
- winston.info("ModulesManager activityArchiver started");
382
+ // this.jobsManager.listenActivityArchiver(this.activityArchiver);
383
+ winston.info("PubModulesManager activityArchiver started");
384
+ } catch(err) {
385
+ winston.info("PubModulesManager error starting activityArchiver module", err);
386
+ }
387
+ }
388
+
389
+
390
+ if (this.routingQueue) {
391
+ try {
392
+ this.routingQueue.listen();
393
+ winston.info("PubModulesManager routingQueue started");
342
394
  } catch(err) {
343
- winston.info("ModulesManager error starting activityArchiver module", err);
395
+ winston.info("PubModulesManager error starting routingQueue module", err);
344
396
  }
345
397
  }
346
398
 
@@ -0,0 +1,4 @@
1
+ const reconnect = require("./reconnect");
2
+ const reconnectFanout = require("./reconnectFanout");
3
+
4
+ module.exports = {reconnect:reconnect,reconnectFanout: reconnectFanout };
@@ -0,0 +1,247 @@
1
+ var amqp = require('amqplib/callback_api');
2
+ var winston = require('../../config/winston');
3
+ const requestEvent = require('../../event/requestEvent');
4
+ const messageEvent = require('../../event/messageEvent');
5
+ const authEvent = require('../../event/authEvent');
6
+ // https://elements.heroku.com/addons/cloudamqp
7
+ // https://gist.github.com/carlhoerberg/006b01ac17a0a94859ba#file-reconnect-js
8
+ // http://www.rabbitmq.com/tutorials/tutorial-one-javascript.html
9
+
10
+ // if the connection is closed or fails to be established at all, we will reconnect
11
+ var amqpConn = null;
12
+
13
+ var url = process.env.CLOUDAMQP_URL + "?heartbeat=60" || "amqp://localhost";
14
+ // attento devi aggiornare configMap di PRE E PROD
15
+ // var url = process.env.AMQP_URL + "?heartbeat=60" || "amqp://localhost?heartbeat=60";
16
+
17
+ var exchange = 'amq.topic';
18
+
19
+ function start() {
20
+ amqp.connect(url, function(err, conn) {
21
+ if (err) {
22
+ winston.error("[AMQP]", err.message);
23
+ return setTimeout(start, 1000);
24
+ }
25
+ conn.on("error", function(err) {
26
+ if (err.message !== "Connection closing") {
27
+ winston.error("[AMQP] conn error", err);
28
+ }
29
+ });
30
+ conn.on("close", function() {
31
+ winston.error("[AMQP] reconnecting");
32
+ return setTimeout(start, 1000);
33
+ });
34
+
35
+ winston.info("[AMQP] connected");
36
+ amqpConn = conn;
37
+
38
+ whenConnected();
39
+ });
40
+ }
41
+
42
+ function whenConnected() {
43
+ startPublisher();
44
+
45
+
46
+ let jobWorkerEnabled = false;
47
+ if (process.env.JOB_WORKER_ENABLED=="true" || process.env.JOB_WORKER_ENABLED == true) {
48
+ jobWorkerEnabled = true;
49
+ }
50
+ winston.info("JobsManager jobWorkerEnabled: "+ jobWorkerEnabled);
51
+
52
+ if (jobWorkerEnabled == false) {
53
+ winston.info("Queue Reconnect start worker");
54
+ startWorker();
55
+ } else {
56
+ winston.info("Queue Reconnect without worker because external worker is enabled");
57
+ }
58
+
59
+ }
60
+
61
+ var pubChannel = null;
62
+ var offlinePubQueue = [];
63
+ function startPublisher() {
64
+ amqpConn.createConfirmChannel(function(err, ch) {
65
+ if (closeOnErr(err)) return;
66
+ ch.on("error", function(err) {
67
+ winston.error("[AMQP] channel error", err);
68
+ });
69
+ ch.on("close", function() {
70
+ winston.info("[AMQP] channel closed");
71
+ });
72
+
73
+ pubChannel = ch;
74
+ while (true) {
75
+ var m = offlinePubQueue.shift();
76
+ if (!m) break;
77
+ publish(m[0], m[1], m[2]);
78
+ }
79
+ });
80
+ }
81
+
82
+ // method to publish a message, will queue messages internally if the connection is down and resend later
83
+ function publish(exchange, routingKey, content) {
84
+ try {
85
+ pubChannel.publish(exchange, routingKey, content, { persistent: true },
86
+ function(err, ok) {
87
+ if (err) {
88
+ winston.error("[AMQP] publish", err);
89
+ offlinePubQueue.push([exchange, routingKey, content]);
90
+ pubChannel.connection.close();
91
+ }
92
+ });
93
+ } catch (e) {
94
+ winston.error("[AMQP] publish", e);
95
+ offlinePubQueue.push([exchange, routingKey, content]);
96
+ }
97
+ }
98
+
99
+ // A worker that acks messages only if processed succesfully
100
+ // var channel;
101
+ function startWorker() {
102
+ amqpConn.createChannel(function(err, ch) {
103
+ if (closeOnErr(err)) return;
104
+ ch.on("error", function(err) {
105
+ winston.error("[AMQP] channel error", err);
106
+ });
107
+ ch.on("close", function() {
108
+ winston.info("[AMQP] channel closed");
109
+ });
110
+ ch.prefetch(10);//leggila da env
111
+ ch.assertExchange(exchange, 'topic', {
112
+ durable: true
113
+ });
114
+ ch.assertQueue("jobs", { durable: true }, function(err, _ok) {
115
+ if (closeOnErr(err)) return;
116
+ ch.bindQueue(_ok.queue, exchange, "request_create", {}, function(err3, oka) {
117
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_create");
118
+ winston.info("Data queue", oka)
119
+ });
120
+ ch.bindQueue(_ok.queue, exchange, "request_update", {}, function(err3, oka) {
121
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_update");
122
+ winston.info("Data queue", oka)
123
+ });
124
+ ch.bindQueue(_ok.queue, exchange, "message_create", {}, function(err3, oka) {
125
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: message_create");
126
+ winston.info("Data queue", oka)
127
+ });
128
+ ch.bindQueue(_ok.queue, exchange, "project_user_update", {}, function(err3, oka) {
129
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: project_user_update");
130
+ winston.info("Data queue", oka)
131
+ });
132
+ ch.consume("jobs", processMsg, { noAck: false });
133
+ winston.info("Worker is started");
134
+ });
135
+
136
+
137
+ function processMsg(msg) {
138
+ work(msg, function(ok) {
139
+ try {
140
+ if (ok)
141
+ ch.ack(msg);
142
+ else
143
+ ch.reject(msg, true);
144
+ } catch (e) {
145
+ closeOnErr(e);
146
+ }
147
+ });
148
+ }
149
+ });
150
+ }
151
+
152
+ function work(msg, cb) {
153
+ const message_string = msg.content.toString();
154
+ const topic = msg.fields.routingKey //.replace(/[.]/g, '/');
155
+
156
+ winston.debug("Got msg topic:" + topic);
157
+
158
+ winston.debug("Got msg:"+ message_string + " topic:" + topic);
159
+
160
+ if (topic === 'request_create') {
161
+ winston.info("here topic:" + topic);
162
+ // requestEvent.emit('request.create.queue', msg.content);
163
+ requestEvent.emit('request.create.queue', JSON.parse(message_string));
164
+ }
165
+ if (topic === 'request_update') {
166
+ winston.info("here topic:" + topic);
167
+ // requestEvent.emit('request.update.queue', msg.content);
168
+ requestEvent.emit('request.update.queue', JSON.parse(message_string));
169
+ }
170
+ if (topic === 'message_create') {
171
+ winston.debug("here topic:" + topic);
172
+ // requestEvent.emit('request.create.queue', msg.content);
173
+ messageEvent.emit('message.create.queue', JSON.parse(message_string));
174
+ }
175
+ if (topic === 'project_user_update') {
176
+ winston.debug("here topic:" + topic);
177
+ // requestEvent.emit('request.create.queue', msg.content);
178
+ authEvent.emit('project_user.update.queue', JSON.parse(message_string));
179
+ }
180
+ cb(true);
181
+ // WebSocket.cb(true);
182
+ // requestEvent.on(msg.KEYYYYYYY+'.ws', msg.content);
183
+ }
184
+
185
+
186
+ function closeOnErr(err) {
187
+ if (!err) return false;
188
+ winston.error("[AMQP] error", err);
189
+ amqpConn.close();
190
+ return true;
191
+ }
192
+
193
+ // setInterval(function() {
194
+ // var d = new Date();
195
+ // publish(exchange, "request_create", Buffer.from("work work work: "+d));
196
+ // publish(exchange, "request_update", Buffer.from("work2 work work: "+d));
197
+ // }, 1000);
198
+
199
+
200
+ function listen() {
201
+
202
+ // http://www.squaremobius.net/amqp.node/channel_api.html
203
+ // https://docs.parseplatform.org/parse-server/guide/#scalability
204
+
205
+ requestEvent.on('request.create', function(request) {
206
+ setImmediate(() => {
207
+ winston.info("reconnect request.create")
208
+ publish(exchange, "request_create", Buffer.from(JSON.stringify(request)));
209
+ });
210
+ });
211
+
212
+ requestEvent.on('request.update', function(request) {
213
+ setImmediate(() => {
214
+ winston.info("reconnect request.update")
215
+ publish(exchange, "request_update", Buffer.from(JSON.stringify(request)));
216
+ });
217
+ });
218
+
219
+
220
+ messageEvent.on('message.create', function(message) {
221
+ setImmediate(() => {
222
+ publish(exchange, "message_create", Buffer.from(JSON.stringify(message)));
223
+ });
224
+ });
225
+
226
+ authEvent.on('project_user.update',function(data) {
227
+ setImmediate(() => {
228
+ let user = undefined;
229
+ if (data.req && data.req.user) { //i think is null from chat21webhook
230
+ user = data.req.user;
231
+ }
232
+ var dat = {updatedProject_userPopulated: data.updatedProject_userPopulated, req: {user: user}}; //remove request
233
+ publish(exchange, "project_user_update", Buffer.from(JSON.stringify(dat)));
234
+ });
235
+ });
236
+
237
+ }
238
+
239
+ if (process.env.QUEUE_ENABLED === "true") {
240
+ requestEvent.queueEnabled = true;
241
+ messageEvent.queueEnabled = true;
242
+ authEvent.queueEnabled = true;
243
+ listen();
244
+ start();
245
+ winston.info("Queue enabled. endpint: " + url );
246
+ }
247
+