@tiledesk/tiledesk-server 2.2.39 → 2.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/LICENSE +14 -657
  3. package/README.md +17 -3
  4. package/app.js +14 -2
  5. package/channels/chat21/chat21WebHook.js +12 -1
  6. package/event/botEvent.js +1 -1
  7. package/event/subscriptionEvent.js +11 -0
  8. package/fonts/Roboto-Italic.ttf +0 -0
  9. package/fonts/Roboto-Medium.ttf +0 -0
  10. package/fonts/Roboto-MediumItalic.ttf +0 -0
  11. package/fonts/Roboto-Regular.ttf +0 -0
  12. package/middleware/passport.js +4 -1
  13. package/models/lead.js +2 -0
  14. package/models/request.js +38 -11
  15. package/models/subscriptionLog.js +34 -0
  16. package/models/tagLibrary.js +42 -0
  17. package/package.json +4 -11
  18. package/pubmodules/activities/activityArchiver.js +295 -0
  19. package/pubmodules/activities/index.js +3 -0
  20. package/pubmodules/activities/models/activity.js +88 -0
  21. package/pubmodules/activities/routes/activity.js +710 -0
  22. package/pubmodules/activities/test/activityRoute.js +85 -0
  23. package/pubmodules/analytics/analytics.js +1719 -0
  24. package/pubmodules/analytics/index.js +3 -0
  25. package/pubmodules/canned/cannedResponse.js +51 -0
  26. package/pubmodules/canned/cannedResponseRoute.js +157 -0
  27. package/pubmodules/canned/index.js +3 -0
  28. package/pubmodules/emailNotification/requestNotification.js +184 -26
  29. package/pubmodules/messageActions/messageActionsInterceptor.js +4 -2
  30. package/pubmodules/pubModulesManager.js +104 -5
  31. package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +3 -1
  32. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +3 -1
  33. package/pubmodules/trigger/default.js +271 -0
  34. package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
  35. package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
  36. package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
  37. package/pubmodules/trigger/index.js +3 -0
  38. package/pubmodules/trigger/models/trigger.js +149 -0
  39. package/pubmodules/trigger/rulesTrigger.js +1181 -0
  40. package/pubmodules/trigger/start.js +114 -0
  41. package/pubmodules/trigger/triggerRoute.js +150 -0
  42. package/routes/department.js +51 -0
  43. package/routes/group.js +140 -0
  44. package/routes/lead.js +24 -1
  45. package/routes/message.js +6 -3
  46. package/routes/project.js +52 -0
  47. package/routes/public-request.js +265 -2
  48. package/routes/request.js +83 -11
  49. package/routes/subscription.js +140 -0
  50. package/routes/tag.js +138 -0
  51. package/routes/user-request.js +3 -2
  52. package/routes/widget.js +16 -1
  53. package/routes/widgetLoader.js +31 -0
  54. package/services/emailService.js +189 -11
  55. package/services/faqService.js +1 -1
  56. package/services/leadService.js +2 -0
  57. package/services/modulesManager.js +7 -188
  58. package/services/requestService.js +364 -6
  59. package/services/subscriptionNotifier.js +485 -0
  60. package/template/email/assignedEmailMessage.html +1 -1
  61. package/template/email/assignedRequest.html +1 -1
  62. package/template/email/newMessage.html +1 -1
  63. package/template/email/newMessageFollower.html +236 -0
  64. package/template/email/passwordChanged.html +1 -1
  65. package/template/email/pooledEmailMessage.html +1 -1
  66. package/template/email/pooledRequest.html +1 -1
  67. package/template/email/resetPassword.html +2 -2
  68. package/template/email/ticket.html +1 -1
  69. package/test/messageRoute.js +69 -0
  70. package/test/requestService.js +3 -1
  71. package/views/messages.jade +2 -2
