@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
@@ -42,7 +42,13 @@ class ActivityArchiver {
42
42
  activityEvent.on('lead.download.csv', this.save);
43
43
  */
44
44
 
45
- authEvent.on('project_user.invite.pending', function(event) {
45
+ var authProjectUserInvitePendingKey = 'project_user.invite.pending'; //Don't work if job_worker enabled because queue.worker is disabled
46
+ // if (authEvent.queueEnabled) { //queue not supported.
47
+ // authProjectUserInvitePendingKey = 'project_user.invite.pending.queue';
48
+ // }
49
+ winston.info('ActivityArchiver authProjectUserInvitePendingKey: ' + authProjectUserInvitePendingKey);
50
+
51
+ authEvent.on(authProjectUserInvitePendingKey, function(event) {
46
52
  setImmediate(() => {
47
53
  if (event.skipArchive) {
48
54
  return 0;
@@ -57,7 +63,13 @@ class ActivityArchiver {
57
63
 
58
64
  });
59
65
 
60
- authEvent.on('project_user.invite', function(event) {
66
+ var authProjectUserInviteKey = 'project_user.invite'; //Don't work if job_worker enabled because queue.worker is disabled
67
+ // if (authEvent.queueEnabled) { //queue not supported
68
+ // authProjectUserInviteKey = 'project_user.invite.queue';
69
+ // }
70
+ winston.info('ActivityArchiver authProjectUserInviteKey: ' + authProjectUserInviteKey);
71
+
72
+ authEvent.on(authProjectUserInviteKey, function(event) {
61
73
  setImmediate(() => {
62
74
  if (event.skipArchive) {
63
75
  return 0;
@@ -73,10 +85,17 @@ class ActivityArchiver {
73
85
  });
74
86
  });
75
87
 
88
+ // verified with queue
89
+ var authProjectUserUpdateKey = 'project_user.update';
90
+ if (authEvent.queueEnabled) {
91
+ authProjectUserUpdateKey = 'project_user.update.queue';
92
+ }
93
+ winston.info('ActivityArchiver authProjectUserUpdateKey: ' + authProjectUserUpdateKey);
94
+
95
+ authEvent.on(authProjectUserUpdateKey, function(event) {
96
+ setImmediate(() => {
97
+ // winston.info('ActivityArchiver authProjectUserUpdateKey: ', event);
76
98
 
77
- authEvent.on('project_user.update', function(event) {
78
- setImmediate(() => {
79
- // console.log("project_user.update");
80
99
  /*
81
100
  2019-11-20T10:40:52.686991+00:00 app[web.1]: TypeError: Cannot read property '_id' of undefined
82
101
  */
@@ -87,20 +106,34 @@ class ActivityArchiver {
87
106
  var project_user = undefined;
88
107
  if (event.updatedProject_userPopulated.toObject) {
89
108
  project_user = event.updatedProject_userPopulated.toObject()
90
- }else {
109
+ } else {
91
110
  project_user = event.updatedProject_userPopulated;
92
111
  }
93
- var activity = new Activity({actor: {type:"user", id: event.req.user.id, name: event.req.user.fullName },
112
+
113
+ winston.debug('ActivityArchiver authProjectUserUpdateKey event: ', event);
114
+
115
+ if (!event.req.user) {
116
+ return winston.debug('ActivityArchiver skipping archive empty user'); //from i think chat21webhook
117
+ }
118
+ var activity = new Activity({actor: {type:"user", id: event.req.user._id, name: event.req.user.fullName },
94
119
  verb: "PROJECT_USER_UPDATE", actionObj: event.req.body,
95
120
  target: {type:"project_user", id: event.updatedProject_userPopulated._id.toString(), object: project_user},
96
- id_project: event.req.projectid });
121
+ id_project: event.updatedProject_userPopulated.id_project });
97
122
  that.save(activity);
98
123
 
99
124
  });
100
125
 
101
126
  });
102
127
 
103
- authEvent.on('project_user.delete', function(event) {
128
+
129
+ var authProjectUserDeleteKey = 'project_user.delete'; //Don't work if job_worker enabled because queue.worker is disabled
130
+ // if (authEvent.queueEnabled) { //queue not supported
131
+ // authProjectUserDeleteKey = 'project_user.delete.queue';
132
+ // }
133
+ winston.info('ActivityArchiver authProjectUserDeleteKey: ' + authProjectUserDeleteKey);
134
+
135
+
136
+ authEvent.on(authProjectUserDeleteKey, function(event) {
104
137
  setImmediate(() => {
105
138
  if (event.skipArchive) {
106
139
  return 0;
@@ -116,105 +149,159 @@ class ActivityArchiver {
116
149
  });
117
150
 
118
151
 
119
- authEvent.on('user.signin', function(event) {
120
- winston.debug('ActivityArchiver user.login');
121
- setImmediate(() => {
122
-
123
-
124
- if (event.skipArchive) {
125
- return 0;
126
- }
152
+ // var authUserSignineKey = 'user.signin';
153
+ // // if (authEvent.queueEnabled) { //queue not supported
154
+ // // authUserSignineKey = 'user.signin.queue';
155
+ // // }
156
+ // winston.info('ActivityArchiver authUserSignineKey: ' + authUserSignineKey);
157
+
127
158
 
128
- var activity = new Activity({actor: {type:"user", id: event.user._id, name: event.user.fullName },
129
- verb: "USER_SIGNIN", actionObj: event.req.body,
130
- target: {type:"user", id:event.user._id.toString(), object: null },
131
- id_project: '*' });
132
- that.save(activity);
159
+ // authEvent.on(authUserSignineKey, function(event) {
160
+ // winston.info('ActivityArchiver user.login');
161
+ // setImmediate(() => {
162
+
133
163
 
134
- });
135
- });
136
- authEvent.on('user.login.error', function(event) {
137
- setImmediate(() => {
164
+ // if (event.skipArchive) {
165
+ // return 0;
166
+ // }
167
+
168
+ // var activity = new Activity({actor: {type:"user", id: event.user._id, name: event.user.fullName },
169
+ // verb: "USER_SIGNIN", actionObj: event.req.body, //insecure it store password
170
+ // target: {type:"user", id:event.user._id.toString(), object: null },
171
+ // id_project: '*' }); /// * project
172
+ // that.save(activity);
138
173
 
139
- if (event.skipArchive) {
140
- return 0;
141
- }
174
+ // });
175
+ // });
176
+
177
+
178
+ // var authUserSigninErrorKey = 'user.login.error';
179
+ // // if (authEvent.queueEnabled) { //queue not supported
180
+ // // authUserSigninErrorKey = 'user.login.error.queue';
181
+ // // }
182
+ // winston.info('ActivityArchiver authUserSigninErrorKey: ' + authUserSigninErrorKey);
142
183
 
143
- var activity = new Activity({actor: {type:"user"},
144
- verb: "USER_SIGNIN_ERROR", actionObj: event.req.body,
145
- target: {type:"user", id:null, object: null },
146
- id_project: '*' });
147
- that.save(activity);
184
+
185
+ // authEvent.on(authUserSigninErrorKey, function(event) {
186
+ // setImmediate(() => {
148
187
 
149
- });
150
- });
188
+ // if (event.skipArchive) {
189
+ // return 0;
190
+ // }
191
+
192
+ // var activity = new Activity({actor: {type:"user"},
193
+ // verb: "USER_SIGNIN_ERROR", actionObj: event.req.body, //insecure it store password
194
+ // target: {type:"user", id:null, object: null },
195
+ // id_project: '*' }); /// * project
196
+ // that.save(activity);
197
+
198
+ // });
199
+ // });
151
200
 
152
- authEvent.on('user.requestresetpassword', function(event) {
153
- setImmediate(() => {
154
-
155
- if (event.skipArchive) {
156
- return 0;
157
- }
158
201
 
159
- var activity = new Activity({actor: {type:"user", id: event.updatedUser._id, name: event.updatedUser.fullName },
160
- verb: "USER_REQUEST_RESETPASSWORD", actionObj: event.req.body,
161
- target: {type:"user", id:event.updatedUser._id.toString(), object: null },
162
- id_project: '*' });
163
- that.save(activity);
202
+ // var authUserResetPasswordKey = 'user.requestresetpassword';
203
+ // // if (authEvent.queueEnabled) { //queue not supported
204
+ // // authUserResetPasswordKey = 'user.requestresetpassword.queue';
205
+ // // }
206
+ // winston.info('ActivityArchiver authUserResetPasswordKey: ' + authUserResetPasswordKey);
207
+
208
+ // authEvent.on(authUserResetPasswordKey, function(event) {
209
+ // setImmediate(() => {
210
+
211
+ // if (event.skipArchive) {
212
+ // return 0;
213
+ // }
214
+
215
+ // var activity = new Activity({actor: {type:"user", id: event.updatedUser._id, name: event.updatedUser.fullName },
216
+ // verb: "USER_REQUEST_RESETPASSWORD", actionObj: event.req.body,
217
+ // target: {type:"user", id:event.updatedUser._id.toString(), object: null },
218
+ // id_project: '*' }); /// * project
219
+ // that.save(activity);
164
220
 
165
- });
166
- });
221
+ // });
222
+ // });
167
223
 
168
- authEvent.on('user.resetpassword', function(event) {
169
- setImmediate(() => {
170
-
171
- if (event.skipArchive) {
172
- return 0;
173
- }
174
224
 
175
- var activity = new Activity({actor: {type:"user", id: event.saveUser._id, name: event.saveUser.fullName },
176
- verb: "USER_RESETPASSWORD", actionObj: null, //req.body otherwise print password
177
- target: {type:"user", id:event.saveUser._id.toString(), object: null },
178
- id_project: '*' });
179
- that.save(activity);
225
+ // var authUserResetPassword2Key = 'user.resetpassword';
226
+ // // if (authEvent.queueEnabled) { //queue not supported
227
+ // // authUserResetPassword2Key = 'user.resetpassword.queue';
228
+ // // }
229
+ // winston.info('ActivityArchiver authUserResetPassword2Key: ' + authUserResetPassword2Key);
230
+
231
+
232
+ // authEvent.on(authUserResetPassword2Key, function(event) {
233
+ // setImmediate(() => {
234
+
235
+ // if (event.skipArchive) {
236
+ // return 0;
237
+ // }
238
+
239
+ // var activity = new Activity({actor: {type:"user", id: event.saveUser._id, name: event.saveUser.fullName },
240
+ // verb: "USER_RESETPASSWORD", actionObj: null, //req.body otherwise print password
241
+ // target: {type:"user", id:event.saveUser._id.toString(), object: null },
242
+ // id_project: '*' }); /// * project
243
+ // that.save(activity);
180
244
 
181
- });
182
- });
245
+ // });
246
+ // });
183
247
 
184
248
 
185
- authEvent.on('user.signup', function(event) {
186
- setImmediate(() => {
187
- if (event.skipArchive) {
188
- return 0;
189
- }
190
-
191
- var activity = new Activity({actor: {type:"user", id: event.savedUser._id, name: event.savedUser.fullName },
192
- verb: "USER_SIGNUP", actionObj: event.req.body,
193
- target: {type:"user", id: event.savedUser._id.toString(), object: null },
194
- id_project: '*' });
195
- that.save(activity);
249
+ // var authUserSignupKey = 'user.signup';
250
+ // // if (authEvent.queueEnabled) { //queue not supported
251
+ // // authUserSignupKey = 'user.signup.queue';
252
+ // // }
253
+ // winston.info('ActivityArchiver authUserSignupKey: ' + authUserSignupKey);
254
+
255
+
256
+ // authEvent.on(authUserSignupKey, function(event) {
257
+ // setImmediate(() => {
258
+ // if (event.skipArchive) {
259
+ // return 0;
260
+ // }
261
+
262
+ // var activity = new Activity({actor: {type:"user", id: event.savedUser._id, name: event.savedUser.fullName },
263
+ // verb: "USER_SIGNUP", actionObj: event.req.body,
264
+ // target: {type:"user", id: event.savedUser._id.toString(), object: null },
265
+ // id_project: '*' }); /// * project
266
+ // that.save(activity);
196
267
 
197
- });
198
- });
268
+ // });
269
+ // });
199
270
 
200
- authEvent.on('user.signup.error', function(event) {
201
- setImmediate(() => {
202
- if (event.skipArchive) {
203
- return 0;
204
- }
205
271
 
272
+ // var authUserSignupErrorKey = 'user.signup.error';
273
+ // // if (authEvent.queueEnabled) { //queue not supported
274
+ // // authUserSignupErrorKey = 'user.signup.error.queue';
275
+ // // }
276
+ // winston.info('ActivityArchiver authUserSignupErrorKey: ' + authUserSignupErrorKey);
206
277
 
207
- var activity = new Activity({actor: {type:"user"},
208
- verb: "USER_SIGNUP_ERROR", actionObj: event.req.body,
209
- target: {type:"user", id:null, object: null },
210
- id_project: '*' });
211
- that.save(activity);
278
+
279
+ // authEvent.on(authUserSignupErrorKey, function(event) {
280
+ // setImmediate(() => {
281
+ // if (event.skipArchive) {
282
+ // return 0;
283
+ // }
284
+
285
+
286
+ // var activity = new Activity({actor: {type:"user"},
287
+ // verb: "USER_SIGNUP_ERROR", actionObj: event.req.body,
288
+ // target: {type:"user", id:null, object: null },
289
+ // id_project: '*' }); /// * project
290
+ // that.save(activity);
212
291
 
213
- });
214
- });
292
+ // });
293
+ // });
215
294
 
216
- requestEvent.on('request.create', function(request) {
217
- setImmediate(() => {
295
+
296
+ var requestCreateKey = 'request.create';
297
+ if (requestEvent.queueEnabled) {
298
+ requestCreateKey = 'request.create.queue';
299
+ }
300
+ winston.info('ActivityArchiver requestCreateKey: ' + requestCreateKey);
301
+
302
+ requestEvent.on(requestCreateKey, function(request) {
303
+ setImmediate(() => {
304
+ winston.debug('ActivityArchiver requestCreate triggered');
218
305
  // problema requester_id
219
306
 
220
307
  // Error saving activity {"_id":"5e06189c6e226d358896d733","actor":{"_id":"5e06189c6e226d358896d734","type":"user","id":null},"verb":"REQUEST_CREATE","actionObj":{"status":200,"participants":["5e06189c6e226d358896d728"],"messages_count":0,"tags":[],"_id":"5e06189c6e226d358896d72e","request_id":"request_id-closeRequest","first_text":"first_text","department":{"routing":"assigned","default":true,"status":1,"_id":"5e06189c6e226d358896d72b","name":"Default Department","id_project":"5e06189c6e226d358896d729","createdBy":"5e06189c6e226d358896d728","createdAt":"2019-12-27T14:43:40.327Z","updatedAt":"2019-12-27T14:43:40.327Z","__v":0},"agents":[{"_id":"5e06189c6e226d358896d72a","id_project":"5e06189c6e226d358896d729","id_user":"5e06189c6e226d358896d728","role":"owner","user_available":true,"createdBy":"5e06189c6e226d358896d728","createdAt":"2019-12-27T14:43:40.324Z","updatedAt":"2019-12-27T14:43:40.324Z","__v":0}],"id_project":"5e06189c6e226d358896d729","createdBy":"requester_id1","channel":{"name":"chat21"},"createdAt":"2019-12-27T14:43:40.586Z","updatedAt":"2019-12-27T14:43:40.586Z","__v":0},"target":{"type":"request","id":"5e06189c6e226d358896d72e","object":{"status":200,"participants":["5e06189c6e226d358896d728"],"messages_count":0,"tags":[],"_id":"5e06189c6e226d358896d72e","request_id":"request_id-closeRequest","first_text":"first_text","department":{"routing":"assigned","default":true,"status":1,"_id":"5e06189c6e226d358896d72b","name":"Default Department","id_project":"5e06189c6e226d358896d729","createdBy":"5e06189c6e226d358896d728","createdAt":"2019-12-27T14:43:40.327Z","updatedAt":"2019-12-27T14:43:40.327Z","__v":0},"agents":[{"_id":"5e06189c6e226d358896d72a","id_project":"5e06189c6e226d358896d729","id_user":"5e06189c6e226d358896d728","role":"owner","user_available":true,"createdBy":"5e06189c6e226d358896d728","createdAt":"2019-12-27T14:43:40.324Z","updatedAt":"2019-12-27T14:43:40.324Z","__v":0}],"id_project":"5e06189c6e226d358896d729","createdBy":"requester_id1","channel":{"name":"chat21"},"createdAt":"2019-12-27T14:43:40.586Z","updatedAt":"2019-12-27T14:43:40.586Z","__v":0}},"id_project":"5e06189c6e226d358896d729"}
@@ -249,7 +336,17 @@ class ActivityArchiver {
249
336
  });
250
337
 
251
338
 
252
- requestEvent.on('request.update.preflight', function(request) {
339
+ // verified with queue
340
+ var requestUpdatePreflightKey = 'request.update.preflight';
341
+ if (requestEvent.queueEnabled) {
342
+ requestUpdatePreflightKey = 'request.update.preflight.queue';
343
+ }
344
+ winston.info('ActivityArchiver requestUpdatePreflightKey: ' + requestUpdatePreflightKey);
345
+
346
+
347
+ requestEvent.on(requestUpdatePreflightKey, function(request) {
348
+ winston.debug('ActivityArchiver request.update.preflight: ');
349
+
253
350
  setImmediate(() => {
254
351
 
255
352
  try {
@@ -272,6 +369,35 @@ class ActivityArchiver {
272
369
  });
273
370
 
274
371
 
372
+
373
+ // verified with queue
374
+ var requestCloseKey = 'request.close';
375
+ if (requestEvent.queueEnabled) {
376
+ requestCloseKey = 'request.close.queue';
377
+ }
378
+ winston.info('ActivityArchiver requestCloseKey: ' + requestCloseKey);
379
+
380
+
381
+ requestEvent.on(requestCloseKey, function(request) {
382
+ setImmediate(() => {
383
+
384
+ try {
385
+ winston.debug('ActivityArchiver close');
386
+
387
+ var activity = new Activity({actor: {type:"user", id: request.closed_by},
388
+ verb: "REQUEST_CLOSE", actionObj: request,
389
+ target: {type:"request", id:request._id, object: request },
390
+ id_project: request.id_project });
391
+ that.save(activity);
392
+ } catch(e) {
393
+ winston.error('ActivityArchiver error saving activity',e);
394
+ }
395
+
396
+
397
+ });
398
+ });
399
+
400
+
275
401
 
276
402
 
277
403
  winston.info('ActivityArchiver listening');
@@ -154,7 +154,7 @@ router.get('/', function (req, res) {
154
154
  return (err);
155
155
  }
156
156
 
157
- return Activity.count(query, function (err, totalRowCount) {
157
+ return Activity.countDocuments(query, function (err, totalRowCount) {
158
158
  if (err) {
159
159
  winston.error('Activity ROUTE - REQUEST FIND ERR ', err)
160
160
  return (err);
@@ -0,0 +1,8 @@
1
+ const listener = require("./listener");
2
+
3
+ const apps = require("@tiledesk/tiledesk-apps");
4
+ const appsRoute = apps.router;
5
+
6
+
7
+ module.exports = { listener: listener, appsRoute: appsRoute }
8
+
@@ -0,0 +1,27 @@
1
+ const apps = require("@tiledesk/tiledesk-apps");
2
+ var winston = require('../../config/winston');
3
+
4
+ class Listener {
5
+
6
+ listen(config) {
7
+
8
+ winston.info("Apps Listener listen");
9
+
10
+ if (config.databaseUri) {
11
+ winston.debug("apps config databaseUri: " + config.databaseUri);
12
+ }
13
+
14
+ apps.startApp({
15
+ ACCESS_TOKEN_SECRET: process.env.APPS_ACCESS_TOKEN_SECRET || 'nodeauthsecret',
16
+ MONGODB_URI: process.env.APPS_MONGODB_URI || config.databaseUri,
17
+ }, () => {
18
+ winston.info("Tiledesk Apps proxy server succesfully started.")
19
+ })
20
+
21
+ }
22
+
23
+ }
24
+
25
+ var listener = new Listener();
26
+
27
+ module.exports = listener;
@@ -0,0 +1,2 @@
1
+ const mongooseCachegoose = require("./mongoose-cachegoose-fn");
2
+ module.exports = {cachegoose:mongooseCachegoose};