@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.
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 +52 -29
  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 +4 -4
  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
+