guardrail-cli 1.0.6 → 2.0.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 (144) hide show
  1. package/README.md +483 -10
  2. package/dist/commands/baseline.d.ts +7 -0
  3. package/dist/commands/baseline.d.ts.map +1 -0
  4. package/dist/commands/baseline.js +79 -0
  5. package/dist/commands/baseline.js.map +1 -0
  6. package/dist/commands/cache.d.ts +13 -0
  7. package/dist/commands/cache.d.ts.map +1 -0
  8. package/dist/commands/cache.js +165 -0
  9. package/dist/commands/cache.js.map +1 -0
  10. package/dist/commands/evidence.d.ts +45 -0
  11. package/dist/commands/evidence.d.ts.map +1 -0
  12. package/dist/commands/evidence.js +197 -0
  13. package/dist/commands/evidence.js.map +1 -0
  14. package/dist/commands/index.d.ts +8 -0
  15. package/dist/commands/index.d.ts.map +1 -0
  16. package/dist/commands/index.js +15 -0
  17. package/dist/commands/index.js.map +1 -0
  18. package/dist/commands/scan-secrets.d.ts +47 -0
  19. package/dist/commands/scan-secrets.d.ts.map +1 -0
  20. package/dist/commands/scan-secrets.js +225 -0
  21. package/dist/commands/scan-secrets.js.map +1 -0
  22. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
  23. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
  24. package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
  25. package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
  26. package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
  27. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
  28. package/dist/commands/scan-vulnerabilities-osv.js +716 -0
  29. package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
  30. package/dist/commands/scan-vulnerabilities.d.ts +32 -0
  31. package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
  32. package/dist/commands/scan-vulnerabilities.js +283 -0
  33. package/dist/commands/scan-vulnerabilities.js.map +1 -0
  34. package/dist/commands/secrets-allowlist.d.ts +7 -0
  35. package/dist/commands/secrets-allowlist.d.ts.map +1 -0
  36. package/dist/commands/secrets-allowlist.js +85 -0
  37. package/dist/commands/secrets-allowlist.js.map +1 -0
  38. package/dist/fix/applicator.d.ts +44 -0
  39. package/dist/fix/applicator.d.ts.map +1 -0
  40. package/dist/fix/applicator.js +144 -0
  41. package/dist/fix/applicator.js.map +1 -0
  42. package/dist/fix/backup.d.ts +38 -0
  43. package/dist/fix/backup.d.ts.map +1 -0
  44. package/dist/fix/backup.js +154 -0
  45. package/dist/fix/backup.js.map +1 -0
  46. package/dist/fix/engine.d.ts +55 -0
  47. package/dist/fix/engine.d.ts.map +1 -0
  48. package/dist/fix/engine.js +285 -0
  49. package/dist/fix/engine.js.map +1 -0
  50. package/dist/fix/index.d.ts +5 -0
  51. package/dist/fix/index.d.ts.map +1 -0
  52. package/dist/fix/index.js +12 -0
  53. package/dist/fix/index.js.map +1 -0
  54. package/dist/fix/interactive.d.ts +22 -0
  55. package/dist/fix/interactive.d.ts.map +1 -0
  56. package/dist/fix/interactive.js +172 -0
  57. package/dist/fix/interactive.js.map +1 -0
  58. package/dist/formatters/index.d.ts +6 -0
  59. package/dist/formatters/index.d.ts.map +1 -0
  60. package/dist/formatters/index.js +11 -0
  61. package/dist/formatters/index.js.map +1 -0
  62. package/dist/formatters/sarif-enhanced.d.ts +78 -0
  63. package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
  64. package/dist/formatters/sarif-enhanced.js +144 -0
  65. package/dist/formatters/sarif-enhanced.js.map +1 -0
  66. package/dist/formatters/sarif-v2.d.ts +121 -0
  67. package/dist/formatters/sarif-v2.d.ts.map +1 -0
  68. package/dist/formatters/sarif-v2.js +356 -0
  69. package/dist/formatters/sarif-v2.js.map +1 -0
  70. package/dist/formatters/sarif.d.ts +72 -0
  71. package/dist/formatters/sarif.d.ts.map +1 -0
  72. package/dist/formatters/sarif.js +146 -0
  73. package/dist/formatters/sarif.js.map +1 -0
  74. package/dist/index.js +3362 -1397
  75. package/dist/index.js.map +1 -1
  76. package/dist/init/ci-generator.d.ts +18 -0
  77. package/dist/init/ci-generator.d.ts.map +1 -0
  78. package/dist/init/ci-generator.js +251 -0
  79. package/dist/init/ci-generator.js.map +1 -0
  80. package/dist/init/detect-framework.d.ts +15 -0
  81. package/dist/init/detect-framework.d.ts.map +1 -0
  82. package/dist/init/detect-framework.js +299 -0
  83. package/dist/init/detect-framework.js.map +1 -0
  84. package/dist/init/hooks-installer.d.ts +22 -0
  85. package/dist/init/hooks-installer.d.ts.map +1 -0
  86. package/dist/init/hooks-installer.js +302 -0
  87. package/dist/init/hooks-installer.js.map +1 -0
  88. package/dist/init/index.d.ts +8 -0
  89. package/dist/init/index.d.ts.map +1 -0
  90. package/dist/init/index.js +22 -0
  91. package/dist/init/index.js.map +1 -0
  92. package/dist/init/templates.d.ts +401 -0
  93. package/dist/init/templates.d.ts.map +1 -0
  94. package/dist/init/templates.js +240 -0
  95. package/dist/init/templates.js.map +1 -0
  96. package/dist/reality/reality-runner.d.ts +76 -0
  97. package/dist/reality/reality-runner.d.ts.map +1 -0
  98. package/dist/reality/reality-runner.js +454 -0
  99. package/dist/reality/reality-runner.js.map +1 -0
  100. package/dist/runtime/auth-utils.d.ts +43 -0
  101. package/dist/runtime/auth-utils.d.ts.map +1 -0
  102. package/dist/runtime/auth-utils.js +126 -0
  103. package/dist/runtime/auth-utils.js.map +1 -0
  104. package/dist/runtime/client.d.ts +74 -0
  105. package/dist/runtime/client.d.ts.map +1 -0
  106. package/dist/runtime/client.js +222 -0
  107. package/dist/runtime/client.js.map +1 -0
  108. package/dist/runtime/creds.d.ts +48 -0
  109. package/dist/runtime/creds.d.ts.map +1 -0
  110. package/dist/runtime/creds.js +245 -0
  111. package/dist/runtime/creds.js.map +1 -0
  112. package/dist/runtime/exit-codes.d.ts +47 -0
  113. package/dist/runtime/exit-codes.d.ts.map +1 -0
  114. package/dist/runtime/exit-codes.js +91 -0
  115. package/dist/runtime/exit-codes.js.map +1 -0
  116. package/dist/runtime/index.d.ts +9 -0
  117. package/dist/runtime/index.d.ts.map +1 -0
  118. package/dist/runtime/index.js +25 -0
  119. package/dist/runtime/index.js.map +1 -0
  120. package/dist/runtime/semver.d.ts +37 -0
  121. package/dist/runtime/semver.d.ts.map +1 -0
  122. package/dist/runtime/semver.js +110 -0
  123. package/dist/runtime/semver.js.map +1 -0
  124. package/dist/scanner/baseline.d.ts +52 -0
  125. package/dist/scanner/baseline.d.ts.map +1 -0
  126. package/dist/scanner/baseline.js +85 -0
  127. package/dist/scanner/baseline.js.map +1 -0
  128. package/dist/scanner/incremental.d.ts +30 -0
  129. package/dist/scanner/incremental.d.ts.map +1 -0
  130. package/dist/scanner/incremental.js +82 -0
  131. package/dist/scanner/incremental.js.map +1 -0
  132. package/dist/scanner/parallel.d.ts +43 -0
  133. package/dist/scanner/parallel.d.ts.map +1 -0
  134. package/dist/scanner/parallel.js +99 -0
  135. package/dist/scanner/parallel.js.map +1 -0
  136. package/dist/ui/frame.d.ts +68 -0
  137. package/dist/ui/frame.d.ts.map +1 -0
  138. package/dist/ui/frame.js +165 -0
  139. package/dist/ui/frame.js.map +1 -0
  140. package/dist/ui/index.d.ts +5 -0
  141. package/dist/ui/index.d.ts.map +1 -0
  142. package/dist/ui/index.js +16 -0
  143. package/dist/ui/index.js.map +1 -0
  144. package/package.json +42 -9
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /**
3
+ * Enhanced SARIF (Static Analysis Results Interchange Format) Output
4
+ * For vulnerability scanning with OSV integration
5
+ *
6
+ * Includes:
7
+ * - CVSS scores and vectors
8
+ * - Remediation paths
9
+ * - Direct vs transitive classification
10
+ * - Multiple vulnerability sources
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.toSarifVulnerabilitiesEnhanced = toSarifVulnerabilitiesEnhanced;
14
+ function severityToLevel(severity) {
15
+ switch (severity) {
16
+ case 'critical':
17
+ case 'high':
18
+ return 'error';
19
+ case 'medium':
20
+ return 'warning';
21
+ case 'low':
22
+ return 'note';
23
+ default:
24
+ return 'warning';
25
+ }
26
+ }
27
+ function getVersion() {
28
+ try {
29
+ const pkg = require('../../package.json');
30
+ return pkg.version || '1.0.0';
31
+ }
32
+ catch {
33
+ return '1.0.0';
34
+ }
35
+ }
36
+ function toSarifVulnerabilitiesEnhanced(results) {
37
+ const version = getVersion();
38
+ const ruleMap = new Map();
39
+ // Build rules from unique vulnerability IDs
40
+ for (const finding of results.findings) {
41
+ for (const vuln of finding.vulnerabilities) {
42
+ if (!ruleMap.has(vuln.id)) {
43
+ ruleMap.set(vuln.id, {
44
+ id: vuln.id,
45
+ name: vuln.title,
46
+ shortDescription: { text: vuln.title },
47
+ fullDescription: { text: vuln.description || vuln.title },
48
+ helpUri: vuln.references[0] || 'https://osv.dev',
49
+ defaultConfiguration: { level: severityToLevel(vuln.severity) },
50
+ properties: {
51
+ severity: vuln.severity,
52
+ cvssScore: vuln.cvssScore,
53
+ cvssVector: vuln.cvssVector,
54
+ cwe: vuln.cwe,
55
+ aliases: vuln.aliases,
56
+ source: vuln.source,
57
+ },
58
+ });
59
+ }
60
+ }
61
+ }
62
+ const sarifResults = [];
63
+ for (const finding of results.findings) {
64
+ for (const vuln of finding.vulnerabilities) {
65
+ const remediationText = finding.remediationPath
66
+ ? `${finding.remediationPath.description}${finding.remediationPath.breakingChange ? ' (Breaking change)' : ''}`
67
+ : `Upgrade to ${finding.recommendedVersion || 'latest'}`;
68
+ sarifResults.push({
69
+ ruleId: vuln.id,
70
+ level: severityToLevel(vuln.severity),
71
+ message: {
72
+ text: `${vuln.title} in ${finding.package}@${finding.version}. ${remediationText}`,
73
+ },
74
+ locations: [{
75
+ physicalLocation: {
76
+ artifactLocation: {
77
+ uri: getManifestFile(results.ecosystem),
78
+ uriBaseId: '%SRCROOT%',
79
+ },
80
+ region: { startLine: 1 },
81
+ },
82
+ }],
83
+ fingerprints: {
84
+ 'guardrail/v1': `${vuln.id}:${finding.package}:${finding.version}`,
85
+ 'osv/id': vuln.id,
86
+ },
87
+ properties: {
88
+ package: finding.package,
89
+ version: finding.version,
90
+ ecosystem: results.ecosystem,
91
+ isDirect: finding.isDirect,
92
+ severity: vuln.severity,
93
+ cvssScore: vuln.cvssScore,
94
+ cvssVector: vuln.cvssVector,
95
+ cwe: vuln.cwe,
96
+ aliases: vuln.aliases,
97
+ source: vuln.source,
98
+ affectedVersions: vuln.affectedVersions,
99
+ patchedVersions: vuln.patchedVersions,
100
+ references: vuln.references,
101
+ publishedAt: vuln.publishedAt,
102
+ updatedAt: vuln.updatedAt,
103
+ remediationPath: finding.remediationPath,
104
+ recommendedVersion: finding.recommendedVersion,
105
+ },
106
+ });
107
+ }
108
+ }
109
+ return {
110
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',
111
+ version: '2.1.0',
112
+ runs: [{
113
+ tool: {
114
+ driver: {
115
+ name: 'guardrail-cli',
116
+ version,
117
+ informationUri: 'https://guardrail.dev',
118
+ rules: Array.from(ruleMap.values()),
119
+ },
120
+ },
121
+ results: sarifResults,
122
+ invocations: [{
123
+ executionSuccessful: true,
124
+ startTimeUtc: new Date().toISOString(),
125
+ workingDirectory: { uri: results.projectPath?.replace(/\\/g, '/') || '.' },
126
+ }],
127
+ }],
128
+ };
129
+ }
130
+ function getManifestFile(ecosystem) {
131
+ switch (ecosystem) {
132
+ case 'npm':
133
+ return 'package.json';
134
+ case 'PyPI':
135
+ return 'requirements.txt';
136
+ case 'RubyGems':
137
+ return 'Gemfile';
138
+ case 'Go':
139
+ return 'go.mod';
140
+ default:
141
+ return 'package.json';
142
+ }
143
+ }
144
+ //# sourceMappingURL=sarif-enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif-enhanced.js","sourceRoot":"","sources":["../../src/formatters/sarif-enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * SARIF v2.1.0 Output - Enterprise-grade implementation
3
+ * Compliant with GitHub Code Scanning and Azure DevOps
4
+ * https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
5
+ */
6
+ export interface SarifLog {
7
+ $schema: string;
8
+ version: string;
9
+ runs: SarifRun[];
10
+ }
11
+ export interface SarifRun {
12
+ tool: SarifTool;
13
+ results: SarifResult[];
14
+ invocations?: SarifInvocation[];
15
+ properties?: Record<string, any>;
16
+ }
17
+ export interface SarifTool {
18
+ driver: SarifToolComponent;
19
+ }
20
+ export interface SarifToolComponent {
21
+ name: string;
22
+ version: string;
23
+ informationUri?: string;
24
+ rules?: SarifReportingDescriptor[];
25
+ organization?: string;
26
+ semanticVersion?: string;
27
+ }
28
+ export interface SarifReportingDescriptor {
29
+ id: string;
30
+ name?: string;
31
+ shortDescription?: SarifMultiformatMessageString;
32
+ fullDescription?: SarifMultiformatMessageString;
33
+ help?: SarifMultiformatMessageString;
34
+ helpUri?: string;
35
+ defaultConfiguration?: SarifReportingConfiguration;
36
+ properties?: Record<string, any>;
37
+ }
38
+ export interface SarifMultiformatMessageString {
39
+ text: string;
40
+ markdown?: string;
41
+ }
42
+ export interface SarifReportingConfiguration {
43
+ level: 'error' | 'warning' | 'note' | 'none';
44
+ enabled?: boolean;
45
+ }
46
+ export interface SarifResult {
47
+ ruleId: string;
48
+ ruleIndex?: number;
49
+ level: 'error' | 'warning' | 'note' | 'none';
50
+ message: SarifMessage;
51
+ locations?: SarifLocation[];
52
+ partialFingerprints?: Record<string, string>;
53
+ fingerprints?: Record<string, string>;
54
+ fixes?: SarifFix[];
55
+ properties?: Record<string, any>;
56
+ }
57
+ export interface SarifMessage {
58
+ text: string;
59
+ markdown?: string;
60
+ }
61
+ export interface SarifLocation {
62
+ physicalLocation?: SarifPhysicalLocation;
63
+ logicalLocations?: SarifLogicalLocation[];
64
+ }
65
+ export interface SarifPhysicalLocation {
66
+ artifactLocation: SarifArtifactLocation;
67
+ region?: SarifRegion;
68
+ contextRegion?: SarifRegion;
69
+ }
70
+ export interface SarifArtifactLocation {
71
+ uri: string;
72
+ uriBaseId?: string;
73
+ }
74
+ export interface SarifRegion {
75
+ startLine?: number;
76
+ startColumn?: number;
77
+ endLine?: number;
78
+ endColumn?: number;
79
+ snippet?: SarifArtifactContent;
80
+ }
81
+ export interface SarifArtifactContent {
82
+ text?: string;
83
+ }
84
+ export interface SarifLogicalLocation {
85
+ name?: string;
86
+ fullyQualifiedName?: string;
87
+ kind?: string;
88
+ }
89
+ export interface SarifFix {
90
+ description?: SarifMessage;
91
+ artifactChanges: SarifArtifactChange[];
92
+ }
93
+ export interface SarifArtifactChange {
94
+ artifactLocation: SarifArtifactLocation;
95
+ replacements: SarifReplacement[];
96
+ }
97
+ export interface SarifReplacement {
98
+ deletedRegion: SarifRegion;
99
+ insertedContent?: SarifArtifactContent;
100
+ }
101
+ export interface SarifInvocation {
102
+ executionSuccessful: boolean;
103
+ commandLine?: string;
104
+ startTimeUtc?: string;
105
+ endTimeUtc?: string;
106
+ workingDirectory?: SarifArtifactLocation;
107
+ exitCode?: number;
108
+ }
109
+ /**
110
+ * Convert secrets scan results to SARIF v2.1.0
111
+ */
112
+ export declare function secretsToSarif(results: any): SarifLog;
113
+ /**
114
+ * Convert vulnerability scan results to SARIF v2.1.0
115
+ */
116
+ export declare function vulnerabilitiesToSarif(results: any): SarifLog;
117
+ /**
118
+ * Convert combined scan results to SARIF v2.1.0
119
+ */
120
+ export declare function combinedToSarif(results: any): SarifLog;
121
+ //# sourceMappingURL=sarif-v2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif-v2.d.ts","sourceRoot":"","sources":["../../src/formatters/sarif-v2.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,356 @@
1
+ "use strict";
2
+ /**
3
+ * SARIF v2.1.0 Output - Enterprise-grade implementation
4
+ * Compliant with GitHub Code Scanning and Azure DevOps
5
+ * https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.secretsToSarif = secretsToSarif;
9
+ exports.vulnerabilitiesToSarif = vulnerabilitiesToSarif;
10
+ exports.combinedToSarif = combinedToSarif;
11
+ const crypto_1 = require("crypto");
12
+ /**
13
+ * Convert severity to SARIF level
14
+ */
15
+ function severityToLevel(severity) {
16
+ switch (severity.toLowerCase()) {
17
+ case 'critical':
18
+ case 'high':
19
+ return 'error';
20
+ case 'medium':
21
+ return 'warning';
22
+ case 'low':
23
+ case 'info':
24
+ return 'note';
25
+ default:
26
+ return 'warning';
27
+ }
28
+ }
29
+ /**
30
+ * Generate stable fingerprint for a finding
31
+ */
32
+ function generateFingerprint(finding) {
33
+ const data = `${finding.type || finding.category}:${finding.file}:${finding.line}:${finding.title || finding.match}`;
34
+ return (0, crypto_1.createHash)('sha256').update(data).digest('hex').substring(0, 16);
35
+ }
36
+ /**
37
+ * Get package version
38
+ */
39
+ function getVersion() {
40
+ try {
41
+ const pkg = require('../../package.json');
42
+ return pkg.version || '1.0.0';
43
+ }
44
+ catch {
45
+ return '1.0.0';
46
+ }
47
+ }
48
+ /**
49
+ * Convert secrets scan results to SARIF v2.1.0
50
+ */
51
+ function secretsToSarif(results) {
52
+ const version = getVersion();
53
+ const ruleMap = new Map();
54
+ const ruleIndexMap = new Map();
55
+ // Build rules from unique finding types
56
+ for (const finding of results.findings || []) {
57
+ const ruleId = finding.type || 'secret-detected';
58
+ if (!ruleMap.has(ruleId)) {
59
+ const index = ruleMap.size;
60
+ ruleIndexMap.set(ruleId, index);
61
+ ruleMap.set(ruleId, {
62
+ id: ruleId,
63
+ name: ruleId.replace(/_/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()),
64
+ shortDescription: {
65
+ text: `Detected ${ruleId.replace(/_/g, ' ')}`,
66
+ },
67
+ fullDescription: {
68
+ text: finding.recommendation?.reason || `Potential ${ruleId} detected in source code`,
69
+ },
70
+ help: {
71
+ text: finding.recommendation?.remediation || 'Move secrets to environment variables or secure vault',
72
+ markdown: `## Remediation\n\n${finding.recommendation?.remediation || 'Move secrets to environment variables or secure vault'}\n\n[Learn more](https://guardrail.dev/docs/secrets)`,
73
+ },
74
+ helpUri: 'https://guardrail.dev/docs/secrets',
75
+ defaultConfiguration: {
76
+ level: severityToLevel(finding.risk || 'high'),
77
+ enabled: true,
78
+ },
79
+ properties: {
80
+ tags: ['security', 'secrets', finding.risk || 'high'],
81
+ precision: 'high',
82
+ },
83
+ });
84
+ }
85
+ }
86
+ const sarifResults = (results.findings || []).map((f) => {
87
+ const ruleId = f.type || 'secret-detected';
88
+ return {
89
+ ruleId,
90
+ ruleIndex: ruleIndexMap.get(ruleId),
91
+ level: severityToLevel(f.risk || 'high'),
92
+ message: {
93
+ text: `${f.type}: ${f.match}${f.isTest ? ' (in test file)' : ''}`,
94
+ },
95
+ locations: [{
96
+ physicalLocation: {
97
+ artifactLocation: {
98
+ uri: f.file.replace(/\\/g, '/'),
99
+ uriBaseId: '%SRCROOT%',
100
+ },
101
+ region: {
102
+ startLine: f.line,
103
+ startColumn: 1,
104
+ snippet: {
105
+ text: f.match,
106
+ },
107
+ },
108
+ },
109
+ }],
110
+ partialFingerprints: {
111
+ 'guardrail/v1': generateFingerprint(f),
112
+ },
113
+ fingerprints: {
114
+ 'guardrail/v1': `${f.type}:${f.file}:${f.line}`,
115
+ },
116
+ properties: {
117
+ confidence: f.confidence,
118
+ entropy: f.entropy,
119
+ isTest: f.isTest,
120
+ risk: f.risk,
121
+ },
122
+ fixes: f.recommendation?.remediation ? [{
123
+ description: {
124
+ text: f.recommendation.remediation,
125
+ },
126
+ artifactChanges: [{
127
+ artifactLocation: {
128
+ uri: f.file.replace(/\\/g, '/'),
129
+ uriBaseId: '%SRCROOT%',
130
+ },
131
+ replacements: [{
132
+ deletedRegion: {
133
+ startLine: f.line,
134
+ startColumn: 1,
135
+ },
136
+ insertedContent: {
137
+ text: '// TODO: Move to environment variable',
138
+ },
139
+ }],
140
+ }],
141
+ }] : undefined,
142
+ };
143
+ });
144
+ return {
145
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',
146
+ version: '2.1.0',
147
+ runs: [{
148
+ tool: {
149
+ driver: {
150
+ name: 'Guardrail',
151
+ version,
152
+ semanticVersion: version,
153
+ informationUri: 'https://guardrail.dev',
154
+ organization: 'Guardrail Security',
155
+ rules: Array.from(ruleMap.values()),
156
+ },
157
+ },
158
+ results: sarifResults,
159
+ invocations: [{
160
+ executionSuccessful: true,
161
+ startTimeUtc: new Date().toISOString(),
162
+ endTimeUtc: new Date().toISOString(),
163
+ workingDirectory: {
164
+ uri: results.projectPath?.replace(/\\/g, '/') || '.',
165
+ },
166
+ exitCode: 0,
167
+ }],
168
+ properties: {
169
+ scanType: 'secrets',
170
+ filesScanned: results.filesScanned,
171
+ patterns: results.patterns,
172
+ },
173
+ }],
174
+ };
175
+ }
176
+ /**
177
+ * Convert vulnerability scan results to SARIF v2.1.0
178
+ */
179
+ function vulnerabilitiesToSarif(results) {
180
+ const version = getVersion();
181
+ const rules = [{
182
+ id: 'vulnerable-dependency',
183
+ name: 'Vulnerable Dependency',
184
+ shortDescription: {
185
+ text: 'Known vulnerability in dependency',
186
+ },
187
+ fullDescription: {
188
+ text: 'A dependency with a known security vulnerability was detected. Update to the fixed version to remediate.',
189
+ },
190
+ help: {
191
+ text: 'Update vulnerable dependencies to their fixed versions',
192
+ markdown: '## Remediation\n\nUpdate the vulnerable dependency to the version specified in the fix recommendation.\n\n[Learn more](https://guardrail.dev/docs/vulnerabilities)',
193
+ },
194
+ helpUri: 'https://guardrail.dev/docs/vulnerabilities',
195
+ defaultConfiguration: {
196
+ level: 'error',
197
+ enabled: true,
198
+ },
199
+ properties: {
200
+ tags: ['security', 'vulnerability', 'dependencies'],
201
+ precision: 'very-high',
202
+ },
203
+ }];
204
+ const sarifResults = (results.findings || []).map((f) => ({
205
+ ruleId: 'vulnerable-dependency',
206
+ ruleIndex: 0,
207
+ level: severityToLevel(f.severity),
208
+ message: {
209
+ text: `${f.cve}: ${f.title} in ${f.package}@${f.version}`,
210
+ markdown: `**${f.cve}**: ${f.title}\n\n**Package**: \`${f.package}@${f.version}\`\n**Fix**: Upgrade to \`${f.fixedIn}\``,
211
+ },
212
+ locations: [{
213
+ physicalLocation: {
214
+ artifactLocation: {
215
+ uri: 'package.json',
216
+ uriBaseId: '%SRCROOT%',
217
+ },
218
+ region: {
219
+ startLine: 1,
220
+ },
221
+ },
222
+ }],
223
+ partialFingerprints: {
224
+ 'guardrail/v1': generateFingerprint(f),
225
+ },
226
+ fingerprints: {
227
+ 'guardrail/v1': `${f.cve}:${f.package}:${f.version}`,
228
+ },
229
+ properties: {
230
+ cve: f.cve,
231
+ package: f.package,
232
+ version: f.version,
233
+ fixedIn: f.fixedIn,
234
+ severity: f.severity,
235
+ },
236
+ fixes: [{
237
+ description: {
238
+ text: `Upgrade ${f.package} to ${f.fixedIn}`,
239
+ },
240
+ artifactChanges: [{
241
+ artifactLocation: {
242
+ uri: 'package.json',
243
+ uriBaseId: '%SRCROOT%',
244
+ },
245
+ replacements: [{
246
+ deletedRegion: {
247
+ startLine: 1,
248
+ },
249
+ insertedContent: {
250
+ text: `"${f.package}": "${f.fixedIn}"`,
251
+ },
252
+ }],
253
+ }],
254
+ }],
255
+ }));
256
+ return {
257
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',
258
+ version: '2.1.0',
259
+ runs: [{
260
+ tool: {
261
+ driver: {
262
+ name: 'Guardrail',
263
+ version,
264
+ semanticVersion: version,
265
+ informationUri: 'https://guardrail.dev',
266
+ organization: 'Guardrail Security',
267
+ rules,
268
+ },
269
+ },
270
+ results: sarifResults,
271
+ invocations: [{
272
+ executionSuccessful: true,
273
+ startTimeUtc: new Date().toISOString(),
274
+ endTimeUtc: new Date().toISOString(),
275
+ workingDirectory: {
276
+ uri: results.projectPath?.replace(/\\/g, '/') || '.',
277
+ },
278
+ exitCode: 0,
279
+ }],
280
+ properties: {
281
+ scanType: 'vulnerabilities',
282
+ packagesScanned: results.packagesScanned,
283
+ auditSource: results.auditSource,
284
+ },
285
+ }],
286
+ };
287
+ }
288
+ /**
289
+ * Convert combined scan results to SARIF v2.1.0
290
+ */
291
+ function combinedToSarif(results) {
292
+ const version = getVersion();
293
+ const allRules = [];
294
+ const allResults = [];
295
+ const ruleIndexMap = new Map();
296
+ // Add secrets rules and results
297
+ if (results.secrets) {
298
+ const secretsSarif = secretsToSarif(results.secrets);
299
+ const secretsRun = secretsSarif.runs[0];
300
+ for (const rule of secretsRun.tool.driver.rules || []) {
301
+ ruleIndexMap.set(rule.id, allRules.length);
302
+ allRules.push(rule);
303
+ }
304
+ for (const result of secretsRun.results) {
305
+ allResults.push({
306
+ ...result,
307
+ ruleIndex: ruleIndexMap.get(result.ruleId),
308
+ });
309
+ }
310
+ }
311
+ // Add vulnerability rules and results
312
+ if (results.vulnerabilities) {
313
+ const vulnSarif = vulnerabilitiesToSarif(results.vulnerabilities);
314
+ const vulnRun = vulnSarif.runs[0];
315
+ for (const rule of vulnRun.tool.driver.rules || []) {
316
+ if (!ruleIndexMap.has(rule.id)) {
317
+ ruleIndexMap.set(rule.id, allRules.length);
318
+ allRules.push(rule);
319
+ }
320
+ }
321
+ for (const result of vulnRun.results) {
322
+ allResults.push({
323
+ ...result,
324
+ ruleIndex: ruleIndexMap.get(result.ruleId),
325
+ });
326
+ }
327
+ }
328
+ return {
329
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json',
330
+ version: '2.1.0',
331
+ runs: [{
332
+ tool: {
333
+ driver: {
334
+ name: 'Guardrail',
335
+ version,
336
+ semanticVersion: version,
337
+ informationUri: 'https://guardrail.dev',
338
+ organization: 'Guardrail Security',
339
+ rules: allRules,
340
+ },
341
+ },
342
+ results: allResults,
343
+ invocations: [{
344
+ executionSuccessful: true,
345
+ startTimeUtc: new Date().toISOString(),
346
+ endTimeUtc: new Date().toISOString(),
347
+ exitCode: 0,
348
+ }],
349
+ properties: {
350
+ scanType: 'combined',
351
+ duration: results.duration,
352
+ },
353
+ }],
354
+ };
355
+ }
356
+ //# sourceMappingURL=sarif-v2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sarif-v2.js","sourceRoot":"","sources":["../../src/formatters/sarif-v2.ts"],"names":[],"mappings":"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"}