@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.
Files changed (126) hide show
  1. package/.github/workflows/docker-community-worker-push-latest.yml +23 -0
  2. package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
  3. package/CHANGELOG.md +361 -3
  4. package/Dockerfile-jobs +31 -0
  5. package/app.js +62 -69
  6. package/channels/chat21/chat21Handler.js +37 -6
  7. package/channels/chat21/chat21WebHook.js +62 -34
  8. package/channels/chat21/package-lock.json +663 -706
  9. package/channels/chat21/package.json +2 -2
  10. package/config/labels/widget.json +337 -136
  11. package/deploy.sh +2 -0
  12. package/event/messageEvent.js +110 -9
  13. package/jobs.js +80 -0
  14. package/jobsManager.js +47 -0
  15. package/middleware/has-role.js +10 -3
  16. package/middleware/ipFilter.js +220 -0
  17. package/middleware/passport.js +8 -2
  18. package/models/department.js +1 -1
  19. package/models/faq.js +77 -25
  20. package/models/faq_kb.js +19 -0
  21. package/models/message.js +10 -8
  22. package/models/project.js +10 -0
  23. package/models/project_user.js +10 -0
  24. package/models/request.js +12 -1
  25. package/package.json +12 -11
  26. package/pubmodules/activities/activityArchiver.js +216 -90
  27. package/pubmodules/activities/routes/activity.js +1 -1
  28. package/pubmodules/apps/index.js +8 -0
  29. package/pubmodules/apps/listener.js +27 -0
  30. package/pubmodules/cache/index.js +2 -0
  31. package/pubmodules/cache/mongoose-cachegoose-fn.js +630 -0
  32. package/pubmodules/canned/cannedResponse.js +4 -0
  33. package/pubmodules/canned/cannedResponseRoute.js +10 -5
  34. package/pubmodules/dialogflow/index.js +10 -0
  35. package/pubmodules/dialogflow/listener.js +66 -0
  36. package/pubmodules/emailNotification/requestNotification.js +58 -28
  37. package/pubmodules/events/eventRoute.js +49 -24
  38. package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +6 -1
  39. package/pubmodules/messageTransformer/messageTransformerInterceptor.js +10 -4
  40. package/pubmodules/pubModulesManager.js +173 -7
  41. package/pubmodules/queue/index.js +4 -0
  42. package/pubmodules/queue/reconnect.js +331 -0
  43. package/pubmodules/queue/reconnectFanout.js +256 -0
  44. package/pubmodules/rasa/listener.js +5 -5
  45. package/pubmodules/routing-queue/index.js +3 -0
  46. package/pubmodules/routing-queue/listener.js +328 -0
  47. package/pubmodules/rules/conciergeBot.js +2 -2
  48. package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +6 -1
  49. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +7 -1
  50. package/pubmodules/tilebot/index.js +11 -0
  51. package/pubmodules/tilebot/listener.js +85 -0
  52. package/pubmodules/trigger/rulesTrigger.js +137 -14
  53. package/pubmodules/trigger/start.js +5 -1
  54. package/pubmodules/whatsapp/index.js +7 -0
  55. package/pubmodules/whatsapp/listener.js +32 -0
  56. package/routes/auth.js +7 -2
  57. package/routes/campaigns.js +3 -3
  58. package/routes/department.js +3 -2
  59. package/routes/email.js +32 -2
  60. package/routes/faq.js +37 -2
  61. package/routes/faq_kb.js +496 -133
  62. package/routes/faqpub.js +5 -0
  63. package/routes/lead.js +56 -0
  64. package/routes/message.js +196 -14
  65. package/routes/messagesRoot.js +39 -0
  66. package/routes/project.js +76 -4
  67. package/routes/project_user.js +11 -1
  68. package/routes/project_user_test.js +19 -0
  69. package/routes/request.js +134 -30
  70. package/routes/troubleshooting.js +12 -0
  71. package/routes/users-util.js +39 -0
  72. package/routes/users.js +1 -1
  73. package/routes/widget.js +64 -2
  74. package/services/BotSubscriptionNotifier.js +5 -0
  75. package/services/banUserNotifier.js +86 -0
  76. package/services/cacheEnabler.js +56 -0
  77. package/services/chatbotService.js +101 -0
  78. package/services/departmentService.js +25 -3
  79. package/services/emailService.js +170 -28
  80. package/services/faqBotHandler.js +2 -3
  81. package/services/faqService.js +28 -3
  82. package/services/geoService.js +36 -6
  83. package/services/labelService.js +1 -1
  84. package/services/leadService.js +3 -2
  85. package/services/messageService.js +4 -2
  86. package/services/modulesManager.js +23 -76
  87. package/services/operatingHoursService.js +9 -4
  88. package/services/requestService.js +75 -39
  89. package/services/subscriptionNotifier.js +9 -4
  90. package/services/trainingService.js +106 -0
  91. package/template/email/assignedEmailMessage.html +21 -11
  92. package/template/email/assignedRequest.html +21 -11
  93. package/template/email/beenInvitedExistingUser.html +16 -6
  94. package/template/email/beenInvitedNewUser.html +16 -6
  95. package/template/email/emailDirect.html +130 -0
  96. package/template/email/newMessage.html +18 -8
  97. package/template/email/newMessageFollower.html +22 -12
  98. package/template/email/passwordChanged.html +15 -5
  99. package/template/email/pooledEmailMessage.html +21 -11
  100. package/template/email/pooledRequest.html +20 -10
  101. package/template/email/resetPassword.html +15 -5
  102. package/template/email/sendTranscript.html +7 -4
  103. package/template/email/ticket.html +17 -7
  104. package/template/email/verify.html +15 -5
  105. package/test/cannedRoute.js +157 -0
  106. package/test/chatbot-mock.js +127 -0
  107. package/test/example-json-intents.txt +1 -0
  108. package/test/example-json.txt +1 -0
  109. package/test/example.json +1 -0
  110. package/test/faqRoute.js +353 -208
  111. package/test/faqkbRoute.js +669 -64
  112. package/test/imageRoute.js +1 -1
  113. package/test/messageRoute.js +387 -5
  114. package/test/requestRoute.js +6 -6
  115. package/test/requestService.js +55 -4
  116. package/test-int/cache-project.js +90 -0
  117. package/test-int/cache-project_user.js +88 -0
  118. package/utils/UIDGenerator.js +20 -0
  119. package/utils/cacheUtil.js +2 -2
  120. package/utils/orgUtil.js +3 -3
  121. package/utils/promiseUtil.js +31 -0
  122. package/utils/recipientEmailUtil.js +66 -0
  123. package/utils/sendEmailUtil.js +34 -0
  124. package/utils/sendMessageUtil.js +1 -1
  125. package/utils/stringUtil.js +12 -0
  126. package/websocket/webSocketServer.js +33 -10
