tango-app-api-trax 3.9.32 → 3.9.33
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/index.js +1 -2
- package/package.json +2 -2
- package/src/controllers/gallery.controller.js +0 -2
- package/src/controllers/internalTrax.controller.js +78 -117
- package/src/controllers/mobileTrax.controller.js +29 -69
- package/src/controllers/teaxFlag.controller.js +5 -5
- package/src/controllers/trax.controller.js +3 -4
- package/src/controllers/traxDashboard.controllers.js +54 -63
- package/src/hbs/flag.hbs +1 -1
- package/src/hbs/login-otp.hbs +943 -943
- package/src/hbs/template.hbs +0 -7
- package/src/hbs/visit-checklist.hbs +1 -51
- package/src/services/app.service.js +14 -20
- package/src/services/approver.service.js +20 -28
- package/src/services/authentication.service.js +6 -12
- package/src/services/camera.service.js +18 -24
- package/src/services/checklist.service.js +31 -36
- package/src/services/checklistAssign.service.js +39 -44
- package/src/services/checklistQuestion.service.js +35 -40
- package/src/services/checklistlog.service.js +35 -40
- package/src/services/clientRequest.service.js +5 -12
- package/src/services/clients.services.js +18 -23
- package/src/services/cluster.service.js +28 -36
- package/src/services/domain.service.js +28 -33
- package/src/services/download.services.js +38 -48
- package/src/services/group.service.js +22 -28
- package/src/services/lenskartEmployeeMapping.service.js +15 -20
- package/src/services/locus.service.js +34 -41
- package/src/services/notification.service.js +31 -40
- package/src/services/otp.service.js +17 -24
- package/src/services/planogram.service.js +5 -12
- package/src/services/processedTaskConfig.service.js +32 -40
- package/src/services/processedTaskList.service.js +30 -36
- package/src/services/processedchecklist.services.js +48 -56
- package/src/services/processedchecklistconfig.services.js +35 -40
- package/src/services/recurringFlagTracker.service.js +33 -40
- package/src/services/runAIFeatures.services.js +31 -36
- package/src/services/runAIRequest.services.js +39 -44
- package/src/services/store.service.js +31 -36
- package/src/services/tagging.service.js +5 -12
- package/src/services/taskConfig.service.js +32 -40
- package/src/services/teams.service.js +30 -41
- package/src/services/ticket.service.js +15 -20
- package/src/services/user.service.js +25 -32
- package/src/services/userAssignedstores.service.js +10 -17
- package/src/utils/visitChecklistPdf.utils.js +11 -114
- package/src/logging/activityLogFlusher.js +0 -59
- package/src/logging/activityLogMiddleware.js +0 -45
- package/src/logging/activityLogStore.js +0 -91
- package/src/logging/compressBatches.js +0 -83
- package/src/logging/config.js +0 -24
- package/src/logging/createLoggableService.js +0 -46
- package/src/logging/logExternalCall.js +0 -37
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Post-process a steps array to compress repeated adjacent cycles into a single
|
|
3
|
-
* "batch" entry. Complements the push-time collapse of identical adjacent
|
|
4
|
-
* steps (which merges A,A,A into A×3) by merging repeated *sequences*
|
|
5
|
-
* (A,B,C,A,B,C,A,B,C → batch[A→B→C]×3).
|
|
6
|
-
*
|
|
7
|
-
* Rules:
|
|
8
|
-
* - A cycle is detected only if the same ordered sequence of step names/types
|
|
9
|
-
* appears ≥ 2 times back-to-back.
|
|
10
|
-
* - Failed steps are never included in cycles — each failure stands alone so
|
|
11
|
-
* you can see exactly which iteration broke.
|
|
12
|
-
* - Greedy: smallest cycle length (≥ 2) wins. This gives the most compact,
|
|
13
|
-
* most readable output.
|
|
14
|
-
* - Cycle length is bounded to keep the O(n·k) scan cheap.
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
const MIN_CYCLE_LEN = 2;
|
|
18
|
-
const MAX_CYCLE_LEN = 10;
|
|
19
|
-
|
|
20
|
-
export function compressBatches( rawSteps ) {
|
|
21
|
-
if ( !Array.isArray( rawSteps ) || rawSteps.length < MIN_CYCLE_LEN * 2 ) return rawSteps;
|
|
22
|
-
|
|
23
|
-
const out = [];
|
|
24
|
-
let i = 0;
|
|
25
|
-
while ( i < rawSteps.length ) {
|
|
26
|
-
let absorbed = false;
|
|
27
|
-
const maxK = Math.min( MAX_CYCLE_LEN, Math.floor( ( rawSteps.length - i ) / 2 ) );
|
|
28
|
-
|
|
29
|
-
for ( let k = MIN_CYCLE_LEN; k <= maxK; k++ ) {
|
|
30
|
-
if ( !cycleEquals( rawSteps, i, k, i + k ) ) continue;
|
|
31
|
-
|
|
32
|
-
// At least 2 repeats confirmed. Count forward.
|
|
33
|
-
let repeats = 2;
|
|
34
|
-
let j = i + 2 * k;
|
|
35
|
-
while ( cycleEquals( rawSteps, i, k, j ) ) {
|
|
36
|
-
repeats++;
|
|
37
|
-
j += k;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
const patternSteps = rawSteps.slice( i, i + k );
|
|
41
|
-
const totalMs = rawSteps.slice( i, j ).reduce( ( sum, s ) => sum + ( s.ms || 0 ), 0 );
|
|
42
|
-
|
|
43
|
-
out.push( {
|
|
44
|
-
stepIndex: out.length + 1,
|
|
45
|
-
name: patternSteps.map( ( s ) => s.count ? `${ s.name }×${ s.count }` : s.name ).join( ' → ' ),
|
|
46
|
-
type: 'batch',
|
|
47
|
-
status: 'success',
|
|
48
|
-
count: repeats,
|
|
49
|
-
ms: totalMs,
|
|
50
|
-
pattern: patternSteps.map( ( s ) => ( {
|
|
51
|
-
name: s.name,
|
|
52
|
-
type: s.type,
|
|
53
|
-
count: s.count ?? 1,
|
|
54
|
-
} ) ),
|
|
55
|
-
} );
|
|
56
|
-
|
|
57
|
-
i = j;
|
|
58
|
-
absorbed = true;
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
if ( !absorbed ) {
|
|
63
|
-
out.push( { ...rawSteps[i], stepIndex: out.length + 1 } );
|
|
64
|
-
i++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
return out;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
function cycleEquals( steps, patternStart, patternLen, checkStart ) {
|
|
72
|
-
if ( checkStart + patternLen > steps.length ) return false;
|
|
73
|
-
for ( let i = 0; i < patternLen; i++ ) {
|
|
74
|
-
const a = steps[patternStart + i];
|
|
75
|
-
const b = steps[checkStart + i];
|
|
76
|
-
if ( !a || !b ) return false;
|
|
77
|
-
if ( a.status === 'failed' || b.status === 'failed' ) return false;
|
|
78
|
-
if ( a.name !== b.name ) return false;
|
|
79
|
-
if ( a.type !== b.type ) return false;
|
|
80
|
-
if ( a.status !== b.status ) return false;
|
|
81
|
-
}
|
|
82
|
-
return true;
|
|
83
|
-
}
|
package/src/logging/config.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Self-contained configuration for the activity logging module.
|
|
3
|
-
*
|
|
4
|
-
* Read directly from process.env so this module has zero dependency on
|
|
5
|
-
* consumers' env.js layout. Getters (not cached values) so dotenv can load
|
|
6
|
-
* after this module is imported.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
const DEFAULT_INDEX = 'trax-activity-logs-test';
|
|
10
|
-
const LOG_VERSION = 'v1';
|
|
11
|
-
|
|
12
|
-
export const loggingConfig = {
|
|
13
|
-
get enabled() {
|
|
14
|
-
return process.env.TRAX_ACTIVITY_LOGGING === 'true';
|
|
15
|
-
},
|
|
16
|
-
get index() {
|
|
17
|
-
try {
|
|
18
|
-
return JSON.parse( process.env.OPENSEARCH || '{}' )?.traxActivityLog || DEFAULT_INDEX;
|
|
19
|
-
} catch ( _e ) {
|
|
20
|
-
return DEFAULT_INDEX;
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
version: LOG_VERSION,
|
|
24
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import { getLogContext, pushStep, pushStepFailure } from './activityLogStore.js';
|
|
2
|
-
import { loggingConfig } from './config.js';
|
|
3
|
-
|
|
4
|
-
const WRITE_OPS = [
|
|
5
|
-
'create',
|
|
6
|
-
'updateOne',
|
|
7
|
-
'updateMany',
|
|
8
|
-
'deleteOne',
|
|
9
|
-
'deleteMany',
|
|
10
|
-
'upsertOne',
|
|
11
|
-
'insertMany',
|
|
12
|
-
'bulkUpsert',
|
|
13
|
-
'bulkWrite',
|
|
14
|
-
'removeKeys',
|
|
15
|
-
'findOneAndUpdate',
|
|
16
|
-
'findOneAndUpdate2',
|
|
17
|
-
'updateOneArrayItem',
|
|
18
|
-
'update',
|
|
19
|
-
];
|
|
20
|
-
|
|
21
|
-
export function createLoggableService( serviceModule, collectionName ) {
|
|
22
|
-
// Install the proxy unconditionally. The enabled-check happens at call time
|
|
23
|
-
// inside the `get` trap so env vars loaded after module import (via dotenv)
|
|
24
|
-
// are observed correctly.
|
|
25
|
-
return new Proxy( serviceModule, {
|
|
26
|
-
get( target, prop ) {
|
|
27
|
-
const original = target[prop];
|
|
28
|
-
if ( !WRITE_OPS.includes( prop ) || typeof original !== 'function' ) return original;
|
|
29
|
-
if ( !loggingConfig.enabled ) return original;
|
|
30
|
-
|
|
31
|
-
return async function( ...args ) {
|
|
32
|
-
const ctx = getLogContext();
|
|
33
|
-
const start = Date.now();
|
|
34
|
-
const stepName = `${ collectionName }.${ prop }`;
|
|
35
|
-
try {
|
|
36
|
-
const result = await original.apply( target, args );
|
|
37
|
-
if ( ctx ) pushStep( { name: stepName, type: 'db', status: 'success', ms: Date.now() - start } );
|
|
38
|
-
return result;
|
|
39
|
-
} catch ( e ) {
|
|
40
|
-
if ( ctx ) pushStepFailure( { name: stepName, type: 'db', ms: Date.now() - start }, e );
|
|
41
|
-
throw e;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
},
|
|
45
|
-
} );
|
|
46
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { pushStep, pushStepFailure } from './activityLogStore.js';
|
|
2
|
-
|
|
3
|
-
export async function logExternalCall( serviceName, url, options = {} ) {
|
|
4
|
-
const start = Date.now();
|
|
5
|
-
const stepName = `external.${ serviceName }`;
|
|
6
|
-
try {
|
|
7
|
-
const res = await fetch( url, options );
|
|
8
|
-
pushStep( {
|
|
9
|
-
name: stepName,
|
|
10
|
-
type: 'external',
|
|
11
|
-
status: res.ok ? 'success' : 'failed',
|
|
12
|
-
ms: Date.now() - start,
|
|
13
|
-
} );
|
|
14
|
-
return res;
|
|
15
|
-
} catch ( e ) {
|
|
16
|
-
pushStepFailure( { name: stepName, type: 'external', ms: Date.now() - start }, e );
|
|
17
|
-
throw e;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export async function logQueueMessage( serviceName, queueUrl, messageBody, sendMessageToQueueFn ) {
|
|
22
|
-
const start = Date.now();
|
|
23
|
-
const stepName = `external.${ serviceName }`;
|
|
24
|
-
try {
|
|
25
|
-
const result = await sendMessageToQueueFn( queueUrl, messageBody );
|
|
26
|
-
pushStep( {
|
|
27
|
-
name: stepName,
|
|
28
|
-
type: 'external',
|
|
29
|
-
status: 'success',
|
|
30
|
-
ms: Date.now() - start,
|
|
31
|
-
} );
|
|
32
|
-
return result;
|
|
33
|
-
} catch ( e ) {
|
|
34
|
-
pushStepFailure( { name: stepName, type: 'external', ms: Date.now() - start }, e );
|
|
35
|
-
throw e;
|
|
36
|
-
}
|
|
37
|
-
}
|