Assessor_2.0/src/api/request-activity.ts

48 lines
4.1 KiB
TypeScript

/** Public operation names only: never display URLs, query parameters or client identifiers. */
export function requestActivity(path: string, method = 'GET'): { area: string; label: string } | undefined {
const route = path.split('?')[0];
if (route === '/health') return undefined;
if (route.includes('/work-packages')) return { area: 'Remediation Engine', label: 'Preparing work packages' };
if (route.includes('/assessment-context')) return { area: 'Context Engine', label: 'Loading and calculating assessment context' };
if (route.includes('/report-runs')) return { area: 'Report Engine', label: 'Generating assessment report' };
if (route.includes('/timeslot-comparison')) return { area: 'Comparison Engine', label: 'Comparing timeslots' };
const compliance = complianceActivity(route, method);
if (compliance) return { area: 'Compliance Engine', label: compliance };
if (route.includes('/mitre-attack')) return { area: 'Core Engine', label: route.endsWith('/source') ? 'Downloading MITRE source' : route.endsWith('/refresh') ? 'Updating MITRE catalog' : 'Loading MITRE catalog' };
const resources: [RegExp, string][] = [
[/db-structure/, 'database structure'], [/references/, 'reference recognition'],
[/policy-evaluation-rule-catalog/, 'evaluation rule catalog'], [/microsoft-security-baselines/, 'security baseline catalog'],
[/timeslot-result-metrics/, 'timeslot metrics'], [/environment-snapshot/, 'client environment'],
[/policy-analysis-overview/, 'policy analysis overview'], [/policy-evaluations/, 'policy evaluations'],
[/policy-finding-runs/, 'policy findings'], [/policy-snapshot-aggregations/, 'policy snapshots'],
[/policy-analyses/, 'policy analyses'], [/environment-profiles/, 'environment profiles'],
[/gpo-backups/, 'GPO backups'], [/import-batches\/preview/, 'import preview'], [/import-batches\/complete/, 'import results'],
[/import-sources/, 'source file'], [/import-files/, 'imported files'], [/risk-acceptances/, 'risk acceptance'], [/reviews/, 'work tracking'],
[/assessment-history/, 'assessment history'], [/\/model$/, 'scan data and findings'], [/assessments/, 'assessments'],
[/results\/facets/, 'Result DB filters'], [/results\/status/, 'Result DB status'], [/results/, 'Result DB rows'],
[/\/export$/, 'client export'], [/projects/, 'clients']
];
const noun = resources.find(([pattern]) => pattern.test(route))?.[1] ?? 'application data';
const action = method === 'DELETE' ? 'Deleting' : method === 'GET' ? 'Loading' : 'Processing';
return { area: 'Core Engine', label: `${action} ${noun}` };
}
/** Compliance Engine routes; checked before the generic project patterns so they never read as client work. */
function complianceActivity(route: string, method: string): string | undefined {
const write = method !== 'GET';
if (route.includes('/regulatory-control-assignments')) return 'Loading ISO control filters';
if (route.includes('/regulatory-control-overview')) return 'Loading ISO control overview';
if (route.includes('/regulatory-mapping-batches')) return write ? 'Starting compliance mapping batch' : 'Loading compliance mapping batch status';
if (route.includes('/regulatory-mapping-runs')) return 'Generating ISO control proposals';
if (route.includes('/regulatory-mapping-decisions')) return 'Saving ISO mapping decision';
if (route.includes('/regulatory-mappings/')) return 'Loading ISO mapping';
if (route.endsWith('/ai-overview')) return write ? 'Starting AI overview' : 'Loading AI overview status';
if (route.endsWith('/reference-data/iso-corpus')) return write ? 'Uploading ISO corpus' : 'Loading ISO corpus status';
if (route.endsWith('/reference-data/bsi-grundschutz/search-index/build')) return 'Building BSI search index';
if (route.endsWith('/reference-data/bsi-grundschutz/search-index')) return 'Loading BSI search index status';
if (route.endsWith('/reference-data/bsi-grundschutz/refresh')) return 'Updating BSI catalog';
if (route.endsWith('/reference-data/bsi-grundschutz/reset')) return 'Restoring bundled BSI catalog';
if (route.endsWith('/reference-data/bsi-grundschutz')) return 'Loading BSI catalog';
return undefined;
}