@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.
- package/README.md +27 -0
- package/dist/analyzers/ai/index.d.ts +6 -0
- package/dist/analyzers/ai/index.d.ts.map +1 -0
- package/dist/analyzers/ai/index.js +6 -0
- package/dist/analyzers/ai/index.js.map +1 -0
- package/dist/analyzers/ai/prompt-injection-detector.d.ts +152 -0
- package/dist/analyzers/ai/prompt-injection-detector.d.ts.map +1 -0
- package/dist/analyzers/ai/prompt-injection-detector.js +468 -0
- package/dist/analyzers/ai/prompt-injection-detector.js.map +1 -0
- package/dist/analyzers/api/api-security-analyzer.d.ts +263 -0
- package/dist/analyzers/api/api-security-analyzer.d.ts.map +1 -0
- package/dist/analyzers/api/api-security-analyzer.js +581 -0
- package/dist/analyzers/api/api-security-analyzer.js.map +1 -0
- package/dist/analyzers/compliance/compliance-checker.d.ts +201 -0
- package/dist/analyzers/compliance/compliance-checker.d.ts.map +1 -0
- package/dist/analyzers/compliance/compliance-checker.js +772 -0
- package/dist/analyzers/compliance/compliance-checker.js.map +1 -0
- package/dist/analyzers/container/image-scanner.d.ts +163 -0
- package/dist/analyzers/container/image-scanner.d.ts.map +1 -0
- package/dist/analyzers/container/image-scanner.js +459 -0
- package/dist/analyzers/container/image-scanner.js.map +1 -0
- package/dist/analyzers/container/index.d.ts +6 -0
- package/dist/analyzers/container/index.d.ts.map +1 -0
- package/dist/analyzers/container/index.js +6 -0
- package/dist/analyzers/container/index.js.map +1 -0
- package/dist/analyzers/dashboard/security-dashboard.d.ts +286 -0
- package/dist/analyzers/dashboard/security-dashboard.d.ts.map +1 -0
- package/dist/analyzers/dashboard/security-dashboard.js +796 -0
- package/dist/analyzers/dashboard/security-dashboard.js.map +1 -0
- package/dist/analyzers/iac/iac-checker.d.ts +124 -0
- package/dist/analyzers/iac/iac-checker.d.ts.map +1 -0
- package/dist/analyzers/iac/iac-checker.js +755 -0
- package/dist/analyzers/iac/iac-checker.js.map +1 -0
- package/dist/analyzers/iac/index.d.ts +6 -0
- package/dist/analyzers/iac/index.d.ts.map +1 -0
- package/dist/analyzers/iac/index.js +6 -0
- package/dist/analyzers/iac/index.js.map +1 -0
- package/dist/analyzers/index.d.ts +9 -0
- package/dist/analyzers/index.d.ts.map +1 -0
- package/dist/analyzers/index.js +13 -0
- package/dist/analyzers/index.js.map +1 -0
- package/dist/analyzers/monitor/realtime-monitor.d.ts +216 -0
- package/dist/analyzers/monitor/realtime-monitor.d.ts.map +1 -0
- package/dist/analyzers/monitor/realtime-monitor.js +601 -0
- package/dist/analyzers/monitor/realtime-monitor.js.map +1 -0
- package/dist/analyzers/sast/index.d.ts +7 -0
- package/dist/analyzers/sast/index.d.ts.map +1 -0
- package/dist/analyzers/sast/index.js +7 -0
- package/dist/analyzers/sast/index.js.map +1 -0
- package/dist/analyzers/sast/interprocedural-analyzer.d.ts +276 -0
- package/dist/analyzers/sast/interprocedural-analyzer.d.ts.map +1 -0
- package/dist/analyzers/sast/interprocedural-analyzer.js +635 -0
- package/dist/analyzers/sast/interprocedural-analyzer.js.map +1 -0
- package/dist/analyzers/sast/zero-day-detector.d.ts +183 -0
- package/dist/analyzers/sast/zero-day-detector.d.ts.map +1 -0
- package/dist/analyzers/sast/zero-day-detector.js +593 -0
- package/dist/analyzers/sast/zero-day-detector.js.map +1 -0
- package/dist/analyzers/sca/dependency-scanner.d.ts +275 -0
- package/dist/analyzers/sca/dependency-scanner.d.ts.map +1 -0
- package/dist/analyzers/sca/dependency-scanner.js +642 -0
- package/dist/analyzers/sca/dependency-scanner.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +10 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline-manager.d.ts +105 -0
- package/dist/core/pipeline-manager.d.ts.map +1 -0
- package/dist/core/pipeline-manager.js +449 -0
- package/dist/core/pipeline-manager.js.map +1 -0
- package/dist/core/result-aggregator.d.ts +96 -0
- package/dist/core/result-aggregator.d.ts.map +1 -0
- package/dist/core/result-aggregator.js +462 -0
- package/dist/core/result-aggregator.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/ci-integration.d.ts +227 -0
- package/dist/integrations/ci-integration.d.ts.map +1 -0
- package/dist/integrations/ci-integration.js +472 -0
- package/dist/integrations/ci-integration.js.map +1 -0
- package/dist/integrations/git-hooks.d.ts +155 -0
- package/dist/integrations/git-hooks.d.ts.map +1 -0
- package/dist/integrations/git-hooks.js +425 -0
- package/dist/integrations/git-hooks.js.map +1 -0
- package/dist/integrations/index.d.ts +9 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +9 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/report-aggregator.d.ts +250 -0
- package/dist/integrations/report-aggregator.d.ts.map +1 -0
- package/dist/integrations/report-aggregator.js +488 -0
- package/dist/integrations/report-aggregator.js.map +1 -0
- package/dist/integrations/vscode-integration.d.ts +245 -0
- package/dist/integrations/vscode-integration.d.ts.map +1 -0
- package/dist/integrations/vscode-integration.js +449 -0
- package/dist/integrations/vscode-integration.js.map +1 -0
- package/dist/intelligence/attack-pattern-matcher.d.ts +217 -0
- package/dist/intelligence/attack-pattern-matcher.d.ts.map +1 -0
- package/dist/intelligence/attack-pattern-matcher.js +887 -0
- package/dist/intelligence/attack-pattern-matcher.js.map +1 -0
- package/dist/intelligence/index.d.ts +12 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +18 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/neuro-symbolic-core.d.ts +88 -0
- package/dist/intelligence/neuro-symbolic-core.d.ts.map +1 -0
- package/dist/intelligence/neuro-symbolic-core.js +403 -0
- package/dist/intelligence/neuro-symbolic-core.js.map +1 -0
- package/dist/intelligence/predictive-analyzer.d.ts +317 -0
- package/dist/intelligence/predictive-analyzer.d.ts.map +1 -0
- package/dist/intelligence/predictive-analyzer.js +714 -0
- package/dist/intelligence/predictive-analyzer.js.map +1 -0
- package/dist/intelligence/risk-scorer.d.ts +333 -0
- package/dist/intelligence/risk-scorer.d.ts.map +1 -0
- package/dist/intelligence/risk-scorer.js +824 -0
- package/dist/intelligence/risk-scorer.js.map +1 -0
- package/dist/intelligence/security-analytics.d.ts +349 -0
- package/dist/intelligence/security-analytics.d.ts.map +1 -0
- package/dist/intelligence/security-analytics.js +813 -0
- package/dist/intelligence/security-analytics.js.map +1 -0
- package/dist/intelligence/threat-intelligence.d.ts +288 -0
- package/dist/intelligence/threat-intelligence.d.ts.map +1 -0
- package/dist/intelligence/threat-intelligence.js +639 -0
- package/dist/intelligence/threat-intelligence.js.map +1 -0
- package/dist/policy/index.d.ts +6 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +6 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/policy-engine.d.ts +254 -0
- package/dist/policy/policy-engine.d.ts.map +1 -0
- package/dist/policy/policy-engine.js +651 -0
- package/dist/policy/policy-engine.js.map +1 -0
- package/dist/remediation/auto-fixer.d.ts +179 -0
- package/dist/remediation/auto-fixer.d.ts.map +1 -0
- package/dist/remediation/auto-fixer.js +540 -0
- package/dist/remediation/auto-fixer.js.map +1 -0
- package/dist/remediation/fix-validator.d.ts +195 -0
- package/dist/remediation/fix-validator.d.ts.map +1 -0
- package/dist/remediation/fix-validator.js +462 -0
- package/dist/remediation/fix-validator.js.map +1 -0
- package/dist/remediation/index.d.ts +10 -0
- package/dist/remediation/index.d.ts.map +1 -0
- package/dist/remediation/index.js +15 -0
- package/dist/remediation/index.js.map +1 -0
- package/dist/remediation/patch-generator.d.ts +203 -0
- package/dist/remediation/patch-generator.d.ts.map +1 -0
- package/dist/remediation/patch-generator.js +533 -0
- package/dist/remediation/patch-generator.js.map +1 -0
- package/dist/remediation/remediation-planner.d.ts +262 -0
- package/dist/remediation/remediation-planner.d.ts.map +1 -0
- package/dist/remediation/remediation-planner.js +531 -0
- package/dist/remediation/remediation-planner.js.map +1 -0
- package/dist/remediation/secure-code-transformer.d.ts +222 -0
- package/dist/remediation/secure-code-transformer.d.ts.map +1 -0
- package/dist/remediation/secure-code-transformer.js +625 -0
- package/dist/remediation/secure-code-transformer.js.map +1 -0
- package/dist/types/fix.d.ts +3 -1
- package/dist/types/fix.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/interprocedural.d.ts +203 -0
- package/dist/types/interprocedural.d.ts.map +1 -0
- package/dist/types/interprocedural.js +7 -0
- package/dist/types/interprocedural.js.map +1 -0
- package/dist/types/neuro-symbolic.d.ts +179 -0
- package/dist/types/neuro-symbolic.d.ts.map +1 -0
- package/dist/types/neuro-symbolic.js +7 -0
- package/dist/types/neuro-symbolic.js.map +1 -0
- package/dist/types/pipeline.d.ts +173 -0
- package/dist/types/pipeline.d.ts.map +1 -0
- package/dist/types/pipeline.js +7 -0
- package/dist/types/pipeline.js.map +1 -0
- package/dist/types/result.d.ts +134 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +25 -0
- package/dist/types/result.js.map +1 -0
- package/dist/types/vulnerability.d.ts +2 -2
- package/dist/types/vulnerability.d.ts.map +1 -1
- package/dist/types/zero-day.d.ts +146 -0
- package/dist/types/zero-day.d.ts.map +1 -0
- package/dist/types/zero-day.js +7 -0
- package/dist/types/zero-day.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Result Aggregator - combines and deduplicates security findings
|
|
3
|
+
* @module @nahisaho/musubix-security/core/result-aggregator
|
|
4
|
+
* @trace DES-SEC2-ORCH-003, REQ-SEC2-REPORT-001
|
|
5
|
+
*/
|
|
6
|
+
import type { Vulnerability } from '../types/vulnerability.js';
|
|
7
|
+
import type { AggregatedVulnerability, AnalysisResult, AggregatedResult, DeduplicationRule, PrioritizationCriteria, IResultAggregator } from '../types/result.js';
|
|
8
|
+
/**
|
|
9
|
+
* Result Aggregator implementation
|
|
10
|
+
* @trace DES-SEC2-ORCH-003
|
|
11
|
+
*/
|
|
12
|
+
export declare class ResultAggregator implements IResultAggregator {
|
|
13
|
+
private deduplicationRules;
|
|
14
|
+
private prioritizationCriteria;
|
|
15
|
+
constructor(rules?: DeduplicationRule[], criteria?: PrioritizationCriteria);
|
|
16
|
+
/**
|
|
17
|
+
* Aggregate results from multiple analyzers
|
|
18
|
+
* @trace REQ-SEC2-REPORT-001
|
|
19
|
+
*/
|
|
20
|
+
aggregate(results: AnalysisResult[]): AggregatedResult;
|
|
21
|
+
/**
|
|
22
|
+
* Deduplicate vulnerabilities
|
|
23
|
+
*/
|
|
24
|
+
deduplicate(vulnerabilities: Vulnerability[], rules?: DeduplicationRule[]): Vulnerability[];
|
|
25
|
+
/**
|
|
26
|
+
* Deduplicate aggregated vulnerabilities
|
|
27
|
+
*/
|
|
28
|
+
private deduplicateAggregated;
|
|
29
|
+
/**
|
|
30
|
+
* Calculate similarity between two vulnerabilities
|
|
31
|
+
*/
|
|
32
|
+
private calculateSimilarity;
|
|
33
|
+
/**
|
|
34
|
+
* Check if two field values match
|
|
35
|
+
*/
|
|
36
|
+
private fieldsMatch;
|
|
37
|
+
/**
|
|
38
|
+
* Type guard for SourceLocation
|
|
39
|
+
*/
|
|
40
|
+
private isSourceLocation;
|
|
41
|
+
/**
|
|
42
|
+
* Merge two vulnerabilities according to strategy
|
|
43
|
+
*/
|
|
44
|
+
mergeVulnerabilities(v1: AggregatedVulnerability, v2: AggregatedVulnerability, strategy?: 'keep-first' | 'keep-highest-confidence' | 'merge'): AggregatedVulnerability;
|
|
45
|
+
/**
|
|
46
|
+
* Prioritize vulnerabilities
|
|
47
|
+
*/
|
|
48
|
+
prioritize(vulnerabilities: Vulnerability[], criteria?: PrioritizationCriteria): Vulnerability[];
|
|
49
|
+
/**
|
|
50
|
+
* Prioritize aggregated vulnerabilities
|
|
51
|
+
*/
|
|
52
|
+
private prioritizeAggregated;
|
|
53
|
+
/**
|
|
54
|
+
* Calculate priority score for a vulnerability
|
|
55
|
+
*/
|
|
56
|
+
private calculatePriorityScore;
|
|
57
|
+
/**
|
|
58
|
+
* Estimate exploitability based on vulnerability type
|
|
59
|
+
*/
|
|
60
|
+
private estimateExploitability;
|
|
61
|
+
/**
|
|
62
|
+
* Estimate impact based on vulnerability characteristics
|
|
63
|
+
*/
|
|
64
|
+
private estimateImpact;
|
|
65
|
+
/**
|
|
66
|
+
* Calculate individual risk score for a vulnerability
|
|
67
|
+
*/
|
|
68
|
+
private calculateIndividualRiskScore;
|
|
69
|
+
/**
|
|
70
|
+
* Calculate overall risk score for all vulnerabilities
|
|
71
|
+
* @trace REQ-SEC2-REPORT-001
|
|
72
|
+
*/
|
|
73
|
+
calculateRiskScore(vulnerabilities: Vulnerability[]): number;
|
|
74
|
+
/**
|
|
75
|
+
* Configure deduplication rules
|
|
76
|
+
*/
|
|
77
|
+
setDeduplicationRules(rules: DeduplicationRule[]): void;
|
|
78
|
+
/**
|
|
79
|
+
* Configure prioritization criteria
|
|
80
|
+
*/
|
|
81
|
+
setPrioritizationCriteria(criteria: PrioritizationCriteria): void;
|
|
82
|
+
/**
|
|
83
|
+
* Merge two similar vulnerabilities into one
|
|
84
|
+
* @trace DES-SEC2-ORCH-003
|
|
85
|
+
*/
|
|
86
|
+
mergeSimilar(vuln1: Vulnerability, vuln2: Vulnerability): Vulnerability;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a default result aggregator instance
|
|
90
|
+
*/
|
|
91
|
+
export declare function createResultAggregator(rules?: DeduplicationRule[], criteria?: PrioritizationCriteria): ResultAggregator;
|
|
92
|
+
/**
|
|
93
|
+
* Merge similar vulnerabilities based on location overlap
|
|
94
|
+
*/
|
|
95
|
+
export declare function mergeSimilarByLocation(vulnerabilities: Vulnerability[], overlapThreshold?: number): Vulnerability[];
|
|
96
|
+
//# sourceMappingURL=result-aggregator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-aggregator.d.ts","sourceRoot":"","sources":["../../src/core/result-aggregator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAEV,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAwB5B;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,sBAAsB,CAAyB;gBAGrD,KAAK,GAAE,iBAAiB,EAAwB,EAChD,QAAQ,GAAE,sBAA+C;IAM3D;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,gBAAgB;IAwEtD;;OAEG;IACH,WAAW,CACT,eAAe,EAAE,aAAa,EAAE,EAChC,KAAK,GAAE,iBAAiB,EAA4B,GACnD,aAAa,EAAE;IAiBlB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqC7B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAKxB;;OAEG;IACH,oBAAoB,CAClB,EAAE,EAAE,uBAAuB,EAC3B,EAAE,EAAE,uBAAuB,EAC3B,QAAQ,GAAE,YAAY,GAAG,yBAAyB,GAAG,OAAmC,GACvF,uBAAuB;IAiD1B;;OAEG;IACH,UAAU,CACR,eAAe,EAAE,aAAa,EAAE,EAChC,QAAQ,GAAE,sBAAoD,GAC7D,aAAa,EAAE;IAWlB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA8B9B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAStB;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAepC;;;OAGG;IACH,kBAAkB,CAAC,eAAe,EAAE,aAAa,EAAE,GAAG,MAAM;IAwB5D;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,EAAE,GAAG,IAAI;IAIvD;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,sBAAsB,GAAG,IAAI;IAIjE;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GAAG,aAAa;CAmCxE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,CAAC,EAAE,iBAAiB,EAAE,EAC3B,QAAQ,CAAC,EAAE,sBAAsB,GAChC,gBAAgB,CAElB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,aAAa,EAAE,EAChC,gBAAgB,GAAE,MAAY,GAC7B,aAAa,EAAE,CA0CjB"}
|
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Result Aggregator - combines and deduplicates security findings
|
|
3
|
+
* @module @nahisaho/musubix-security/core/result-aggregator
|
|
4
|
+
* @trace DES-SEC2-ORCH-003, REQ-SEC2-REPORT-001
|
|
5
|
+
*/
|
|
6
|
+
import { DEFAULT_PRIORITIZATION, SEVERITY_SCORES, } from '../types/result.js';
|
|
7
|
+
/**
|
|
8
|
+
* Default deduplication rules
|
|
9
|
+
*/
|
|
10
|
+
const DEFAULT_DEDUP_RULES = [
|
|
11
|
+
{
|
|
12
|
+
id: 'same-location-cwe',
|
|
13
|
+
compareFields: ['location', 'cwes'],
|
|
14
|
+
similarityThreshold: 0.9,
|
|
15
|
+
mergeStrategy: 'keep-highest-confidence',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
id: 'same-rule-location',
|
|
19
|
+
compareFields: ['ruleId', 'location'],
|
|
20
|
+
similarityThreshold: 0.95,
|
|
21
|
+
mergeStrategy: 'keep-first',
|
|
22
|
+
},
|
|
23
|
+
];
|
|
24
|
+
/**
|
|
25
|
+
* Result Aggregator implementation
|
|
26
|
+
* @trace DES-SEC2-ORCH-003
|
|
27
|
+
*/
|
|
28
|
+
export class ResultAggregator {
|
|
29
|
+
deduplicationRules;
|
|
30
|
+
prioritizationCriteria;
|
|
31
|
+
constructor(rules = DEFAULT_DEDUP_RULES, criteria = DEFAULT_PRIORITIZATION) {
|
|
32
|
+
this.deduplicationRules = rules;
|
|
33
|
+
this.prioritizationCriteria = criteria;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Aggregate results from multiple analyzers
|
|
37
|
+
* @trace REQ-SEC2-REPORT-001
|
|
38
|
+
*/
|
|
39
|
+
aggregate(results) {
|
|
40
|
+
const startTime = Date.now();
|
|
41
|
+
// Collect all vulnerabilities with source tracking
|
|
42
|
+
const allVulnerabilities = [];
|
|
43
|
+
const sources = new Set();
|
|
44
|
+
for (const result of results) {
|
|
45
|
+
sources.add(result.type);
|
|
46
|
+
for (const vuln of result.vulnerabilities) {
|
|
47
|
+
allVulnerabilities.push({
|
|
48
|
+
...vuln,
|
|
49
|
+
sources: [result.type],
|
|
50
|
+
originalIds: [vuln.id],
|
|
51
|
+
isDuplicate: false,
|
|
52
|
+
priorityScore: 0,
|
|
53
|
+
riskScore: 0,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Deduplicate
|
|
58
|
+
const deduplicatedCount = allVulnerabilities.length;
|
|
59
|
+
const deduplicated = this.deduplicateAggregated(allVulnerabilities);
|
|
60
|
+
const duplicatesRemoved = deduplicatedCount - deduplicated.length;
|
|
61
|
+
// Prioritize
|
|
62
|
+
const prioritized = this.prioritizeAggregated(deduplicated);
|
|
63
|
+
// Calculate summaries
|
|
64
|
+
const bySeverity = {
|
|
65
|
+
critical: 0,
|
|
66
|
+
high: 0,
|
|
67
|
+
medium: 0,
|
|
68
|
+
low: 0,
|
|
69
|
+
info: 0,
|
|
70
|
+
};
|
|
71
|
+
const bySource = {
|
|
72
|
+
sast: 0,
|
|
73
|
+
taint: 0,
|
|
74
|
+
secret: 0,
|
|
75
|
+
dependency: 0,
|
|
76
|
+
container: 0,
|
|
77
|
+
iac: 0,
|
|
78
|
+
ai: 0,
|
|
79
|
+
'neuro-symbolic': 0,
|
|
80
|
+
};
|
|
81
|
+
for (const vuln of prioritized) {
|
|
82
|
+
bySeverity[vuln.severity]++;
|
|
83
|
+
for (const source of vuln.sources) {
|
|
84
|
+
bySource[source]++;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Calculate overall risk score
|
|
88
|
+
const riskScore = this.calculateRiskScore(prioritized);
|
|
89
|
+
return {
|
|
90
|
+
vulnerabilities: prioritized,
|
|
91
|
+
riskScore,
|
|
92
|
+
bySeverity,
|
|
93
|
+
bySource,
|
|
94
|
+
duplicatesRemoved,
|
|
95
|
+
sources: Array.from(sources),
|
|
96
|
+
aggregatedAt: new Date(),
|
|
97
|
+
aggregationDuration: Date.now() - startTime,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Deduplicate vulnerabilities
|
|
102
|
+
*/
|
|
103
|
+
deduplicate(vulnerabilities, rules = this.deduplicationRules) {
|
|
104
|
+
// Convert to aggregated format for processing
|
|
105
|
+
const aggregated = vulnerabilities.map(v => ({
|
|
106
|
+
...v,
|
|
107
|
+
sources: ['sast'],
|
|
108
|
+
originalIds: [v.id],
|
|
109
|
+
isDuplicate: false,
|
|
110
|
+
priorityScore: 0,
|
|
111
|
+
riskScore: 0,
|
|
112
|
+
}));
|
|
113
|
+
const deduplicated = this.deduplicateAggregated(aggregated, rules);
|
|
114
|
+
// Convert back to regular vulnerabilities
|
|
115
|
+
return deduplicated.map(({ sources, originalIds, isDuplicate, priorityScore, riskScore, ...vuln }) => vuln);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Deduplicate aggregated vulnerabilities
|
|
119
|
+
*/
|
|
120
|
+
deduplicateAggregated(vulnerabilities, rules = this.deduplicationRules) {
|
|
121
|
+
if (vulnerabilities.length <= 1)
|
|
122
|
+
return vulnerabilities;
|
|
123
|
+
const result = [];
|
|
124
|
+
const merged = new Set();
|
|
125
|
+
for (let i = 0; i < vulnerabilities.length; i++) {
|
|
126
|
+
if (merged.has(i))
|
|
127
|
+
continue;
|
|
128
|
+
let current = vulnerabilities[i];
|
|
129
|
+
for (let j = i + 1; j < vulnerabilities.length; j++) {
|
|
130
|
+
if (merged.has(j))
|
|
131
|
+
continue;
|
|
132
|
+
const other = vulnerabilities[j];
|
|
133
|
+
for (const rule of rules) {
|
|
134
|
+
const similarity = this.calculateSimilarity(current, other, rule.compareFields);
|
|
135
|
+
if (similarity >= rule.similarityThreshold) {
|
|
136
|
+
// Merge according to strategy
|
|
137
|
+
current = this.mergeVulnerabilities(current, other, rule.mergeStrategy);
|
|
138
|
+
merged.add(j);
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
result.push(current);
|
|
144
|
+
}
|
|
145
|
+
return result;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Calculate similarity between two vulnerabilities
|
|
149
|
+
*/
|
|
150
|
+
calculateSimilarity(v1, v2, fields) {
|
|
151
|
+
let matchingFields = 0;
|
|
152
|
+
for (const field of fields) {
|
|
153
|
+
if (this.fieldsMatch(v1[field], v2[field])) {
|
|
154
|
+
matchingFields++;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return matchingFields / fields.length;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Check if two field values match
|
|
161
|
+
*/
|
|
162
|
+
fieldsMatch(v1, v2) {
|
|
163
|
+
if (v1 === v2)
|
|
164
|
+
return true;
|
|
165
|
+
// Handle arrays (like cwes)
|
|
166
|
+
if (Array.isArray(v1) && Array.isArray(v2)) {
|
|
167
|
+
return v1.length === v2.length &&
|
|
168
|
+
v1.every((item, i) => item === v2[i]);
|
|
169
|
+
}
|
|
170
|
+
// Handle SourceLocation
|
|
171
|
+
if (this.isSourceLocation(v1) && this.isSourceLocation(v2)) {
|
|
172
|
+
return v1.file === v2.file &&
|
|
173
|
+
v1.startLine === v2.startLine &&
|
|
174
|
+
v1.endLine === v2.endLine;
|
|
175
|
+
}
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Type guard for SourceLocation
|
|
180
|
+
*/
|
|
181
|
+
isSourceLocation(v) {
|
|
182
|
+
return typeof v === 'object' && v !== null &&
|
|
183
|
+
'file' in v && 'startLine' in v && 'endLine' in v;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Merge two vulnerabilities according to strategy
|
|
187
|
+
*/
|
|
188
|
+
mergeVulnerabilities(v1, v2, strategy = 'keep-highest-confidence') {
|
|
189
|
+
// Always combine sources and original IDs
|
|
190
|
+
const mergedSources = Array.from(new Set([...v1.sources, ...v2.sources]));
|
|
191
|
+
const mergedIds = Array.from(new Set([...v1.originalIds, ...v2.originalIds]));
|
|
192
|
+
switch (strategy) {
|
|
193
|
+
case 'keep-first':
|
|
194
|
+
return {
|
|
195
|
+
...v1,
|
|
196
|
+
sources: mergedSources,
|
|
197
|
+
originalIds: mergedIds,
|
|
198
|
+
isDuplicate: true,
|
|
199
|
+
};
|
|
200
|
+
case 'keep-highest-confidence':
|
|
201
|
+
const base = v1.confidence >= v2.confidence ? v1 : v2;
|
|
202
|
+
return {
|
|
203
|
+
...base,
|
|
204
|
+
sources: mergedSources,
|
|
205
|
+
originalIds: mergedIds,
|
|
206
|
+
isDuplicate: true,
|
|
207
|
+
};
|
|
208
|
+
case 'merge':
|
|
209
|
+
// Merge additional info
|
|
210
|
+
const mergedCwes = Array.from(new Set([...v1.cwes, ...v2.cwes]));
|
|
211
|
+
return {
|
|
212
|
+
...v1,
|
|
213
|
+
cwes: mergedCwes,
|
|
214
|
+
confidence: Math.max(v1.confidence, v2.confidence),
|
|
215
|
+
sources: mergedSources,
|
|
216
|
+
originalIds: mergedIds,
|
|
217
|
+
isDuplicate: true,
|
|
218
|
+
// Combine recommendations if different
|
|
219
|
+
recommendation: v1.recommendation === v2.recommendation
|
|
220
|
+
? v1.recommendation
|
|
221
|
+
: `${v1.recommendation}\n\nAlternative: ${v2.recommendation}`,
|
|
222
|
+
};
|
|
223
|
+
default:
|
|
224
|
+
return {
|
|
225
|
+
...v1,
|
|
226
|
+
sources: mergedSources,
|
|
227
|
+
originalIds: mergedIds,
|
|
228
|
+
isDuplicate: true,
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Prioritize vulnerabilities
|
|
234
|
+
*/
|
|
235
|
+
prioritize(vulnerabilities, criteria = this.prioritizationCriteria) {
|
|
236
|
+
const withScores = vulnerabilities.map(v => ({
|
|
237
|
+
vuln: v,
|
|
238
|
+
score: this.calculatePriorityScore(v, criteria),
|
|
239
|
+
}));
|
|
240
|
+
withScores.sort((a, b) => b.score - a.score);
|
|
241
|
+
return withScores.map(({ vuln }) => vuln);
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Prioritize aggregated vulnerabilities
|
|
245
|
+
*/
|
|
246
|
+
prioritizeAggregated(vulnerabilities, criteria = this.prioritizationCriteria) {
|
|
247
|
+
for (const vuln of vulnerabilities) {
|
|
248
|
+
vuln.priorityScore = this.calculatePriorityScore(vuln, criteria);
|
|
249
|
+
vuln.riskScore = this.calculateIndividualRiskScore(vuln);
|
|
250
|
+
}
|
|
251
|
+
return vulnerabilities.sort((a, b) => b.priorityScore - a.priorityScore);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Calculate priority score for a vulnerability
|
|
255
|
+
*/
|
|
256
|
+
calculatePriorityScore(vuln, criteria) {
|
|
257
|
+
// Base score from severity
|
|
258
|
+
const severityScore = SEVERITY_SCORES[vuln.severity];
|
|
259
|
+
// Confidence factor
|
|
260
|
+
const confidenceScore = vuln.confidence * 100;
|
|
261
|
+
// Exploitability (estimate based on type)
|
|
262
|
+
const exploitabilityScore = this.estimateExploitability(vuln);
|
|
263
|
+
// Impact (estimate based on type and severity)
|
|
264
|
+
const impactScore = this.estimateImpact(vuln);
|
|
265
|
+
// Custom scorer if provided
|
|
266
|
+
const customScore = criteria.customScorer?.(vuln) ?? 0;
|
|
267
|
+
// Weighted sum
|
|
268
|
+
const score = severityScore * criteria.severityWeight +
|
|
269
|
+
confidenceScore * criteria.confidenceWeight +
|
|
270
|
+
exploitabilityScore * criteria.exploitabilityWeight +
|
|
271
|
+
impactScore * criteria.impactWeight +
|
|
272
|
+
customScore;
|
|
273
|
+
return Math.round(score * 100) / 100;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Estimate exploitability based on vulnerability type
|
|
277
|
+
*/
|
|
278
|
+
estimateExploitability(vuln) {
|
|
279
|
+
// High exploitability types
|
|
280
|
+
const highExploit = ['injection', 'xss', 'command-injection', 'path-traversal'];
|
|
281
|
+
// Medium exploitability types
|
|
282
|
+
const medExploit = ['broken-access', 'ssrf', 'open-redirect'];
|
|
283
|
+
const vulnType = vuln.type;
|
|
284
|
+
if (vulnType && highExploit.includes(vulnType))
|
|
285
|
+
return 90;
|
|
286
|
+
if (vulnType && medExploit.includes(vulnType))
|
|
287
|
+
return 60;
|
|
288
|
+
return 40;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Estimate impact based on vulnerability characteristics
|
|
292
|
+
*/
|
|
293
|
+
estimateImpact(vuln) {
|
|
294
|
+
// Critical and high severity have high impact
|
|
295
|
+
if (vuln.severity === 'critical')
|
|
296
|
+
return 100;
|
|
297
|
+
if (vuln.severity === 'high')
|
|
298
|
+
return 80;
|
|
299
|
+
if (vuln.severity === 'medium')
|
|
300
|
+
return 50;
|
|
301
|
+
if (vuln.severity === 'low')
|
|
302
|
+
return 20;
|
|
303
|
+
return 10;
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Calculate individual risk score for a vulnerability
|
|
307
|
+
*/
|
|
308
|
+
calculateIndividualRiskScore(vuln) {
|
|
309
|
+
const severityScore = SEVERITY_SCORES[vuln.severity];
|
|
310
|
+
const confidenceFactor = vuln.confidence;
|
|
311
|
+
// Base risk from severity and confidence
|
|
312
|
+
const baseRisk = severityScore * confidenceFactor;
|
|
313
|
+
// Adjust for multiple detection sources (indicates higher certainty)
|
|
314
|
+
const sourceFactor = 'sources' in vuln
|
|
315
|
+
? Math.min(1.2, 1 + (vuln.sources.length - 1) * 0.1)
|
|
316
|
+
: 1;
|
|
317
|
+
return Math.min(100, Math.round(baseRisk * sourceFactor));
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Calculate overall risk score for all vulnerabilities
|
|
321
|
+
* @trace REQ-SEC2-REPORT-001
|
|
322
|
+
*/
|
|
323
|
+
calculateRiskScore(vulnerabilities) {
|
|
324
|
+
if (vulnerabilities.length === 0)
|
|
325
|
+
return 0;
|
|
326
|
+
// Weight critical/high vulnerabilities more heavily
|
|
327
|
+
let totalRisk = 0;
|
|
328
|
+
let weightSum = 0;
|
|
329
|
+
for (const vuln of vulnerabilities) {
|
|
330
|
+
const weight = SEVERITY_SCORES[vuln.severity] / 100;
|
|
331
|
+
const risk = this.calculateIndividualRiskScore(vuln);
|
|
332
|
+
totalRisk += risk * weight;
|
|
333
|
+
weightSum += weight;
|
|
334
|
+
}
|
|
335
|
+
// Normalize to 0-100
|
|
336
|
+
const avgWeightedRisk = weightSum > 0 ? totalRisk / weightSum : 0;
|
|
337
|
+
// Factor in the number of vulnerabilities
|
|
338
|
+
const countFactor = Math.min(1.5, 1 + vulnerabilities.length * 0.02);
|
|
339
|
+
return Math.min(100, Math.round(avgWeightedRisk * countFactor));
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Configure deduplication rules
|
|
343
|
+
*/
|
|
344
|
+
setDeduplicationRules(rules) {
|
|
345
|
+
this.deduplicationRules = rules;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Configure prioritization criteria
|
|
349
|
+
*/
|
|
350
|
+
setPrioritizationCriteria(criteria) {
|
|
351
|
+
this.prioritizationCriteria = criteria;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Merge two similar vulnerabilities into one
|
|
355
|
+
* @trace DES-SEC2-ORCH-003
|
|
356
|
+
*/
|
|
357
|
+
mergeSimilar(vuln1, vuln2) {
|
|
358
|
+
// Use the higher severity vulnerability as the base
|
|
359
|
+
const base = SEVERITY_SCORES[vuln1.severity] >= SEVERITY_SCORES[vuln2.severity]
|
|
360
|
+
? vuln1
|
|
361
|
+
: vuln2;
|
|
362
|
+
const other = base === vuln1 ? vuln2 : vuln1;
|
|
363
|
+
// Merge CWEs
|
|
364
|
+
const mergedCwes = Array.from(new Set([...base.cwes, ...other.cwes]));
|
|
365
|
+
// Use higher confidence
|
|
366
|
+
const mergedConfidence = Math.max(base.confidence, other.confidence);
|
|
367
|
+
// Expand location to cover both
|
|
368
|
+
const mergedLocation = {
|
|
369
|
+
file: base.location.file,
|
|
370
|
+
startLine: Math.min(base.location.startLine, other.location.startLine),
|
|
371
|
+
endLine: Math.max(base.location.endLine, other.location.endLine),
|
|
372
|
+
startColumn: Math.min(base.location.startColumn, other.location.startColumn),
|
|
373
|
+
endColumn: Math.max(base.location.endColumn, other.location.endColumn),
|
|
374
|
+
};
|
|
375
|
+
// Combine descriptions
|
|
376
|
+
const description = base.description === other.description
|
|
377
|
+
? base.description
|
|
378
|
+
: `${base.description} (merged with related finding)`;
|
|
379
|
+
return {
|
|
380
|
+
...base,
|
|
381
|
+
cwes: mergedCwes,
|
|
382
|
+
confidence: mergedConfidence,
|
|
383
|
+
location: mergedLocation,
|
|
384
|
+
description,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Create a default result aggregator instance
|
|
390
|
+
*/
|
|
391
|
+
export function createResultAggregator(rules, criteria) {
|
|
392
|
+
return new ResultAggregator(rules, criteria);
|
|
393
|
+
}
|
|
394
|
+
/**
|
|
395
|
+
* Merge similar vulnerabilities based on location overlap
|
|
396
|
+
*/
|
|
397
|
+
export function mergeSimilarByLocation(vulnerabilities, overlapThreshold = 0.5) {
|
|
398
|
+
// Sort by file and start line
|
|
399
|
+
const sorted = [...vulnerabilities].sort((a, b) => {
|
|
400
|
+
if (a.location.file !== b.location.file) {
|
|
401
|
+
return a.location.file.localeCompare(b.location.file);
|
|
402
|
+
}
|
|
403
|
+
return a.location.startLine - b.location.startLine;
|
|
404
|
+
});
|
|
405
|
+
const result = [];
|
|
406
|
+
let i = 0;
|
|
407
|
+
while (i < sorted.length) {
|
|
408
|
+
const current = sorted[i];
|
|
409
|
+
const overlapping = [current];
|
|
410
|
+
// Find all overlapping vulnerabilities
|
|
411
|
+
for (let j = i + 1; j < sorted.length; j++) {
|
|
412
|
+
const other = sorted[j];
|
|
413
|
+
if (other.location.file !== current.location.file)
|
|
414
|
+
break;
|
|
415
|
+
const overlap = calculateLineOverlap(current.location, other.location);
|
|
416
|
+
if (overlap >= overlapThreshold) {
|
|
417
|
+
overlapping.push(other);
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
if (overlapping.length === 1) {
|
|
424
|
+
result.push(current);
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
// Merge overlapping vulnerabilities
|
|
428
|
+
const merged = mergeOverlapping(overlapping);
|
|
429
|
+
result.push(merged);
|
|
430
|
+
}
|
|
431
|
+
i += overlapping.length;
|
|
432
|
+
}
|
|
433
|
+
return result;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Calculate line overlap ratio between two locations
|
|
437
|
+
*/
|
|
438
|
+
function calculateLineOverlap(loc1, loc2) {
|
|
439
|
+
const start = Math.max(loc1.startLine, loc2.startLine);
|
|
440
|
+
const end = Math.min(loc1.endLine, loc2.endLine);
|
|
441
|
+
if (start > end)
|
|
442
|
+
return 0;
|
|
443
|
+
const overlapLines = end - start + 1;
|
|
444
|
+
const totalLines = Math.max(loc1.endLine, loc2.endLine) - Math.min(loc1.startLine, loc2.startLine) + 1;
|
|
445
|
+
return overlapLines / totalLines;
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Merge overlapping vulnerabilities
|
|
449
|
+
*/
|
|
450
|
+
function mergeOverlapping(vulnerabilities) {
|
|
451
|
+
// Use the highest severity one as base
|
|
452
|
+
const sorted = vulnerabilities.sort((a, b) => SEVERITY_SCORES[b.severity] - SEVERITY_SCORES[a.severity]);
|
|
453
|
+
const base = sorted[0];
|
|
454
|
+
const mergedCwes = Array.from(new Set(vulnerabilities.flatMap(v => v.cwes)));
|
|
455
|
+
return {
|
|
456
|
+
...base,
|
|
457
|
+
cwes: mergedCwes,
|
|
458
|
+
confidence: Math.max(...vulnerabilities.map(v => v.confidence)),
|
|
459
|
+
description: `${base.description} (${vulnerabilities.length} related findings merged)`,
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=result-aggregator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-aggregator.js","sourceRoot":"","sources":["../../src/core/result-aggregator.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -36,7 +36,22 @@
|
|
|
36
36
|
export { type Vulnerability, type SourceLocation, type ScanResult, type SecurityRule, type Severity, type OWASPCategory, type TaintSource, type TaintSink, type TaintPath, type TaintResult, type SanitizerDefinition, BUILTIN_SANITIZERS, type Fix, type CodeEdit, type ImportEdit, type VerificationResult, type VerificationStatus, type ApplyResult, type FixBatch, type FixStrategy, type Secret, type SecretPattern, type SecretScanResult, BUILTIN_SECRET_PATTERNS, type AuditResult, type VulnerableDependency, type DependencyVulnerability, type SBOM, type SBOMEntry, type LicensePolicy, type SecurityConfig, type ReportConfig, type CacheConfig, type CIConfig, DEFAULT_CONFIG, } from './types/index.js';
|
|
37
37
|
export { VulnerabilityScanner, TaintAnalyzer, SecretDetector, DependencyAuditor, } from './analysis/index.js';
|
|
38
38
|
export { ASTParser, FileScanner, loadConfig, loadConfigSync, MemoryCache, FileCache, NoopCache, cacheKey, contentHash, type ICache, } from './infrastructure/index.js';
|
|
39
|
+
export { PipelineManager, createPipelineManager, createStandardPipeline, ResultAggregator, createResultAggregator, mergeSimilarByLocation, } from './core/index.js';
|
|
40
|
+
export { ImageScanner, createImageScanner, type ImageScanOptions, type ImageScanResult, type DockerfileAnalysis, type DockerfileIssue, type BestPracticeViolation, type ContainerVulnerability, } from './analyzers/container/image-scanner.js';
|
|
41
|
+
export { IaCChecker, createIaCChecker, type IaCCheckOptions, type IaCAnalysisResult, type IaCIssue, type IaCType, } from './analyzers/iac/iac-checker.js';
|
|
42
|
+
export { PromptInjectionDetector, createPromptInjectionDetector, type PromptInjectionOptions, type PromptInjectionResult, type PromptInjectionVulnerability, } from './analyzers/ai/prompt-injection-detector.js';
|
|
43
|
+
export { ZeroDayDetector, createZeroDayDetector, type ZeroDayOptions, type ZeroDayResult, type ZeroDayVulnerability, } from './analyzers/sast/zero-day-detector.js';
|
|
44
|
+
export { InterproceduralAnalyzer, createInterproceduralAnalyzer, type InterproceduralOptions, type InterproceduralResult, type CallGraphNode, type DataFlowPath, } from './analyzers/sast/interprocedural-analyzer.js';
|
|
45
|
+
export { ComplianceChecker, createComplianceChecker, type ComplianceStandard, type ComplianceRequirement, type ComplianceCheckResult, type ComplianceFinding, type ComplianceReport, type ComplianceSummary, type ComplianceCheckerOptions, } from './analyzers/compliance/compliance-checker.js';
|
|
46
|
+
export { DependencyScanner, createDependencyScanner, type DependencyScannerOptions, type DependencyInfo, type DependencyScanResult, type LicenseRisk, type SBOMComponent, type SBOMDocument, type OutdatedPackage, type DependencySummary, } from './analyzers/sca/dependency-scanner.js';
|
|
47
|
+
export { APISecurityAnalyzer, createAPISecurityAnalyzer, type APISecurityOptions, type APISecurityResult, type APISecurityIssue, type APISecurityCategory, type APIEndpoint, type OpenAPISpec, type SecurityCoverage, type APISecuritySummary, } from './analyzers/api/api-security-analyzer.js';
|
|
48
|
+
export { RealtimeMonitor, createRealtimeMonitor, createSecurityMonitor, type MonitorConfig, type MonitorEvent, type MonitorEventType, type MonitorState, type ScannerFunction, } from './analyzers/monitor/realtime-monitor.js';
|
|
49
|
+
export { SecurityDashboard, createSecurityDashboard, type DashboardConfig, type DashboardReport, type SecurityMetrics, type SecurityTrend, type SecurityRecommendation, type ExecutiveSummary, type TopVulnerability, type ComponentRisk, } from './analyzers/dashboard/security-dashboard.js';
|
|
50
|
+
export { NeuroSymbolicCore, createNeuroSymbolicCore, StubLLMAnalyzer, StubKnowledgeQuery, } from './intelligence/index.js';
|
|
39
51
|
export { SecurityService, createSecurityService, scanForVulnerabilities, runSecurityScan, type ScanOptions, type CompleteScanResult, FixGenerator, createFixGenerator, FixVerifier, createFixVerifier, type VerificationOptions, ReportGenerator, createReportGenerator, type ReportFormat, type CombinedResults, type ReportMetadata, } from './services/index.js';
|
|
40
52
|
export { createSecurityCLI, runCLI } from './cli/index.js';
|
|
41
53
|
export { SecurityMCPServer, startMCPServer, runMCPServer, SecurityToolHandler, createToolHandler, getToolSchemas, SECURITY_TOOLS, type ToolSchema, type ToolResult, } from './mcp/index.js';
|
|
54
|
+
export { CIIntegration, createCIIntegration, isCI, detectCIPlatform, type CIPlatform, type CIEnvironment, type CIIntegrationOptions, type CIScanResult, type GitHubAnnotation, type CISummary, ReportAggregator, createReportAggregator, type AggregatedReport, type AggregatedFinding, type TrendData, type ReportComparison, type ReportAggregatorOptions, GitHooksManager, createGitHooks, installPreCommitHook, installRecommendedHooks, type HookType, type GitHooksConfig, type HookResult, type InstallResult, VSCodeIntegration, createVSCodeIntegration, DiagnosticSeverity, type VSCodeIntegrationOptions, type Diagnostic, type CodeAction, type TreeItem, type HoverContent, type StatusBarItem, type Decoration, } from './integrations/index.js';
|
|
55
|
+
export { PolicyEngine, createPolicyEngine, getBuiltInPolicy, type SecurityPolicy, type PolicyRule, type PolicyCondition, type PolicyEvaluationResult, type PolicyEngineOptions, type PolicyAction, } from './policy/index.js';
|
|
56
|
+
export { AutoFixer, createAutoFixer, getBuiltInTemplates, createFixTemplate, type FixTemplate, type CodeTransformation, type ImportSpec, type FixApplicationResult, type FixGenerationOptions, type AutoFixerOptions, FixValidator, createFixValidator, quickValidate, type ValidationResult, type ValidationCheck, type SyntaxValidationResult, type RegressionTestResult, type SecurityRescanResult, type FixValidatorOptions, type CustomValidationRule, PatchGenerator, createPatchGenerator, generateQuickPatch, type Patch, type PatchFormat, type PatchFile, type PatchHunk, type PatchLine, type PatchMetadata, type PatchGenerationOptions, type PatchApplicationResult, type PatchGeneratorOptions, RemediationPlanner, createRemediationPlanner, quickCreatePlan, type RemediationPlan, type PlanStatus, type RemediationPhase, type PlannedFix, type FixStatus, type FixDependency, type DependencyType, type EffortEstimate, type Duration, type RiskReduction, type RiskLevel, type PlanMetadata, type PrioritizationStrategy, type RemediationPlannerOptions, type PlanningOptions, SecureCodeTransformer, createSecureCodeTransformer, quickTransform, getBuiltInTransformations, type TransformationDefinition, type TransformationCategory, type CodePattern, type PatternContext, type ReplacementPattern, type TransformImportSpec, type TransformationResult, type AppliedTransformation, type SecureCodeTransformerOptions, type TransformOptions, } from './remediation/index.js';
|
|
42
57
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAMH,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,aAAa,EAGlB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,mBAAmB,EACxB,kBAAkB,EAGlB,KAAK,GAAG,EACR,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,WAAW,EAGhB,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,uBAAuB,EAGvB,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,IAAI,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EAGlB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,cAAc,GACf,MAAM,kBAAkB,CAAC;AAM1B,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,SAAS,EACT,WAAW,EACX,UAAU,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,KAAK,MAAM,GACZ,MAAM,2BAA2B,CAAC;AAMnC,OAAO,EAEL,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,kBAAkB,EAGvB,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,KAAK,mBAAmB,EAGxB,eAAe,EACf,qBAAqB,EACrB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAM3D,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,KAAK,UAAU,EACf,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|