/** 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('/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}` }; }