@@ -21,6 +21,12 @@ class PubModulesManager {
21
21
  this.rasa = undefined;
22
22
  this.rasaRoute = undefined;
23
23
 
24
+ this.apps = undefined;
25
+ this.appsRoute = undefined;
26
+
27
+ this.whatsapp = undefined;
28
+ this.whatsappRoute = undefined;
29
+
24
30
  this.activityArchiver = undefined;
25
31
  this.activityRoute = undefined;
26
32
 
@@ -31,6 +37,18 @@ class PubModulesManager {
31
37
  this.trigger = undefined;
32
38
  this.triggerRoute = undefined;
33
39
 
40
+ this.tilebot = undefined;
41
+ this.tilebotRoute = undefined;
42
+
43
+ this.queue = undefined;
44
+
45
+ this.jobsManager = undefined;
46
+
47
+ this.routingQueue = undefined;
48
+
49
+ this.cache = undefined;
50
+
51
+ this.dialogFlow = undefined;
34
52
  }
35
53
 
36
54
 
@@ -41,6 +59,23 @@ class PubModulesManager {
41
59
  app.use('/modules/rasa', this.rasaRoute);
42
60
  winston.info("ModulesManager rasaRoute controller loaded");
43
61
  }
62
+ if (this.appsRoute) {
63
+ app.use('/modules/apps', this.appsRoute);
64
+ winston.info("ModulesManager appsRoute controller loaded");
65
+ }
66
+ if (this.whatsappRoute) {
67
+ app.use('/modules/whatsapp', this.whatsappRoute);
68
+ winston.info("ModulesManager whatsappRoute controller loaded");
69
+ }
70
+ if (this.tilebotRoute) {
71
+ app.use('/modules/tilebot', this.tilebotRoute);
72
+ winston.info("ModulesManager tilebot controller loaded");
73
+ }
74
+
75
+ if (this.dialogFlow) {
76
+ app.use("/modules/dialogFlow", this.dialogFlow.dialogflowRoute);
77
+ winston.info("ModulesManager dialogFlow controller loaded");
78
+ }
44
79
 
45
80
  }
