@nahisaho/musubix-security 1.8.0 → 1.8.5

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 (186) hide show
  1. package/README.md +27 -0
  2. package/dist/analyzers/ai/index.d.ts +6 -0
  3. package/dist/analyzers/ai/index.d.ts.map +1 -0
  4. package/dist/analyzers/ai/index.js +6 -0
  5. package/dist/analyzers/ai/index.js.map +1 -0
  6. package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
  7. package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
  8. package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
  9. package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
  10. package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
  11. package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
  12. package/dist/analyzers/api/api-security-analyzer.js +581 -0
  13. package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
  14. package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
  15. package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
  16. package/dist/analyzers/compliance/compliance-checker.js +772 -0
  17. package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
  18. package/dist/analyzers/container/image-scanner.d.ts +163 -0
  19. package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
  20. package/dist/analyzers/container/image-scanner.js +459 -0
  21. package/dist/analyzers/container/image-scanner.js.map +1 -0
  22. package/dist/analyzers/container/index.d.ts +6 -0
  23. package/dist/analyzers/container/index.d.ts.map +1 -0
  24. package/dist/analyzers/container/index.js +6 -0
  25. package/dist/analyzers/container/index.js.map +1 -0
  26. package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
  27. package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
  28. package/dist/analyzers/dashboard/security-dashboard.js +796 -0
  29. package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
  30. package/dist/analyzers/iac/iac-checker.d.ts +124 -0
  31. package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
  32. package/dist/analyzers/iac/iac-checker.js +755 -0
  33. package/dist/analyzers/iac/iac-checker.js.map +1 -0
  34. package/dist/analyzers/iac/index.d.ts +6 -0
  35. package/dist/analyzers/iac/index.d.ts.map +1 -0
  36. package/dist/analyzers/iac/index.js +6 -0
  37. package/dist/analyzers/iac/index.js.map +1 -0
  38. package/dist/analyzers/index.d.ts +9 -0
  39. package/dist/analyzers/index.d.ts.map +1 -0
  40. package/dist/analyzers/index.js +13 -0
  41. package/dist/analyzers/index.js.map +1 -0
  42. package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
  43. package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
  44. package/dist/analyzers/monitor/realtime-monitor.js +601 -0
  45. package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
  46. package/dist/analyzers/sast/index.d.ts +7 -0
  47. package/dist/analyzers/sast/index.d.ts.map +1 -0
  48. package/dist/analyzers/sast/index.js +7 -0
  49. package/dist/analyzers/sast/index.js.map +1 -0
  50. package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
  51. package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
  52. package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
  53. package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
  54. package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
  55. package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
  56. package/dist/analyzers/sast/zero-day-detector.js +593 -0
  57. package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
  58. package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
  59. package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
  60. package/dist/analyzers/sca/dependency-scanner.js +642 -0
  61. package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
  62. package/dist/core/index.d.ts +8 -0
  63. package/dist/core/index.d.ts.map +1 -0
  64. package/dist/core/index.js +10 -0
  65. package/dist/core/index.js.map +1 -0
  66. package/dist/core/pipeline-manager.d.ts +105 -0
  67. package/dist/core/pipeline-manager.d.ts.map +1 -0
  68. package/dist/core/pipeline-manager.js +449 -0
  69. package/dist/core/pipeline-manager.js.map +1 -0
  70. package/dist/core/result-aggregator.d.ts +96 -0
  71. package/dist/core/result-aggregator.d.ts.map +1 -0
  72. package/dist/core/result-aggregator.js +462 -0
  73. package/dist/core/result-aggregator.js.map +1 -0
  74. package/dist/index.d.ts +15 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +68 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/integrations/ci-integration.d.ts +227 -0
  79. package/dist/integrations/ci-integration.d.ts.map +1 -0
  80. package/dist/integrations/ci-integration.js +472 -0
  81. package/dist/integrations/ci-integration.js.map +1 -0
  82. package/dist/integrations/git-hooks.d.ts +155 -0
  83. package/dist/integrations/git-hooks.d.ts.map +1 -0
  84. package/dist/integrations/git-hooks.js +425 -0
  85. package/dist/integrations/git-hooks.js.map +1 -0
  86. package/dist/integrations/index.d.ts +9 -0
  87. package/dist/integrations/index.d.ts.map +1 -0
  88. package/dist/integrations/index.js +9 -0
  89. package/dist/integrations/index.js.map +1 -0
  90. package/dist/integrations/report-aggregator.d.ts +250 -0
  91. package/dist/integrations/report-aggregator.d.ts.map +1 -0
  92. package/dist/integrations/report-aggregator.js +488 -0
  93. package/dist/integrations/report-aggregator.js.map +1 -0
  94. package/dist/integrations/vscode-integration.d.ts +245 -0
  95. package/dist/integrations/vscode-integration.d.ts.map +1 -0
  96. package/dist/integrations/vscode-integration.js +449 -0
  97. package/dist/integrations/vscode-integration.js.map +1 -0
  98. package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
  99. package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
  100. package/dist/intelligence/attack-pattern-matcher.js +887 -0
  101. package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
  102. package/dist/intelligence/index.d.ts +12 -0
  103. package/dist/intelligence/index.d.ts.map +1 -0
  104. package/dist/intelligence/index.js +18 -0
  105. package/dist/intelligence/index.js.map +1 -0
  106. package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
  107. package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
  108. package/dist/intelligence/neuro-symbolic-core.js +403 -0
  109. package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
  110. package/dist/intelligence/predictive-analyzer.d.ts +317 -0
  111. package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
  112. package/dist/intelligence/predictive-analyzer.js +714 -0
  113. package/dist/intelligence/predictive-analyzer.js.map +1 -0
  114. package/dist/intelligence/risk-scorer.d.ts +333 -0
  115. package/dist/intelligence/risk-scorer.d.ts.map +1 -0
  116. package/dist/intelligence/risk-scorer.js +824 -0
  117. package/dist/intelligence/risk-scorer.js.map +1 -0
  118. package/dist/intelligence/security-analytics.d.ts +349 -0
  119. package/dist/intelligence/security-analytics.d.ts.map +1 -0
  120. package/dist/intelligence/security-analytics.js +813 -0
  121. package/dist/intelligence/security-analytics.js.map +1 -0
  122. package/dist/intelligence/threat-intelligence.d.ts +288 -0
  123. package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
  124. package/dist/intelligence/threat-intelligence.js +639 -0
  125. package/dist/intelligence/threat-intelligence.js.map +1 -0
  126. package/dist/policy/index.d.ts +6 -0
  127. package/dist/policy/index.d.ts.map +1 -0
  128. package/dist/policy/index.js +6 -0
  129. package/dist/policy/index.js.map +1 -0
  130. package/dist/policy/policy-engine.d.ts +254 -0
  131. package/dist/policy/policy-engine.d.ts.map +1 -0
  132. package/dist/policy/policy-engine.js +651 -0
  133. package/dist/policy/policy-engine.js.map +1 -0
  134. package/dist/remediation/auto-fixer.d.ts +179 -0
  135. package/dist/remediation/auto-fixer.d.ts.map +1 -0
  136. package/dist/remediation/auto-fixer.js +540 -0
  137. package/dist/remediation/auto-fixer.js.map +1 -0
  138. package/dist/remediation/fix-validator.d.ts +195 -0
  139. package/dist/remediation/fix-validator.d.ts.map +1 -0
  140. package/dist/remediation/fix-validator.js +462 -0
  141. package/dist/remediation/fix-validator.js.map +1 -0
  142. package/dist/remediation/index.d.ts +10 -0
  143. package/dist/remediation/index.d.ts.map +1 -0
  144. package/dist/remediation/index.js +15 -0
  145. package/dist/remediation/index.js.map +1 -0
  146. package/dist/remediation/patch-generator.d.ts +203 -0
  147. package/dist/remediation/patch-generator.d.ts.map +1 -0
  148. package/dist/remediation/patch-generator.js +533 -0
  149. package/dist/remediation/patch-generator.js.map +1 -0
  150. package/dist/remediation/remediation-planner.d.ts +262 -0
  151. package/dist/remediation/remediation-planner.d.ts.map +1 -0
  152. package/dist/remediation/remediation-planner.js +531 -0
  153. package/dist/remediation/remediation-planner.js.map +1 -0
  154. package/dist/remediation/secure-code-transformer.d.ts +222 -0
  155. package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
  156. package/dist/remediation/secure-code-transformer.js +625 -0
  157. package/dist/remediation/secure-code-transformer.js.map +1 -0
  158. package/dist/types/fix.d.ts +3 -1
  159. package/dist/types/fix.d.ts.map +1 -1
  160. package/dist/types/index.d.ts +6 -0
  161. package/dist/types/index.d.ts.map +1 -1
  162. package/dist/types/index.js +1 -0
  163. package/dist/types/index.js.map +1 -1
  164. package/dist/types/interprocedural.d.ts +203 -0
  165. package/dist/types/interprocedural.d.ts.map +1 -0
  166. package/dist/types/interprocedural.js +7 -0
  167. package/dist/types/interprocedural.js.map +1 -0
  168. package/dist/types/neuro-symbolic.d.ts +179 -0
  169. package/dist/types/neuro-symbolic.d.ts.map +1 -0
  170. package/dist/types/neuro-symbolic.js +7 -0
  171. package/dist/types/neuro-symbolic.js.map +1 -0
  172. package/dist/types/pipeline.d.ts +173 -0
  173. package/dist/types/pipeline.d.ts.map +1 -0
  174. package/dist/types/pipeline.js +7 -0
  175. package/dist/types/pipeline.js.map +1 -0
  176. package/dist/types/result.d.ts +134 -0
  177. package/dist/types/result.d.ts.map +1 -0
  178. package/dist/types/result.js +25 -0
  179. package/dist/types/result.js.map +1 -0
  180. package/dist/types/vulnerability.d.ts +2 -2
  181. package/dist/types/vulnerability.d.ts.map +1 -1
  182. package/dist/types/zero-day.d.ts +146 -0
  183. package/dist/types/zero-day.d.ts.map +1 -0
  184. package/dist/types/zero-day.js +7 -0
  185. package/dist/types/zero-day.js.map +1 -0
  186. package/package.json +2 -2
