verification-layer 0.4.0

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +345 -0
  3. package/dist/audit/evidence.d.ts +25 -0
  4. package/dist/audit/evidence.d.ts.map +1 -0
  5. package/dist/audit/evidence.js +70 -0
  6. package/dist/audit/evidence.js.map +1 -0
  7. package/dist/audit/index.d.ts +54 -0
  8. package/dist/audit/index.d.ts.map +1 -0
  9. package/dist/audit/index.js +159 -0
  10. package/dist/audit/index.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +199 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/config.d.ts +7 -0
  16. package/dist/config.d.ts.map +1 -0
  17. package/dist/config.js +77 -0
  18. package/dist/config.js.map +1 -0
  19. package/dist/fixer/index.d.ts +11 -0
  20. package/dist/fixer/index.d.ts.map +1 -0
  21. package/dist/fixer/index.js +171 -0
  22. package/dist/fixer/index.js.map +1 -0
  23. package/dist/fixer/strategies.d.ts +3 -0
  24. package/dist/fixer/strategies.d.ts.map +1 -0
  25. package/dist/fixer/strategies.js +199 -0
  26. package/dist/fixer/strategies.js.map +1 -0
  27. package/dist/index.d.ts +4 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +3 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/reporters/audit-report.d.ts +13 -0
  32. package/dist/reporters/audit-report.d.ts.map +1 -0
  33. package/dist/reporters/audit-report.js +526 -0
  34. package/dist/reporters/audit-report.js.map +1 -0
  35. package/dist/reporters/fix-report.d.ts +3 -0
  36. package/dist/reporters/fix-report.d.ts.map +1 -0
  37. package/dist/reporters/fix-report.js +70 -0
  38. package/dist/reporters/fix-report.js.map +1 -0
  39. package/dist/reporters/index.d.ts +3 -0
  40. package/dist/reporters/index.d.ts.map +1 -0
  41. package/dist/reporters/index.js +425 -0
  42. package/dist/reporters/index.js.map +1 -0
  43. package/dist/reporters/remediation-guides.d.ts +25 -0
  44. package/dist/reporters/remediation-guides.d.ts.map +1 -0
  45. package/dist/reporters/remediation-guides.js +636 -0
  46. package/dist/reporters/remediation-guides.js.map +1 -0
  47. package/dist/scan.d.ts +3 -0
  48. package/dist/scan.d.ts.map +1 -0
  49. package/dist/scan.js +96 -0
  50. package/dist/scan.js.map +1 -0
  51. package/dist/scanners/access/index.d.ts +3 -0
  52. package/dist/scanners/access/index.d.ts.map +1 -0
  53. package/dist/scanners/access/index.js +102 -0
  54. package/dist/scanners/access/index.js.map +1 -0
  55. package/dist/scanners/audit/index.d.ts +3 -0
  56. package/dist/scanners/audit/index.d.ts.map +1 -0
  57. package/dist/scanners/audit/index.js +94 -0
  58. package/dist/scanners/audit/index.js.map +1 -0
  59. package/dist/scanners/encryption/index.d.ts +3 -0
  60. package/dist/scanners/encryption/index.d.ts.map +1 -0
  61. package/dist/scanners/encryption/index.js +86 -0
  62. package/dist/scanners/encryption/index.js.map +1 -0
  63. package/dist/scanners/phi/index.d.ts +3 -0
  64. package/dist/scanners/phi/index.d.ts.map +1 -0
  65. package/dist/scanners/phi/index.js +47 -0
  66. package/dist/scanners/phi/index.js.map +1 -0
  67. package/dist/scanners/phi/patterns.d.ts +13 -0
  68. package/dist/scanners/phi/patterns.d.ts.map +1 -0
  69. package/dist/scanners/phi/patterns.js +242 -0
  70. package/dist/scanners/phi/patterns.js.map +1 -0
  71. package/dist/scanners/retention/index.d.ts +3 -0
  72. package/dist/scanners/retention/index.d.ts.map +1 -0
  73. package/dist/scanners/retention/index.js +102 -0
  74. package/dist/scanners/retention/index.js.map +1 -0
  75. package/dist/scanners/security/index.d.ts +3 -0
  76. package/dist/scanners/security/index.d.ts.map +1 -0
  77. package/dist/scanners/security/index.js +280 -0
  78. package/dist/scanners/security/index.js.map +1 -0
  79. package/dist/stack-detector/index.d.ts +26 -0
  80. package/dist/stack-detector/index.d.ts.map +1 -0
  81. package/dist/stack-detector/index.js +317 -0
  82. package/dist/stack-detector/index.js.map +1 -0
  83. package/dist/stack-detector/stack-guides.d.ts +16 -0
  84. package/dist/stack-detector/stack-guides.d.ts.map +1 -0
  85. package/dist/stack-detector/stack-guides.js +772 -0
  86. package/dist/stack-detector/stack-guides.js.map +1 -0
  87. package/dist/types.d.ts +143 -0
  88. package/dist/types.d.ts.map +1 -0
  89. package/dist/types.js +2 -0
  90. package/dist/types.js.map +1 -0
  91. package/dist/utils/context.d.ts +3 -0
  92. package/dist/utils/context.d.ts.map +1 -0
  93. package/dist/utils/context.js +14 -0
  94. package/dist/utils/context.js.map +1 -0
  95. package/package.json +76 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audit/index.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,199 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import ora from 'ora';
