@tiledesk/tiledesk-server 2.2.39 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. package/LICENSE +14 -657
  2. package/README.md +2 -0
  3. package/app.js +12 -0
  4. package/event/subscriptionEvent.js +11 -0
  5. package/models/subscriptionEvent.js +11 -0
  6. package/models/subscriptionLog.js +34 -0
  7. package/models/tagLibrary.js +42 -0
  8. package/package.json +2 -10
  9. package/pubmodules/activities/activityArchiver.js +295 -0
  10. package/pubmodules/activities/index.js +3 -0
  11. package/pubmodules/activities/models/activity.js +88 -0
  12. package/pubmodules/activities/routes/activity.js +710 -0
  13. package/pubmodules/activities/test/activityRoute.js +85 -0
  14. package/pubmodules/analytics/analytics.js +1719 -0
  15. package/pubmodules/analytics/index.js +3 -0
  16. package/pubmodules/canned/cannedResponse.js +51 -0
  17. package/pubmodules/canned/cannedResponseRoute.js +157 -0
  18. package/pubmodules/canned/index.js +3 -0
  19. package/pubmodules/pubModulesManager.js +104 -5
  20. package/pubmodules/trigger/default.js +271 -0
  21. package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
  22. package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
  23. package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
  24. package/pubmodules/trigger/index.js +3 -0
  25. package/pubmodules/trigger/models/trigger.js +149 -0
  26. package/pubmodules/trigger/rulesTrigger.js +1180 -0
  27. package/pubmodules/trigger/start.js +114 -0
  28. package/pubmodules/trigger/triggerRoute.js +150 -0
  29. package/routes/department.js +51 -0
  30. package/routes/group.js +140 -0
  31. package/routes/project.js +52 -0
  32. package/routes/subscription.js +140 -0
  33. package/routes/tag.js +138 -0
  34. package/services/faqService.js +1 -1
  35. package/services/modulesManager.js +7 -188
  36. package/services/subscriptionNotifier.js +485 -0
  37. package/template/email/assignedEmailMessage.html +1 -1
  38. package/template/email/assignedRequest.html +1 -1
  39. package/template/email/newMessage.html +1 -1
  40. package/template/email/passwordChanged.html +1 -1
  41. package/template/email/pooledEmailMessage.html +1 -1
  42. package/template/email/pooledRequest.html +1 -1
  43. package/template/email/resetPassword.html +2 -2
  44. package/template/email/ticket.html +1 -1
  45. package/views/messages.jade +1 -1
