@tiledesk/tiledesk-server 2.3.6 → 2.3.7-1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.github/workflows/docker-community-worker-push-latest.yml +23 -0
  2. package/.github/workflows/docker-image-tag-worker-community-tag-push.yml +22 -0
  3. package/CHANGELOG.md +361 -3
  4. package/Dockerfile-jobs +31 -0
  5. package/app.js +62 -69
  6. package/channels/chat21/chat21Handler.js +37 -6
  7. package/channels/chat21/chat21WebHook.js +62 -34
  8. package/channels/chat21/package-lock.json +663 -706
  9. package/channels/chat21/package.json +2 -2
  10. package/config/labels/widget.json +337 -136
  11. package/deploy.sh +2 -0
  12. package/event/messageEvent.js +110 -9
  13. package/jobs.js +80 -0
  14. package/jobsManager.js +47 -0
  15. package/middleware/has-role.js +10 -3
  16. package/middleware/ipFilter.js +220 -0
  17. package/middleware/passport.js +8 -2
  18. package/models/department.js +1 -1
  19. package/models/faq.js +77 -25
  20. package/models/faq_kb.js +19 -0
  21. package/models/message.js +10 -8
  22. package/models/project.js +10 -0
  23. package/models/project_user.js +10 -0
  24. package/models/request.js +12 -1
  25. package/package.json +12 -11
  26. package/pubmodules/activities/activityArchiver.js +216 -90
  27. package/pubmodules/activities/routes/activity.js +1 -1
  28. package/pubmodules/apps/index.js +8 -0
  29. package/pubmodules/apps/listener.js +27 -0
  30. package/pubmodules/cache/index.js +2 -0
  31. package/pubmodules/cache/mongoose-cachegoose-fn.js +630 -0
  32. package/pubmodules/canned/cannedResponse.js +4 -0
  33. package/pubmodules/canned/cannedResponseRoute.js +10 -5
  34. package/pubmodules/dialogflow/index.js +10 -0
  35. package/pubmodules/dialogflow/listener.js +66 -0
  36. package/pubmodules/emailNotification/requestNotification.js +58 -28
  37. package/pubmodules/events/eventRoute.js +49 -24
  38. package/pubmodules/messageTransformer/messageHandlebarsTransformerInterceptor.js +6 -1
  39. package/pubmodules/messageTransformer/messageTransformerInterceptor.js +10 -4
  40. package/pubmodules/pubModulesManager.js +173 -7
  41. package/pubmodules/queue/index.js +4 -0
  42. package/pubmodules/queue/reconnect.js +331 -0
  43. package/pubmodules/queue/reconnectFanout.js +256 -0
  44. package/pubmodules/rasa/listener.js +5 -5
  45. package/pubmodules/routing-queue/index.js +3 -0
  46. package/pubmodules/routing-queue/listener.js +328 -0
  47. package/pubmodules/rules/conciergeBot.js +2 -2
  48. package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +6 -1
  49. package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +7 -1
  50. package/pubmodules/tilebot/index.js +11 -0
  51. package/pubmodules/tilebot/listener.js +85 -0
  52. package/pubmodules/trigger/rulesTrigger.js +137 -14
  53. package/pubmodules/trigger/start.js +5 -1
  54. package/pubmodules/whatsapp/index.js +7 -0
  55. package/pubmodules/whatsapp/listener.js +32 -0
  56. package/routes/auth.js +7 -2
  57. package/routes/campaigns.js +3 -3
  58. package/routes/department.js +3 -2
  59. package/routes/email.js +32 -2
  60. package/routes/faq.js +37 -2
  61. package/routes/faq_kb.js +496 -133
  62. package/routes/faqpub.js +5 -0
  63. package/routes/lead.js +56 -0
  64. package/routes/message.js +196 -14
  65. package/routes/messagesRoot.js +39 -0
  66. package/routes/project.js +76 -4
  67. package/routes/project_user.js +11 -1
  68. package/routes/project_user_test.js +19 -0
  69. package/routes/request.js +134 -30
  70. package/routes/troubleshooting.js +12 -0
  71. package/routes/users-util.js +39 -0
  72. package/routes/users.js +1 -1
  73. package/routes/widget.js +64 -2
  74. package/services/BotSubscriptionNotifier.js +5 -0
  75. package/services/banUserNotifier.js +86 -0
  76. package/services/cacheEnabler.js +56 -0
  77. package/services/chatbotService.js +101 -0
  78. package/services/departmentService.js +25 -3
  79. package/services/emailService.js +170 -28
  80. package/services/faqBotHandler.js +2 -3
  81. package/services/faqService.js +28 -3
  82. package/services/geoService.js +36 -6
  83. package/services/labelService.js +1 -1
  84. package/services/leadService.js +3 -2
  85. package/services/messageService.js +4 -2
  86. package/services/modulesManager.js +23 -76
  87. package/services/operatingHoursService.js +9 -4
  88. package/services/requestService.js +75 -39
  89. package/services/subscriptionNotifier.js +9 -4
  90. package/services/trainingService.js +106 -0
  91. package/template/email/assignedEmailMessage.html +21 -11
  92. package/template/email/assignedRequest.html +21 -11
  93. package/template/email/beenInvitedExistingUser.html +16 -6
  94. package/template/email/beenInvitedNewUser.html +16 -6
  95. package/template/email/emailDirect.html +130 -0
  96. package/template/email/newMessage.html +18 -8
  97. package/template/email/newMessageFollower.html +22 -12
  98. package/template/email/passwordChanged.html +15 -5
  99. package/template/email/pooledEmailMessage.html +21 -11
  100. package/template/email/pooledRequest.html +20 -10
  101. package/template/email/resetPassword.html +15 -5
  102. package/template/email/sendTranscript.html +7 -4
  103. package/template/email/ticket.html +17 -7
  104. package/template/email/verify.html +15 -5
  105. package/test/cannedRoute.js +157 -0
  106. package/test/chatbot-mock.js +127 -0
  107. package/test/example-json-intents.txt +1 -0
  108. package/test/example-json.txt +1 -0
  109. package/test/example.json +1 -0
  110. package/test/faqRoute.js +353 -208
  111. package/test/faqkbRoute.js +669 -64
  112. package/test/imageRoute.js +1 -1
  113. package/test/messageRoute.js +387 -5
  114. package/test/requestRoute.js +6 -6
  115. package/test/requestService.js +55 -4
  116. package/test-int/cache-project.js +90 -0
  117. package/test-int/cache-project_user.js +88 -0
  118. package/utils/UIDGenerator.js +20 -0
  119. package/utils/cacheUtil.js +2 -2
  120. package/utils/orgUtil.js +3 -3
  121. package/utils/promiseUtil.js +31 -0
  122. package/utils/recipientEmailUtil.js +66 -0
  123. package/utils/sendEmailUtil.js +34 -0
  124. package/utils/sendMessageUtil.js +1 -1
  125. package/utils/stringUtil.js +12 -0
  126. package/websocket/webSocketServer.js +33 -10
@@ -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};