5
+ import { resolve } from 'path';
6
+ import { scan } from './scan.js';
7
+ import { generateReport } from './reporters/index.js';
8
+ import { applyFixes } from './fixer/index.js';
9
+ import { generateFixReport } from './reporters/fix-report.js';
10
+ import { loadAuditTrail, getAuditSummary } from './audit/index.js';
11
+ import { generateAuditReport, generateTextAuditReport } from './reporters/audit-report.js';
12
+ const program = new Command();
13
+ program
14
+ .name('vlayer')
15
+ .description('HIPAA compliance scanner for healthcare applications')
16
+ .version('0.2.0');
17
+ program
18
+ .command('scan')
19
+ .description('Scan a repository for HIPAA compliance issues')
20
+ .argument('<path>', 'Path to the repository to scan')
21
+ .option('-c, --categories <categories...>', 'Compliance categories to check')
22
+ .option('-e, --exclude <patterns...>', 'Glob patterns to exclude')
23
+ .option('-o, --output <path>', 'Output file path for the report')
24
+ .option('-f, --format <format>', 'Report format: json, html, markdown', 'json')
25
+ .option('--config <path>', 'Path to configuration file')
26
+ .option('--fix', 'Automatically fix detected issues where possible')
27
+ .action(async (path, options) => {
28
+ const spinner = ora('Scanning repository...').start();
29
+ const absolutePath = resolve(path);
30
+ try {
31
+ const categories = options.categories;
32
+ const result = await scan({
33
+ path,
34
+ categories,
35
+ exclude: options.exclude,
36
+ configFile: options.config,
37
+ });
38
+ spinner.succeed(`Scan complete. Found ${result.findings.length} issues.`);
39
+ // Apply fixes if --fix flag is provided
40
+ if (options.fix) {
41
+ const fixSpinner = ora('Applying automatic fixes...').start();
42
+ const fixReport = await applyFixes(result.findings, absolutePath, result.scannedFiles, result.scanDuration);
43
+ fixSpinner.succeed(`Applied ${fixReport.fixedCount} automatic fixes.`);
44
+ console.log(generateFixReport(fixReport));
45
+ // Show audit trail info
46
+ console.log(chalk.cyan('\nAudit Trail saved to: ') + chalk.white(`${absolutePath}/.vlayer/audit-trail.json`));
47
+ console.log(chalk.cyan('Evidence hash: ') + chalk.white(fixReport.auditTrail.reportHash || 'N/A'));
48
+ console.log(chalk.cyan('Manual reviews pending: ') + chalk.yellow(fixReport.auditTrail.manualReviewCount.toString()));
49
+ if (fixReport.auditTrail.manualReviewCount > 0) {
50
+ console.log(chalk.yellow('\nRun `vlayer audit <path> --generate-report` to generate PDF audit report.'));
51
+ }
52
+ }
53
+ const reportOptions = {
54
+ format: options.format,
55
+ outputPath: options.output,
56
+ };
57
+ await generateReport(result, path, reportOptions);
58
+ // Print summary
59
+ const critical = result.findings.filter(f => f.severity === 'critical').length;
60
+ const high = result.findings.filter(f => f.severity === 'high').length;
61
+ console.log('\n' + chalk.bold('Summary:'));
62
+ console.log(` Files scanned: ${result.scannedFiles}`);
63
+ console.log(` Duration: ${result.scanDuration}ms`);
64
+ console.log(` Total findings: ${result.findings.length}`);
65
+ if (critical > 0) {
66
+ console.log(chalk.red(` Critical: ${critical}`));
67
+ }
68
+ if (high > 0) {
69
+ console.log(chalk.yellow(` High: ${high}`));
70
+ }
71
+ // Exit with error code if critical issues found (only if not fixing)
72
+ if (critical > 0 && !options.fix) {
73
+ process.exit(1);
74
+ }
75
+ }
76
+ catch (error) {
77
+ spinner.fail('Scan failed');
78
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
79
+ process.exit(1);
80
+ }
81
+ });
82
+ program
83
+ .command('audit')
84
+ .description('Manage audit trail and generate compliance reports')
85
+ .argument('<path>', 'Path to the project with audit trail')
86
+ .option('--generate-report', 'Generate PDF audit report')
87
+ .option('-o, --output <path>', 'Output path for the PDF report')
88
+ .option('--org <name>', 'Organization name for the report')
89
+ .option('--auditor <name>', 'Auditor name for the report')
90
+ .option('--text', 'Generate text report instead of PDF')
91
+ .option('--summary', 'Show audit trail summary only')
92
+ .action(async (path, options) => {
93
+ const absolutePath = resolve(path);
94
+ try {
95
+ const trail = await loadAuditTrail(absolutePath);
96
+ if (!trail) {
97
+ console.log(chalk.red('No audit trail found.'));
98
+ console.log(chalk.yellow('Run `vlayer scan <path> --fix` to generate an audit trail.'));
99
+ process.exit(1);
100
+ }
101
+ // Show summary
102
+ const summary = getAuditSummary(trail);
103
+ console.log(chalk.bold('\n=== Audit Trail Summary ===\n'));
104
+ console.log(`Project: ${chalk.cyan(trail.projectName)}`);
105
+ console.log(`Scan Date: ${chalk.white(new Date(trail.createdAt).toLocaleString())}`);
106
+ console.log(`Report ID: ${chalk.gray(trail.id)}`);
107
+ console.log('');
108
+ console.log(`Total Findings: ${chalk.white(summary.totalFindings)}`);
109
+ console.log(`Auto-Fixed: ${chalk.green(summary.autoFixed)}`);
110
+ console.log(`Pending Manual Review: ${chalk.yellow(summary.pendingManualReview)}`);
111
+ if (summary.overdueCount > 0) {
112
+ console.log(`Overdue Items: ${chalk.red(summary.overdueCount)}`);
113
+ }
114
+ console.log('');
115
+ console.log(`Report Hash: ${chalk.gray(summary.reportHash || 'N/A')}`);
116
+ // Show review status breakdown
117
+ if (Object.keys(summary.reviewsByStatus).length > 0) {
118
+ console.log('\n' + chalk.bold('Reviews by Status:'));
119
+ for (const [status, count] of Object.entries(summary.reviewsByStatus)) {
120
+ const statusLabel = status.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase());
121
+ console.log(` ${statusLabel}: ${count}`);
122
+ }
123
+ }
124
+ // Show severity breakdown
125
+ if (Object.keys(summary.reviewsBySeverity).length > 0) {
126
+ console.log('\n' + chalk.bold('Pending Reviews by Severity:'));
127
+ const severityColors = {
128
+ critical: chalk.red,
129
+ high: chalk.yellow,
130
+ medium: chalk.hex('#ca8a04'),
131
+ low: chalk.green,
132
+ info: chalk.blue,
133
+ };
134
+ for (const [severity, count] of Object.entries(summary.reviewsBySeverity)) {
135
+ const color = severityColors[severity] || chalk.white;
136
+ console.log(` ${color(severity.charAt(0).toUpperCase() + severity.slice(1))}: ${count}`);
137
+ }
138
+ }
139
+ if (options.summary) {
140
+ return;
141
+ }
142
+ // Generate report if requested
143
+ if (options.generateReport) {
144
+ const outputPath = options.output || `${absolutePath}/vlayer-audit-report.pdf`;
145
+ const reportOptions = {
146
+ outputPath,
147
+ organizationName: options.org,
148
+ auditorName: options.auditor,
149
+ includeEvidence: true,
150
+ includeManualReviews: true,
151
+ };
152
+ if (options.text) {
153
+ // Generate text report
154
+ const textReport = generateTextAuditReport(trail);
155
+ const textPath = outputPath.replace('.pdf', '.txt');
156
+ const { writeFile } = await import('fs/promises');
157
+ await writeFile(textPath, textReport);
158
+ console.log(chalk.green(`\nText audit report generated: ${textPath}`));
159
+ }
160
+ else {
161
+ // Generate PDF report
162
+ const spinner = ora('Generating PDF audit report...').start();
163
+ try {
164
+ const { path: pdfPath, hash } = await generateAuditReport(trail, reportOptions);
165
+ spinner.succeed('PDF audit report generated.');
166
+ console.log(chalk.green(`\nAudit report saved to: ${pdfPath}`));
167
+ console.log(chalk.cyan(`Report verification hash: ${hash}`));
168
+ console.log(chalk.gray('\nThis hash can be used to verify the report integrity.'));
169
+ }
170
+ catch (err) {
171
+ spinner.fail('Failed to generate PDF report');
172
+ console.error(chalk.red(err instanceof Error ? err.message : 'Unknown error'));
173
+ // Fallback to text
174
+ console.log(chalk.yellow('\nFalling back to text report...'));
175
+ const textReport = generateTextAuditReport(trail);
176
+ const textPath = outputPath.replace('.pdf', '.txt');
177
+ const { writeFile } = await import('fs/promises');
178
+ await writeFile(textPath, textReport);
179
+ console.log(chalk.green(`Text audit report generated: ${textPath}`));
180
+ }
181
+ }
182
+ }
183
+ else {
184
+ console.log(chalk.yellow('\nUse --generate-report to create a PDF audit report.'));
185
+ }
186
+ }
187
+ catch (error) {
188
+ console.error(chalk.red(error instanceof Error ? error.message : 'Unknown error'));
189
+ process.exit(1);
190
+ }
191
+ });
192
+ program
193
+ .command('init')
194
+ .description('Initialize a vlayer configuration file')
195
+ .action(() => {
196
+ console.log(chalk.yellow('Configuration initialization not yet implemented'));
197
+ });
198
+ program.parse();
199
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { VlayerConfig } from './types.js';
2
+ declare const DEFAULT_CONFIG: VlayerConfig;
3
+ export declare function loadConfig(targetPath: string, configFile?: string): Promise<VlayerConfig>;
4
+ export declare function isPathIgnored(filePath: string, config: VlayerConfig): boolean;
5
+ export declare function isSafeHttpUrl(url: string, config: VlayerConfig): boolean;
6
+ export { DEFAULT_CONFIG };
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,QAAA,MAAM,cAAc,EAAE,YAsCrB,CAAC;AAEF,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAmB/F;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAU7E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAGxE;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
package/dist/config.js ADDED
@@ -0,0 +1,77 @@
1
+ import { readFile } from 'fs/promises';
2
+ import path from 'path';
3
+ const DEFAULT_CONFIG = {
4
+ exclude: [],
5
+ ignorePaths: [],
6
+ safeHttpDomains: [
7
+ // XML namespaces
8
+ 'www.w3.org',
9
+ 'w3.org',
10
+ 'xmlns.com',
11
+ 'purl.org',
12
+ 'ns.adobe.com',
13
+ // CDNs
14
+ 'cdnjs.cloudflare.com',
15
+ 'unpkg.com',
16
+ 'jsdelivr.net',
17
+ 'cdn.jsdelivr.net',
18
+ 'googleapis.com',
19
+ 'fonts.googleapis.com',
20
+ 'ajax.googleapis.com',
21
+ 'gstatic.com',
22
+ 'fonts.gstatic.com',
23
+ 'cloudflare.com',
24
+ 'bootstrapcdn.com',
25
+ 'maxcdn.bootstrapcdn.com',
26
+ 'stackpath.bootstrapcdn.com',
27
+ 'code.jquery.com',
28
+ 'cdn.tailwindcss.com',
29
+ // Schema/standards
30
+ 'schema.org',
31
+ 'ogp.me',
32
+ 'rdfs.org',
33
+ // Documentation
34
+ 'example.com',
35
+ 'example.org',
36
+ 'localhost',
37
+ '127.0.0.1',
38
+ ],
39
+ contextLines: 2,
40
+ categories: undefined,
41
+ };
42
+ export async function loadConfig(targetPath, configFile) {
43
+ const configPath = configFile || path.join(targetPath, '.vlayerrc.json');
44
+ try {
45
+ const content = await readFile(configPath, 'utf-8');
46
+ const userConfig = JSON.parse(content);
47
+ return {
48
+ ...DEFAULT_CONFIG,
49
+ ...userConfig,
50
+ // Merge arrays instead of replacing
51
+ exclude: [...(DEFAULT_CONFIG.exclude || []), ...(userConfig.exclude || [])],
52
+ ignorePaths: [...(DEFAULT_CONFIG.ignorePaths || []), ...(userConfig.ignorePaths || [])],
53
+ safeHttpDomains: [...(DEFAULT_CONFIG.safeHttpDomains || []), ...(userConfig.safeHttpDomains || [])],
54
+ };
55
+ }
56
+ catch {
57
+ // No config file found, use defaults
58
+ return DEFAULT_CONFIG;
59
+ }
60
+ }
61
+ export function isPathIgnored(filePath, config) {
62
+ const ignorePaths = config.ignorePaths || [];
63
+ return ignorePaths.some(pattern => {
64
+ // Simple glob matching
65
+ if (pattern.includes('*')) {
66
+ const regex = new RegExp(pattern.replace(/\*/g, '.*'));
67
+ return regex.test(filePath);
68
+ }
69
+ return filePath.includes(pattern);
70
+ });
71
+ }
72
+ export function isSafeHttpUrl(url, config) {
73
+ const safeDomains = config.safeHttpDomains || [];
74
+ return safeDomains.some(domain => url.includes(domain));
75
+ }
76
+ export { DEFAULT_CONFIG };
77
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,MAAM,cAAc,GAAiB;IACnC,OAAO,EAAE,EAAE;IACX,WAAW,EAAE,EAAE;IACf,eAAe,EAAE;QACf,iBAAiB;QACjB,YAAY;QACZ,QAAQ;QACR,WAAW;QACX,UAAU;QACV,cAAc;QACd,OAAO;QACP,sBAAsB;QACtB,WAAW;QACX,cAAc;QACd,kBAAkB;QAClB,gBAAgB;QAChB,sBAAsB;QACtB,qBAAqB;QACrB,aAAa;QACb,mBAAmB;QACnB,gBAAgB;QAChB,kBAAkB;QAClB,yBAAyB;QACzB,4BAA4B;QAC5B,iBAAiB;QACjB,qBAAqB;QACrB,mBAAmB;QACnB,YAAY;QACZ,QAAQ;QACR,UAAU;QACV,gBAAgB;QAChB,aAAa;QACb,aAAa;QACb,WAAW;QACX,WAAW;KACZ;IACD,YAAY,EAAE,CAAC;IACf,UAAU,EAAE,SAAS;CACtB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAkB,EAAE,UAAmB;IACtE,MAAM,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA0B,CAAC;QAEhE,OAAO;YACL,GAAG,cAAc;YACjB,GAAG,UAAU;YACb,oCAAoC;YACpC,OAAO,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC3E,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACvF,eAAe,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;SACpG,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;QACrC,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,MAAoB;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;IAC7C,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAChC,uBAAuB;QACvB,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YACvD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW,EAAE,MAAoB;IAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;IACjD,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Finding, FixReport, AuditTrail } from '../types.js';
2
+ interface FixReportWithAudit extends FixReport {
3
+ auditTrail: AuditTrail;
4
+ }
5
+ export declare function applyFixes(findings: Finding[], projectPath: string, scannedFiles?: number, scanDuration?: number): Promise<FixReportWithAudit>;
6
+ /**
7
+ * Apply fixes without audit trail (for backwards compatibility)
8
+ */
9
+ export declare function applyFixesSimple(findings: Finding[]): Promise<FixReport>;
10
+ export {};
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fixer/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiB7E,UAAU,kBAAmB,SAAQ,SAAS;IAC5C,UAAU,EAAE,UAAU,CAAC;CACxB;AAmBD,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,YAAY,GAAE,MAAU,EACxB,YAAY,GAAE,MAAU,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAoG7B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAsE9E"}
@@ -0,0 +1,171 @@
1
+ import { readFile, writeFile } from 'fs/promises';
2
+ import { applyFixStrategy } from './strategies.js';
3
+ import { createEvidence } from '../audit/evidence.js';
4
+ import { createAuditTrail, addEvidence, addManualReviews, updateScanStats, finalizeAuditTrail, saveAuditTrail, } from '../audit/index.js';
5
+ function groupFindingsByFile(findings) {
6
+ const groups = new Map();
7
+ for (const finding of findings) {
8
+ if (!finding.fixType || !finding.line)
9
+ continue;
10
+ const existing = groups.get(finding.file) ?? [];
11
+ existing.push(finding);
12
+ groups.set(finding.file, existing);
13
+ }
14
+ return Array.from(groups.entries()).map(([filePath, findings]) => ({
15
+ filePath,
16
+ findings: findings.sort((a, b) => (b.line ?? 0) - (a.line ?? 0)), // Sort descending by line
17
+ }));
18
+ }
19
+ export async function applyFixes(findings, projectPath, scannedFiles = 0, scanDuration = 0) {
20
+ const fixableFindings = findings.filter(f => f.fixType);
21
+ const fixes = [];
22
+ // Create audit trail
23
+ const auditTrail = createAuditTrail(projectPath);
24
+ const fileGroups = groupFindingsByFile(fixableFindings);
25
+ for (const group of fileGroups) {
26
+ try {
27
+ const contentBefore = await readFile(group.filePath, 'utf-8');
28
+ const linesBefore = contentBefore.split('\n');
29
+ const lines = [...linesBefore]; // Copy for modification
30
+ let modified = false;
31
+ // Process findings from bottom to top to preserve line numbers
32
+ for (const finding of group.findings) {
33
+ if (!finding.line || !finding.fixType)
34
+ continue;
35
+ const lineIndex = finding.line - 1;
36
+ if (lineIndex < 0 || lineIndex >= lines.length)
37
+ continue;
38
+ const originalLine = lines[lineIndex];
39
+ const fixedLine = applyFixStrategy(originalLine, finding.fixType);
40
+ if (fixedLine !== null && fixedLine !== originalLine) {
41
+ lines[lineIndex] = fixedLine;
42
+ modified = true;
43
+ // Create evidence BEFORE writing (using original content and proposed new content)
44
+ const contentAfterFix = lines.join('\n');
45
+ const evidence = await createEvidence(finding, group.filePath, contentBefore, contentAfterFix, lineIndex, finding.fixType);
46
+ addEvidence(auditTrail, evidence);
47
+ fixes.push({
48
+ finding,
49
+ fixed: true,
50
+ originalLine,
51
+ fixedLine,
52
+ fixType: finding.fixType,
53
+ });
54
+ }
55
+ else {
56
+ fixes.push({
57
+ finding,
58
+ fixed: false,
59
+ originalLine,
60
+ fixedLine: originalLine,
61
+ fixType: finding.fixType,
62
+ });
63
+ }
64
+ }
65
+ if (modified) {
66
+ await writeFile(group.filePath, lines.join('\n'));
67
+ }
68
+ }
69
+ catch {
70
+ // If we can't read/write the file, mark all findings as not fixed
71
+ for (const finding of group.findings) {
72
+ if (!finding.fixType)
73
+ continue;
74
+ fixes.push({
75
+ finding,
76
+ fixed: false,
77
+ originalLine: '',
78
+ fixedLine: '',
79
+ fixType: finding.fixType,
80
+ });
81
+ }
82
+ }
83
+ }
84
+ // Add manual review items for non-fixable findings
85
+ addManualReviews(auditTrail, findings);
86
+ // Update scan statistics
87
+ const nonFixableCount = findings.filter(f => !f.fixType).length;
88
+ const fixedCount = fixes.filter(f => f.fixed).length;
89
+ const skippedFixableCount = fixes.filter(f => !f.fixed).length;
90
+ updateScanStats(auditTrail, findings.length, scannedFiles, scanDuration);
91
+ // Finalize and save audit trail
92
+ finalizeAuditTrail(auditTrail);
93
+ await saveAuditTrail(auditTrail, projectPath);
94
+ return {
95
+ totalFindings: findings.length,
96
+ fixedCount,
97
+ skippedCount: nonFixableCount + skippedFixableCount,
98
+ fixes,
99
+ auditTrail,
100
+ };
101
+ }
102
+ /**
103
+ * Apply fixes without audit trail (for backwards compatibility)
104
+ */
105
+ export async function applyFixesSimple(findings) {
106
+ const fixableFindings = findings.filter(f => f.fixType);
107
+ const fixes = [];
108
+ const fileGroups = groupFindingsByFile(fixableFindings);
109
+ for (const group of fileGroups) {
110
+ try {
111
+ const content = await readFile(group.filePath, 'utf-8');
112
+ const lines = content.split('\n');
113
+ let modified = false;
114
+ for (const finding of group.findings) {
115
+ if (!finding.line || !finding.fixType)
116
+ continue;
117
+ const lineIndex = finding.line - 1;
118
+ if (lineIndex < 0 || lineIndex >= lines.length)
119
+ continue;
120
+ const originalLine = lines[lineIndex];
121
+ const fixedLine = applyFixStrategy(originalLine, finding.fixType);
122
+ if (fixedLine !== null && fixedLine !== originalLine) {
123
+ lines[lineIndex] = fixedLine;
124
+ modified = true;
125
+ fixes.push({
126
+ finding,
127
+ fixed: true,
128
+ originalLine,
129
+ fixedLine,
130
+ fixType: finding.fixType,
131
+ });
132
+ }
133
+ else {
134
+ fixes.push({
135
+ finding,
136
+ fixed: false,
137
+ originalLine,
138
+ fixedLine: originalLine,
139
+ fixType: finding.fixType,
140
+ });
141
+ }
142
+ }
143
+ if (modified) {
144
+ await writeFile(group.filePath, lines.join('\n'));
145
+ }
146
+ }
147
+ catch {
148
+ for (const finding of group.findings) {
149
+ if (!finding.fixType)
150
+ continue;
151
+ fixes.push({
152
+ finding,
153
+ fixed: false,
154
+ originalLine: '',
155
+ fixedLine: '',
156
+ fixType: finding.fixType,
157
+ });
158
+ }
159
+ }
160
+ }
161
+ const nonFixableCount = findings.filter(f => !f.fixType).length;
162
+ const fixedCount = fixes.filter(f => f.fixed).length;
163
+ const skippedFixableCount = fixes.filter(f => !f.fixed).length;
164
+ return {
165
+ totalFindings: findings.length,
166
+ fixedCount,
167
+ skippedCount: nonFixableCount + skippedFixableCount,
168
+ fixes,
169
+ };
170
+ }
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/fixer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { FixType } from '../types.js';
2
+ export declare function applyFixStrategy(line: string, fixType: FixType): string | null;
3
+ //# sourceMappingURL=strategies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../src/fixer/strategies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAmP3C,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAM9E"}