46
81
  useUnderProjects(app) {
@@ -82,6 +117,8 @@ class PubModulesManager {
82
117
  init(config) {
83
118
  winston.debug("PubModulesManager init");
84
119
 
120
+ this.jobsManager = config.jobsManager;
121
+
85
122
  try {
86
123
  this.appRules = require('./rules/appRules');
87
124
  // this.appRules.start();
@@ -122,7 +159,6 @@ class PubModulesManager {
122
159
  }
123
160
 
124
161
 
125
-
126
162
  try {
127
163
  this.emailNotification = require('./emailNotification');
128
164
  winston.debug("this.emailNotification:"+ this.emailNotification);
@@ -195,8 +231,38 @@ class PubModulesManager {
195
231
  }
196
232
  }
197
233
 
234
+ try {
235
+ this.apps = require('./apps');
236
+ winston.debug("this.apps: " + this.apps);
237
+ this.apps.listener.listen(config);
198
238
 
239
+ this.appsRoute = this.apps.appsRoute;
199
240
 
241
+ winston.info("PubModulesManager initialized apps.");
242
+ } catch(err) {
243
+ if (err.code == 'MODULE_NOT_FOUND') {
244
+ winston.info("PubModulesManager init apps module not found");
245
+ }else {
246
+ winston.info("PubModulesManager error initializing init apps module", err);
247
+ }
248
+ }
249
+
250
+ try {
251
+ this.whatsapp = require('./whatsapp');
252
+ winston.debug("this.whatsapp: " + this.whatsapp);
253
+ this.whatsapp.listener.listen(config);
254
+
255
+ this.whatsappRoute = this.whatsapp.whatsappRoute;
256
+
257
+ winston.info("PubModulesManager initialized apps.");
258
+ } catch(err) {
259
+ if (err.code == 'MODULE_NOT_FOUND') {
260
+ winston.info("PubModulesManager init apps module not found");
261
+ }else {
262
+ winston.info("PubModulesManager error initializing init apps module", err);
263
+ }
264
+ }
265
+
200
266
 
201
267
  try {
202
268
  this.activityArchiver = require('./activities').activityArchiver;
@@ -257,6 +323,84 @@ class PubModulesManager {
257
323
  }
258
324
  }
259
325
 
326
+
327
+
328
+
329
+ try {
330
+ this.tilebot = require('./tilebot');
331
+ winston.debug("this.tilebot:"+ this.tilebot);
332
+ this.tilebot.listener.listen(config);
333
+ this.tilebotRoute = this.tilebot.tilebotRoute;
334
+
335
+ winston.info("PubModulesManager initialized tilebot.");
336
+ } catch(err) {
337
+ if (err.code == 'MODULE_NOT_FOUND') {
338
+ winston.info("PubModulesManager init tilebot module not found");
339
+ }else {
340
+ winston.info("PubModulesManager error initializing init tilebot module", err);
341
+ }
342
+ }
343
+
344
+
345
+
346
+
347
+ try {
348
+ this.queue = require('./queue');
349
+ winston.debug("this.queue:"+ this.queue);
350
+
351
+ winston.info("PubModulesManager initialized queue.");
352
+ } catch(err) {
353
+ if (err.code == 'MODULE_NOT_FOUND') {
354
+ winston.info("PubModulesManager init queue module not found");
355
+ }else {
356
+ winston.info("PubModulesManager error initializing init queue module", err);
357
+ }
358
+ }
359
+
360
+
361
+
362
+
363
+ try {
364
+ this.routingQueue = require('./routing-queue').listener;
365
+ // this.routingQueue.listen();
366
+ winston.debug("this.routingQueue:"+ this.routingQueue);
367
+
368
+ winston.info("PubModulesManager routing queue initialized");
369
+ } catch(err) {
370
+ if (err.code == 'MODULE_NOT_FOUND') {
371
+ winston.info("PubModulesManager init routing queue module not found");
372
+ }else {
373
+ winston.error("PubModulesManager error initializing init routing queue module", err);
374
+ }
375
+ }
376
+
377
+
378
+ try {
379
+ this.cache = require('./cache').cachegoose(config.mongoose);
380
+ winston.debug("this.cache:"+ this.cache);
381
+ winston.info("PubModulesManager cache initialized");
382
+ } catch(err) {
383
+ if (err.code == 'MODULE_NOT_FOUND') {
384
+ winston.info("PubModulesManager init cache module not found");
385
+ }else {
386
+ winston.error("PubModulesManager error initializing init cache module", err);
387
+ }
388
+ }
389
+
390
+
391
+
392
+ try {
393
+ this.dialogFlow = require('./dialogflow');
394
+ winston.debug("this.dialogFlow:"+ this.dialogFlow);
395
+ this.dialogFlow.listener.listen(config);
396
+ winston.info("PubModulesManager dialogFlow initialized");
397
+ } catch(err) {
398
+ if (err.code == 'MODULE_NOT_FOUND') {
399
+ winston.info("PubModulesManager init dialogFlow module not found");
400
+ }else {
401
+ winston.error("PubModulesManager error initializing init dialogFlow module", err);
402
+ }
403
+ }
260
404
  }
261
405
 
262
406
  start() {
@@ -291,9 +435,11 @@ class PubModulesManager {
291
435
 
292
436
  }
293
437
 
438
+ // job_here
294
439
  if (this.emailNotification) {
295
440
  try {
296
- this.emailNotification.requestNotification.listen();
441
+ // this.emailNotification.requestNotification.listen();
442
+ this.jobsManager.listenEmailNotification(this.emailNotification);
297
443
  winston.info("PubModulesManager emailNotification started.");
298
444
  } catch(err) {
299
445
  winston.info("PubModulesManager error starting requestNotification module", err);
@@ -309,21 +455,41 @@ class PubModulesManager {
309
455
  }
310
456
  }
311
457
 
312
-
458
+ // job_here
313
459
  if (this.activityArchiver) {
314
460
  try {
315
- this.activityArchiver.listen();
316
- winston.info("ModulesManager activityArchiver started");
461
+ // this.activityArchiver.listen();
462
+ this.jobsManager.listenActivityArchiver(this.activityArchiver);
463
+ winston.info("PubModulesManager activityArchiver started");
464
+ } catch(err) {
465
+ winston.info("PubModulesManager error starting activityArchiver module", err);
466
+ }
467
+ }
468
+
469
+
470
+ if (this.routingQueue) {
471
+ try {
472
+ this.routingQueue.listen();
473
+ winston.info("PubModulesManager routingQueue started");
317
474
  } catch(err) {
318
- winston.info("ModulesManager error starting activityArchiver module", err);
475
+ winston.info("PubModulesManager error starting routingQueue module", err);
319
476
  }
320
477
  }
321
478
 
479
+ // if (this.dialogFlow) {
480
+ // try {
481
+ // this.dialogFlow.listen();
482
+ // winston.info("PubModulesManager dialogFlow started");
483
+ // } catch(err) {
484
+ // winston.info("PubModulesManager error starting dialogFlow module", err);
485
+ // }
486
+ // }
487
+
322
488
 
323
489
  }
324
490
 
325
491
 
326
-
492
+
327
493
  }
328
494
 
329
495
  var pubModulesManager = new PubModulesManager();
@@ -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,331 @@
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);
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_preflight", {}, function(err3, oka) {
121
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_update_preflight");
122
+ winston.info("Data queue", oka)
123
+ });
124
+ ch.bindQueue(_ok.queue, exchange, "request_participants_update", {}, function(err3, oka) {
125
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_participants_update");
126
+ winston.info("Data queue", oka)
127
+ });
128
+
129
+ ch.bindQueue(_ok.queue, exchange, "request_update", {}, function(err3, oka) {
130
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_update");
131
+ winston.info("Data queue", oka)
132
+ });
133
+
134
+ ch.bindQueue(_ok.queue, exchange, "request_close", {}, function(err3, oka) {
135
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_close");
136
+ winston.info("Data queue", oka)
137
+ });
138
+
139
+ ch.bindQueue(_ok.queue, exchange, "request_close_extended", {}, function(err3, oka) {
140
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: request_close_extended");
141
+ winston.info("Data queue", oka)
142
+ });
143
+
144
+ ch.bindQueue(_ok.queue, exchange, "message_create", {}, function(err3, oka) {
145
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: message_create");
146
+ winston.info("Data queue", oka)
147
+ });
148
+ ch.bindQueue(_ok.queue, exchange, "project_user_update", {}, function(err3, oka) {
149
+ winston.info("Queue bind: "+_ok.queue+ " err: "+err3+ " key: project_user_update");
150
+ winston.info("Data queue", oka)
151
+ });
152
+ ch.consume("jobs", processMsg, { noAck: false });
153
+ winston.info("Worker is started");
154
+ });
155
+
156
+
157
+ function processMsg(msg) {
158
+ work(msg, function(ok) {
159
+ try {
160
+ if (ok)
161
+ ch.ack(msg);
162
+ else
163
+ ch.reject(msg, true);
164
+ } catch (e) {
165
+ closeOnErr(e);
166
+ }
167
+ });
168
+ }
169
+ });
170
+ }
171
+
172
+ function work(msg, cb) {
173
+ const message_string = msg.content.toString();
174
+ const topic = msg.fields.routingKey //.replace(/[.]/g, '/');
175
+
176
+ winston.debug("Got msg topic:" + topic);
177
+
178
+ winston.debug("Got msg:"+ message_string + " topic:" + topic);
179
+
180
+ if (topic === 'request_create') {
181
+ winston.debug("reconnect here topic:" + topic);
182
+ // requestEvent.emit('request.create.queue', msg.content);
183
+ requestEvent.emit('request.create.queue', JSON.parse(message_string));
184
+ }
185
+ if (topic === 'request_update') {
186
+ winston.debug("reconnect here topic:" + topic);
187
+ // requestEvent.emit('request.update.queue', msg.content);
188
+ requestEvent.emit('request.update.queue', JSON.parse(message_string));
189
+ }
190
+
191
+ if (topic === 'request_update_preflight') {
192
+ winston.debug("reconnect here topic:" + topic);
193
+ // requestEvent.emit('request.update.queue', msg.content);
194
+ requestEvent.emit('request.update.preflight.queue', JSON.parse(message_string));
195
+ }
196
+
197
+ if (topic === 'request_participants_update') {
198
+ winston.debug("reconnect here topic:" + topic);
199
+ // requestEvent.emit('request.update.queue', msg.content);
200
+ requestEvent.emit('request.participants.update.queue', JSON.parse(message_string));
201
+ }
202
+
203
+ if (topic === 'request_close') {
204
+ winston.debug("reconnect here topic:" + topic);
205
+ // requestEvent.emit('request.update.queue', msg.content);
206
+ requestEvent.emit('request.close.queue', JSON.parse(message_string));
207
+ }
208
+
209
+ if (topic === 'request_close_extended') {
210
+ winston.debug("reconnect here topic:" + topic);
211
+ // requestEvent.emit('request.update.queue', msg.content);
212
+ requestEvent.emit('request.close.extended.queue', JSON.parse(message_string));
213
+ }
214
+
215
+ if (topic === 'message_create') {
216
+ winston.debug("reconnect here topic:" + topic);
217
+ // requestEvent.emit('request.create.queue', msg.content);
218
+ messageEvent.emit('message.create.queue', JSON.parse(message_string));
219
+ }
220
+ if (topic === 'project_user_update') {
221
+ winston.debug("reconnect here topic:" + topic);
222
+ // requestEvent.emit('request.create.queue', msg.content);
223
+ authEvent.emit('project_user.update.queue', JSON.parse(message_string));
224
+ }
225
+ cb(true);
226
+ // WebSocket.cb(true);
227
+ // requestEvent.on(msg.KEYYYYYYY+'.ws', msg.content);
228
+ }
229
+
230
+
231
+ function closeOnErr(err) {
232
+ if (!err) return false;
233
+ winston.error("[AMQP] error", err);
234
+ amqpConn.close();
235
+ return true;
236
+ }
237
+
238
+ // setInterval(function() {
239
+ // var d = new Date();
240
+ // publish(exchange, "request_create", Buffer.from("work work work: "+d));
241
+ // publish(exchange, "request_update", Buffer.from("work2 work work: "+d));
242
+ // }, 1000);
243
+
244
+
245
+ function listen() {
246
+
247
+ // http://www.squaremobius.net/amqp.node/channel_api.html
248
+ // https://docs.parseplatform.org/parse-server/guide/#scalability
249
+
250
+ requestEvent.on('request.create', function(request) {
251
+ setImmediate(() => {
252
+ winston.debug("reconnect request.create")
253
+ publish(exchange, "request_create", Buffer.from(JSON.stringify(request)));
254
+ });
255
+ });
256
+
257
+ requestEvent.on('request.update', function(request) {
258
+ setImmediate(() => {
259
+ winston.debug("reconnect request.update")
260
+ publish(exchange, "request_update", Buffer.from(JSON.stringify(request)));
261
+ });
262
+ });
263
+
264
+
265
+
266
+
267
+ requestEvent.on('request.participants.update', function(request) {
268
+ setImmediate(() => {
269
+ publish(exchange, "request_participants_update", Buffer.from(JSON.stringify(request)));
270
+ winston.debug("reconnect participants.update published")
271
+ });
272
+ });
273
+
274
+ requestEvent.on('request.update.preflight', function(request) {
275
+ setImmediate(() => {
276
+ // winston.info("reconnect request.update.preflight")
277
+ publish(exchange, "request_update_preflight", Buffer.from(JSON.stringify(request)));
278
+ winston.debug("reconnect request.update.preflight published")
279
+ });
280
+ });
281
+
282
+
283
+ requestEvent.on('request.close', function(request) {
284
+ setImmediate(() => {
285
+ publish(exchange, "request_close", Buffer.from(JSON.stringify(request)));
286
+ });
287
+ });
288
+
289
+ requestEvent.on('request.close.extended', function(request) {
290
+ setImmediate(() => {
291
+ publish(exchange, "request_close_extended", Buffer.from(JSON.stringify(request)));
292
+ });
293
+ });
294
+
295
+
296
+
297
+ messageEvent.on('message.create', function(message) {
298
+ setImmediate(() => {
299
+ publish(exchange, "message_create", Buffer.from(JSON.stringify(message)));
300
+ });
301
+ });
302
+
303
+ authEvent.on('project_user.update',function(data) {
304
+ setImmediate(() => {
305
+ let user = undefined;
306
+ let body = undefined;
307
+ if (data.req ) {
308
+ if (data.req.user) { //i think is null from chat21webhook
309
+ user = data.req.user;
310
+ }
311
+ if (data.req.body) {
312
+ body = data.req.body;
313
+ }
314
+ }
315
+ var dat = {updatedProject_userPopulated: data.updatedProject_userPopulated, req: {user: user, body: body}}; //remove request
316
+ winston.debug("dat",dat);
317
+ publish(exchange, "project_user_update", Buffer.from(JSON.stringify(dat)));
318
+ });
319
+ });
320
+
321
+ }
322
+
323
+ if (process.env.QUEUE_ENABLED === "true") {
324
+ requestEvent.queueEnabled = true;
325
+ messageEvent.queueEnabled = true;
326
+ authEvent.queueEnabled = true;
327
+ listen();
328
+ start();
329
+ winston.info("Queue enabled. endpint: " + url );
330
+ }
331
+