@@ -0,0 +1,1181 @@
1
+ const requestEvent = require('../../event/requestEvent');
2
+ const messageEvent = require('../../event/messageEvent');
3
+ const triggerEventEmitter = require('./event/triggerEventEmitter');
4
+ // const event2Event = require('../../../pubmodules/events/event2Event');
5
+ const eventEvent = require('../../pubmodules/events/eventEvent');
6
+
7
+ var Trigger = require('./models/trigger');
8
+ var winston = require('../../config/winston');
9
+
10
+ var Engine = require('@tiledesk/tiledesk-json-rules-engine').Engine;
11
+
12
+
13
+
14
+ var messageService = require('../../services/messageService');
15
+ var requestService = require('../../services/requestService');
16
+ var MessageConstants = require("../../models/messageConstants");
17
+ var leadService = require('../../services/leadService');
18
+ var LeadConstants = require('../../models/leadConstants');
19
+ var operatingHoursService = require("../../services/operatingHoursService");
20
+ var sendMessageUtil = require("../../utils/sendMessageUtil");
21
+ var cacheUtil = require("../../utils/cacheUtil");
22
+
23
+
24
+
25
+ const uuidv4 = require('uuid/v4');
26
+
27
+
28
+ class RulesTrigger {
29
+
30
+ constructor() {
31
+ // this.engine = new Engine();;
32
+ // this.engine = undefined;
33
+ this.engines = {};
34
+ }
35
+
36
+ // getEngine() {
37
+ // return this.engine;
38
+ // }
39
+
40
+ listen(success, error) {
41
+ var that = this;
42
+
43
+ var enabled = process.env.TRIGGER_ENABLED || "true";
44
+ winston.debug('Trigger enabled:'+enabled);
45
+
46
+ if (enabled==="true") {
47
+ winston.debug('Trigger enabled');
48
+ }else {
49
+ winston.info('Trigger disabled');
50
+ return 0;
51
+ }
52
+
53
+
54
+ setImmediate(() => {
55
+
56
+ requestEvent.on('request.support_group.created', function(request) {
57
+ // requestEvent.on('request.create', function(request) {
58
+ var requestJson = request.toJSON();
59
+ operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
60
+ requestJson.isOpen = isOpen;
61
+ winston.debug('requestJson: ', requestJson);
62
+ that.exec(requestJson, 'request.create', success, error);
63
+ });
64
+ });
65
+
66
+ requestEvent.on('request.participants.join', function(data) {
67
+ let request = data.request;
68
+ let member = data.member;
69
+ var requestJson = request.toJSON();
70
+ operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
71
+ requestJson.isOpen = isOpen;
72
+ winston.debug('requestJson: ', requestJson);
73
+ that.exec(requestJson, 'request.participants.join', success, error);
74
+ });
75
+ });
76
+
77
+ messageEvent.on('message.create.from.requester', function(message) {
78
+ winston.debug('message.create.from.requester', message);
79
+ // aggiungi is open anche a message.create altrimenti isOpen nn va
80
+ // operatingHoursService.projectIsOpenNow(request.id_project, function (isOpen, err) {
81
+ that.exec(message, 'message.create.from.requester', success, error);
82
+ });
83
+ // not in use
84
+ // messageEvent.on('message.received', function(request) {
85
+ // that.exec(request, 'message.received', success, error);
86
+ // });
87
+
88
+ // event2Event.on('*', function(event){
89
+ // winston.verbose('event2Event this.event: ' + this.event);
90
+ // that.exec(event, this.event, success,error);
91
+ // });
92
+
93
+ eventEvent.on('event.emit', function(event) {
94
+ winston.debug('eventEvent event.emit', event);
95
+ that.exec(event, 'event.emit', success,error);
96
+ });
97
+
98
+
99
+
100
+ this.runAction();
101
+
102
+ winston.info('Trigger rules started');
103
+
104
+ });
105
+
106
+ }
107
+
108
+ runAction() {
109
+
110
+ triggerEventEmitter.on('message.send', function(eventTrigger) {
111
+
112
+ try {
113
+
114
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
115
+ var trigger = eventTrigger.trigger;
116
+ winston.debug('runAction trigger', trigger.toObject());
117
+
118
+
119
+ var action = eventTrigger.action;
120
+ winston.debug('runAction action', action.toObject());
121
+
122
+ var fullname = action.parameters.fullName || "BOT";
123
+ winston.debug('runAction action fullname: ' + fullname);
124
+
125
+ var sender = "system";
126
+
127
+ if (action.parameters.sender) {
128
+ sender = action.parameters.sender;
129
+ }
130
+ winston.debug('runAction action sender: ' + sender);
131
+
132
+ var text = action.parameters.text;
133
+ winston.debug('runAction action text: ' + text);
134
+
135
+ var attributes = {templateProcessor: true};
136
+
137
+ // var attributes = action.parameters.attributes;
138
+ // winston.debug('runAction action attributes: ' + attributes);
139
+
140
+ if (text && text.endsWith(":tdk_msg_subtype_info")) {
141
+ attributes.subtype = "info";
142
+ text = text.replace(':tdk_msg_subtype_info', '');
143
+ winston.verbose('tdk_msg_subtype_info');
144
+ }
145
+
146
+
147
+ var recipient;
148
+ if (eventTrigger.eventKey=="request.create" || eventTrigger.eventKey=="request.participants.join") {
149
+ recipient = eventTrigger.event.request_id;
150
+ }
151
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
152
+ recipient = eventTrigger.event.recipient;
153
+ }
154
+ if (eventTrigger.eventKey=="event.emit") {
155
+ winston.debug('runAction action event.emit: ', eventTrigger.event.toObject());
156
+
157
+ //TODO funziona?
158
+ recipient = eventTrigger.event.project_user.id_user;
159
+ }
160
+
161
+ winston.debug('runAction action recipient: ' + recipient);
162
+
163
+ var id_project = eventTrigger.event.id_project;
164
+ winston.debug('runAction action id_project: ' + id_project);
165
+
166
+ // send(sender, senderFullname, recipient, text, id_project, createdBy, attributes) {
167
+ // messageService.send(
168
+ // sender,
169
+ // fullname,
170
+ // recipient,
171
+ // text,
172
+ // id_project,
173
+ // null,
174
+ // attributes
175
+ // );
176
+
177
+ // send(sender, senderFullname, recipient, text, id_project, createdBy, attributes, type, metadata, language) {
178
+ sendMessageUtil.send(
179
+ sender,
180
+ fullname,
181
+ recipient,
182
+ text,
183
+ id_project,
184
+ null,
185
+ attributes
186
+ );
187
+
188
+ } catch(e) {
189
+ winston.error("Error runAction", e);
190
+ }
191
+
192
+ });
193
+
194
+
195
+
196
+
197
+
198
+ triggerEventEmitter.on('request.department.route', function(eventTrigger) {
199
+
200
+ try {
201
+
202
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
203
+ var trigger = eventTrigger.trigger;
204
+ winston.debug('runAction trigger', trigger.toObject());
205
+
206
+
207
+ var action = eventTrigger.action;
208
+ winston.debug('runAction action', action.toObject());
209
+
210
+
211
+ var departmentid = action.parameters.departmentid;
212
+ winston.debug('runAction action departmentid: ' + departmentid);
213
+
214
+
215
+ var request_id;
216
+ if (eventTrigger.eventKey=="request.create") {
217
+ request_id = eventTrigger.event.request_id;
218
+ }
219
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
220
+ request_id = eventTrigger.event.recipient;
221
+ }
222
+
223
+ winston.debug('runAction action request_id: ' + request_id);
224
+
225
+ var id_project = eventTrigger.event.id_project;
226
+ winston.debug('runAction action id_project: ' + id_project);
227
+
228
+ // route(request_id, departmentid, id_project, nobot) {
229
+ requestService.route(request_id, departmentid, id_project);
230
+
231
+ } catch(e) {
232
+ winston.error("Error runAction", e);
233
+ }
234
+
235
+ });
236
+
237
+
238
+
239
+
240
+ triggerEventEmitter.on('request.department.route.self', function(eventTrigger) {
241
+
242
+ try {
243
+
244
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
245
+ var trigger = eventTrigger.trigger;
246
+ winston.debug('runAction trigger', trigger.toObject());
247
+
248
+ var action = eventTrigger.action;
249
+ winston.debug('runAction action', action.toObject());
250
+
251
+ var request_id;
252
+ if (eventTrigger.eventKey=="request.create") {
253
+ request_id = eventTrigger.event.request_id;
254
+ }
255
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
256
+ request_id = eventTrigger.event.recipient;
257
+ }
258
+
259
+ winston.debug('runAction action request_id: ' + request_id);
260
+
261
+ var id_project = eventTrigger.event.id_project;
262
+ winston.debug('runAction action id_project: ' + id_project);
263
+
264
+ // reroute(request_id, id_project, nobot) {
265
+ requestService.reroute(request_id, id_project);
266
+
267
+ } catch(e) {
268
+ winston.error("Error runAction", e);
269
+ }
270
+
271
+ });
272
+
273
+
274
+
275
+
276
+
277
+ triggerEventEmitter.on('request.status.update', function(eventTrigger) {
278
+
279
+ try {
280
+
281
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
282
+ var trigger = eventTrigger.trigger;
283
+ winston.debug('runAction trigger', trigger.toObject());
284
+
285
+ var action = eventTrigger.action;
286
+ winston.debug('runAction action', action.toObject());
287
+
288
+ var newstatus = action.parameters.status;
289
+ winston.debug('runAction action newstatus: ' + newstatus);
290
+
291
+
292
+ var request_id;
293
+ if (eventTrigger.eventKey=="request.create") {
294
+ request_id = eventTrigger.event.request_id;
295
+ }
296
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
297
+ request_id = eventTrigger.event.recipient;
298
+ }
299
+
300
+ winston.debug('runAction action request_id: ' + request_id);
301
+
302
+ var id_project = eventTrigger.event.id_project;
303
+ winston.debug('runAction action id_project: ' + id_project);
304
+
305
+ // changeStatusByRequestId(request_id, id_project, newstatus) {
306
+ requestService.changeStatusByRequestId(request_id, id_project, newstatus);
307
+
308
+ } catch(e) {
309
+ winston.error("Error runAction", e);
310
+ }
311
+
312
+ });
313
+
314
+
315
+
316
+
317
+
318
+
319
+ triggerEventEmitter.on('request.close', function(eventTrigger) {
320
+
321
+ try {
322
+
323
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
324
+ var trigger = eventTrigger.trigger;
325
+ winston.debug('runAction trigger', trigger.toObject());
326
+
327
+ var action = eventTrigger.action;
328
+ winston.debug('runAction action', action.toObject());
329
+
330
+
331
+ var request_id;
332
+ if (eventTrigger.eventKey=="request.create") {
333
+ request_id = eventTrigger.event.request_id;
334
+ }
335
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
336
+ request_id = eventTrigger.event.recipient;
337
+ }
338
+
339
+ winston.debug('runAction action request_id: ' + request_id);
340
+
341
+ var id_project = eventTrigger.event.id_project;
342
+ winston.debug('runAction action id_project: ' + id_project);
343
+
344
+ // closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
345
+ const closed_by = "_trigger";
346
+ requestService.closeRequestByRequestId(request_id, id_project, false, true, closed_by);
347
+
348
+ } catch(e) {
349
+ winston.error("Error runAction", e);
350
+ }
351
+
352
+ });
353
+
354
+
355
+
356
+ triggerEventEmitter.on('request.reopen', function(eventTrigger) {
357
+
358
+ try {
359
+
360
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
361
+ var trigger = eventTrigger.trigger;
362
+ winston.debug('runAction trigger', trigger.toObject());
363
+
364
+ var action = eventTrigger.action;
365
+ winston.debug('runAction action', action.toObject());
366
+
367
+
368
+ var request_id;
369
+ if (eventTrigger.eventKey=="request.create") {
370
+ request_id = eventTrigger.event.request_id;
371
+ }
372
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
373
+ request_id = eventTrigger.event.recipient;
374
+ }
375
+
376
+ winston.debug('runAction action request_id: ' + request_id);
377
+
378
+ var id_project = eventTrigger.event.id_project;
379
+ winston.debug('runAction action id_project: ' + id_project);
380
+
381
+ // reopenRequestByRequestId(request_id, id_project) {
382
+ requestService.reopenRequestByRequestId(request_id, id_project);
383
+
384
+ } catch(e) {
385
+ winston.error("Error runAction", e);
386
+ }
387
+
388
+ });
389
+
390
+
391
+
392
+ triggerEventEmitter.on('request.participants.join', function(eventTrigger) {
393
+
394
+ try {
395
+
396
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
397
+ var trigger = eventTrigger.trigger;
398
+ winston.debug('runAction trigger', trigger.toObject());
399
+
400
+ var action = eventTrigger.action;
401
+ winston.debug('runAction action', action.toObject());
402
+
403
+ // console.log("actionaction",action);
404
+
405
+ var member = action.parameters.member;
406
+ winston.debug('runAction action member: ' + member);
407
+
408
+ var request_id;
409
+ if (eventTrigger.eventKey=="request.create") {
410
+ request_id = eventTrigger.event.request_id;
411
+ }
412
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
413
+ request_id = eventTrigger.event.recipient;
414
+ }
415
+
416
+ winston.debug('runAction action request_id: ' + request_id);
417
+
418
+ var id_project = eventTrigger.event.id_project;
419
+ winston.debug('runAction action id_project: ' + id_project);
420
+
421
+ // addParticipantByRequestId(request_id, id_project, member) {
422
+ requestService.addParticipantByRequestId(request_id, id_project, member);
423
+
424
+
425
+ } catch(e) {
426
+ winston.error("Error runAction", e);
427
+ }
428
+
429
+ });
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ triggerEventEmitter.on('request.department.bot.launch', function(eventTrigger) {
438
+
439
+ try {
440
+
441
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
442
+ var trigger = eventTrigger.trigger;
443
+ winston.debug('runAction trigger', trigger.toObject());
444
+
445
+ var action = eventTrigger.action;
446
+ winston.debug('runAction action', action.toObject());
447
+
448
+ var request_id;
449
+ if (eventTrigger.eventKey=="request.create") {
450
+ request_id = eventTrigger.event.request_id;
451
+ }
452
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
453
+ request_id = eventTrigger.event.recipient;
454
+ }
455
+
456
+ winston.debug('runAction action request_id: ' + request_id);
457
+
458
+ var id_project = eventTrigger.event.id_project;
459
+ winston.debug('runAction action id_project: ' + id_project);
460
+
461
+ // reroute(request_id, id_project, nobot) {
462
+ requestService.reroute(request_id, id_project).then(function(request) {
463
+
464
+ winston.verbose('request.department.bot.launch action reroute request_id: ' + request_id);
465
+
466
+ // rendi dinamico /start
467
+ messageService.send(
468
+ 'system',
469
+ 'Bot',
470
+ request_id,
471
+ '\\start',
472
+ id_project,
473
+ null,
474
+ {subtype:'info', updateconversation : false}
475
+ );
476
+
477
+ // TODO Add typing?
478
+ })
479
+
480
+
481
+ } catch(e) {
482
+ winston.error("Error runAction", e);
483
+ }
484
+
485
+ });
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+ triggerEventEmitter.on('request.bot.launch', function(eventTrigger) {
494
+
495
+ try {
496
+
497
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
498
+ var trigger = eventTrigger.trigger;
499
+ winston.debug('runAction trigger', trigger.toObject());
500
+
501
+ var action = eventTrigger.action;
502
+ winston.debug('runAction action', action.toObject());
503
+
504
+ var request_id;
505
+ if (eventTrigger.eventKey=="request.create") {
506
+ request_id = eventTrigger.event.request_id;
507
+ }
508
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
509
+ request_id = eventTrigger.event.recipient;
510
+ }
511
+ winston.debug('runAction action request_id: ' + request_id);
512
+
513
+
514
+ var member = action.parameters.member;
515
+ winston.debug('runAction action member: ' + member);
516
+
517
+
518
+ var id_project = eventTrigger.event.id_project;
519
+ winston.debug('runAction action id_project: ' + id_project);
520
+
521
+ requestService.addParticipantByRequestId(request_id, id_project, member).then(function(request) {
522
+
523
+ winston.verbose('request.bot.launch action request_id: ' + request_id);
524
+
525
+ // rendi dinamico /start
526
+ messageService.send(
527
+ 'system',
528
+ 'Bot',
529
+ request_id,
530
+ '\\start',
531
+ id_project,
532
+ null,
533
+ {subtype:'info', updateconversation : false}
534
+ );
535
+
536
+ // TODO Add typing?
537
+ })
538
+
539
+
540
+ } catch(e) {
541
+ winston.error("Error runAction", e);
542
+ }
543
+
544
+ });
545
+
546
+
547
+
548
+ triggerEventEmitter.on('request.tags.add', function(eventTrigger) {
549
+
550
+ try {
551
+
552
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
553
+ var trigger = eventTrigger.trigger;
554
+ winston.debug('runAction trigger', trigger.toObject());
555
+
556
+ var action = eventTrigger.action;
557
+ winston.debug('runAction action', action.toObject());
558
+
559
+ // console.log("actionaction",action);
560
+
561
+ var tag = action.parameters.tag;
562
+ winston.debug('runAction action tag: ' + tag);
563
+
564
+ var request_id;
565
+ if (eventTrigger.eventKey=="request.create") {
566
+ request_id = eventTrigger.event.request_id;
567
+ }
568
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
569
+ request_id = eventTrigger.event.recipient;
570
+ }
571
+
572
+ winston.debug('runAction action request_id: ' + request_id);
573
+
574
+ var id_project = eventTrigger.event.id_project;
575
+ winston.debug('runAction action id_project: ' + id_project);
576
+
577
+ // addTagByRequestId(request_id, id_project, tag) {
578
+ requestService.addTagByRequestId(request_id, id_project, {tag:tag});
579
+
580
+
581
+ } catch(e) {
582
+ winston.error("Error runAction", e);
583
+ }
584
+
585
+ });
586
+
587
+
588
+
589
+
590
+
591
+ triggerEventEmitter.on('request.participants.leave', function(eventTrigger) {
592
+
593
+ try {
594
+
595
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
596
+ var trigger = eventTrigger.trigger;
597
+ winston.debug('runAction trigger', trigger.toObject());
598
+
599
+ var action = eventTrigger.action;
600
+ winston.debug('runAction action', action.toObject());
601
+
602
+ var member = action.parameters.member;
603
+ winston.debug('runAction action member: ' + member);
604
+
605
+ var request_id;
606
+ if (eventTrigger.eventKey=="request.create") {
607
+ request_id = eventTrigger.event.request_id;
608
+ }
609
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
610
+ request_id = eventTrigger.event.recipient;
611
+ }
612
+
613
+ winston.debug('runAction action request_id: ' + request_id);
614
+
615
+ var id_project = eventTrigger.event.id_project;
616
+ winston.debug('runAction action id_project: ' + id_project);
617
+
618
+ // removeParticipantByRequestId(request_id, id_project, member) {
619
+ requestService.removeParticipantByRequestId(request_id, id_project, member);
620
+
621
+ } catch(e) {
622
+ winston.error("Error runAction", e);
623
+ }
624
+
625
+ });
626
+
627
+
628
+
629
+ triggerEventEmitter.on('request.create', function(eventTrigger) {
630
+
631
+ try {
632
+
633
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
634
+
635
+ var trigger = eventTrigger.trigger;
636
+ winston.debug('runAction trigger', trigger.toObject());
637
+
638
+ var action = eventTrigger.action;
639
+ winston.debug('runAction action', action.toObject());
640
+
641
+
642
+ var text = action.parameters.text;
643
+ winston.debug('runAction action text: ' + text);
644
+
645
+ var subtype = action.parameters.subtype;
646
+ winston.debug('runAction action subtype: ' + subtype);;
647
+
648
+ var status = action.parameters.status;
649
+ winston.debug('runAction action status: ' + status);
650
+
651
+
652
+ var preflight = action.parameters.preflight;
653
+ winston.debug('runAction action preflight: ' + preflight);
654
+
655
+ if (text && text.indexOf(":tdk_msg_subtype_info")>-1) {
656
+ subtype = "info";
657
+ text = text.replace(':tdk_msg_subtype_info', '');
658
+ winston.debug('tdk_msg_subtype_info');
659
+ }
660
+
661
+ if (text && text.indexOf(":tdk_req_status_hidden")>-1) {
662
+ status = 50;
663
+ preflight = true;
664
+ text = text.replace(':tdk_req_status_hidden', '');
665
+ winston.debug('tdk_req_status_hidden');
666
+ }
667
+
668
+ var type = action.parameters.type;
669
+ winston.debug('runAction action type: ' + type);
670
+
671
+
672
+
673
+
674
+
675
+ var departmentid = action.parameters.departmentid;
676
+ winston.debug('runAction action departmentid: ' + departmentid);
677
+
678
+ // var attributes = action.parameters.attributes;
679
+ // winston.debug('runAction action attributes: ' + attributes);
680
+
681
+
682
+
683
+ var request_id = 'support-group-'+id_project+"-"+uuidv4();
684
+ var id_user;
685
+ var fullname;
686
+ var email;
687
+ var attributes = {};
688
+
689
+
690
+
691
+ var sourcePage;
692
+ var language;
693
+ var userAgent;
694
+
695
+ var userObj = undefined;
696
+
697
+
698
+ if (eventTrigger.eventKey=="event.emit") {
699
+ winston.verbose('runAction action event.emit: ', eventTrigger.event);
700
+ // winston.debug('runAction action event.emit: ', eventTrigger.event.toObject());
701
+
702
+ // if (eventTrigger.event.project_user &&
703
+ // eventTrigger.event.project_user.uuid_user &&
704
+ // eventTrigger.event.project_user.uuid_user) {
705
+ id_user = eventTrigger.event.project_user.uuid_user;
706
+
707
+ if (eventTrigger.event.user) {
708
+
709
+ winston.verbose('eventTrigger.event.user: ', eventTrigger.event.user);
710
+
711
+
712
+ if (eventTrigger.event.user.toObject) {
713
+ userObj = eventTrigger.event.user.toObject();
714
+ }else {
715
+ userObj = eventTrigger.event.user;
716
+ }
717
+ delete userObj.password;
718
+
719
+
720
+ if (eventTrigger.event.user.fullName) {
721
+ fullname = eventTrigger.event.user.fullName;
722
+ winston.verbose('fullname: '+ fullname);
723
+ }
724
+
725
+ if (eventTrigger.event.user.email) {
726
+ email = eventTrigger.event.user.email;
727
+ winston.verbose('email: '+ email);
728
+ }
729
+
730
+ }
731
+
732
+ // }
733
+
734
+
735
+ // if (attributes && attributes.id_user) {
736
+ // id_user = attributes.id_user;
737
+ // }
738
+
739
+ if (eventTrigger.event.attributes) {
740
+ var eventAttributes = eventTrigger.event.attributes;
741
+
742
+ if (eventAttributes.request_id) {
743
+ request_id = eventAttributes.request_id;
744
+ }
745
+ if (eventAttributes.id_user) {
746
+ id_user = eventAttributes.id_user;
747
+ }
748
+ if (eventAttributes.fullname) {
749
+ fullname = eventAttributes.fullname;
750
+ }
751
+ if (eventAttributes.email) {
752
+ email = eventAttributes.email;
753
+ }
754
+
755
+ if (eventAttributes.language) {
756
+ language = eventAttributes.language;
757
+ }
758
+
759
+ if (eventAttributes.department) { //TODO Dario change to departmentId
760
+ departmentid = eventAttributes.department;
761
+ }
762
+
763
+ if (eventAttributes.text) {
764
+ text = eventAttributes.text;
765
+ }
766
+
767
+ if (eventAttributes.status) {
768
+ status = eventAttributes.status;
769
+ }
770
+
771
+ if (eventAttributes.subtype) {
772
+ subtype = eventAttributes.subtype;
773
+ }
774
+
775
+
776
+
777
+
778
+
779
+
780
+ if (eventAttributes.attributes) {
781
+ attributes = eventAttributes.attributes;
782
+
783
+
784
+
785
+ if (eventAttributes.attributes.client) {
786
+ userAgent = eventAttributes.attributes.client; //the widget pass client parameter and not userAgent
787
+ }
788
+ if (eventAttributes.attributes.sourcePage) {
789
+ sourcePage = eventAttributes.attributes.sourcePage;
790
+ }
791
+
792
+ }
793
+
794
+
795
+
796
+
797
+ }
798
+
799
+
800
+
801
+ if (subtype) {
802
+ attributes.subtype = subtype;
803
+ }
804
+
805
+ if (userObj) {
806
+ attributes.decoded_jwt = userObj;
807
+ }
808
+
809
+
810
+ }
811
+
812
+ winston.debug('runAction action id_user:'+id_user);
813
+
814
+
815
+
816
+ var id_project = eventTrigger.event.id_project;
817
+ winston.debug('runAction action id_project: ' + id_project);
818
+
819
+
820
+ // createIfNotExistsWithLeadId(lead_id, fullname, email, id_project, createdBy, attributes, status)
821
+ leadService.createIfNotExistsWithLeadId(id_user, fullname , email, id_project, null, attributes, LeadConstants.TEMP)
822
+ .then(function(createdLead) {
823
+
824
+
825
+
826
+
827
+
828
+ // return Project_user.findOne(queryProjectUser, function (err, project_user) {
829
+
830
+ // var project_user_id = null;
831
+
832
+ // if (err) {
833
+ // winston.error("Error getting the project_user_id", err);
834
+ // }
835
+
836
+ // if (project_user) {
837
+ // winston.verbose("project_user", project_user);
838
+ // project_user_id = project_user.id;
839
+ // winston.verbose("project_user_id: " + project_user_id);
840
+ // }
841
+
842
+
843
+ var puser = eventTrigger.event.project_user;
844
+ var project_user_id = puser._id; //questo è null se nn specifico come trigger un event
845
+ winston.verbose("project_user_id: " + project_user_id);
846
+
847
+
848
+ // qui c'è errore c21
849
+ // createWithIdAndRequester(request_id, project_user_id, lead_id, id_project, first_text, departmentid, sourcePage,
850
+ // language, userAgent, status, createdBy, attributes, subject, preflight) {
851
+
852
+ // return requestService.createWithIdAndRequester(request_id, project_user_id, createdLead._id, id_project,
853
+ // text, departmentid, sourcePage,
854
+ // language, userAgent, status, id_user, attributes, undefined, preflight).then(function (savedRequest) {
855
+
856
+
857
+ var new_request = {
858
+ request_id: request_id, project_user_id: project_user_id, lead_id: createdLead._id, id_project: id_project,
859
+ first_text: text, departmentid: departmentid, sourcePage: sourcePage,
860
+ language: language, userAgent: userAgent, status: status, createdBy: id_user,
861
+ attributes: attributes, subject: undefined, preflight: preflight, channel: undefined, location: undefined,
862
+ lead: createdLead, requester: puser
863
+ };
864
+
865
+ return requestService.create(new_request).then(function (savedRequest) {
866
+
867
+
868
+ if (attributes) {
869
+ attributes.sendnotification = false; // sembra nn funzionae
870
+ }
871
+
872
+ var senderFullname = fullname || 'Guest';
873
+
874
+ // create(sender, senderFullname, recipient, text, id_project, createdBy, status, attributes, type, metadata, language) {
875
+ return messageService.create( id_user, senderFullname , savedRequest.request_id, text,
876
+ id_project, id_user, MessageConstants.CHAT_MESSAGE_STATUS.SENDING, attributes, type, eventTrigger.event.metadata, language);
877
+ }).catch(function (err) {
878
+ winston.error("Error trigger requestService.create", err);
879
+ });
880
+ });
881
+ // });
882
+
883
+
884
+
885
+ } catch(e) {
886
+ winston.error("Error runAction", e);
887
+ }
888
+
889
+ });
890
+
891
+
892
+
893
+ }
894
+
895
+ delayedFunction(action,triggerEvent, waitTime) {
896
+ setTimeout(function() {
897
+ triggerEvent.action = action;
898
+ // console.log("setTimeout",action.key, triggerEvent);
899
+ triggerEventEmitter.emit(action.key,triggerEvent );
900
+ }, waitTime);
901
+ }
902
+
903
+ createEngine() {
904
+
905
+ }
906
+
907
+ exec(event, eventKey,successCall,errorCall) {
908
+ var that = this;
909
+ // winston.verbose('this', this);
910
+
911
+ // var eventKey = Object.keys(this._events);
912
+ // var eventKey = Object.values(this._events);
913
+ // winston.verbose('eventKey: ',eventKey);
914
+
915
+ // winston.verbose('this', JSON.stringify(this));
916
+ setImmediate(() => {
917
+
918
+
919
+ winston.debug('event', event);
920
+ winston.debug('successCall', successCall);
921
+ winston.debug('trigger event', event);
922
+
923
+ let query = {id_project: event.id_project, enabled:true, 'trigger.key':eventKey};
924
+
925
+
926
+ winston.debug('trigger query', query);
927
+
928
+ Trigger.find(query)
929
+ .cache(cacheUtil.longTTL, event.id_project+":triggers:trigger.key:"+eventKey)
930
+ .exec(function(err, triggers) {
931
+ if (err) {
932
+ winston.error('Error gettting bots ', err);
933
+ return 0;
934
+ }
935
+ if (!triggers || triggers.length==0) {
936
+ winston.debug('No trigger found');
937
+ return 0;
938
+ }
939
+
940
+ winston.debug('active triggers found', triggers);
941
+
942
+
943
+ // var engineExists = that.engines.hasOwnProperty(event.id_project);
944
+ // // var engineExists = that.engines.hasOwnProperty(event.id_project+"-"+eventKey);
945
+ // winston.verbose("engineExists:"+engineExists);
946
+
947
+ // var engine;
948
+ // if (!engineExists) {
949
+ // engine = new Engine();
950
+ // that.engines[event.id_project] = engine;
951
+ // // that.engines[event.id_project+"-"+eventKey] = engine;
952
+ // winston.verbose("create engine");
953
+ // }else {
954
+ // engine = that.engines[event.id_project];
955
+ // // engine = that.engines[event.id_project+"-"+eventKey];
956
+ // winston.verbose("engine already exists");
957
+ // return 0;
958
+ // }
959
+
960
+ var engine = new Engine();
961
+ // winston.verbose("create engine");
962
+ // that.engine = new Engine();
963
+
964
+
965
+
966
+
967
+ triggers.forEach(function(trigger) {
968
+ winston.debug('trigger', trigger.toObject());
969
+
970
+ var rule = {
971
+ conditions: {
972
+ },
973
+ event: { // define the event to fire when the conditions evaluate truthy
974
+ type: trigger.id,
975
+ // type: trigger.actions[0].key,
976
+ params: trigger.actions
977
+ // params: {id: trigger._id, actionParameters:trigger.actions[0].parameters}
978
+ // params: {
979
+ // message: 'Player has fouled out!'
980
+ // }
981
+ }
982
+ };
983
+
984
+ // qui se non imposto condizioni
985
+ // uncaughtException: "conditions" root must contain a single instance of "all" or "any"
986
+ // 2022-07-18T08:58:18.589888+00:00 app[web.1]: Error: "conditions" root must contain a single instance of "all" or "any"
987
+
988
+ if (trigger.conditions.all.toObject() && trigger.conditions.all.toObject().length>0) {
989
+ rule.conditions.all = trigger.conditions.all.toObject();
990
+ }
991
+
992
+ if (trigger.conditions.any.toObject() && trigger.conditions.any.toObject().length>0) {
993
+ rule.conditions.any = trigger.conditions.any.toObject();
994
+ }
995
+
996
+
997
+ winston.debug('rule', rule);
998
+
999
+ // define a rule for detecting the player has exceeded foul limits. Foul out any player who:
1000
+ // (has committed 5 fouls AND game is 40 minutes) OR (has committed 6 fouls AND game is 48 minutes)
1001
+
1002
+ engine.addRule(rule);
1003
+ // that.engine.addRule(rule);
1004
+
1005
+ });
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+
1019
+ /**
1020
+ * Define facts the engine will use to evaluate the conditions above.
1021
+ * Facts may also be loaded asynchronously at runtime; see the advanced example below
1022
+ */
1023
+
1024
+
1025
+ // let facts = event.toObject();
1026
+ let facts;
1027
+ if (event.toJSON) { //request is mongoose object
1028
+ facts = event.toJSON();
1029
+ }else { //message is plain object because messageEvent replace it
1030
+ facts = event;
1031
+ }
1032
+ winston.verbose("facts", facts);
1033
+
1034
+ engine.addFact("json", facts)
1035
+
1036
+
1037
+
1038
+ engine.on('success', function(eventSuccess, almanac, ruleResult) {
1039
+ // info: runAction eventTrigger.eventSuccess: {"type":"request.create","params":{"id":"5e4a771a248688f8ea55e47a","actionParameters":{"fullName":"fullName","text":"hi"}}}
1040
+ winston.debug("success eventSuccess", eventSuccess);
1041
+ winston.debug("success ruleResult", ruleResult);
1042
+
1043
+ var triggerEvent = {event: event, eventKey:eventKey , triggers: triggers, ruleResult:requestEvent,eventSuccess:eventSuccess, engine:engine };
1044
+
1045
+ // info: test success eventTrigger:{
1046
+ // "event":{"_id":"5e4a771a248688f8ea55e47e","name":"user.pay","attributes":{"attr1":"val1"},"id_project":"5e4a771a248688f8ea55e476","project_user":{"_id":"5e4a771a248688f8ea55e477","id_project":"5e4a771a248688f8ea55e476","id_user":{"_id":"5e4a771a248688f8ea55e475","email":"test-trigger-EventEmit-1581938458317@email.com","firstname":"Test Firstname","lastname":"Test lastname","createdAt":"2020-02-17T11:20:58.326Z","updatedAt":"2020-02-17T11:20:58.326Z","__v":0},"role":"owner","user_available":true,"createdBy":"5e4a771a248688f8ea55e475","createdAt":"2020-02-17T11:20:58.580Z","updatedAt":"2020-02-17T11:20:58.580Z","__v":0,"id":"5e4a771a248688f8ea55e477"},"createdBy":"5e4a771a248688f8ea55e475","createdAt":"2020-02-17T11:20:58.603Z","updatedAt":"2020-02-17T11:20:58.603Z","__v":0},
1047
+ // "eventKey":"event.emit",
1048
+ // "triggers":[{"enabled":true,"_id":"5e4a771a248688f8ea55e47a","name":"test","description":"test desc","id_project":"5e4a771a248688f8ea55e476","trigger":{"_id":"5e4a771a248688f8ea55e47b","key":"event.emit","name":"event emit event","description":"event emit descr"},"conditions":{"_id":"5e4a771a248688f8ea55e47c","all":[{"key":"event1","fact":"json","path":"attributes.attr1","operator":"equal","value":"val1"}],"any":[]},"actions":[{"_id":"5e4a771a248688f8ea55e47d","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}],"createdBy":"5e4a771a248688f8ea55e475","createdAt":"2020-02-17T11:20:58.597Z","updatedAt":"2020-02-17T11:20:58.597Z","__v":0}],
1049
+ // "ruleResult":{"_events":{"request.create":[null,null,null,null,null],"request.close":[null,null,null]},"_eventsCount":7}
1050
+ // ,"eventSuccess":{"type":"request.create","params":{"id":"5e4a771a248688f8ea55e47a","actionParameters":{"fullName":"fullName","text":"hi"}}},
1051
+ // "engine":{"_events":{},"_eventsCount":2,"rules":["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"request.create\",\"params\":{\"id\":\"5e4a771a248688f8ea55e47a\",\"actionParameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}}}"],"allowUndefinedFacts":false,"operators":{},"facts":{},"status":"RUNNING","prioritizedRules":[["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"request.create\",\"params\":{\"id\":\"5e4a771a248688f8ea55e47a\",\"actionParameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}}}"]]}}
1052
+
1053
+
1054
+ // dopo
1055
+ // {"event":{"_id":"5e4a7e52f3f18136851535f5","name":"user.pay","attributes":{"attr1":"val1"},"id_project":"5e4a7e52f3f18136851535ed","project_user":{"_id":"5e4a7e52f3f18136851535ee","id_project":"5e4a7e52f3f18136851535ed","id_user":{"_id":"5e4a7e52f3f18136851535ec","email":"test-trigger-EventEmit-1581940306138@email.com","firstname":"Test Firstname","lastname":"Test lastname","createdAt":"2020-02-17T11:51:46.146Z","updatedAt":"2020-02-17T11:51:46.146Z","__v":0},"role":"owner","user_available":true,"createdBy":"5e4a7e52f3f18136851535ec","createdAt":"2020-02-17T11:51:46.397Z","updatedAt":"2020-02-17T11:51:46.397Z","__v":0,"id":"5e4a7e52f3f18136851535ee"},"createdBy":"5e4a7e52f3f18136851535ec","createdAt":"2020-02-17T11:51:46.422Z","updatedAt":"2020-02-17T11:51:46.422Z","__v":0},
1056
+ // "eventKey":"event.emit",
1057
+ // "triggers":[{"enabled":true,"_id":"5e4a7e52f3f18136851535f1","name":"test","description":"test desc","id_project":"5e4a7e52f3f18136851535ed","trigger":{"_id":"5e4a7e52f3f18136851535f2","key":"event.emit","name":"event emit event","description":"event emit descr"},"conditions":{"_id":"5e4a7e52f3f18136851535f3","all":[{"key":"event1","fact":"json","path":"attributes.attr1","operator":"equal","value":"val1"}],"any":[]},"actions":[{"_id":"5e4a7e52f3f18136851535f4","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}],"createdBy":"5e4a7e52f3f18136851535ec","createdAt":"2020-02-17T11:51:46.416Z","updatedAt":"2020-02-17T11:51:46.416Z","__v":0}],
1058
+ // "ruleResult":{"_events":{"request.create":[null,null,null,null,null],"request.close":[null,null,null]},"_eventsCount":7},
1059
+ // "eventSuccess":{"type":"5e4a7e52f3f18136851535f1","params":[{"_id":"5e4a7e52f3f18136851535f4","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}]},
1060
+ // "engine":{"_events":{},"_eventsCount":2,"rules":["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"5e4a7e52f3f18136851535f1\",\"params\":[{\"_id\":\"5e4a7e52f3f18136851535f4\",\"key\":\"request.create\",\"parameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}]}}"],"allowUndefinedFacts":false,"operators":{},"facts":{},"status":"RUNNING","prioritizedRules":[["{\"conditions\":{\"priority\":1,\"all\":[{\"operator\":\"equal\",\"value\":\"val1\",\"fact\":\"json\",\"path\":\"attributes.attr1\"}]},\"priority\":1,\"event\":{\"type\":\"5e4a7e52f3f18136851535f1\",\"params\":[{\"_id\":\"5e4a7e52f3f18136851535f4\",\"key\":\"request.create\",\"parameters\":{\"fullName\":\"fullName\",\"text\":\"hi\"}}]}}"]]}}
1061
+ winston.debug("success triggerEvent", triggerEvent);
1062
+
1063
+ var pickedTrigger = triggers.filter( function (t) {
1064
+ // winston.verbose("t:"+t._id);
1065
+ // winston.verbose("eventSuccess.type:"+eventSuccess.type);
1066
+ if (t.id === eventSuccess.type) {
1067
+ // winston.verbose("uguale");
1068
+ return true;
1069
+ }
1070
+ });
1071
+ if (pickedTrigger && pickedTrigger.length>0) {
1072
+ pickedTrigger = pickedTrigger[0];
1073
+ }
1074
+
1075
+ winston.debug("pickedTrigger", pickedTrigger);
1076
+ triggerEvent.trigger = pickedTrigger;
1077
+
1078
+
1079
+
1080
+ // shiiiit https://stackoverflow.com/questions/37977602/settimeout-not-working-inside-foreach
1081
+
1082
+ // var a = [1,2,3]
1083
+ // // var index = 0; <- BUGGGGGGGG try it in the browser you must user index of the forEach
1084
+ // a.forEach(function(e,index,c) {
1085
+ // // a.forEach(function(e) {
1086
+ // setTimeout(function() {
1087
+ // console.log(index, e);
1088
+ // },index * 1000);
1089
+ // // index++;
1090
+ // });
1091
+
1092
+
1093
+
1094
+ // https://coderwall.com/p/_ppzrw/be-careful-with-settimeout-in-loops
1095
+ pickedTrigger.actions.forEach(function (action, i, collection) {
1096
+ winston.debug("triggerEventEmitter emit: " + action.key, action);
1097
+ // triggerEvent.action = action;
1098
+ var waitTime = 500*i;
1099
+ // console.log("waitTime",waitTime);
1100
+ // make timeout of 500 ms
1101
+ that.delayedFunction(action, triggerEvent, waitTime );
1102
+
1103
+ });
1104
+
1105
+ // pickedTrigger.actions.forEach(function (action, i, collection) {
1106
+ // winston.verbose("triggerEventEmitter emit: " + action.key, action);
1107
+ // triggerEvent.action = action;
1108
+ // var waitTime = 500*i;
1109
+ // console.log("waitTime",waitTime);
1110
+ // // make timeout of 500 ms
1111
+ // setTimeout(function() {
1112
+ // console.log("setTimeout",action.key, triggerEvent);
1113
+ // triggerEventEmitter.emit(action.key,triggerEvent );
1114
+ // }, waitTime);
1115
+ // // i++;
1116
+ // });
1117
+
1118
+
1119
+ // successCall(eventSuccess.type,triggerEvent);
1120
+ });
1121
+
1122
+
1123
+
1124
+ engine.on('failure', function(eventFailure, almanac, ruleResult) {
1125
+ winston.debug("failure eventFailure", eventFailure);
1126
+
1127
+ var triggerEvent = {event: event, eventKey:eventKey , triggers: triggers, ruleResult:requestEvent,engine:engine };
1128
+ winston.debug("failure triggerEvent", triggerEvent);
1129
+
1130
+
1131
+ var pickedTrigger = triggers.filter( function (t) {
1132
+ // winston.verbose("t:"+t._id);
1133
+ // winston.verbose("eventFailure.type:"+eventFailure.type);
1134
+ if (t.id === eventFailure.type) {
1135
+ // winston.verbose("uguale");
1136
+ return true;
1137
+ }
1138
+ });
1139
+ if (pickedTrigger && pickedTrigger.length>0) {
1140
+ pickedTrigger = pickedTrigger[0];
1141
+ }
1142
+
1143
+ winston.debug("pickedTrigger", pickedTrigger);
1144
+ triggerEvent.trigger = pickedTrigger;
1145
+ pickedTrigger.actions.forEach(function (action) {
1146
+ winston.debug("triggerEventEmitter emit: " + action.key);
1147
+ triggerEvent.action = action;
1148
+ triggerEventEmitter.emit(action.key+".failure",triggerEvent );
1149
+ });
1150
+
1151
+ // triggerEventEmitter.emit(eventFailure.type+".failure", triggerEvent);
1152
+ // errorCall(eventSuccess.type,triggerEvent);
1153
+ });
1154
+
1155
+
1156
+
1157
+
1158
+
1159
+ // Run the engine to evaluate
1160
+ engine
1161
+ // .run(facts)
1162
+ .run()
1163
+ .then(events => { // run() returns events with truthy conditions
1164
+ winston.verbose('all rules executed; the following events were triggered: ', events);
1165
+ engine.stop();
1166
+ // events.map(event => winston.debug(event.params.message));
1167
+ })
1168
+ // .catch () per beccare uncaughtException: "conditions" root must contain a single instance of "all" or "any"
1169
+
1170
+
1171
+
1172
+ });
1173
+
1174
+ });
1175
+ }
1176
+
1177
+ }
1178
+
1179
+ var rulesTrigger = new RulesTrigger();
1180
+ module.exports = rulesTrigger;
1181
+