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