@app-connect/core 1.7.5 → 1.7.10
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.
- package/handlers/admin.js +29 -17
- package/handlers/auth.js +10 -4
- package/handlers/calldown.js +33 -0
- package/handlers/contact.js +54 -3
- package/handlers/log.js +4 -4
- package/index.js +377 -163
- package/lib/debugTracer.js +159 -0
- package/lib/oauth.js +26 -18
- package/lib/ringcentral.js +2 -2
- package/lib/s3ErrorLogReport.js +66 -0
- package/models/accountDataModel.js +34 -0
- package/package.json +70 -67
- package/releaseNotes.json +68 -0
- package/test/connector/registry.test.js +145 -0
- package/test/handlers/admin.test.js +583 -0
- package/test/handlers/auth.test.js +355 -0
- package/test/handlers/contact.test.js +852 -0
- package/test/handlers/log.test.js +868 -0
- package/test/lib/callLogComposer.test.js +1231 -0
- package/test/lib/debugTracer.test.js +328 -0
- package/test/lib/oauth.test.js +359 -0
- package/test/lib/ringcentral.test.js +473 -0
- package/test/lib/util.test.js +282 -0
- package/test/models/accountDataModel.test.js +98 -0
- package/test/models/dynamo/connectorSchema.test.js +189 -0
- package/test/models/models.test.js +539 -0
- package/test/setup.js +176 -176
package/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const express = require('express');
|
|
2
2
|
const cors = require('cors')
|
|
3
3
|
const bodyParser = require('body-parser');
|
|
4
|
+
require('body-parser-xml')(bodyParser);
|
|
4
5
|
const dynamoose = require('dynamoose');
|
|
5
6
|
const axios = require('axios');
|
|
6
7
|
const { UserModel } = require('./models/userModel');
|
|
@@ -10,6 +11,7 @@ const { CallLogModel } = require('./models/callLogModel');
|
|
|
10
11
|
const { MessageLogModel } = require('./models/messageLogModel');
|
|
11
12
|
const { AdminConfigModel } = require('./models/adminConfigModel');
|
|
12
13
|
const { CacheModel } = require('./models/cacheModel');
|
|
14
|
+
const { AccountDataModel } = require('./models/accountDataModel');
|
|
13
15
|
const jwt = require('./lib/jwt');
|
|
14
16
|
const logCore = require('./handlers/log');
|
|
15
17
|
const contactCore = require('./handlers/contact');
|
|
@@ -24,6 +26,8 @@ const analytics = require('./lib/analytics');
|
|
|
24
26
|
const util = require('./lib/util');
|
|
25
27
|
const connectorRegistry = require('./connector/registry');
|
|
26
28
|
const calldown = require('./handlers/calldown');
|
|
29
|
+
const { DebugTracer } = require('./lib/debugTracer');
|
|
30
|
+
const s3ErrorLogReport = require('./lib/s3ErrorLogReport');
|
|
27
31
|
|
|
28
32
|
let packageJson = null;
|
|
29
33
|
try {
|
|
@@ -37,7 +41,13 @@ catch (e) {
|
|
|
37
41
|
if (process.env.DYNAMODB_LOCALHOST) {
|
|
38
42
|
dynamoose.aws.ddb.local(process.env.DYNAMODB_LOCALHOST);
|
|
39
43
|
}
|
|
40
|
-
|
|
44
|
+
// log axios requests
|
|
45
|
+
if (process.env.IS_PROD === 'false') {
|
|
46
|
+
axios.interceptors.request.use(request => {
|
|
47
|
+
console.log('Request:', `[${request.method}]`, request.url);
|
|
48
|
+
return request;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
41
51
|
axios.defaults.headers.common['Unified-CRM-Extension-Version'] = packageJson.version;
|
|
42
52
|
|
|
43
53
|
async function initDB() {
|
|
@@ -49,6 +59,7 @@ async function initDB() {
|
|
|
49
59
|
await AdminConfigModel.sync();
|
|
50
60
|
await CacheModel.sync();
|
|
51
61
|
await CallDownListModel.sync();
|
|
62
|
+
await AccountDataModel.sync();
|
|
52
63
|
}
|
|
53
64
|
}
|
|
54
65
|
|
|
@@ -75,6 +86,8 @@ function createCoreRouter() {
|
|
|
75
86
|
|
|
76
87
|
// Move all app.get, app.post, etc. to router.get, router.post, etc.
|
|
77
88
|
router.get('/releaseNotes', async function (req, res) {
|
|
89
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
90
|
+
tracer?.trace('releaseNotes:start', { query: req.query });
|
|
78
91
|
const globalReleaseNotes = releaseNotes;
|
|
79
92
|
const connectorReleaseNotes = connectorRegistry.getReleaseNotes();
|
|
80
93
|
const mergedReleaseNotes = {};
|
|
@@ -85,9 +98,8 @@ function createCoreRouter() {
|
|
|
85
98
|
...connectorReleaseNotes[version] ?? {}
|
|
86
99
|
};
|
|
87
100
|
}
|
|
88
|
-
res.json(mergedReleaseNotes);
|
|
101
|
+
res.json(tracer ? tracer.wrapResponse(mergedReleaseNotes ?? {}) : (mergedReleaseNotes ?? {}));
|
|
89
102
|
});
|
|
90
|
-
|
|
91
103
|
// Obsolete
|
|
92
104
|
router.get('/crmManifest', (req, res) => {
|
|
93
105
|
try {
|
|
@@ -120,12 +132,12 @@ function createCoreRouter() {
|
|
|
120
132
|
res.status(400).send('Platform not found');
|
|
121
133
|
}
|
|
122
134
|
});
|
|
123
|
-
|
|
124
135
|
router.get('/isAlive', (req, res) => {
|
|
125
136
|
res.send(`OK`);
|
|
126
137
|
});
|
|
127
|
-
|
|
128
138
|
router.get('/implementedInterfaces', (req, res) => {
|
|
139
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
140
|
+
tracer?.trace('implementedInterfaces:start', { query: req.query });
|
|
129
141
|
try {
|
|
130
142
|
const platform = req.query.platform;
|
|
131
143
|
if (platform) {
|
|
@@ -133,7 +145,7 @@ function createCoreRouter() {
|
|
|
133
145
|
const result = {};
|
|
134
146
|
const authType = platformModule.getAuthType();
|
|
135
147
|
result.getAuthType = !!platformModule.getAuthType;
|
|
136
|
-
switch(authType){
|
|
148
|
+
switch (authType) {
|
|
137
149
|
case 'oauth':
|
|
138
150
|
result.getOauthInfo = !!platformModule.getOauthInfo;
|
|
139
151
|
break;
|
|
@@ -156,20 +168,23 @@ function createCoreRouter() {
|
|
|
156
168
|
result.getLicenseStatus = !!platformModule.getLicenseStatus;
|
|
157
169
|
result.getLogFormatType = !!platformModule.getLogFormatType;
|
|
158
170
|
result.cacheCallNote = !!process.env.USE_CACHE;
|
|
159
|
-
res.status(200).send(result);
|
|
171
|
+
res.status(200).send(tracer ? tracer.wrapResponse(result) : result);
|
|
160
172
|
}
|
|
161
173
|
else {
|
|
162
|
-
|
|
174
|
+
tracer?.trace('implementedInterfaces:noPlatform', {});
|
|
175
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please provide platform.') : 'Please provide platform.');
|
|
163
176
|
return;
|
|
164
177
|
}
|
|
165
178
|
}
|
|
166
179
|
catch (e) {
|
|
167
|
-
|
|
180
|
+
tracer?.traceError('implementedInterfaces:error', e);
|
|
181
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
168
182
|
}
|
|
169
183
|
});
|
|
170
|
-
|
|
171
184
|
router.get('/licenseStatus', async (req, res) => {
|
|
172
185
|
const requestStartTime = new Date().getTime();
|
|
186
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
187
|
+
tracer?.trace('licenseStatus:start', { query: req.query });
|
|
173
188
|
let platformName = null;
|
|
174
189
|
let success = false;
|
|
175
190
|
let extraData = {};
|
|
@@ -180,15 +195,20 @@ function createCoreRouter() {
|
|
|
180
195
|
const { id: userId, platform } = jwt.decodeJwt(jwtToken);
|
|
181
196
|
platformName = platform;
|
|
182
197
|
if (!userId) {
|
|
183
|
-
|
|
198
|
+
tracer?.trace('licenseStatus:noUserId', {});
|
|
199
|
+
res.status(400).send(tracer ? tracer.wrapResponse('No user ID') : 'No user ID');
|
|
184
200
|
success = true;
|
|
185
201
|
}
|
|
186
202
|
const licenseStatus = await authCore.getLicenseStatus({ userId, platform });
|
|
187
|
-
res.status(200).send(licenseStatus);
|
|
203
|
+
res.status(200).send(tracer ? tracer.wrapResponse(licenseStatus) : licenseStatus);
|
|
188
204
|
success = true;
|
|
189
205
|
}
|
|
190
206
|
else {
|
|
191
|
-
res.status(200).send({
|
|
207
|
+
res.status(200).send(tracer ? tracer.wrapResponse({
|
|
208
|
+
isLicenseValid: false,
|
|
209
|
+
licenseStatus: 'Invalid (Invalid user session)',
|
|
210
|
+
licenseStatusDescription: ''
|
|
211
|
+
}) : {
|
|
192
212
|
isLicenseValid: false,
|
|
193
213
|
licenseStatus: 'Invalid (Invalid user session)',
|
|
194
214
|
licenseStatusDescription: ''
|
|
@@ -197,7 +217,11 @@ function createCoreRouter() {
|
|
|
197
217
|
}
|
|
198
218
|
}
|
|
199
219
|
catch (e) {
|
|
200
|
-
res.status(200).send({
|
|
220
|
+
res.status(200).send(tracer ? tracer.wrapResponse({
|
|
221
|
+
isLicenseValid: false,
|
|
222
|
+
licenseStatus: 'Invalid (Connect to get license status)',
|
|
223
|
+
licenseStatusDescription: ''
|
|
224
|
+
}) : {
|
|
201
225
|
isLicenseValid: false,
|
|
202
226
|
licenseStatus: 'Invalid (Connect to get license status)',
|
|
203
227
|
licenseStatusDescription: ''
|
|
@@ -222,9 +246,10 @@ function createCoreRouter() {
|
|
|
222
246
|
eventAddedVia
|
|
223
247
|
});
|
|
224
248
|
});
|
|
225
|
-
|
|
226
249
|
router.get('/authValidation', async (req, res) => {
|
|
227
250
|
const requestStartTime = new Date().getTime();
|
|
251
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
252
|
+
tracer?.trace('authValidation:start', { query: req.query });
|
|
228
253
|
let platformName = null;
|
|
229
254
|
let success = false;
|
|
230
255
|
let validationPass = false;
|
|
@@ -236,7 +261,8 @@ function createCoreRouter() {
|
|
|
236
261
|
if (jwtToken) {
|
|
237
262
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
238
263
|
if (!decodedToken) {
|
|
239
|
-
|
|
264
|
+
tracer?.trace('authValidation:invalidJwtToken', {});
|
|
265
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Invalid JWT token') : 'Invalid JWT token');
|
|
240
266
|
return;
|
|
241
267
|
}
|
|
242
268
|
const { id: userId, platform } = decodedToken;
|
|
@@ -246,17 +272,19 @@ function createCoreRouter() {
|
|
|
246
272
|
validationPass = successful;
|
|
247
273
|
reason = failReason;
|
|
248
274
|
statusCode = status;
|
|
249
|
-
res.status(200).send({ successful, returnMessage });
|
|
275
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage }) : { successful, returnMessage });
|
|
250
276
|
}
|
|
251
277
|
else {
|
|
252
|
-
|
|
278
|
+
tracer?.trace('authValidation:noToken', {});
|
|
279
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
253
280
|
success = false;
|
|
254
281
|
}
|
|
255
282
|
}
|
|
256
283
|
catch (e) {
|
|
257
284
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
285
|
+
tracer?.traceError('authValidation:error', e);
|
|
258
286
|
statusCode = e.response?.status ?? 'unknown';
|
|
259
|
-
res.status(400).send(e);
|
|
287
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
260
288
|
success = false;
|
|
261
289
|
}
|
|
262
290
|
const requestEndTime = new Date().getTime();
|
|
@@ -279,15 +307,15 @@ function createCoreRouter() {
|
|
|
279
307
|
eventAddedVia
|
|
280
308
|
});
|
|
281
309
|
});
|
|
282
|
-
|
|
283
310
|
// Obsolete
|
|
284
311
|
router.get('/serverVersionInfo', (req, res) => {
|
|
285
312
|
const defaultCrmManifest = connectorRegistry.getManifest('default');
|
|
286
313
|
res.send({ version: defaultCrmManifest?.version ?? 'unknown' });
|
|
287
314
|
});
|
|
288
|
-
|
|
289
315
|
router.post('/admin/settings', async function (req, res) {
|
|
290
316
|
const requestStartTime = new Date().getTime();
|
|
317
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
318
|
+
tracer?.trace('setAdminSettings:start', { body: req.body });
|
|
291
319
|
let success = false;
|
|
292
320
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
293
321
|
try {
|
|
@@ -295,17 +323,20 @@ function createCoreRouter() {
|
|
|
295
323
|
const hashedRcAccountId = util.getHashValue(rcAccountId, process.env.HASH_KEY);
|
|
296
324
|
if (isValidated) {
|
|
297
325
|
await adminCore.upsertAdminSettings({ hashedRcAccountId, adminSettings: req.body.adminSettings });
|
|
298
|
-
res.status(200).send('Admin settings updated');
|
|
326
|
+
res.status(200).send(tracer ? tracer.wrapResponse('Admin settings updated') : 'Admin settings updated');
|
|
299
327
|
success = true;
|
|
300
328
|
}
|
|
301
329
|
else {
|
|
302
|
-
|
|
330
|
+
tracer?.trace('setAdminSettings:adminValidationFailed', {});
|
|
331
|
+
res.status(401).send(tracer ? tracer.wrapResponse('Admin validation failed') : 'Admin validation failed');
|
|
303
332
|
success = false;
|
|
304
333
|
}
|
|
305
334
|
}
|
|
306
335
|
catch (e) {
|
|
307
336
|
console.log(`${e.stack}`);
|
|
308
|
-
|
|
337
|
+
tracer?.traceError('setAdminSettings:error', e);
|
|
338
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
339
|
+
success = false;
|
|
309
340
|
}
|
|
310
341
|
const requestEndTime = new Date().getTime();
|
|
311
342
|
analytics.track({
|
|
@@ -321,9 +352,10 @@ function createCoreRouter() {
|
|
|
321
352
|
eventAddedVia
|
|
322
353
|
});
|
|
323
354
|
});
|
|
324
|
-
|
|
325
355
|
router.get('/admin/settings', async function (req, res) {
|
|
326
356
|
const requestStartTime = new Date().getTime();
|
|
357
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
358
|
+
tracer?.trace('getAdminSettings:start', { query: req.query });
|
|
327
359
|
let platformName = null;
|
|
328
360
|
let success = false;
|
|
329
361
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -334,7 +366,8 @@ function createCoreRouter() {
|
|
|
334
366
|
platformName = unAuthData?.platform ?? 'Unknown';
|
|
335
367
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
336
368
|
if (!user) {
|
|
337
|
-
|
|
369
|
+
tracer?.trace('getAdminSettings:userNotFound', {});
|
|
370
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
338
371
|
return;
|
|
339
372
|
}
|
|
340
373
|
const { isValidated, rcAccountId } = await adminCore.validateAdminRole({ rcAccessToken: req.query.rcAccessToken });
|
|
@@ -342,10 +375,13 @@ function createCoreRouter() {
|
|
|
342
375
|
if (isValidated) {
|
|
343
376
|
const adminSettings = await adminCore.getAdminSettings({ hashedRcAccountId });
|
|
344
377
|
if (adminSettings) {
|
|
345
|
-
res.status(200).send(adminSettings);
|
|
378
|
+
res.status(200).send(tracer ? tracer.wrapResponse(adminSettings) : adminSettings);
|
|
346
379
|
}
|
|
347
380
|
else {
|
|
348
|
-
res.status(200).send({
|
|
381
|
+
res.status(200).send(tracer ? tracer.wrapResponse({
|
|
382
|
+
customConnector: null,
|
|
383
|
+
userSettings: {}
|
|
384
|
+
}) : {
|
|
349
385
|
customConnector: null,
|
|
350
386
|
userSettings: {}
|
|
351
387
|
});
|
|
@@ -353,17 +389,21 @@ function createCoreRouter() {
|
|
|
353
389
|
success = true;
|
|
354
390
|
}
|
|
355
391
|
else {
|
|
356
|
-
|
|
392
|
+
tracer?.trace('getAdminSettings:adminValidationFailed', {});
|
|
393
|
+
res.status(401).send(tracer ? tracer.wrapResponse('Admin validation failed') : 'Admin validation failed');
|
|
357
394
|
success = true;
|
|
358
395
|
}
|
|
359
396
|
}
|
|
360
397
|
else {
|
|
361
|
-
|
|
398
|
+
tracer?.trace('getAdminSettings:noToken', {});
|
|
399
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
362
400
|
success = false;
|
|
363
401
|
}
|
|
364
402
|
}
|
|
365
403
|
catch (e) {
|
|
366
|
-
|
|
404
|
+
console.log(`${e.stack}`);
|
|
405
|
+
tracer?.traceError('getAdminSettings:error', e);
|
|
406
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
367
407
|
}
|
|
368
408
|
const requestEndTime = new Date().getTime();
|
|
369
409
|
analytics.track({
|
|
@@ -380,9 +420,10 @@ function createCoreRouter() {
|
|
|
380
420
|
eventAddedVia
|
|
381
421
|
});
|
|
382
422
|
});
|
|
383
|
-
|
|
384
423
|
router.post('/admin/userMapping', async function (req, res) {
|
|
385
424
|
const requestStartTime = new Date().getTime();
|
|
425
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
426
|
+
tracer?.trace('getUserMapping:start', { query: req.query });
|
|
386
427
|
let platformName = null;
|
|
387
428
|
let success = false;
|
|
388
429
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -393,29 +434,33 @@ function createCoreRouter() {
|
|
|
393
434
|
platformName = unAuthData?.platform ?? 'Unknown';
|
|
394
435
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
395
436
|
if (!user) {
|
|
396
|
-
|
|
437
|
+
tracer?.trace('getUserMapping:userNotFound', {});
|
|
438
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
397
439
|
return;
|
|
398
440
|
}
|
|
399
441
|
const { isValidated, rcAccountId } = await adminCore.validateAdminRole({ rcAccessToken: req.query.rcAccessToken });
|
|
400
442
|
const hashedRcAccountId = util.getHashValue(rcAccountId, process.env.HASH_KEY);
|
|
401
443
|
if (isValidated) {
|
|
402
444
|
const userMapping = await adminCore.getUserMapping({ user, hashedRcAccountId, rcExtensionList: req.body.rcExtensionList });
|
|
403
|
-
res.status(200).send(userMapping);
|
|
445
|
+
res.status(200).send(tracer ? tracer.wrapResponse(userMapping) : userMapping);
|
|
404
446
|
success = true;
|
|
405
447
|
}
|
|
406
448
|
else {
|
|
407
|
-
|
|
449
|
+
tracer?.trace('getUserMapping:adminValidationFailed', {});
|
|
450
|
+
res.status(401).send(tracer ? tracer.wrapResponse('Admin validation failed') : 'Admin validation failed');
|
|
408
451
|
success = true;
|
|
409
452
|
}
|
|
410
453
|
}
|
|
411
454
|
else {
|
|
412
|
-
|
|
455
|
+
tracer?.trace('getUserMapping:noToken', {});
|
|
456
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
413
457
|
success = false;
|
|
414
458
|
}
|
|
415
459
|
}
|
|
416
460
|
catch (e) {
|
|
417
461
|
console.log(`${e.stack}`);
|
|
418
|
-
|
|
462
|
+
tracer?.traceError('getUserMapping:error', e);
|
|
463
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
419
464
|
}
|
|
420
465
|
const requestEndTime = new Date().getTime();
|
|
421
466
|
analytics.track({
|
|
@@ -432,36 +477,41 @@ function createCoreRouter() {
|
|
|
432
477
|
eventAddedVia
|
|
433
478
|
});
|
|
434
479
|
});
|
|
435
|
-
|
|
436
480
|
router.get('/admin/serverLoggingSettings', async function (req, res) {
|
|
437
481
|
const requestStartTime = new Date().getTime();
|
|
482
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
483
|
+
tracer?.trace('getServerLoggingSettings:start', { query: req.query });
|
|
438
484
|
let platformName = null;
|
|
439
485
|
let success = false;
|
|
440
486
|
const jwtToken = req.query.jwtToken;
|
|
441
487
|
if (!jwtToken) {
|
|
442
|
-
|
|
488
|
+
tracer?.trace('getServerLoggingSettings:noToken', {});
|
|
489
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
443
490
|
return;
|
|
444
491
|
}
|
|
445
492
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
446
493
|
try {
|
|
447
494
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
448
495
|
if (!unAuthData?.id) {
|
|
449
|
-
|
|
496
|
+
tracer?.trace('getServerLoggingSettings:noToken', {});
|
|
497
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
450
498
|
return;
|
|
451
499
|
}
|
|
452
500
|
platformName = unAuthData?.platform ?? 'Unknown';
|
|
453
501
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
454
502
|
if (!user) {
|
|
455
|
-
|
|
503
|
+
tracer?.trace('getServerLoggingSettings:userNotFound', {});
|
|
504
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
456
505
|
return;
|
|
457
506
|
}
|
|
458
507
|
const serverLoggingSettings = await adminCore.getServerLoggingSettings({ user });
|
|
459
|
-
res.status(200).send(serverLoggingSettings);
|
|
508
|
+
res.status(200).send(tracer ? tracer.wrapResponse(serverLoggingSettings) : serverLoggingSettings);
|
|
460
509
|
success = true;
|
|
461
510
|
}
|
|
462
511
|
catch (e) {
|
|
463
512
|
console.log(`${e.stack}`);
|
|
464
|
-
|
|
513
|
+
tracer?.traceError('getServerLoggingSettings:error', e);
|
|
514
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
465
515
|
}
|
|
466
516
|
const requestEndTime = new Date().getTime();
|
|
467
517
|
analytics.track({
|
|
@@ -478,40 +528,46 @@ function createCoreRouter() {
|
|
|
478
528
|
eventAddedVia
|
|
479
529
|
});
|
|
480
530
|
});
|
|
481
|
-
|
|
482
531
|
router.post('/admin/serverLoggingSettings', async function (req, res) {
|
|
483
532
|
const requestStartTime = new Date().getTime();
|
|
533
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
534
|
+
tracer?.trace('setServerLoggingSettings:start', { body: req.body });
|
|
484
535
|
let platformName = null;
|
|
485
536
|
let success = false;
|
|
486
537
|
const jwtToken = req.query.jwtToken;
|
|
487
538
|
if (!jwtToken) {
|
|
488
|
-
|
|
539
|
+
tracer?.trace('setServerLoggingSettings:noToken', {});
|
|
540
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
489
541
|
return;
|
|
490
542
|
}
|
|
491
543
|
if (!req.body.additionalFieldValues) {
|
|
492
|
-
|
|
544
|
+
tracer?.trace('setServerLoggingSettings:missingAdditionalFieldValues', {});
|
|
545
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing additionalFieldValues') : 'Missing additionalFieldValues');
|
|
493
546
|
return;
|
|
494
547
|
}
|
|
495
548
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
496
549
|
try {
|
|
497
550
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
498
551
|
if (!unAuthData?.id) {
|
|
499
|
-
|
|
552
|
+
tracer?.trace('setServerLoggingSettings:noToken', {});
|
|
553
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
500
554
|
return;
|
|
501
555
|
}
|
|
502
556
|
platformName = unAuthData?.platform ?? 'Unknown';
|
|
503
557
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
504
558
|
if (!user) {
|
|
505
|
-
|
|
559
|
+
tracer?.trace('setServerLoggingSettings:userNotFound', {});
|
|
560
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
506
561
|
return;
|
|
507
562
|
}
|
|
508
563
|
const { successful, returnMessage } = await adminCore.updateServerLoggingSettings({ user, additionalFieldValues: req.body.additionalFieldValues });
|
|
509
|
-
res.status(200).send({ successful, returnMessage });
|
|
564
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage }) : { successful, returnMessage });
|
|
510
565
|
success = true;
|
|
511
566
|
}
|
|
512
567
|
catch (e) {
|
|
513
568
|
console.log(`${e.stack}`);
|
|
514
|
-
|
|
569
|
+
tracer?.traceError('setServerLoggingSettings:error', e);
|
|
570
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ successful: false, returnMessage: { messageType: 'warning', message: 'Server logging settings update failed', ttl: 5000 } }) : { successful: false, returnMessage: { messageType: 'warning', message: 'Server logging settings update failed', ttl: 5000 } });
|
|
515
571
|
success = false;
|
|
516
572
|
}
|
|
517
573
|
const requestEndTime = new Date().getTime();
|
|
@@ -529,27 +585,32 @@ function createCoreRouter() {
|
|
|
529
585
|
eventAddedVia
|
|
530
586
|
});
|
|
531
587
|
})
|
|
532
|
-
|
|
533
588
|
router.get('/user/preloadSettings', async function (req, res) {
|
|
589
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
590
|
+
tracer?.trace('getUserSettingsByAdmin:start', { query: req.query });
|
|
534
591
|
try {
|
|
535
592
|
const rcAccessToken = req.query.rcAccessToken;
|
|
536
593
|
const rcAccountId = req.query.rcAccountId;
|
|
537
594
|
if (rcAccessToken || rcAccountId) {
|
|
538
595
|
const userSettings = await userCore.getUserSettingsByAdmin({ rcAccessToken, rcAccountId });
|
|
539
|
-
res.status(200).send(userSettings);
|
|
596
|
+
res.status(200).send(tracer ? tracer.wrapResponse(userSettings) : userSettings);
|
|
540
597
|
}
|
|
541
598
|
else {
|
|
542
|
-
|
|
599
|
+
tracer?.trace('getUserSettingsByAdmin:noRcAccessTokenOrRcAccountId', {});
|
|
600
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Cannot find rc user login') : 'Cannot find rc user login');
|
|
543
601
|
}
|
|
544
602
|
}
|
|
545
603
|
catch (e) {
|
|
546
604
|
console.log(`${e.stack}`);
|
|
547
|
-
|
|
605
|
+
tracer?.traceError('getUserSettingsByAdmin:error', e);
|
|
606
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
548
607
|
}
|
|
549
608
|
}
|
|
550
609
|
);
|
|
551
610
|
router.get('/user/settings', async function (req, res) {
|
|
552
611
|
const requestStartTime = new Date().getTime();
|
|
612
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
613
|
+
tracer?.trace('getUserSettings:start', { query: req.query });
|
|
553
614
|
let platformName = null;
|
|
554
615
|
let success = false;
|
|
555
616
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -560,7 +621,8 @@ function createCoreRouter() {
|
|
|
560
621
|
platformName = unAuthData?.platform ?? 'Unknown';
|
|
561
622
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
562
623
|
if (!user) {
|
|
563
|
-
|
|
624
|
+
tracer?.trace('getUserSettings:userNotFound', {});
|
|
625
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
564
626
|
return;
|
|
565
627
|
}
|
|
566
628
|
else {
|
|
@@ -568,16 +630,19 @@ function createCoreRouter() {
|
|
|
568
630
|
const rcAccountId = req.query.rcAccountId;
|
|
569
631
|
const userSettings = await userCore.getUserSettings({ user, rcAccessToken, rcAccountId });
|
|
570
632
|
success = true;
|
|
571
|
-
res.status(200).send(userSettings);
|
|
633
|
+
res.status(200).send(tracer ? tracer.wrapResponse(userSettings) : userSettings);
|
|
572
634
|
}
|
|
573
635
|
}
|
|
574
636
|
else {
|
|
575
637
|
success = false;
|
|
576
|
-
|
|
638
|
+
tracer?.trace('getUserSettings:noToken', {});
|
|
639
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
577
640
|
}
|
|
578
641
|
}
|
|
579
642
|
catch (e) {
|
|
580
643
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
644
|
+
tracer?.traceError('getUserSettings:error', e, { platform: platformName });
|
|
645
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
581
646
|
}
|
|
582
647
|
const requestEndTime = new Date().getTime();
|
|
583
648
|
analytics.track({
|
|
@@ -594,9 +659,10 @@ function createCoreRouter() {
|
|
|
594
659
|
eventAddedVia
|
|
595
660
|
});
|
|
596
661
|
});
|
|
597
|
-
|
|
598
662
|
router.post('/user/settings', async function (req, res) {
|
|
599
663
|
const requestStartTime = new Date().getTime();
|
|
664
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
665
|
+
tracer?.trace('setUserSettings:start', { body: req.body });
|
|
600
666
|
let platformName = null;
|
|
601
667
|
let success = false;
|
|
602
668
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -606,23 +672,30 @@ function createCoreRouter() {
|
|
|
606
672
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
607
673
|
platformName = unAuthData?.platform;
|
|
608
674
|
if (!platformName) {
|
|
609
|
-
|
|
675
|
+
tracer?.trace('setUserSettings:unknownPlatform', {});
|
|
676
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Unknown platform') : 'Unknown platform');
|
|
677
|
+
return;
|
|
610
678
|
}
|
|
611
679
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
612
680
|
if (!user) {
|
|
613
|
-
|
|
681
|
+
tracer?.trace('setUserSettings:userNotFound', {});
|
|
682
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
683
|
+
return;
|
|
614
684
|
}
|
|
615
685
|
const { userSettings } = await userCore.updateUserSettings({ user, userSettings: req.body.userSettings, platformName });
|
|
616
|
-
res.status(200).send({ userSettings });
|
|
686
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ userSettings }) : { userSettings });
|
|
617
687
|
success = true;
|
|
618
688
|
}
|
|
619
689
|
else {
|
|
620
|
-
|
|
690
|
+
tracer?.trace('setUserSettings:noToken', {});
|
|
691
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
621
692
|
success = false;
|
|
622
693
|
}
|
|
623
694
|
}
|
|
624
695
|
catch (e) {
|
|
625
696
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
697
|
+
tracer?.traceError('setUserSettings:error', e, { platform: platformName });
|
|
698
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
626
699
|
}
|
|
627
700
|
const requestEndTime = new Date().getTime();
|
|
628
701
|
analytics.track({
|
|
@@ -639,45 +712,54 @@ function createCoreRouter() {
|
|
|
639
712
|
eventAddedVia
|
|
640
713
|
});
|
|
641
714
|
});
|
|
642
|
-
|
|
643
715
|
router.get('/hostname', async function (req, res) {
|
|
716
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
717
|
+
tracer?.trace('hostname:start', { query: req.query });
|
|
644
718
|
try {
|
|
645
719
|
const jwtToken = req.query.jwtToken;
|
|
646
720
|
if (jwtToken) {
|
|
647
721
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
648
722
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
649
723
|
if (!user) {
|
|
650
|
-
|
|
724
|
+
tracer?.trace('hostname:userNotFound', {});
|
|
725
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
651
726
|
return;
|
|
652
727
|
}
|
|
653
|
-
res.status(200).send(user.hostname);
|
|
728
|
+
res.status(200).send(tracer ? tracer.wrapResponse(user.hostname) : user.hostname);
|
|
654
729
|
}
|
|
655
730
|
else {
|
|
656
|
-
|
|
731
|
+
tracer?.trace('hostname:noToken', {});
|
|
732
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
657
733
|
}
|
|
658
734
|
}
|
|
659
735
|
catch (e) {
|
|
660
736
|
console.log(`${e.stack}`);
|
|
661
|
-
|
|
737
|
+
tracer?.traceError('hostname:error', e);
|
|
738
|
+
res.status(500).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
662
739
|
}
|
|
663
740
|
})
|
|
664
|
-
|
|
665
741
|
router.get('/oauth-callback', async function (req, res) {
|
|
666
742
|
const requestStartTime = new Date().getTime();
|
|
743
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
744
|
+
tracer?.trace('oauth-callback:start', { query: req.query });
|
|
667
745
|
let platformName = null;
|
|
668
746
|
let success = false;
|
|
669
747
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
670
748
|
try {
|
|
671
749
|
if (!req.query?.callbackUri || req.query.callbackUri === 'undefined') {
|
|
672
|
-
|
|
750
|
+
tracer?.trace('oauth-callback:missingCallbackUri', {});
|
|
751
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing callbackUri') : 'Missing callbackUri');
|
|
752
|
+
return;
|
|
673
753
|
}
|
|
674
754
|
platformName = req.query.state ?
|
|
675
755
|
req.query.state.split('platform=')[1] :
|
|
676
|
-
decodeURIComponent(req.originalUrl).split('state=')[1].split('&')[0].split('platform=')[1];
|
|
756
|
+
decodeURIComponent(decodeURIComponent(req.originalUrl).split('state=')[1].split('&')[0]).split('platform=')[1];
|
|
677
757
|
const hostname = req.query.hostname;
|
|
678
758
|
const tokenUrl = req.query.tokenUrl;
|
|
679
759
|
if (!platformName) {
|
|
680
|
-
|
|
760
|
+
tracer?.trace('oauth-callback:missingPlatformName', {});
|
|
761
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing platform name') : 'Missing platform name');
|
|
762
|
+
return;
|
|
681
763
|
}
|
|
682
764
|
const hasAuthCodeInCallbackUri = req.query.callbackUri.includes('code=');
|
|
683
765
|
if (!hasAuthCodeInCallbackUri) {
|
|
@@ -688,28 +770,25 @@ function createCoreRouter() {
|
|
|
688
770
|
platform: platformName,
|
|
689
771
|
hostname,
|
|
690
772
|
tokenUrl,
|
|
691
|
-
|
|
692
|
-
apiUrl: req.query.apiUrl,
|
|
693
|
-
username: req.query.username,
|
|
694
|
-
query: req.query,
|
|
695
|
-
proxyId: req.query.proxyId
|
|
773
|
+
query: req.query
|
|
696
774
|
});
|
|
697
775
|
if (userInfo) {
|
|
698
776
|
const jwtToken = jwt.generateJwt({
|
|
699
777
|
id: userInfo.id.toString(),
|
|
700
778
|
platform: platformName
|
|
701
779
|
});
|
|
702
|
-
res.status(200).send({ jwtToken, name: userInfo.name, returnMessage });
|
|
780
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ jwtToken, name: userInfo.name, returnMessage }) : { jwtToken, name: userInfo.name, returnMessage });
|
|
703
781
|
success = true;
|
|
704
782
|
}
|
|
705
783
|
else {
|
|
706
|
-
res.status(200).send({ returnMessage });
|
|
784
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ returnMessage }) : { returnMessage });
|
|
707
785
|
success = false;
|
|
708
786
|
}
|
|
709
787
|
}
|
|
710
788
|
catch (e) {
|
|
711
789
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
712
|
-
|
|
790
|
+
tracer?.traceError('oauth-callback:error', e, { platform: platformName });
|
|
791
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
713
792
|
success = false;
|
|
714
793
|
}
|
|
715
794
|
const requestEndTime = new Date().getTime();
|
|
@@ -729,6 +808,8 @@ function createCoreRouter() {
|
|
|
729
808
|
})
|
|
730
809
|
router.post('/apiKeyLogin', async function (req, res) {
|
|
731
810
|
const requestStartTime = new Date().getTime();
|
|
811
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
812
|
+
tracer?.trace('apiKeyLogin:start', { body: req.body });
|
|
732
813
|
let platformName = null;
|
|
733
814
|
let success = false;
|
|
734
815
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -740,10 +821,14 @@ function createCoreRouter() {
|
|
|
740
821
|
const proxyId = req.body.proxyId;
|
|
741
822
|
const additionalInfo = req.body.additionalInfo;
|
|
742
823
|
if (!platform) {
|
|
743
|
-
|
|
824
|
+
tracer?.trace('apiKeyLogin:missingPlatform', {});
|
|
825
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing platform name') : 'Missing platform name');
|
|
826
|
+
return;
|
|
744
827
|
}
|
|
745
828
|
if (!apiKey) {
|
|
746
|
-
|
|
829
|
+
tracer?.trace('apiKeyLogin:missingApiKey', {});
|
|
830
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing api key') : 'Missing api key');
|
|
831
|
+
return;
|
|
747
832
|
}
|
|
748
833
|
const { userInfo, returnMessage } = await authCore.onApiKeyLogin({ platform, hostname, apiKey, proxyId, additionalInfo });
|
|
749
834
|
if (userInfo) {
|
|
@@ -751,17 +836,18 @@ function createCoreRouter() {
|
|
|
751
836
|
id: userInfo.id.toString(),
|
|
752
837
|
platform: platform
|
|
753
838
|
});
|
|
754
|
-
res.status(200).send({ jwtToken, name: userInfo.name, returnMessage });
|
|
839
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ jwtToken, name: userInfo.name, returnMessage }) : { jwtToken, name: userInfo.name, returnMessage });
|
|
755
840
|
success = true;
|
|
756
841
|
}
|
|
757
842
|
else {
|
|
758
|
-
res.status(400).send({ returnMessage });
|
|
843
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ returnMessage }) : { returnMessage });
|
|
759
844
|
success = false;
|
|
760
845
|
}
|
|
761
846
|
}
|
|
762
847
|
catch (e) {
|
|
763
848
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
764
|
-
|
|
849
|
+
tracer?.traceError('apiKeyLogin:error', e, { platform: platformName });
|
|
850
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
765
851
|
success = false;
|
|
766
852
|
}
|
|
767
853
|
const requestEndTime = new Date().getTime();
|
|
@@ -781,6 +867,8 @@ function createCoreRouter() {
|
|
|
781
867
|
})
|
|
782
868
|
router.post('/unAuthorize', async function (req, res) {
|
|
783
869
|
const requestStartTime = new Date().getTime();
|
|
870
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
871
|
+
tracer?.trace('unAuthorize:start', { query: req.query });
|
|
784
872
|
let platformName = null;
|
|
785
873
|
let success = false;
|
|
786
874
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -791,22 +879,25 @@ function createCoreRouter() {
|
|
|
791
879
|
platformName = unAuthData?.platform ?? 'Unknown';
|
|
792
880
|
const userToLogout = await UserModel.findByPk(unAuthData?.id);
|
|
793
881
|
if (!userToLogout) {
|
|
794
|
-
|
|
882
|
+
tracer?.trace('unAuthorize:userNotFound', {});
|
|
883
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
795
884
|
return;
|
|
796
885
|
}
|
|
797
886
|
const platformModule = connectorRegistry.getConnector(unAuthData?.platform ?? 'Unknown');
|
|
798
887
|
const { returnMessage } = await platformModule.unAuthorize({ user: userToLogout });
|
|
799
|
-
res.status(200).send(
|
|
888
|
+
res.status(200).send(tracer ? tracer.wrapResponse(returnMessage) : returnMessage);
|
|
800
889
|
success = true;
|
|
801
890
|
}
|
|
802
891
|
else {
|
|
803
|
-
|
|
892
|
+
tracer?.trace('unAuthorize:noToken', {});
|
|
893
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
804
894
|
success = false;
|
|
805
895
|
}
|
|
806
896
|
}
|
|
807
897
|
catch (e) {
|
|
808
898
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
809
|
-
|
|
899
|
+
tracer?.traceError('unAuthorize:error', e, { platform: platformName });
|
|
900
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
810
901
|
success = false;
|
|
811
902
|
}
|
|
812
903
|
const requestEndTime = new Date().getTime();
|
|
@@ -825,18 +916,24 @@ function createCoreRouter() {
|
|
|
825
916
|
});
|
|
826
917
|
});
|
|
827
918
|
router.get('/userInfoHash', async function (req, res) {
|
|
919
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
828
920
|
try {
|
|
921
|
+
tracer?.trace('userInfoHash:start', { query: req.query });
|
|
829
922
|
const extensionId = util.getHashValue(req.query.extensionId, process.env.HASH_KEY);
|
|
830
923
|
const accountId = util.getHashValue(req.query.accountId, process.env.HASH_KEY);
|
|
831
|
-
res.status(200).send({ extensionId, accountId });
|
|
924
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ extensionId, accountId }) : { extensionId, accountId });
|
|
832
925
|
}
|
|
833
926
|
catch (e) {
|
|
834
927
|
console.log(`${e.stack}`);
|
|
835
|
-
res.status(400).send(e);
|
|
928
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
929
|
+
tracer?.traceError('userInfoHash:error', e);
|
|
836
930
|
}
|
|
837
931
|
})
|
|
838
932
|
router.get('/contact', async function (req, res) {
|
|
839
933
|
const requestStartTime = new Date().getTime();
|
|
934
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
935
|
+
tracer?.trace('findContact:start', { query: req.query });
|
|
936
|
+
|
|
840
937
|
let platformName = null;
|
|
841
938
|
let success = false;
|
|
842
939
|
let resultCount = 0;
|
|
@@ -846,14 +943,25 @@ function createCoreRouter() {
|
|
|
846
943
|
const jwtToken = req.query.jwtToken;
|
|
847
944
|
if (jwtToken) {
|
|
848
945
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
946
|
+
tracer?.trace('findContact:jwtDecoded', { decodedToken });
|
|
849
947
|
if (!decodedToken) {
|
|
850
|
-
|
|
948
|
+
tracer?.trace('findContact:invalidToken', {});
|
|
949
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
851
950
|
return;
|
|
852
951
|
}
|
|
853
952
|
const { id: userId, platform } = decodedToken;
|
|
854
953
|
platformName = platform;
|
|
855
|
-
const { successful, returnMessage, contact, extraDataTracking } = await contactCore.findContact({
|
|
856
|
-
|
|
954
|
+
const { successful, returnMessage, contact, extraDataTracking } = await contactCore.findContact({
|
|
955
|
+
platform,
|
|
956
|
+
userId,
|
|
957
|
+
phoneNumber: req.query.phoneNumber.replace(' ', '+'),
|
|
958
|
+
overridingFormat: req.query.overridingFormat,
|
|
959
|
+
isExtension: req.query?.isExtension ?? false,
|
|
960
|
+
tracer,
|
|
961
|
+
isForceRefreshAccountData: req.query?.isForceRefreshAccountData === 'true'
|
|
962
|
+
});
|
|
963
|
+
tracer?.trace('findContact:result', { successful, returnMessage, contact });
|
|
964
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage, contact }) : { successful, returnMessage, contact });
|
|
857
965
|
if (successful) {
|
|
858
966
|
const nonNewContact = contact?.filter(c => !c.isNewContact) ?? [];
|
|
859
967
|
resultCount = nonNewContact.length;
|
|
@@ -864,14 +972,16 @@ function createCoreRouter() {
|
|
|
864
972
|
}
|
|
865
973
|
}
|
|
866
974
|
else {
|
|
867
|
-
|
|
975
|
+
tracer?.trace('findContact:noToken', {});
|
|
976
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
868
977
|
success = false;
|
|
869
978
|
}
|
|
870
979
|
}
|
|
871
980
|
catch (e) {
|
|
872
981
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
982
|
+
tracer?.traceError('findContact:error', e, { platform: platformName });
|
|
873
983
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
874
|
-
res.status(400).send(e);
|
|
984
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
875
985
|
success = false;
|
|
876
986
|
}
|
|
877
987
|
const requestEndTime = new Date().getTime();
|
|
@@ -895,6 +1005,8 @@ function createCoreRouter() {
|
|
|
895
1005
|
});
|
|
896
1006
|
router.post('/contact', async function (req, res) {
|
|
897
1007
|
const requestStartTime = new Date().getTime();
|
|
1008
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1009
|
+
tracer?.trace('createContact:start', { query: req.query });
|
|
898
1010
|
let platformName = null;
|
|
899
1011
|
let success = false;
|
|
900
1012
|
let extraData = {};
|
|
@@ -904,27 +1016,30 @@ function createCoreRouter() {
|
|
|
904
1016
|
if (jwtToken) {
|
|
905
1017
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
906
1018
|
if (!decodedToken) {
|
|
907
|
-
|
|
1019
|
+
tracer?.trace('createContact:invalidToken', {});
|
|
1020
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
908
1021
|
return;
|
|
909
1022
|
}
|
|
910
1023
|
const { id: userId, platform } = decodedToken;
|
|
911
1024
|
platformName = platform;
|
|
912
1025
|
const { successful, returnMessage, contact, extraDataTracking } = await contactCore.createContact({ platform, userId, phoneNumber: req.body.phoneNumber, newContactName: req.body.newContactName, newContactType: req.body.newContactType, additionalSubmission: req.body.additionalSubmission });
|
|
913
|
-
res.status(200).send({ successful, returnMessage, contact });
|
|
1026
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage, contact }) : { successful, returnMessage, contact });
|
|
914
1027
|
success = true;
|
|
915
1028
|
if (extraDataTracking) {
|
|
916
1029
|
extraData = extraDataTracking;
|
|
917
1030
|
}
|
|
918
1031
|
}
|
|
919
1032
|
else {
|
|
920
|
-
|
|
1033
|
+
tracer?.trace('createContact:noToken', {});
|
|
1034
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
921
1035
|
success = false;
|
|
922
1036
|
}
|
|
923
1037
|
}
|
|
924
1038
|
catch (e) {
|
|
925
1039
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1040
|
+
tracer?.traceError('createContact:error', e, { platform: platformName });
|
|
926
1041
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
927
|
-
res.status(400).send(e);
|
|
1042
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
928
1043
|
success = false;
|
|
929
1044
|
}
|
|
930
1045
|
const requestEndTime = new Date().getTime();
|
|
@@ -947,6 +1062,8 @@ function createCoreRouter() {
|
|
|
947
1062
|
});
|
|
948
1063
|
router.post('/callLog/cacheNote', async function (req, res) {
|
|
949
1064
|
const requestStartTime = new Date().getTime();
|
|
1065
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1066
|
+
tracer?.trace('saveNoteCache:start', { query: req.query });
|
|
950
1067
|
let platformName = null;
|
|
951
1068
|
let success = false;
|
|
952
1069
|
let extraData = {};
|
|
@@ -956,13 +1073,14 @@ function createCoreRouter() {
|
|
|
956
1073
|
if (jwtToken) {
|
|
957
1074
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
958
1075
|
if (!decodedToken) {
|
|
959
|
-
|
|
1076
|
+
tracer?.trace('saveNoteCache:invalidToken', {});
|
|
1077
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
960
1078
|
return;
|
|
961
1079
|
}
|
|
962
1080
|
const { id: userId, platform } = decodedToken;
|
|
963
1081
|
platformName = platform;
|
|
964
1082
|
const { successful, returnMessage, extraDataTracking } = await logCore.saveNoteCache({ sessionId: req.body.sessionId, note: req.body.note });
|
|
965
|
-
res.status(200).send({ successful, returnMessage });
|
|
1083
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage }) : { successful, returnMessage });
|
|
966
1084
|
success = true;
|
|
967
1085
|
if (extraDataTracking) {
|
|
968
1086
|
extraData = extraDataTracking;
|
|
@@ -970,8 +1088,9 @@ function createCoreRouter() {
|
|
|
970
1088
|
}
|
|
971
1089
|
} catch (e) {
|
|
972
1090
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1091
|
+
tracer?.traceError('saveNoteCache:error', e, { platform: platformName });
|
|
973
1092
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
974
|
-
res.status(400).send(e);
|
|
1093
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
975
1094
|
success = false;
|
|
976
1095
|
}
|
|
977
1096
|
const requestEndTime = new Date().getTime();
|
|
@@ -986,6 +1105,8 @@ function createCoreRouter() {
|
|
|
986
1105
|
})
|
|
987
1106
|
router.get('/callLog', async function (req, res) {
|
|
988
1107
|
const requestStartTime = new Date().getTime();
|
|
1108
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1109
|
+
tracer?.trace('getCallLog:start', { query: req.query });
|
|
989
1110
|
let platformName = null;
|
|
990
1111
|
let success = false;
|
|
991
1112
|
let extraData = {};
|
|
@@ -995,13 +1116,14 @@ function createCoreRouter() {
|
|
|
995
1116
|
if (jwtToken) {
|
|
996
1117
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
997
1118
|
if (!decodedToken) {
|
|
998
|
-
|
|
1119
|
+
tracer?.trace('getCallLog:invalidToken', {});
|
|
1120
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
999
1121
|
return;
|
|
1000
1122
|
}
|
|
1001
1123
|
const { id: userId, platform } = decodedToken;
|
|
1002
1124
|
platformName = platform;
|
|
1003
1125
|
const { successful, logs, returnMessage, extraDataTracking } = await logCore.getCallLog({ userId, sessionIds: req.query.sessionIds, platform, requireDetails: req.query.requireDetails === 'true' });
|
|
1004
|
-
res.status(200).send({ successful, logs, returnMessage });
|
|
1126
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, logs, returnMessage }) : { successful, logs, returnMessage });
|
|
1005
1127
|
success = true;
|
|
1006
1128
|
if (extraDataTracking) {
|
|
1007
1129
|
extraData = extraDataTracking;
|
|
@@ -1009,14 +1131,16 @@ function createCoreRouter() {
|
|
|
1009
1131
|
extraData.requireDetails = req.query.requireDetails === 'true';
|
|
1010
1132
|
}
|
|
1011
1133
|
else {
|
|
1012
|
-
|
|
1134
|
+
tracer?.trace('getCallLog:noToken', {});
|
|
1135
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1013
1136
|
success = false;
|
|
1014
1137
|
}
|
|
1015
1138
|
}
|
|
1016
1139
|
catch (e) {
|
|
1017
1140
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1018
1141
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
1019
|
-
res.status(400).send(e);
|
|
1142
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1143
|
+
tracer?.traceError('getCallLog:error', e, { platform: platformName });
|
|
1020
1144
|
success = false;
|
|
1021
1145
|
}
|
|
1022
1146
|
const requestEndTime = new Date().getTime();
|
|
@@ -1039,6 +1163,8 @@ function createCoreRouter() {
|
|
|
1039
1163
|
});
|
|
1040
1164
|
router.post('/callLog', async function (req, res) {
|
|
1041
1165
|
const requestStartTime = new Date().getTime();
|
|
1166
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1167
|
+
tracer?.trace('createCallLog:start', { query: req.query });
|
|
1042
1168
|
let platformName = null;
|
|
1043
1169
|
let success = false;
|
|
1044
1170
|
let extraData = {};
|
|
@@ -1048,7 +1174,8 @@ function createCoreRouter() {
|
|
|
1048
1174
|
if (jwtToken) {
|
|
1049
1175
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
1050
1176
|
if (!decodedToken) {
|
|
1051
|
-
|
|
1177
|
+
tracer?.trace('createCallLog:invalidToken', {});
|
|
1178
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1052
1179
|
return;
|
|
1053
1180
|
}
|
|
1054
1181
|
const { id: userId, platform } = decodedToken;
|
|
@@ -1057,18 +1184,20 @@ function createCoreRouter() {
|
|
|
1057
1184
|
if (extraDataTracking) {
|
|
1058
1185
|
extraData = extraDataTracking;
|
|
1059
1186
|
}
|
|
1060
|
-
res.status(200).send({ successful, logId, returnMessage });
|
|
1187
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, logId, returnMessage }) : { successful, logId, returnMessage });
|
|
1061
1188
|
success = true;
|
|
1062
1189
|
}
|
|
1063
1190
|
else {
|
|
1064
|
-
|
|
1191
|
+
tracer?.trace('createCallLog:noToken', {});
|
|
1192
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1065
1193
|
success = false;
|
|
1066
1194
|
}
|
|
1067
1195
|
}
|
|
1068
1196
|
catch (e) {
|
|
1069
1197
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1070
1198
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
1071
|
-
res.status(400).send(e);
|
|
1199
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1200
|
+
tracer?.traceError('createCallLog:error', e, { platform: platformName });
|
|
1072
1201
|
success = false;
|
|
1073
1202
|
}
|
|
1074
1203
|
const requestEndTime = new Date().getTime();
|
|
@@ -1091,6 +1220,8 @@ function createCoreRouter() {
|
|
|
1091
1220
|
});
|
|
1092
1221
|
router.patch('/callLog', async function (req, res) {
|
|
1093
1222
|
const requestStartTime = new Date().getTime();
|
|
1223
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1224
|
+
tracer?.trace('updateCallLog:start', { query: req.query });
|
|
1094
1225
|
let platformName = null;
|
|
1095
1226
|
let success = false;
|
|
1096
1227
|
let extraData = {};
|
|
@@ -1100,7 +1231,8 @@ function createCoreRouter() {
|
|
|
1100
1231
|
if (jwtToken) {
|
|
1101
1232
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
1102
1233
|
if (!decodedToken) {
|
|
1103
|
-
|
|
1234
|
+
tracer?.trace('updateCallLog:invalidToken', {});
|
|
1235
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1104
1236
|
return;
|
|
1105
1237
|
}
|
|
1106
1238
|
const { id: userId, platform } = decodedToken;
|
|
@@ -1109,18 +1241,20 @@ function createCoreRouter() {
|
|
|
1109
1241
|
if (extraDataTracking) {
|
|
1110
1242
|
extraData = extraDataTracking;
|
|
1111
1243
|
}
|
|
1112
|
-
res.status(200).send({ successful, logId, updatedNote, returnMessage });
|
|
1244
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, logId, updatedNote, returnMessage }) : { successful, logId, updatedNote, returnMessage });
|
|
1113
1245
|
success = true;
|
|
1114
1246
|
}
|
|
1115
1247
|
else {
|
|
1116
|
-
|
|
1248
|
+
tracer?.trace('updateCallLog:noToken', {});
|
|
1249
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1117
1250
|
success = false;
|
|
1118
1251
|
}
|
|
1119
1252
|
}
|
|
1120
1253
|
catch (e) {
|
|
1121
1254
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1122
1255
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
1123
|
-
res.status(400).send(e);
|
|
1256
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1257
|
+
tracer?.traceError('updateCallLog:error', e, { platform: platformName });
|
|
1124
1258
|
success = false;
|
|
1125
1259
|
}
|
|
1126
1260
|
const requestEndTime = new Date().getTime();
|
|
@@ -1143,6 +1277,8 @@ function createCoreRouter() {
|
|
|
1143
1277
|
});
|
|
1144
1278
|
router.put('/callDisposition', async function (req, res) {
|
|
1145
1279
|
const requestStartTime = new Date().getTime();
|
|
1280
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1281
|
+
tracer?.trace('upsertCallDisposition:start', { query: req.query });
|
|
1146
1282
|
let platformName = null;
|
|
1147
1283
|
let success = false;
|
|
1148
1284
|
let extraData = {};
|
|
@@ -1153,7 +1289,9 @@ function createCoreRouter() {
|
|
|
1153
1289
|
const { id: userId, platform } = jwt.decodeJwt(jwtToken);
|
|
1154
1290
|
platformName = platform;
|
|
1155
1291
|
if (!userId) {
|
|
1156
|
-
|
|
1292
|
+
tracer?.trace('upsertCallDisposition:invalidToken', {});
|
|
1293
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1294
|
+
return;
|
|
1157
1295
|
}
|
|
1158
1296
|
const { successful, returnMessage, extraDataTracking } = await dispositionCore.upsertCallDisposition({
|
|
1159
1297
|
platform,
|
|
@@ -1165,18 +1303,20 @@ function createCoreRouter() {
|
|
|
1165
1303
|
if (extraDataTracking) {
|
|
1166
1304
|
extraData = extraDataTracking;
|
|
1167
1305
|
}
|
|
1168
|
-
res.status(200).send({ successful, returnMessage });
|
|
1306
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage }) : { successful, returnMessage });
|
|
1169
1307
|
success = true;
|
|
1170
1308
|
}
|
|
1171
1309
|
else {
|
|
1172
|
-
|
|
1310
|
+
tracer?.trace('upsertCallDisposition:noToken', {});
|
|
1311
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1173
1312
|
success = false;
|
|
1174
1313
|
}
|
|
1175
1314
|
}
|
|
1176
1315
|
catch (e) {
|
|
1177
1316
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1178
1317
|
extraData.statusCode = e.response?.status ?? 'unknown';
|
|
1179
|
-
res.status(400).send(e);
|
|
1318
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1319
|
+
tracer?.traceError('upsertCallDisposition:error', e, { platform: platformName });
|
|
1180
1320
|
success = false;
|
|
1181
1321
|
}
|
|
1182
1322
|
const requestEndTime = new Date().getTime();
|
|
@@ -1199,6 +1339,8 @@ function createCoreRouter() {
|
|
|
1199
1339
|
});
|
|
1200
1340
|
router.post('/messageLog', async function (req, res) {
|
|
1201
1341
|
const requestStartTime = new Date().getTime();
|
|
1342
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1343
|
+
tracer?.trace('createMessageLog:start', { query: req.query });
|
|
1202
1344
|
let platformName = null;
|
|
1203
1345
|
let success = false;
|
|
1204
1346
|
let statusCode = 200;
|
|
@@ -1209,7 +1351,8 @@ function createCoreRouter() {
|
|
|
1209
1351
|
if (jwtToken) {
|
|
1210
1352
|
const decodedToken = jwt.decodeJwt(jwtToken);
|
|
1211
1353
|
if (!decodedToken) {
|
|
1212
|
-
|
|
1354
|
+
tracer?.trace('createMessageLog:invalidToken', {});
|
|
1355
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1213
1356
|
return;
|
|
1214
1357
|
}
|
|
1215
1358
|
const { id: userId, platform } = decodedToken;
|
|
@@ -1218,18 +1361,20 @@ function createCoreRouter() {
|
|
|
1218
1361
|
if (extraDataTracking) {
|
|
1219
1362
|
extraData = extraDataTracking;
|
|
1220
1363
|
}
|
|
1221
|
-
res.status(200).send({ successful, returnMessage, logIds });
|
|
1364
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage, logIds }) : { successful, returnMessage, logIds });
|
|
1222
1365
|
success = true;
|
|
1223
1366
|
}
|
|
1224
1367
|
else {
|
|
1225
|
-
|
|
1368
|
+
tracer?.trace('createMessageLog:noToken', {});
|
|
1369
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1226
1370
|
success = false;
|
|
1227
1371
|
}
|
|
1228
1372
|
}
|
|
1229
1373
|
catch (e) {
|
|
1230
1374
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1231
1375
|
statusCode = e.response?.status ?? 'unknown';
|
|
1232
|
-
res.status(400).send(e);
|
|
1376
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1377
|
+
tracer?.traceError('createMessageLog:error', e, { platform: platformName });
|
|
1233
1378
|
success = false;
|
|
1234
1379
|
}
|
|
1235
1380
|
const requestEndTime = new Date().getTime();
|
|
@@ -1251,9 +1396,10 @@ function createCoreRouter() {
|
|
|
1251
1396
|
eventAddedVia
|
|
1252
1397
|
});
|
|
1253
1398
|
});
|
|
1254
|
-
|
|
1255
1399
|
router.post('/calldown', async function (req, res) {
|
|
1256
1400
|
const requestStartTime = new Date().getTime();
|
|
1401
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1402
|
+
tracer?.trace('scheduleCallDown:start', { query: req.query });
|
|
1257
1403
|
let platformName = null;
|
|
1258
1404
|
let success = false;
|
|
1259
1405
|
let statusCode = 200;
|
|
@@ -1261,16 +1407,18 @@ function createCoreRouter() {
|
|
|
1261
1407
|
try {
|
|
1262
1408
|
const jwtToken = req.query.jwtToken;
|
|
1263
1409
|
if (!jwtToken) {
|
|
1264
|
-
|
|
1410
|
+
tracer?.trace('scheduleCallDown:noToken', {});
|
|
1411
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1265
1412
|
return;
|
|
1266
1413
|
}
|
|
1267
1414
|
const { id } = await calldown.schedule({ jwtToken, rcAccessToken: req.query.rcAccessToken, body: req.body });
|
|
1268
1415
|
success = true;
|
|
1269
|
-
res.status(200).send({ successful: true, id });
|
|
1416
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful: true, id }) : { successful: true, id });
|
|
1270
1417
|
} catch (e) {
|
|
1271
1418
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1272
1419
|
statusCode = e.response?.status ?? 'unknown';
|
|
1273
|
-
res.status(400).send(e);
|
|
1420
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1421
|
+
tracer?.traceError('scheduleCallDown:error', e, { platform: platformName });
|
|
1274
1422
|
success = false;
|
|
1275
1423
|
}
|
|
1276
1424
|
const requestEndTime = new Date().getTime();
|
|
@@ -1291,10 +1439,10 @@ function createCoreRouter() {
|
|
|
1291
1439
|
eventAddedVia
|
|
1292
1440
|
});
|
|
1293
1441
|
});
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
1442
|
router.get('/calldown', async function (req, res) {
|
|
1297
1443
|
const requestStartTime = new Date().getTime();
|
|
1444
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1445
|
+
tracer?.trace('getCallDownList:start', { query: req.query });
|
|
1298
1446
|
let platformName = null;
|
|
1299
1447
|
let success = false;
|
|
1300
1448
|
let statusCode = 200;
|
|
@@ -1302,16 +1450,18 @@ function createCoreRouter() {
|
|
|
1302
1450
|
try {
|
|
1303
1451
|
const jwtToken = req.query.jwtToken;
|
|
1304
1452
|
if (!jwtToken) {
|
|
1305
|
-
|
|
1453
|
+
tracer?.trace('getCallDownList:noToken', {});
|
|
1454
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1306
1455
|
return;
|
|
1307
1456
|
}
|
|
1308
1457
|
const { items } = await calldown.list({ jwtToken, status: req.query.status });
|
|
1309
1458
|
success = true;
|
|
1310
|
-
res.status(200).send({ successful: true, items });
|
|
1459
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful: true, items }) : { successful: true, items });
|
|
1311
1460
|
} catch (e) {
|
|
1312
1461
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1313
1462
|
statusCode = e.response?.status ?? 'unknown';
|
|
1314
|
-
res.status(400).send(e);
|
|
1463
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1464
|
+
tracer?.traceError('getCallDownList:error', e, { platform: platformName });
|
|
1315
1465
|
success = false;
|
|
1316
1466
|
}
|
|
1317
1467
|
const requestEndTime = new Date().getTime();
|
|
@@ -1330,10 +1480,10 @@ function createCoreRouter() {
|
|
|
1330
1480
|
eventAddedVia
|
|
1331
1481
|
});
|
|
1332
1482
|
});
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
1483
|
router.delete('/calldown/:id', async function (req, res) {
|
|
1336
1484
|
const requestStartTime = new Date().getTime();
|
|
1485
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1486
|
+
tracer?.trace('deleteCallDownItem:start', { query: req.query });
|
|
1337
1487
|
let platformName = null;
|
|
1338
1488
|
let success = false;
|
|
1339
1489
|
let statusCode = 200;
|
|
@@ -1342,21 +1492,24 @@ function createCoreRouter() {
|
|
|
1342
1492
|
const jwtToken = req.query.jwtToken;
|
|
1343
1493
|
const id = req.query.id;
|
|
1344
1494
|
if (!jwtToken) {
|
|
1345
|
-
|
|
1495
|
+
tracer?.trace('deleteCallDownItem:noToken', {});
|
|
1496
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1346
1497
|
return;
|
|
1347
1498
|
}
|
|
1348
1499
|
const rid = req.params.id || id;
|
|
1349
1500
|
if (!rid) {
|
|
1350
|
-
|
|
1501
|
+
tracer?.trace('deleteCallDownItem:missingId', {});
|
|
1502
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing id') : 'Missing id');
|
|
1351
1503
|
return;
|
|
1352
1504
|
}
|
|
1353
1505
|
await calldown.remove({ jwtToken, id: rid });
|
|
1354
1506
|
success = true;
|
|
1355
|
-
res.status(200).send({ successful: true });
|
|
1507
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful: true }) : { successful: true });
|
|
1356
1508
|
} catch (e) {
|
|
1357
1509
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1358
1510
|
statusCode = e.response?.status ?? 'unknown';
|
|
1359
|
-
res.status(400).send(e);
|
|
1511
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1512
|
+
tracer?.traceError('deleteCallDownItem:error', e, { platform: platformName });
|
|
1360
1513
|
success = false;
|
|
1361
1514
|
}
|
|
1362
1515
|
const requestEndTime = new Date().getTime();
|
|
@@ -1375,10 +1528,10 @@ function createCoreRouter() {
|
|
|
1375
1528
|
eventAddedVia
|
|
1376
1529
|
});
|
|
1377
1530
|
});
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
1531
|
router.patch('/calldown/:id', async function (req, res) {
|
|
1381
1532
|
const requestStartTime = new Date().getTime();
|
|
1533
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1534
|
+
tracer?.trace('markCallDownCalled:start', { query: req.query });
|
|
1382
1535
|
let platformName = null;
|
|
1383
1536
|
let success = false;
|
|
1384
1537
|
let statusCode = 200;
|
|
@@ -1386,21 +1539,24 @@ function createCoreRouter() {
|
|
|
1386
1539
|
try {
|
|
1387
1540
|
const jwtToken = req.query.jwtToken;
|
|
1388
1541
|
if (!jwtToken) {
|
|
1389
|
-
|
|
1542
|
+
tracer?.trace('markCallDownCalled:noToken', {});
|
|
1543
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1390
1544
|
return;
|
|
1391
1545
|
}
|
|
1392
1546
|
const id = req.params.id || req.body?.id;
|
|
1393
1547
|
if (!id) {
|
|
1394
|
-
|
|
1548
|
+
tracer?.trace('markCallDownCalled:missingId', {});
|
|
1549
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Missing id') : 'Missing id');
|
|
1395
1550
|
return;
|
|
1396
1551
|
}
|
|
1397
|
-
await calldown.
|
|
1552
|
+
await calldown.update({ jwtToken, id, updateData: req.body });
|
|
1398
1553
|
success = true;
|
|
1399
|
-
res.status(200).send({ successful: true });
|
|
1554
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful: true }) : { successful: true });
|
|
1400
1555
|
} catch (e) {
|
|
1401
1556
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1402
1557
|
statusCode = e.response?.status ?? 'unknown';
|
|
1403
|
-
res.status(400).send(e);
|
|
1558
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1559
|
+
tracer?.traceError('markCallDownCalled:error', e, { platform: platformName });
|
|
1404
1560
|
success = false;
|
|
1405
1561
|
}
|
|
1406
1562
|
const requestEndTime = new Date().getTime();
|
|
@@ -1419,9 +1575,10 @@ function createCoreRouter() {
|
|
|
1419
1575
|
eventAddedVia
|
|
1420
1576
|
});
|
|
1421
1577
|
});
|
|
1422
|
-
|
|
1423
1578
|
router.get('/custom/contact/search', async function (req, res) {
|
|
1424
1579
|
const requestStartTime = new Date().getTime();
|
|
1580
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1581
|
+
tracer?.trace('contactSearchByName:start', { query: req.query });
|
|
1425
1582
|
let platformName = null;
|
|
1426
1583
|
let success = false;
|
|
1427
1584
|
let resultCount = 0;
|
|
@@ -1433,11 +1590,12 @@ function createCoreRouter() {
|
|
|
1433
1590
|
const { id: userId, platform } = jwt.decodeJwt(jwtToken);
|
|
1434
1591
|
platformName = platform;
|
|
1435
1592
|
const { successful, returnMessage, contact } = await contactCore.findContactWithName({ platform, userId, name: req.query.name });
|
|
1436
|
-
res.status(200).send({ successful, returnMessage, contact });
|
|
1593
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful, returnMessage, contact }) : { successful, returnMessage, contact });
|
|
1437
1594
|
success = successful;
|
|
1438
1595
|
}
|
|
1439
1596
|
else {
|
|
1440
|
-
|
|
1597
|
+
tracer?.trace('contactSearchByName:noToken', {});
|
|
1598
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Please go to Settings and authorize CRM platform') : 'Please go to Settings and authorize CRM platform');
|
|
1441
1599
|
success = false;
|
|
1442
1600
|
}
|
|
1443
1601
|
|
|
@@ -1445,7 +1603,8 @@ function createCoreRouter() {
|
|
|
1445
1603
|
catch (e) {
|
|
1446
1604
|
console.log(`platform: ${platformName} \n${e.stack}`);
|
|
1447
1605
|
statusCode = e.response?.status ?? 'unknown';
|
|
1448
|
-
res.status(400).send(e);
|
|
1606
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1607
|
+
tracer?.traceError('contactSearchByName:error', e, { platform: platformName });
|
|
1449
1608
|
success = false;
|
|
1450
1609
|
}
|
|
1451
1610
|
const requestEndTime = new Date().getTime();
|
|
@@ -1465,9 +1624,10 @@ function createCoreRouter() {
|
|
|
1465
1624
|
}
|
|
1466
1625
|
});
|
|
1467
1626
|
});
|
|
1468
|
-
|
|
1469
1627
|
router.get('/ringcentral/admin/report', async function (req, res) {
|
|
1470
1628
|
const requestStartTime = new Date().getTime();
|
|
1629
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1630
|
+
tracer?.trace('getAdminReport:start', { query: req.query });
|
|
1471
1631
|
let platformName = null;
|
|
1472
1632
|
let success = false;
|
|
1473
1633
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -1477,20 +1637,23 @@ function createCoreRouter() {
|
|
|
1477
1637
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
1478
1638
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
1479
1639
|
if (!user) {
|
|
1480
|
-
|
|
1640
|
+
tracer?.trace('getAdminReport:userNotFound', {});
|
|
1641
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
1481
1642
|
return;
|
|
1482
1643
|
}
|
|
1483
|
-
const report = await adminCore.getAdminReport({ rcAccountId: user.rcAccountId, timezone: req.query.timezone, timeFrom: req.query.timeFrom, timeTo: req.query.timeTo });
|
|
1484
|
-
res.status(200).send(report);
|
|
1644
|
+
const report = await adminCore.getAdminReport({ rcAccountId: user.rcAccountId, timezone: req.query.timezone, timeFrom: req.query.timeFrom, timeTo: req.query.timeTo, groupBy: req.query.groupBy });
|
|
1645
|
+
res.status(200).send(tracer ? tracer.wrapResponse(report) : report);
|
|
1485
1646
|
success = true;
|
|
1486
1647
|
return;
|
|
1487
1648
|
}
|
|
1488
|
-
|
|
1649
|
+
tracer?.trace('getAdminReport:invalidRequest', {});
|
|
1650
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Invalid request') : 'Invalid request');
|
|
1489
1651
|
success = false;
|
|
1490
1652
|
}
|
|
1491
1653
|
catch (e) {
|
|
1492
1654
|
console.log(`${e.stack}`);
|
|
1493
|
-
res.status(400).send(e);
|
|
1655
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1656
|
+
tracer?.traceError('getAdminReport:error', e, { platform: platformName });
|
|
1494
1657
|
}
|
|
1495
1658
|
const requestEndTime = new Date().getTime();
|
|
1496
1659
|
analytics.track({
|
|
@@ -1507,9 +1670,10 @@ function createCoreRouter() {
|
|
|
1507
1670
|
eventAddedVia
|
|
1508
1671
|
});
|
|
1509
1672
|
});
|
|
1510
|
-
|
|
1511
1673
|
router.get('/ringcentral/admin/userReport', async function (req, res) {
|
|
1512
1674
|
const requestStartTime = new Date().getTime();
|
|
1675
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1676
|
+
tracer?.trace('getUserReport:start', { query: req.query });
|
|
1513
1677
|
let platformName = null;
|
|
1514
1678
|
let success = false;
|
|
1515
1679
|
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
@@ -1519,19 +1683,22 @@ function createCoreRouter() {
|
|
|
1519
1683
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
1520
1684
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
1521
1685
|
if (!user) {
|
|
1522
|
-
|
|
1686
|
+
tracer?.trace('getUserReport:userNotFound', {});
|
|
1687
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
1523
1688
|
return;
|
|
1524
1689
|
}
|
|
1525
1690
|
const report = await adminCore.getUserReport({ rcAccountId: user.rcAccountId, rcExtensionId: req.query.rcExtensionId, timezone: req.query.timezone, timeFrom: req.query.timeFrom, timeTo: req.query.timeTo });
|
|
1526
|
-
res.status(200).send(report);
|
|
1691
|
+
res.status(200).send(tracer ? tracer.wrapResponse(report) : report);
|
|
1527
1692
|
return;
|
|
1528
1693
|
}
|
|
1529
|
-
|
|
1694
|
+
tracer?.trace('getUserReport:invalidRequest', {});
|
|
1695
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Invalid request') : 'Invalid request');
|
|
1530
1696
|
success = false;
|
|
1531
1697
|
}
|
|
1532
1698
|
catch (e) {
|
|
1533
1699
|
console.log(`${e.stack}`);
|
|
1534
|
-
res.status(400).send(e);
|
|
1700
|
+
res.status(400).send(tracer ? tracer.wrapResponse({ error: e.message || e }) : { error: e.message || e });
|
|
1701
|
+
tracer?.traceError('getUserReport:error', e, { platform: platformName });
|
|
1535
1702
|
}
|
|
1536
1703
|
const requestEndTime = new Date().getTime();
|
|
1537
1704
|
analytics.track({
|
|
@@ -1548,22 +1715,59 @@ function createCoreRouter() {
|
|
|
1548
1715
|
eventAddedVia
|
|
1549
1716
|
});
|
|
1550
1717
|
});
|
|
1551
|
-
|
|
1552
1718
|
router.get('/ringcentral/oauth/callback', async function (req, res) {
|
|
1719
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1720
|
+
tracer?.trace('onRingcentralOAuthCallback:start', { query: req.query });
|
|
1553
1721
|
const jwtToken = req.query.jwtToken;
|
|
1554
1722
|
if (jwtToken) {
|
|
1555
1723
|
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
1556
1724
|
const { code } = req.query;
|
|
1557
1725
|
const user = await UserModel.findByPk(unAuthData?.id);
|
|
1558
1726
|
if (!user) {
|
|
1559
|
-
|
|
1727
|
+
tracer?.trace('onRingcentralOAuthCallback:userNotFound', {});
|
|
1728
|
+
res.status(400).send(tracer ? tracer.wrapResponse('User not found') : 'User not found');
|
|
1560
1729
|
return;
|
|
1561
1730
|
}
|
|
1562
1731
|
await authCore.onRingcentralOAuthCallback({ code, rcAccountId: user.rcAccountId });
|
|
1563
|
-
res.status(200).send(
|
|
1732
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ successful: true }) : { successful: true });
|
|
1564
1733
|
return;
|
|
1565
1734
|
}
|
|
1566
|
-
|
|
1735
|
+
tracer?.trace('onRingcentralOAuthCallback:invalidRequest', {});
|
|
1736
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Invalid request') : 'Invalid request');
|
|
1737
|
+
});
|
|
1738
|
+
router.get('/debug/report/url', async function (req, res) {
|
|
1739
|
+
const requestStartTime = new Date().getTime();
|
|
1740
|
+
const tracer = req.headers['is-debug'] === 'true' ? DebugTracer.fromRequest(req) : null;
|
|
1741
|
+
tracer?.trace('getErrorLogReportURL:start', { query: req.query });
|
|
1742
|
+
let platformName = null;
|
|
1743
|
+
let success = false;
|
|
1744
|
+
const { hashedExtensionId, hashedAccountId, userAgent, ip, author, eventAddedVia } = getAnalyticsVariablesInReqHeaders({ headers: req.headers })
|
|
1745
|
+
const jwtToken = req.query.jwtToken;
|
|
1746
|
+
if (jwtToken) {
|
|
1747
|
+
const unAuthData = jwt.decodeJwt(jwtToken);
|
|
1748
|
+
const uploadUrl = await s3ErrorLogReport.getUploadUrl({ userId: unAuthData?.id, platform: unAuthData?.platform });
|
|
1749
|
+
res.status(200).send(tracer ? tracer.wrapResponse({ presignedUrl: uploadUrl }) : { presignedUrl: uploadUrl });
|
|
1750
|
+
success = true;
|
|
1751
|
+
}
|
|
1752
|
+
else {
|
|
1753
|
+
tracer?.trace('getErrorLogReportURL:invalidRequest', {});
|
|
1754
|
+
res.status(400).send(tracer ? tracer.wrapResponse('Invalid request') : 'Invalid request');
|
|
1755
|
+
success = false;
|
|
1756
|
+
}
|
|
1757
|
+
const requestEndTime = new Date().getTime();
|
|
1758
|
+
analytics.track({
|
|
1759
|
+
eventName: 'Get error log report URL',
|
|
1760
|
+
interfaceName: 'getErrorLogReportURL',
|
|
1761
|
+
connectorName: platformName,
|
|
1762
|
+
accountId: hashedAccountId,
|
|
1763
|
+
extensionId: hashedExtensionId,
|
|
1764
|
+
success,
|
|
1765
|
+
requestDuration: (requestEndTime - requestStartTime) / 1000,
|
|
1766
|
+
userAgent,
|
|
1767
|
+
ip,
|
|
1768
|
+
author,
|
|
1769
|
+
eventAddedVia
|
|
1770
|
+
});
|
|
1567
1771
|
});
|
|
1568
1772
|
|
|
1569
1773
|
if (process.env.IS_PROD === 'false') {
|
|
@@ -1626,6 +1830,15 @@ function createCoreRouter() {
|
|
|
1626
1830
|
function createCoreMiddleware() {
|
|
1627
1831
|
return [
|
|
1628
1832
|
bodyParser.json(),
|
|
1833
|
+
bodyParser.xml({
|
|
1834
|
+
limit: '50mb',
|
|
1835
|
+
xmlParseOptions: {
|
|
1836
|
+
explicitArray: false,
|
|
1837
|
+
normalize: true,
|
|
1838
|
+
normalizeTags: false,
|
|
1839
|
+
trim: true
|
|
1840
|
+
}
|
|
1841
|
+
}),
|
|
1629
1842
|
cors({
|
|
1630
1843
|
methods: ['GET', 'POST', 'PATCH', 'PUT', 'DELETE']
|
|
1631
1844
|
})
|
|
@@ -1674,3 +1887,4 @@ exports.createCoreApp = createCoreApp;
|
|
|
1674
1887
|
exports.initializeCore = initializeCore;
|
|
1675
1888
|
exports.connectorRegistry = connectorRegistry;
|
|
1676
1889
|
exports.proxyConnector = proxyConnector;
|
|
1890
|
+
exports.DebugTracer = DebugTracer;
|