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