@@ -0,0 +1,1180 @@
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) {
345
+ requestService.closeRequestByRequestId(request_id, id_project);
346
+
347
+ } catch(e) {
348
+ winston.error("Error runAction", e);
349
+ }
350
+
351
+ });
352
+
353
+
354
+
355
+ triggerEventEmitter.on('request.reopen', function(eventTrigger) {
356
+
357
+ try {
358
+
359
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
360
+ var trigger = eventTrigger.trigger;
361
+ winston.debug('runAction trigger', trigger.toObject());
362
+
363
+ var action = eventTrigger.action;
364
+ winston.debug('runAction action', action.toObject());
365
+
366
+
367
+ var request_id;
368
+ if (eventTrigger.eventKey=="request.create") {
369
+ request_id = eventTrigger.event.request_id;
370
+ }
371
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
372
+ request_id = eventTrigger.event.recipient;
373
+ }
374
+
375
+ winston.debug('runAction action request_id: ' + request_id);
376
+
377
+ var id_project = eventTrigger.event.id_project;
378
+ winston.debug('runAction action id_project: ' + id_project);
379
+
380
+ // reopenRequestByRequestId(request_id, id_project) {
381
+ requestService.reopenRequestByRequestId(request_id, id_project);
382
+
383
+ } catch(e) {
384
+ winston.error("Error runAction", e);
385
+ }
386
+
387
+ });
388
+
389
+
390
+
391
+ triggerEventEmitter.on('request.participants.join', function(eventTrigger) {
392
+
393
+ try {
394
+
395
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
396
+ var trigger = eventTrigger.trigger;
397
+ winston.debug('runAction trigger', trigger.toObject());
398
+
399
+ var action = eventTrigger.action;
400
+ winston.debug('runAction action', action.toObject());
401
+
402
+ // console.log("actionaction",action);
403
+
404
+ var member = action.parameters.member;
405
+ winston.debug('runAction action member: ' + member);
406
+
407
+ var request_id;
408
+ if (eventTrigger.eventKey=="request.create") {
409
+ request_id = eventTrigger.event.request_id;
410
+ }
411
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
412
+ request_id = eventTrigger.event.recipient;
413
+ }
414
+
415
+ winston.debug('runAction action request_id: ' + request_id);
416
+
417
+ var id_project = eventTrigger.event.id_project;
418
+ winston.debug('runAction action id_project: ' + id_project);
419
+
420
+ // addParticipantByRequestId(request_id, id_project, member) {
421
+ requestService.addParticipantByRequestId(request_id, id_project, member);
422
+
423
+
424
+ } catch(e) {
425
+ winston.error("Error runAction", e);
426
+ }
427
+
428
+ });
429
+
430
+
431
+
432
+
433
+
434
+
435
+
436
+ triggerEventEmitter.on('request.department.bot.launch', function(eventTrigger) {
437
+
438
+ try {
439
+
440
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
441
+ var trigger = eventTrigger.trigger;
442
+ winston.debug('runAction trigger', trigger.toObject());
443
+
444
+ var action = eventTrigger.action;
445
+ winston.debug('runAction action', action.toObject());
446
+
447
+ var request_id;
448
+ if (eventTrigger.eventKey=="request.create") {
449
+ request_id = eventTrigger.event.request_id;
450
+ }
451
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
452
+ request_id = eventTrigger.event.recipient;
453
+ }
454
+
455
+ winston.debug('runAction action request_id: ' + request_id);
456
+
457
+ var id_project = eventTrigger.event.id_project;
458
+ winston.debug('runAction action id_project: ' + id_project);
459
+
460
+ // reroute(request_id, id_project, nobot) {
461
+ requestService.reroute(request_id, id_project).then(function(request) {
462
+
463
+ winston.verbose('request.department.bot.launch action reroute request_id: ' + request_id);
464
+
465
+ // rendi dinamico /start
466
+ messageService.send(
467
+ 'system',
468
+ 'Bot',
469
+ request_id,
470
+ '\\start',
471
+ id_project,
472
+ null,
473
+ {subtype:'info', updateconversation : false}
474
+ );
475
+
476
+ // TODO Add typing?
477
+ })
478
+
479
+
480
+ } catch(e) {
481
+ winston.error("Error runAction", e);
482
+ }
483
+
484
+ });
485
+
486
+
487
+
488
+
489
+
490
+
491
+
492
+ triggerEventEmitter.on('request.bot.launch', function(eventTrigger) {
493
+
494
+ try {
495
+
496
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
497
+ var trigger = eventTrigger.trigger;
498
+ winston.debug('runAction trigger', trigger.toObject());
499
+
500
+ var action = eventTrigger.action;
501
+ winston.debug('runAction action', action.toObject());
502
+
503
+ var request_id;
504
+ if (eventTrigger.eventKey=="request.create") {
505
+ request_id = eventTrigger.event.request_id;
506
+ }
507
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
508
+ request_id = eventTrigger.event.recipient;
509
+ }
510
+ winston.debug('runAction action request_id: ' + request_id);
511
+
512
+
513
+ var member = action.parameters.member;
514
+ winston.debug('runAction action member: ' + member);
515
+
516
+
517
+ var id_project = eventTrigger.event.id_project;
518
+ winston.debug('runAction action id_project: ' + id_project);
519
+
520
+ requestService.addParticipantByRequestId(request_id, id_project, member).then(function(request) {
521
+
522
+ winston.verbose('request.bot.launch action request_id: ' + request_id);
523
+
524
+ // rendi dinamico /start
525
+ messageService.send(
526
+ 'system',
527
+ 'Bot',
528
+ request_id,
529
+ '\\start',
530
+ id_project,
531
+ null,
532
+ {subtype:'info', updateconversation : false}
533
+ );
534
+
535
+ // TODO Add typing?
536
+ })
537
+
538
+
539
+ } catch(e) {
540
+ winston.error("Error runAction", e);
541
+ }
542
+
543
+ });
544
+
545
+
546
+
547
+ triggerEventEmitter.on('request.tags.add', function(eventTrigger) {
548
+
549
+ try {
550
+
551
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
552
+ var trigger = eventTrigger.trigger;
553
+ winston.debug('runAction trigger', trigger.toObject());
554
+
555
+ var action = eventTrigger.action;
556
+ winston.debug('runAction action', action.toObject());
557
+
558
+ // console.log("actionaction",action);
559
+
560
+ var tag = action.parameters.tag;
561
+ winston.debug('runAction action tag: ' + tag);
562
+
563
+ var request_id;
564
+ if (eventTrigger.eventKey=="request.create") {
565
+ request_id = eventTrigger.event.request_id;
566
+ }
567
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
568
+ request_id = eventTrigger.event.recipient;
569
+ }
570
+
571
+ winston.debug('runAction action request_id: ' + request_id);
572
+
573
+ var id_project = eventTrigger.event.id_project;
574
+ winston.debug('runAction action id_project: ' + id_project);
575
+
576
+ // addTagByRequestId(request_id, id_project, tag) {
577
+ requestService.addTagByRequestId(request_id, id_project, {tag:tag});
578
+
579
+
580
+ } catch(e) {
581
+ winston.error("Error runAction", e);
582
+ }
583
+
584
+ });
585
+
586
+
587
+
588
+
589
+
590
+ triggerEventEmitter.on('request.participants.leave', function(eventTrigger) {
591
+
592
+ try {
593
+
594
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
595
+ var trigger = eventTrigger.trigger;
596
+ winston.debug('runAction trigger', trigger.toObject());
597
+
598
+ var action = eventTrigger.action;
599
+ winston.debug('runAction action', action.toObject());
600
+
601
+ var member = action.parameters.member;
602
+ winston.debug('runAction action member: ' + member);
603
+
604
+ var request_id;
605
+ if (eventTrigger.eventKey=="request.create") {
606
+ request_id = eventTrigger.event.request_id;
607
+ }
608
+ if (eventTrigger.eventKey=="message.create.from.requester" || eventTrigger.eventKey=="message.received") {
609
+ request_id = eventTrigger.event.recipient;
610
+ }
611
+
612
+ winston.debug('runAction action request_id: ' + request_id);
613
+
614
+ var id_project = eventTrigger.event.id_project;
615
+ winston.debug('runAction action id_project: ' + id_project);
616
+
617
+ // removeParticipantByRequestId(request_id, id_project, member) {
618
+ requestService.removeParticipantByRequestId(request_id, id_project, member);
619
+
620
+ } catch(e) {
621
+ winston.error("Error runAction", e);
622
+ }
623
+
624
+ });
625
+
626
+
627
+
628
+ triggerEventEmitter.on('request.create', function(eventTrigger) {
629
+
630
+ try {
631
+
632
+ winston.debug('runAction eventTrigger.eventSuccess:', eventTrigger.eventSuccess);
633
+
634
+ var trigger = eventTrigger.trigger;
635
+ winston.debug('runAction trigger', trigger.toObject());
636
+
637
+ var action = eventTrigger.action;
638
+ winston.debug('runAction action', action.toObject());
639
+
640
+
641
+ var text = action.parameters.text;
642
+ winston.debug('runAction action text: ' + text);
643
+
644
+ var subtype = action.parameters.subtype;
645
+ winston.debug('runAction action subtype: ' + subtype);;
646
+
647
+ var status = action.parameters.status;
648
+ winston.debug('runAction action status: ' + status);
649
+
650
+
651
+ var preflight = action.parameters.preflight;
652
+ winston.debug('runAction action preflight: ' + preflight);
653
+
654
+ if (text && text.indexOf(":tdk_msg_subtype_info")>-1) {
655
+ subtype = "info";
656
+ text = text.replace(':tdk_msg_subtype_info', '');
657
+ winston.debug('tdk_msg_subtype_info');
658
+ }
659
+
660
+ if (text && text.indexOf(":tdk_req_status_hidden")>-1) {
661
+ status = 50;
662
+ preflight = true;
663
+ text = text.replace(':tdk_req_status_hidden', '');
664
+ winston.debug('tdk_req_status_hidden');
665
+ }
666
+
667
+ var type = action.parameters.type;
668
+ winston.debug('runAction action type: ' + type);
669
+
670
+
671
+
672
+
673
+
674
+ var departmentid = action.parameters.departmentid;
675
+ winston.debug('runAction action departmentid: ' + departmentid);
676
+
677
+ // var attributes = action.parameters.attributes;
678
+ // winston.debug('runAction action attributes: ' + attributes);
679
+
680
+
681
+
682
+ var request_id = 'support-group-'+id_project+"-"+uuidv4();
683
+ var id_user;
684
+ var fullname;
685
+ var email;
686
+ var attributes = {};
687
+
688
+
689
+
690
+ var sourcePage;
691
+ var language;
692
+ var userAgent;
693
+
694
+ var userObj = undefined;
695
+
696
+
697
+ if (eventTrigger.eventKey=="event.emit") {
698
+ winston.verbose('runAction action event.emit: ', eventTrigger.event);
699
+ // winston.debug('runAction action event.emit: ', eventTrigger.event.toObject());
700
+
701
+ // if (eventTrigger.event.project_user &&
702
+ // eventTrigger.event.project_user.uuid_user &&
703
+ // eventTrigger.event.project_user.uuid_user) {
704
+ id_user = eventTrigger.event.project_user.uuid_user;
705
+
706
+ if (eventTrigger.event.user) {
707
+
708
+ winston.verbose('eventTrigger.event.user: ', eventTrigger.event.user);
709
+
710
+
711
+ if (eventTrigger.event.user.toObject) {
712
+ userObj = eventTrigger.event.user.toObject();
713
+ }else {
714
+ userObj = eventTrigger.event.user;
715
+ }
716
+ delete userObj.password;
717
+
718
+
719
+ if (eventTrigger.event.user.fullName) {
720
+ fullname = eventTrigger.event.user.fullName;
721
+ winston.verbose('fullname: '+ fullname);
722
+ }
723
+
724
+ if (eventTrigger.event.user.email) {
725
+ email = eventTrigger.event.user.email;
726
+ winston.verbose('email: '+ email);
727
+ }
728
+
729
+ }
730
+
731
+ // }
732
+
733
+
734
+ // if (attributes && attributes.id_user) {
735
+ // id_user = attributes.id_user;
736
+ // }
737
+
738
+ if (eventTrigger.event.attributes) {
739
+ var eventAttributes = eventTrigger.event.attributes;
740
+
741
+ if (eventAttributes.request_id) {
742
+ request_id = eventAttributes.request_id;
743
+ }
744
+ if (eventAttributes.id_user) {
745
+ id_user = eventAttributes.id_user;
746
+ }
747
+ if (eventAttributes.fullname) {
748
+ fullname = eventAttributes.fullname;
749
+ }
750
+ if (eventAttributes.email) {
751
+ email = eventAttributes.email;
752
+ }
753
+
754
+ if (eventAttributes.language) {
755
+ language = eventAttributes.language;
756
+ }
757
+
758
+ if (eventAttributes.department) { //TODO Dario change to departmentId
759
+ departmentid = eventAttributes.department;
760
+ }
761
+
762
+ if (eventAttributes.text) {
763
+ text = eventAttributes.text;
764
+ }
765
+
766
+ if (eventAttributes.status) {
767
+ status = eventAttributes.status;
768
+ }
769
+
770
+ if (eventAttributes.subtype) {
771
+ subtype = eventAttributes.subtype;
772
+ }
773
+
774
+
775
+
776
+
777
+
778
+
779
+ if (eventAttributes.attributes) {
780
+ attributes = eventAttributes.attributes;
781
+
782
+
783
+
784
+ if (eventAttributes.attributes.client) {
785
+ userAgent = eventAttributes.attributes.client; //the widget pass client parameter and not userAgent
786
+ }
787
+ if (eventAttributes.attributes.sourcePage) {
788
+ sourcePage = eventAttributes.attributes.sourcePage;
789
+ }
790
+
791
+ }
792
+
793
+
794
+
795
+
796
+ }
797
+
798
+
799
+
800
+ if (subtype) {
801
+ attributes.subtype = subtype;
802
+ }
803
+
804
+ if (userObj) {
805
+ attributes.decoded_jwt = userObj;
806
+ }
807
+
808
+
809
+ }
810
+
811
+ winston.debug('runAction action id_user:'+id_user);
812
+
813
+
814
+
815
+ var id_project = eventTrigger.event.id_project;
816
+ winston.debug('runAction action id_project: ' + id_project);
817
+
818
+
819
+ // createIfNotExistsWithLeadId(lead_id, fullname, email, id_project, createdBy, attributes, status)
820
+ leadService.createIfNotExistsWithLeadId(id_user, fullname , email, id_project, null, attributes, LeadConstants.TEMP)
821
+ .then(function(createdLead) {
822
+
823
+
824
+
825
+
826
+
827
+ // return Project_user.findOne(queryProjectUser, function (err, project_user) {
828
+
829
+ // var project_user_id = null;
830
+
831
+ // if (err) {
832
+ // winston.error("Error getting the project_user_id", err);
833
+ // }
834
+
835
+ // if (project_user) {
836
+ // winston.verbose("project_user", project_user);
837
+ // project_user_id = project_user.id;
838
+ // winston.verbose("project_user_id: " + project_user_id);
839
+ // }
840
+
841
+
842
+ var puser = eventTrigger.event.project_user;
843
+ var project_user_id = puser._id; //questo è null se nn specifico come trigger un event
844
+ winston.verbose("project_user_id: " + project_user_id);
845
+
846
+
847
+ // qui c'è errore c21
848
+ // createWithIdAndRequester(request_id, project_user_id, lead_id, id_project, first_text, departmentid, sourcePage,
849
+ // language, userAgent, status, createdBy, attributes, subject, preflight) {
850
+
851
+ // return requestService.createWithIdAndRequester(request_id, project_user_id, createdLead._id, id_project,
852
+ // text, departmentid, sourcePage,
853
+ // language, userAgent, status, id_user, attributes, undefined, preflight).then(function (savedRequest) {
854
+
855
+
856
+ var new_request = {
857
+ request_id: request_id, project_user_id: project_user_id, lead_id: createdLead._id, id_project: id_project,
858
+ first_text: text, departmentid: departmentid, sourcePage: sourcePage,
859
+ language: language, userAgent: userAgent, status: status, createdBy: id_user,
860
+ attributes: attributes, subject: undefined, preflight: preflight, channel: undefined, location: undefined,
861
+ lead: createdLead, requester: puser
862
+ };
863
+
864
+ return requestService.create(new_request).then(function (savedRequest) {
865
+
866
+
867
+ if (attributes) {
868
+ attributes.sendnotification = false; // sembra nn funzionae
869
+ }
870
+
871
+ var senderFullname = fullname || 'Guest';
872
+
873
+ // create(sender, senderFullname, recipient, text, id_project, createdBy, status, attributes, type, metadata, language) {
874
+ return messageService.create( id_user, senderFullname , savedRequest.request_id, text,
875
+ id_project, id_user, MessageConstants.CHAT_MESSAGE_STATUS.SENDING, attributes, type, eventTrigger.event.metadata, language);
876
+ }).catch(function (err) {
877
+ winston.error("Error trigger requestService.create", err);
878
+ });
879
+ });
880
+ // });
881
+
882
+
883
+
884
+ } catch(e) {
885
+ winston.error("Error runAction", e);
886
+ }
887
+
888
+ });
889
+
890
+
891
+
892
+ }
893
+
894
+ delayedFunction(action,triggerEvent, waitTime) {
895
+ setTimeout(function() {
896
+ triggerEvent.action = action;
897
+ // console.log("setTimeout",action.key, triggerEvent);
898
+ triggerEventEmitter.emit(action.key,triggerEvent );
899
+ }, waitTime);
900
+ }
901
+
902
+ createEngine() {
903
+
904
+ }
905
+
906
+ exec(event, eventKey,successCall,errorCall) {
907
+ var that = this;
908
+ // winston.verbose('this', this);
909
+
910
+ // var eventKey = Object.keys(this._events);
911
+ // var eventKey = Object.values(this._events);
912
+ // winston.verbose('eventKey: ',eventKey);
913
+
914
+ // winston.verbose('this', JSON.stringify(this));
915
+ setImmediate(() => {
916
+
917
+
918
+ winston.debug('event', event);
919
+ winston.debug('successCall', successCall);
920
+ winston.debug('trigger event', event);
921
+
922
+ let query = {id_project: event.id_project, enabled:true, 'trigger.key':eventKey};
923
+
924
+
925
+ winston.debug('trigger query', query);
926
+
927
+ Trigger.find(query)
928
+ .cache(cacheUtil.longTTL, event.id_project+":triggers:trigger.key:"+eventKey)
929
+ .exec(function(err, triggers) {
930
+ if (err) {
931
+ winston.error('Error gettting bots ', err);
932
+ return 0;
933
+ }
934
+ if (!triggers || triggers.length==0) {
935
+ winston.debug('No trigger found');
936
+ return 0;
937
+ }
938
+
939
+ winston.debug('active triggers found', triggers);
940
+
941
+
942
+ // var engineExists = that.engines.hasOwnProperty(event.id_project);
943
+ // // var engineExists = that.engines.hasOwnProperty(event.id_project+"-"+eventKey);
944
+ // winston.verbose("engineExists:"+engineExists);
945
+
946
+ // var engine;
947
+ // if (!engineExists) {
948
+ // engine = new Engine();
949
+ // that.engines[event.id_project] = engine;
950
+ // // that.engines[event.id_project+"-"+eventKey] = engine;
951
+ // winston.verbose("create engine");
952
+ // }else {
953
+ // engine = that.engines[event.id_project];
954
+ // // engine = that.engines[event.id_project+"-"+eventKey];
955
+ // winston.verbose("engine already exists");
956
+ // return 0;
957
+ // }
958
+
959
+ var engine = new Engine();
960
+ // winston.verbose("create engine");
961
+ // that.engine = new Engine();
962
+
963
+
964
+
965
+
966
+ triggers.forEach(function(trigger) {
967
+ winston.debug('trigger', trigger.toObject());
968
+
969
+ var rule = {
970
+ conditions: {
971
+ },
972
+ event: { // define the event to fire when the conditions evaluate truthy
973
+ type: trigger.id,
974
+ // type: trigger.actions[0].key,
975
+ params: trigger.actions
976
+ // params: {id: trigger._id, actionParameters:trigger.actions[0].parameters}
977
+ // params: {
978
+ // message: 'Player has fouled out!'
979
+ // }
980
+ }
981
+ };
982
+
983
+ // qui se non imposto condizioni
984
+ // uncaughtException: "conditions" root must contain a single instance of "all" or "any"
985
+ // 2022-07-18T08:58:18.589888+00:00 app[web.1]: Error: "conditions" root must contain a single instance of "all" or "any"
986
+
987
+ if (trigger.conditions.all.toObject() && trigger.conditions.all.toObject().length>0) {
988
+ rule.conditions.all = trigger.conditions.all.toObject();
989
+ }
990
+
991
+ if (trigger.conditions.any.toObject() && trigger.conditions.any.toObject().length>0) {
992
+ rule.conditions.any = trigger.conditions.any.toObject();
993
+ }
994
+
995
+
996
+ winston.debug('rule', rule);
997
+
998
+ // define a rule for detecting the player has exceeded foul limits. Foul out any player who:
999
+ // (has committed 5 fouls AND game is 40 minutes) OR (has committed 6 fouls AND game is 48 minutes)
1000
+
1001
+ engine.addRule(rule);
1002
+ // that.engine.addRule(rule);
1003
+
1004
+ });
1005
+
1006
+
1007
+
1008
+
1009
+
1010
+
1011
+
1012
+
1013
+
1014
+
1015
+
1016
+
1017
+
1018
+ /**
1019
+ * Define facts the engine will use to evaluate the conditions above.
1020
+ * Facts may also be loaded asynchronously at runtime; see the advanced example below
1021
+ */
1022
+
1023
+
1024
+ // let facts = event.toObject();
1025
+ let facts;
1026
+ if (event.toJSON) { //request is mongoose object
1027
+ facts = event.toJSON();
1028
+ }else { //message is plain object because messageEvent replace it
1029
+ facts = event;
1030
+ }
1031
+ winston.verbose("facts", facts);
1032
+
1033
+ engine.addFact("json", facts)
1034
+
1035
+
1036
+
1037
+ engine.on('success', function(eventSuccess, almanac, ruleResult) {
1038
+ // info: runAction eventTrigger.eventSuccess: {"type":"request.create","params":{"id":"5e4a771a248688f8ea55e47a","actionParameters":{"fullName":"fullName","text":"hi"}}}
1039
+ winston.debug("success eventSuccess", eventSuccess);
1040
+ winston.debug("success ruleResult", ruleResult);
1041
+
1042
+ var triggerEvent = {event: event, eventKey:eventKey , triggers: triggers, ruleResult:requestEvent,eventSuccess:eventSuccess, engine:engine };
1043
+
1044
+ // info: test success eventTrigger:{
1045
+ // "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},
1046
+ // "eventKey":"event.emit",
1047
+ // "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}],
1048
+ // "ruleResult":{"_events":{"request.create":[null,null,null,null,null],"request.close":[null,null,null]},"_eventsCount":7}
1049
+ // ,"eventSuccess":{"type":"request.create","params":{"id":"5e4a771a248688f8ea55e47a","actionParameters":{"fullName":"fullName","text":"hi"}}},
1050
+ // "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\"}}}}"]]}}
1051
+
1052
+
1053
+ // dopo
1054
+ // {"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},
1055
+ // "eventKey":"event.emit",
1056
+ // "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}],
1057
+ // "ruleResult":{"_events":{"request.create":[null,null,null,null,null],"request.close":[null,null,null]},"_eventsCount":7},
1058
+ // "eventSuccess":{"type":"5e4a7e52f3f18136851535f1","params":[{"_id":"5e4a7e52f3f18136851535f4","key":"request.create","parameters":{"fullName":"fullName","text":"hi"}}]},
1059
+ // "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\"}}]}}"]]}}
1060
+ winston.debug("success triggerEvent", triggerEvent);
1061
+
1062
+ var pickedTrigger = triggers.filter( function (t) {
1063
+ // winston.verbose("t:"+t._id);
1064
+ // winston.verbose("eventSuccess.type:"+eventSuccess.type);
1065
+ if (t.id === eventSuccess.type) {
1066
+ // winston.verbose("uguale");
1067
+ return true;
1068
+ }
1069
+ });
1070
+ if (pickedTrigger && pickedTrigger.length>0) {
1071
+ pickedTrigger = pickedTrigger[0];
1072
+ }
1073
+
1074
+ winston.debug("pickedTrigger", pickedTrigger);
1075
+ triggerEvent.trigger = pickedTrigger;
1076
+
1077
+
1078
+
1079
+ // shiiiit https://stackoverflow.com/questions/37977602/settimeout-not-working-inside-foreach
1080
+
1081
+ // var a = [1,2,3]
1082
+ // // var index = 0; <- BUGGGGGGGG try it in the browser you must user index of the forEach
1083
+ // a.forEach(function(e,index,c) {
1084
+ // // a.forEach(function(e) {
1085
+ // setTimeout(function() {
1086
+ // console.log(index, e);
1087
+ // },index * 1000);
1088
+ // // index++;
1089
+ // });
1090
+
1091
+
1092
+
1093
+ // https://coderwall.com/p/_ppzrw/be-careful-with-settimeout-in-loops
1094
+ pickedTrigger.actions.forEach(function (action, i, collection) {
1095
+ winston.debug("triggerEventEmitter emit: " + action.key, action);
1096
+ // triggerEvent.action = action;
1097
+ var waitTime = 500*i;
1098
+ // console.log("waitTime",waitTime);
1099
+ // make timeout of 500 ms
1100
+ that.delayedFunction(action, triggerEvent, waitTime );
1101
+
1102
+ });
1103
+
1104
+ // pickedTrigger.actions.forEach(function (action, i, collection) {
1105
+ // winston.verbose("triggerEventEmitter emit: " + action.key, action);
1106
+ // triggerEvent.action = action;
1107
+ // var waitTime = 500*i;
1108
+ // console.log("waitTime",waitTime);
1109
+ // // make timeout of 500 ms
1110
+ // setTimeout(function() {
1111
+ // console.log("setTimeout",action.key, triggerEvent);
1112
+ // triggerEventEmitter.emit(action.key,triggerEvent );
1113
+ // }, waitTime);
1114
+ // // i++;
1115
+ // });
1116
+
1117
+
1118
+ // successCall(eventSuccess.type,triggerEvent);
1119
+ });
1120
+
1121
+
1122
+
1123
+ engine.on('failure', function(eventFailure, almanac, ruleResult) {
1124
+ winston.debug("failure eventFailure", eventFailure);
1125
+
1126
+ var triggerEvent = {event: event, eventKey:eventKey , triggers: triggers, ruleResult:requestEvent,engine:engine };
1127
+ winston.debug("failure triggerEvent", triggerEvent);
1128
+
1129
+
1130
+ var pickedTrigger = triggers.filter( function (t) {
1131
+ // winston.verbose("t:"+t._id);
1132
+ // winston.verbose("eventFailure.type:"+eventFailure.type);
1133
+ if (t.id === eventFailure.type) {
1134
+ // winston.verbose("uguale");
1135
+ return true;
1136
+ }
1137
+ });
1138
+ if (pickedTrigger && pickedTrigger.length>0) {
1139
+ pickedTrigger = pickedTrigger[0];
1140
+ }
1141
+
1142
+ winston.debug("pickedTrigger", pickedTrigger);
1143
+ triggerEvent.trigger = pickedTrigger;
1144
+ pickedTrigger.actions.forEach(function (action) {
1145
+ winston.debug("triggerEventEmitter emit: " + action.key);
1146
+ triggerEvent.action = action;
1147
+ triggerEventEmitter.emit(action.key+".failure",triggerEvent );
1148
+ });
1149
+
1150
+ // triggerEventEmitter.emit(eventFailure.type+".failure", triggerEvent);
1151
+ // errorCall(eventSuccess.type,triggerEvent);
1152
+ });
1153
+
1154
+
1155
+
1156
+
1157
+
1158
+ // Run the engine to evaluate
1159
+ engine
1160
+ // .run(facts)
1161
+ .run()
1162
+ .then(events => { // run() returns events with truthy conditions
1163
+ winston.verbose('all rules executed; the following events were triggered: ', events);
1164
+ engine.stop();
1165
+ // events.map(event => winston.debug(event.params.message));
1166
+ })
1167
+ // .catch () per beccare uncaughtException: "conditions" root must contain a single instance of "all" or "any"
1168
+
1169
+
1170
+
1171
+ });
1172
+
1173
+ });
1174
+ }
1175
+
1176
+ }
1177
+
1178
+ var rulesTrigger = new RulesTrigger();
1179
+ module.exports = rulesTrigger;
1180
+