@@ -0,0 +1,540 @@
1
+ /**
2
+ * @fileoverview Auto-Fixer for Security Vulnerabilities
3
+ * @module @nahisaho/musubix-security/remediation/auto-fixer
4
+ *
5
+ * Provides automated fix generation and application for detected vulnerabilities.
6
+ */
7
+ // ============================================================================
8
+ // Built-in Fix Templates
9
+ // ============================================================================
10
+ const XSS_FIX_TEMPLATES = [
11
+ {
12
+ id: 'xss-sanitize-html',
13
+ vulnerabilityTypes: ['xss'],
14
+ rulePatterns: ['xss', 'cross-site-scripting'],
15
+ strategy: 'sanitization',
16
+ transformations: [
17
+ {
18
+ type: 'wrap',
19
+ pattern: '(\\w+)',
20
+ wrapper: { before: 'sanitizeHtml(', after: ')' },
21
+ },
22
+ ],
23
+ imports: [{ module: 'dompurify', defaultImport: 'DOMPurify' }],
24
+ confidence: 0.85,
25
+ breakingChange: false,
26
+ description: 'Sanitize HTML output using DOMPurify',
27
+ },
28
+ {
29
+ id: 'xss-encode-output',
30
+ vulnerabilityTypes: ['xss'],
31
+ rulePatterns: ['xss', 'cross-site-scripting'],
32
+ strategy: 'encoding',
33
+ transformations: [
34
+ {
35
+ type: 'wrap',
36
+ pattern: '(\\w+)',
37
+ wrapper: { before: 'encodeHtml(', after: ')' },
38
+ },
39
+ ],
40
+ imports: [{ module: 'he', namedImports: ['encode as encodeHtml'] }],
41
+ confidence: 0.9,
42
+ breakingChange: false,
43
+ description: 'HTML encode output to prevent XSS',
44
+ },
45
+ ];
46
+ const SQL_INJECTION_FIX_TEMPLATES = [
47
+ {
48
+ id: 'sqli-parameterized',
49
+ vulnerabilityTypes: ['sql_injection'],
50
+ rulePatterns: ['sql-injection', 'sqli'],
51
+ strategy: 'parameterization',
52
+ transformations: [
53
+ {
54
+ type: 'replace',
55
+ pattern: '`([^`]*\\$\\{([^}]+)\\}[^`]*)`',
56
+ replacement: "'$1', [$2]",
57
+ },
58
+ ],
59
+ imports: [],
60
+ confidence: 0.9,
61
+ breakingChange: true,
62
+ description: 'Use parameterized queries instead of string concatenation',
63
+ },
64
+ {
65
+ id: 'sqli-prepared-statement',
66
+ vulnerabilityTypes: ['sql_injection'],
67
+ rulePatterns: ['sql-injection', 'sqli'],
68
+ strategy: 'parameterization',
69
+ transformations: [
70
+ {
71
+ type: 'replace',
72
+ pattern: 'query\\(`([^`]*)`\\)',
73
+ replacement: 'prepare($1).execute()',
74
+ },
75
+ ],
76
+ imports: [],
77
+ confidence: 0.85,
78
+ breakingChange: true,
79
+ description: 'Use prepared statements',
80
+ },
81
+ ];
82
+ const PATH_TRAVERSAL_FIX_TEMPLATES = [
83
+ {
84
+ id: 'path-traversal-normalize',
85
+ vulnerabilityTypes: ['path_traversal'],
86
+ rulePatterns: ['path-traversal', 'directory-traversal'],
87
+ strategy: 'validation',
88
+ transformations: [
89
+ {
90
+ type: 'wrap',
91
+ pattern: '(\\w+)',
92
+ wrapper: { before: 'path.normalize(path.resolve(baseDir, ', after: '))' },
93
+ },
94
+ ],
95
+ imports: [{ module: 'path', namedImports: ['normalize', 'resolve'] }],
96
+ confidence: 0.85,
97
+ breakingChange: false,
98
+ description: 'Normalize and resolve path to prevent traversal',
99
+ },
100
+ ];
101
+ const SECRET_FIX_TEMPLATES = [
102
+ {
103
+ id: 'secret-env-var',
104
+ vulnerabilityTypes: ['hardcoded_secret', 'exposed_credential'],
105
+ rulePatterns: ['hardcoded', 'secret', 'credential', 'api-key'],
106
+ strategy: 'configuration',
107
+ transformations: [
108
+ {
109
+ type: 'replace',
110
+ pattern: '["\']([A-Za-z0-9+/=]{20,})["\']',
111
+ replacement: 'process.env.SECRET_KEY',
112
+ },
113
+ ],
114
+ imports: [],
115
+ confidence: 0.8,
116
+ breakingChange: true,
117
+ description: 'Move secret to environment variable',
118
+ },
119
+ ];
120
+ const CRYPTO_FIX_TEMPLATES = [
121
+ {
122
+ id: 'crypto-weak-hash',
123
+ vulnerabilityTypes: ['weak_cryptography'],
124
+ rulePatterns: ['weak-hash', 'md5', 'sha1'],
125
+ strategy: 'replacement',
126
+ transformations: [
127
+ {
128
+ type: 'replace',
129
+ pattern: "createHash\\(['\"]md5['\"]\\)",
130
+ replacement: "createHash('sha256')",
131
+ },
132
+ {
133
+ type: 'replace',
134
+ pattern: "createHash\\(['\"]sha1['\"]\\)",
135
+ replacement: "createHash('sha256')",
136
+ },
137
+ ],
138
+ imports: [],
139
+ confidence: 0.95,
140
+ breakingChange: false,
141
+ description: 'Replace weak hash algorithm with SHA-256',
142
+ },
143
+ {
144
+ id: 'crypto-weak-random',
145
+ vulnerabilityTypes: ['weak_cryptography'],
146
+ rulePatterns: ['weak-random', 'math-random'],
147
+ strategy: 'replacement',
148
+ transformations: [
149
+ {
150
+ type: 'replace',
151
+ pattern: 'Math\\.random\\(\\)',
152
+ replacement: 'crypto.randomUUID()',
153
+ },
154
+ ],
155
+ imports: [{ module: 'crypto', namedImports: ['randomUUID'] }],
156
+ confidence: 0.9,
157
+ breakingChange: true,
158
+ description: 'Replace Math.random with cryptographically secure random',
159
+ },
160
+ ];
161
+ const ALL_FIX_TEMPLATES = [
162
+ ...XSS_FIX_TEMPLATES,
163
+ ...SQL_INJECTION_FIX_TEMPLATES,
164
+ ...PATH_TRAVERSAL_FIX_TEMPLATES,
165
+ ...SECRET_FIX_TEMPLATES,
166
+ ...CRYPTO_FIX_TEMPLATES,
167
+ ];
168
+ // ============================================================================
169
+ // AutoFixer Class
170
+ // ============================================================================
171
+ /**
172
+ * AutoFixer for generating and applying security fixes
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const fixer = createAutoFixer({ dryRun: true });
177
+ * const fixes = fixer.generateFixes(vulnerability);
178
+ * const result = await fixer.applyFix(fixes[0], fileContent);
179
+ * ```
180
+ */
181
+ export class AutoFixer {
182
+ templates;
183
+ options;
184
+ constructor(options = {}) {
185
+ this.options = {
186
+ createBackups: options.createBackups ?? true,
187
+ backupDir: options.backupDir ?? '.musubix-backups',
188
+ dryRun: options.dryRun ?? false,
189
+ validateAfterApply: options.validateAfterApply ?? true,
190
+ templates: options.templates ?? [],
191
+ };
192
+ this.templates = [...ALL_FIX_TEMPLATES, ...this.options.templates];
193
+ }
194
+ /**
195
+ * Generate fixes for a vulnerability
196
+ */
197
+ generateFixes(vulnerability, options = {}) {
198
+ const { maxFixes = 3, minConfidence = 0.7, includeBreakingChanges = false, preferredStrategies = [], customTemplates = [], } = options;
199
+ const allTemplates = [...this.templates, ...customTemplates];
200
+ const matchingTemplates = this.findMatchingTemplates(vulnerability, allTemplates, minConfidence, includeBreakingChanges);
201
+ // Sort by preference and confidence
202
+ const sorted = this.sortTemplates(matchingTemplates, preferredStrategies);
203
+ // Generate fixes from templates
204
+ const fixes = [];
205
+ for (const template of sorted.slice(0, maxFixes)) {
206
+ const fix = this.generateFixFromTemplate(vulnerability, template);
207
+ if (fix) {
208
+ fixes.push(fix);
209
+ }
210
+ }
211
+ return fixes;
212
+ }
213
+ /**
214
+ * Generate fix for multiple vulnerabilities
215
+ */
216
+ generateBatchFixes(vulnerabilities, options = {}) {
217
+ const result = new Map();
218
+ for (const vuln of vulnerabilities) {
219
+ const fixes = this.generateFixes(vuln, options);
220
+ result.set(vuln.id, fixes);
221
+ }
222
+ return result;
223
+ }
224
+ /**
225
+ * Apply a fix to file content
226
+ */
227
+ applyFix(fix, fileContent) {
228
+ const warnings = [];
229
+ let modifiedContent = fileContent;
230
+ const modifiedFiles = [];
231
+ try {
232
+ // Apply each edit
233
+ for (const edit of fix.edits) {
234
+ const result = this.applyEdit(modifiedContent, edit);
235
+ modifiedContent = result.content;
236
+ if (result.warning) {
237
+ warnings.push(result.warning);
238
+ }
239
+ }
240
+ // Add imports if needed
241
+ if (fix.imports && fix.imports.length > 0) {
242
+ modifiedContent = this.addImports(modifiedContent, fix.imports);
243
+ }
244
+ if (fix.edits.length > 0) {
245
+ modifiedFiles.push(fix.edits[0].location.file);
246
+ }
247
+ return {
248
+ applied: true,
249
+ fix,
250
+ modifiedFiles,
251
+ warnings,
252
+ };
253
+ }
254
+ catch (error) {
255
+ return {
256
+ applied: false,
257
+ fix,
258
+ modifiedFiles: [],
259
+ error: error instanceof Error ? error.message : 'Unknown error',
260
+ warnings,
261
+ };
262
+ }
263
+ }
264
+ /**
265
+ * Get available fix strategies for a vulnerability type
266
+ */
267
+ getAvailableStrategies(vulnerabilityType) {
268
+ const strategies = new Set();
269
+ for (const template of this.templates) {
270
+ if (template.vulnerabilityTypes.includes(vulnerabilityType)) {
271
+ strategies.add(template.strategy);
272
+ }
273
+ }
274
+ return Array.from(strategies);
275
+ }
276
+ /**
277
+ * Get fix template by ID
278
+ */
279
+ getTemplate(templateId) {
280
+ return this.templates.find(t => t.id === templateId);
281
+ }
282
+ /**
283
+ * Register custom fix template
284
+ */
285
+ registerTemplate(template) {
286
+ this.templates.push(template);
287
+ }
288
+ /**
289
+ * Validate a fix before applying
290
+ */
291
+ validateFix(fix) {
292
+ const errors = [];
293
+ if (!fix.id) {
294
+ errors.push('Fix must have an ID');
295
+ }
296
+ if (!fix.vulnerabilityId) {
297
+ errors.push('Fix must reference a vulnerability');
298
+ }
299
+ if (!fix.edits || fix.edits.length === 0) {
300
+ errors.push('Fix must have at least one edit');
301
+ }
302
+ for (const edit of fix.edits) {
303
+ if (!edit.location) {
304
+ errors.push('Edit must have a location');
305
+ }
306
+ if (edit.newCode === undefined) {
307
+ errors.push('Edit must have newCode');
308
+ }
309
+ }
310
+ return { valid: errors.length === 0, errors };
311
+ }
312
+ /**
313
+ * Preview fix without applying
314
+ */
315
+ previewFix(fix, fileContent) {
316
+ const result = this.applyFix(fix, fileContent);
317
+ if (!result.applied) {
318
+ return fileContent;
319
+ }
320
+ // Generate diff preview
321
+ const lines = fileContent.split('\n');
322
+ const newLines = this.getModifiedContent(fix, fileContent).split('\n');
323
+ const preview = [];
324
+ preview.push('=== Fix Preview ===');
325
+ preview.push(`Fix: ${fix.title}`);
326
+ preview.push(`Strategy: ${fix.strategy}`);
327
+ preview.push(`Confidence: ${(fix.confidence * 100).toFixed(0)}%`);
328
+ preview.push('');
329
+ preview.push('Changes:');
330
+ for (const edit of fix.edits) {
331
+ const line = edit.location.startLine;
332
+ preview.push(` Line ${line}:`);
333
+ preview.push(` - ${lines[line - 1] || ''}`);
334
+ preview.push(` + ${newLines[line - 1] || ''}`);
335
+ }
336
+ return preview.join('\n');
337
+ }
338
+ // ============================================================================
339
+ // Private Methods
340
+ // ============================================================================
341
+ findMatchingTemplates(vulnerability, templates, minConfidence, includeBreaking) {
342
+ return templates.filter(template => {
343
+ // Check vulnerability type match
344
+ const typeMatch = template.vulnerabilityTypes.includes(vulnerability.type);
345
+ // Check rule pattern match
346
+ const ruleMatch = template.rulePatterns.some(pattern => vulnerability.ruleId.toLowerCase().includes(pattern.toLowerCase()));
347
+ // Check confidence
348
+ const confidenceOk = template.confidence >= minConfidence;
349
+ // Check breaking change
350
+ const breakingOk = includeBreaking || !template.breakingChange;
351
+ return (typeMatch || ruleMatch) && confidenceOk && breakingOk;
352
+ });
353
+ }
354
+ sortTemplates(templates, preferredStrategies) {
355
+ return [...templates].sort((a, b) => {
356
+ // Prefer specified strategies
357
+ const aPreferred = preferredStrategies.indexOf(a.strategy);
358
+ const bPreferred = preferredStrategies.indexOf(b.strategy);
359
+ if (aPreferred !== -1 && bPreferred === -1)
360
+ return -1;
361
+ if (bPreferred !== -1 && aPreferred === -1)
362
+ return 1;
363
+ if (aPreferred !== -1 && bPreferred !== -1)
364
+ return aPreferred - bPreferred;
365
+ // Then by confidence
366
+ return b.confidence - a.confidence;
367
+ });
368
+ }
369
+ generateFixFromTemplate(vulnerability, template) {
370
+ const edits = [];
371
+ for (const transform of template.transformations) {
372
+ const edit = this.createEditFromTransformation(vulnerability, transform);
373
+ if (edit) {
374
+ edits.push(edit);
375
+ }
376
+ }
377
+ if (edits.length === 0) {
378
+ return null;
379
+ }
380
+ return {
381
+ id: `FIX-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
382
+ vulnerabilityId: vulnerability.id,
383
+ strategy: template.strategy,
384
+ title: template.description,
385
+ description: template.description,
386
+ confidence: template.confidence,
387
+ breakingChange: template.breakingChange,
388
+ rationale: `Applied fix template: ${template.id}`,
389
+ edits,
390
+ imports: template.imports.map(imp => ({
391
+ module: imp.module,
392
+ namedImports: imp.namedImports,
393
+ defaultImport: imp.defaultImport,
394
+ isTypeOnly: imp.isTypeOnly,
395
+ insertLine: 0, // Default to top of file
396
+ })),
397
+ generatedAt: new Date(),
398
+ };
399
+ }
400
+ createEditFromTransformation(vulnerability, transform) {
401
+ const location = vulnerability.location;
402
+ switch (transform.type) {
403
+ case 'replace':
404
+ return {
405
+ location,
406
+ originalCode: vulnerability.codeSnippet || '',
407
+ newCode: this.applyReplacement(vulnerability.codeSnippet || '', transform.pattern || '', transform.replacement || ''),
408
+ description: 'Replace vulnerable code',
409
+ };
410
+ case 'wrap':
411
+ if (!transform.wrapper)
412
+ return null;
413
+ return {
414
+ location,
415
+ originalCode: vulnerability.codeSnippet || '',
416
+ newCode: `${transform.wrapper.before}${vulnerability.codeSnippet || ''}${transform.wrapper.after}`,
417
+ description: 'Wrap vulnerable code',
418
+ };
419
+ case 'insert_before':
420
+ return {
421
+ location: { ...location, endLine: location.startLine },
422
+ originalCode: '',
423
+ newCode: transform.content || '',
424
+ description: 'Insert code before vulnerability',
425
+ };
426
+ case 'insert_after':
427
+ return {
428
+ location: { ...location, startLine: location.endLine },
429
+ originalCode: '',
430
+ newCode: transform.content || '',
431
+ description: 'Insert code after vulnerability',
432
+ };
433
+ case 'delete':
434
+ return {
435
+ location,
436
+ originalCode: vulnerability.codeSnippet || '',
437
+ newCode: '',
438
+ description: 'Delete vulnerable code',
439
+ };
440
+ default:
441
+ return null;
442
+ }
443
+ }
444
+ applyReplacement(code, pattern, replacement) {
445
+ try {
446
+ const regex = new RegExp(pattern, 'g');
447
+ return code.replace(regex, replacement);
448
+ }
449
+ catch {
450
+ return code;
451
+ }
452
+ }
453
+ applyEdit(content, edit) {
454
+ const lines = content.split('\n');
455
+ const { startLine, endLine } = edit.location;
456
+ if (startLine < 1 || startLine > lines.length) {
457
+ return { content, warning: `Invalid line number: ${startLine}` };
458
+ }
459
+ // Replace lines
460
+ const newLines = edit.newCode.split('\n');
461
+ lines.splice(startLine - 1, endLine - startLine + 1, ...newLines);
462
+ return { content: lines.join('\n') };
463
+ }
464
+ addImports(content, imports) {
465
+ if (!imports || imports.length === 0) {
466
+ return content;
467
+ }
468
+ const importStatements = [];
469
+ for (const imp of imports) {
470
+ let statement = '';
471
+ const typePrefix = imp.isTypeOnly ? 'type ' : '';
472
+ if (imp.defaultImport && imp.namedImports?.length) {
473
+ statement = `import ${typePrefix}${imp.defaultImport}, { ${imp.namedImports.join(', ')} } from '${imp.module}';`;
474
+ }
475
+ else if (imp.defaultImport) {
476
+ statement = `import ${typePrefix}${imp.defaultImport} from '${imp.module}';`;
477
+ }
478
+ else if (imp.namedImports?.length) {
479
+ statement = `import ${typePrefix}{ ${imp.namedImports.join(', ')} } from '${imp.module}';`;
480
+ }
481
+ if (statement && !content.includes(statement)) {
482
+ importStatements.push(statement);
483
+ }
484
+ }
485
+ if (importStatements.length === 0) {
486
+ return content;
487
+ }
488
+ // Find the last import statement and add after it
489
+ const lines = content.split('\n');
490
+ let lastImportIndex = -1;
491
+ for (let i = 0; i < lines.length; i++) {
492
+ if (lines[i].startsWith('import ')) {
493
+ lastImportIndex = i;
494
+ }
495
+ }
496
+ if (lastImportIndex >= 0) {
497
+ lines.splice(lastImportIndex + 1, 0, ...importStatements);
498
+ }
499
+ else {
500
+ lines.unshift(...importStatements, '');
501
+ }
502
+ return lines.join('\n');
503
+ }
504
+ getModifiedContent(fix, originalContent) {
505
+ let content = originalContent;
506
+ for (const edit of fix.edits) {
507
+ const result = this.applyEdit(content, edit);
508
+ content = result.content;
509
+ }
510
+ if (fix.imports && fix.imports.length > 0) {
511
+ content = this.addImports(content, fix.imports);
512
+ }
513
+ return content;
514
+ }
515
+ }
516
+ // ============================================================================
517
+ // Factory Functions
518
+ // ============================================================================
519
+ /**
520
+ * Create an auto-fixer instance
521
+ */
522
+ export function createAutoFixer(options) {
523
+ return new AutoFixer(options);
524
+ }
525
+ /**
526
+ * Get all built-in fix templates
527
+ */
528
+ export function getBuiltInTemplates() {
529
+ return [...ALL_FIX_TEMPLATES];
530
+ }
531
+ /**
532
+ * Create a custom fix template
533
+ */
534
+ export function createFixTemplate(config) {
535
+ return {
536
+ ...config,
537
+ id: `custom-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
538
+ };
539
+ }
540
+ //# sourceMappingURL=auto-fixer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-fixer.js","sourceRoot":"","sources":["../../src/remediation/auto-fixer.ts"],"names":[],"mappings":"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"}