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