@datahogo/core 0.1.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 (153) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +17 -0
  3. package/dist/engines/config.d.ts +3 -0
  4. package/dist/engines/config.d.ts.map +1 -0
  5. package/dist/engines/config.js +433 -0
  6. package/dist/engines/config.js.map +1 -0
  7. package/dist/engines/dast.d.ts +3 -0
  8. package/dist/engines/dast.d.ts.map +1 -0
  9. package/dist/engines/dast.js +167 -0
  10. package/dist/engines/dast.js.map +1 -0
  11. package/dist/engines/db-rules.d.ts +3 -0
  12. package/dist/engines/db-rules.d.ts.map +1 -0
  13. package/dist/engines/db-rules.js +166 -0
  14. package/dist/engines/db-rules.js.map +1 -0
  15. package/dist/engines/dependencies.d.ts +3 -0
  16. package/dist/engines/dependencies.d.ts.map +1 -0
  17. package/dist/engines/dependencies.js +167 -0
  18. package/dist/engines/dependencies.js.map +1 -0
  19. package/dist/engines/github-actions.d.ts +3 -0
  20. package/dist/engines/github-actions.d.ts.map +1 -0
  21. package/dist/engines/github-actions.js +215 -0
  22. package/dist/engines/github-actions.js.map +1 -0
  23. package/dist/engines/gitleaks.d.ts +3 -0
  24. package/dist/engines/gitleaks.d.ts.map +1 -0
  25. package/dist/engines/gitleaks.js +107 -0
  26. package/dist/engines/gitleaks.js.map +1 -0
  27. package/dist/engines/npm-audit.d.ts +3 -0
  28. package/dist/engines/npm-audit.d.ts.map +1 -0
  29. package/dist/engines/npm-audit.js +113 -0
  30. package/dist/engines/npm-audit.js.map +1 -0
  31. package/dist/engines/patterns.d.ts +3 -0
  32. package/dist/engines/patterns.d.ts.map +1 -0
  33. package/dist/engines/patterns.js +1330 -0
  34. package/dist/engines/patterns.js.map +1 -0
  35. package/dist/engines/secrets.d.ts +4 -0
  36. package/dist/engines/secrets.d.ts.map +1 -0
  37. package/dist/engines/secrets.js +260 -0
  38. package/dist/engines/secrets.js.map +1 -0
  39. package/dist/engines/semgrep.d.ts +3 -0
  40. package/dist/engines/semgrep.d.ts.map +1 -0
  41. package/dist/engines/semgrep.js +173 -0
  42. package/dist/engines/semgrep.js.map +1 -0
  43. package/dist/engines/types.d.ts +30 -0
  44. package/dist/engines/types.d.ts.map +1 -0
  45. package/dist/engines/types.js +3 -0
  46. package/dist/engines/types.js.map +1 -0
  47. package/dist/engines/url-scanner.d.ts +3 -0
  48. package/dist/engines/url-scanner.d.ts.map +1 -0
  49. package/dist/engines/url-scanner.js +469 -0
  50. package/dist/engines/url-scanner.js.map +1 -0
  51. package/dist/index.d.ts +8 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +8 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/orchestrator.d.ts +32 -0
  56. package/dist/orchestrator.d.ts.map +1 -0
  57. package/dist/orchestrator.js +237 -0
  58. package/dist/orchestrator.js.map +1 -0
  59. package/dist/rules/.gitkeep +0 -0
  60. package/dist/rules/ai-llm-security.yaml +199 -0
  61. package/dist/rules/api-security.yaml +489 -0
  62. package/dist/rules/auth-patterns.yaml +406 -0
  63. package/dist/rules/crypto-patterns.yaml +227 -0
  64. package/dist/rules/database-cloud-security.yaml +169 -0
  65. package/dist/rules/general-security.yaml +588 -0
  66. package/dist/rules/injection-patterns.yaml +318 -0
  67. package/dist/rules/nextjs-security.yaml +532 -0
  68. package/dist/rules/node-security.yaml +380 -0
  69. package/dist/rules/rules/.gitkeep +0 -0
  70. package/dist/rules/rules/ai-llm-security.yaml +199 -0
  71. package/dist/rules/rules/api-security.yaml +489 -0
  72. package/dist/rules/rules/auth-patterns.yaml +406 -0
  73. package/dist/rules/rules/crypto-patterns.yaml +227 -0
  74. package/dist/rules/rules/database-cloud-security.yaml +169 -0
  75. package/dist/rules/rules/general-security.yaml +588 -0
  76. package/dist/rules/rules/injection-patterns.yaml +318 -0
  77. package/dist/rules/rules/nextjs-security.yaml +532 -0
  78. package/dist/rules/rules/node-security.yaml +380 -0
  79. package/dist/rules/rules/supabase-security.yaml +387 -0
  80. package/dist/rules/supabase-security.yaml +387 -0
  81. package/dist/scanning/agents/csharp-agent.d.ts +12 -0
  82. package/dist/scanning/agents/csharp-agent.d.ts.map +1 -0
  83. package/dist/scanning/agents/csharp-agent.js +592 -0
  84. package/dist/scanning/agents/csharp-agent.js.map +1 -0
  85. package/dist/scanning/agents/go-agent.d.ts +14 -0
  86. package/dist/scanning/agents/go-agent.d.ts.map +1 -0
  87. package/dist/scanning/agents/go-agent.js +641 -0
  88. package/dist/scanning/agents/go-agent.js.map +1 -0
  89. package/dist/scanning/agents/java-agent.d.ts +8 -0
  90. package/dist/scanning/agents/java-agent.d.ts.map +1 -0
  91. package/dist/scanning/agents/java-agent.js +807 -0
  92. package/dist/scanning/agents/java-agent.js.map +1 -0
  93. package/dist/scanning/agents/javascript-agent.d.ts +8 -0
  94. package/dist/scanning/agents/javascript-agent.d.ts.map +1 -0
  95. package/dist/scanning/agents/javascript-agent.js +77 -0
  96. package/dist/scanning/agents/javascript-agent.js.map +1 -0
  97. package/dist/scanning/agents/mobile-agent.d.ts +8 -0
  98. package/dist/scanning/agents/mobile-agent.d.ts.map +1 -0
  99. package/dist/scanning/agents/mobile-agent.js +916 -0
  100. package/dist/scanning/agents/mobile-agent.js.map +1 -0
  101. package/dist/scanning/agents/php-agent.d.ts +8 -0
  102. package/dist/scanning/agents/php-agent.d.ts.map +1 -0
  103. package/dist/scanning/agents/php-agent.js +679 -0
  104. package/dist/scanning/agents/php-agent.js.map +1 -0
  105. package/dist/scanning/agents/python-agent.d.ts +8 -0
  106. package/dist/scanning/agents/python-agent.d.ts.map +1 -0
  107. package/dist/scanning/agents/python-agent.js +701 -0
  108. package/dist/scanning/agents/python-agent.js.map +1 -0
  109. package/dist/scanning/agents/supabase-agent.d.ts +8 -0
  110. package/dist/scanning/agents/supabase-agent.d.ts.map +1 -0
  111. package/dist/scanning/agents/supabase-agent.js +484 -0
  112. package/dist/scanning/agents/supabase-agent.js.map +1 -0
  113. package/dist/scanning/orchestrator.d.ts +29 -0
  114. package/dist/scanning/orchestrator.d.ts.map +1 -0
  115. package/dist/scanning/orchestrator.js +186 -0
  116. package/dist/scanning/orchestrator.js.map +1 -0
  117. package/dist/scanning/tech-detector.d.ts +12 -0
  118. package/dist/scanning/tech-detector.d.ts.map +1 -0
  119. package/dist/scanning/tech-detector.js +252 -0
  120. package/dist/scanning/tech-detector.js.map +1 -0
  121. package/dist/scanning/types.d.ts +87 -0
  122. package/dist/scanning/types.d.ts.map +1 -0
  123. package/dist/scanning/types.js +5 -0
  124. package/dist/scanning/types.js.map +1 -0
  125. package/dist/utils/child-process.d.ts +2 -0
  126. package/dist/utils/child-process.d.ts.map +1 -0
  127. package/dist/utils/child-process.js +4 -0
  128. package/dist/utils/child-process.js.map +1 -0
  129. package/dist/utils/context-classifier.d.ts +11 -0
  130. package/dist/utils/context-classifier.d.ts.map +1 -0
  131. package/dist/utils/context-classifier.js +79 -0
  132. package/dist/utils/context-classifier.js.map +1 -0
  133. package/dist/utils/exec.d.ts +18 -0
  134. package/dist/utils/exec.d.ts.map +1 -0
  135. package/dist/utils/exec.js +51 -0
  136. package/dist/utils/exec.js.map +1 -0
  137. package/dist/utils/file-filter.d.ts +4 -0
  138. package/dist/utils/file-filter.d.ts.map +1 -0
  139. package/dist/utils/file-filter.js +68 -0
  140. package/dist/utils/file-filter.js.map +1 -0
  141. package/dist/utils/fs.d.ts +2 -0
  142. package/dist/utils/fs.d.ts.map +1 -0
  143. package/dist/utils/fs.js +5 -0
  144. package/dist/utils/fs.js.map +1 -0
  145. package/dist/utils/logger.d.ts +12 -0
  146. package/dist/utils/logger.d.ts.map +1 -0
  147. package/dist/utils/logger.js +27 -0
  148. package/dist/utils/logger.js.map +1 -0
  149. package/dist/utils/post-processor.d.ts +10 -0
  150. package/dist/utils/post-processor.d.ts.map +1 -0
  151. package/dist/utils/post-processor.js +183 -0
  152. package/dist/utils/post-processor.js.map +1 -0
  153. package/package.json +44 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/engines/patterns.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { FindingData } from "./types.js";
2
+ export declare function detectSecrets(code: string, filePath: string): FindingData[];
3
+ export declare function runSecretsEngine(files: Map<string, string>): FindingData[];
4
+ //# sourceMappingURL=secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/engines/secrets.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AA2M9C,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,WAAW,EAAE,CAuEf;AAUD,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACzB,WAAW,EAAE,CAOf"}
@@ -0,0 +1,260 @@
1
+ // Secrets detection engine - detects hardcoded API keys, tokens, and credentials
2
+ // Uses regex patterns (Gitleaks integration would be added in production)
3
+ const SECRET_PATTERNS = [
4
+ // Supabase — format-specific, high confidence
5
+ {
6
+ id: 34,
7
+ name: "Supabase Service Role Key Exposed",
8
+ severity: "critical",
9
+ pattern: /(?:service_role|SERVICE_ROLE|serviceRole)[\s]*[=:]\s*["']?eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+/g,
10
+ category: "supabase",
11
+ owasp: "A07:2021",
12
+ confidence: "high",
13
+ },
14
+ // Generic API key — requires assignment context
15
+ {
16
+ id: 53,
17
+ name: "API Key Hardcoded",
18
+ severity: "critical",
19
+ pattern: /(?:api[_-]?key|apikey|api_secret|secret_key)[\s]*[=:]\s*["'][a-zA-Z0-9_\-]{20,}["']/gi,
20
+ category: "vibecoding",
21
+ owasp: "A07:2021",
22
+ confidence: "medium",
23
+ },
24
+ // OpenAI — format-specific prefix
25
+ {
26
+ id: 53,
27
+ name: "OpenAI API Key Hardcoded",
28
+ severity: "critical",
29
+ pattern: /sk-(?:proj-)?[a-zA-Z0-9]{20,}/g,
30
+ category: "vibecoding",
31
+ owasp: "A07:2021",
32
+ confidence: "high",
33
+ },
34
+ // AWS — format-specific prefix
35
+ {
36
+ id: 53,
37
+ name: "AWS Access Key Hardcoded",
38
+ severity: "critical",
39
+ pattern: /AKIA[0-9A-Z]{16}/g,
40
+ category: "vibecoding",
41
+ owasp: "A07:2021",
42
+ confidence: "high",
43
+ },
44
+ // GitHub — format-specific prefix
45
+ {
46
+ id: 53,
47
+ name: "GitHub Token Hardcoded",
48
+ severity: "critical",
49
+ pattern: /(?:ghp|ghs|gho|ghu|github_pat)_[A-Za-z0-9_]{36,}/g,
50
+ category: "vibecoding",
51
+ owasp: "A07:2021",
52
+ confidence: "high",
53
+ },
54
+ // Stripe — format-specific prefix
55
+ {
56
+ id: 53,
57
+ name: "Stripe Secret Key Hardcoded",
58
+ severity: "critical",
59
+ pattern: /sk_(?:live|test)_[a-zA-Z0-9]{24,}/g,
60
+ category: "vibecoding",
61
+ owasp: "A07:2021",
62
+ confidence: "high",
63
+ },
64
+ // Anthropic — format-specific prefix
65
+ {
66
+ id: 53,
67
+ name: "Anthropic API Key Hardcoded",
68
+ severity: "critical",
69
+ pattern: /sk-ant-[a-zA-Z0-9_-]{20,}/g,
70
+ category: "vibecoding",
71
+ owasp: "A07:2021",
72
+ confidence: "high",
73
+ },
74
+ // Generic passwords — broad match, medium confidence
75
+ {
76
+ id: 55,
77
+ name: "Password in Plaintext",
78
+ severity: "critical",
79
+ pattern: /(?:password|passwd|pwd)[\s]*[=:]\s*["'][^"']{8,}["']/gi,
80
+ category: "vibecoding",
81
+ owasp: "A07:2021",
82
+ confidence: "medium",
83
+ },
84
+ // Database connection strings — format-specific
85
+ {
86
+ id: 101,
87
+ name: "Database Connection String Exposed",
88
+ severity: "critical",
89
+ pattern: /(?:postgres|mysql|mongodb|redis):\/\/[^"\s]+:[^"\s]+@(?!localhost|127\.0\.0\.1)[^"\s]+/g,
90
+ category: "database",
91
+ owasp: "A07:2021",
92
+ confidence: "high",
93
+ },
94
+ // Private keys — format-specific
95
+ {
96
+ id: 53,
97
+ name: "Private Key in Source Code",
98
+ severity: "critical",
99
+ pattern: /-----BEGIN (?:RSA |EC |DSA )?PRIVATE KEY-----/g,
100
+ category: "vibecoding",
101
+ owasp: "A07:2021",
102
+ confidence: "high",
103
+ },
104
+ // .env file committed
105
+ {
106
+ id: 62,
107
+ name: "Secrets in Committed .env File",
108
+ severity: "critical",
109
+ pattern: /(?:API_KEY|SECRET|PASSWORD|TOKEN|PRIVATE_KEY)[\s]*=[\s]*[^\s]{10,}/g,
110
+ category: "vibecoding",
111
+ owasp: "A07:2021",
112
+ confidence: "medium",
113
+ },
114
+ // Firebase — public keys are expected, lower severity
115
+ {
116
+ id: 43,
117
+ name: "Firebase Config in Code",
118
+ severity: "low",
119
+ pattern: /(?:apiKey|authDomain|databaseURL|storageBucket|messagingSenderId)[\s]*:[\s]*["'][^"']+["']/g,
120
+ category: "firebase",
121
+ confidence: "low",
122
+ },
123
+ ];
124
+ // Files to skip for secrets scanning
125
+ const SKIP_FILES = [
126
+ ".env.example",
127
+ ".env.template",
128
+ ".env.sample",
129
+ ".env.defaults",
130
+ "package-lock.json",
131
+ "yarn.lock",
132
+ "pnpm-lock.yaml",
133
+ ];
134
+ // Path patterns that indicate test/example/docs (lower confidence, not skipped)
135
+ const TEST_DOC_PATHS = [
136
+ /\/__tests__\//,
137
+ /\/test\//,
138
+ /\/tests\//,
139
+ /\.test\.[jt]sx?$/,
140
+ /\.spec\.[jt]sx?$/,
141
+ /\/fixtures?\//,
142
+ /\/mocks?\//,
143
+ /\/examples?\//,
144
+ /\/docs?\//,
145
+ /\/samples?\//,
146
+ /README/i,
147
+ /CHANGELOG/i,
148
+ ];
149
+ const SKIP_EXTENSIONS = [
150
+ ".md",
151
+ ".txt",
152
+ ".svg",
153
+ ".png",
154
+ ".jpg",
155
+ ".gif",
156
+ ".ico",
157
+ ".woff",
158
+ ".woff2",
159
+ ".ttf",
160
+ ".eot",
161
+ ];
162
+ // Placeholder values to ignore
163
+ const PLACEHOLDER_VALUES = [
164
+ "your_key_here",
165
+ "your-api-key",
166
+ "your_",
167
+ "xxxx",
168
+ "todo",
169
+ "placeholder",
170
+ "example",
171
+ "changeme",
172
+ "replace_me",
173
+ "sk-xxx",
174
+ "sk-...",
175
+ "sk_test_",
176
+ "sk-test",
177
+ "INSERT_KEY_HERE",
178
+ "put_your",
179
+ "dummy",
180
+ "fake",
181
+ "sample",
182
+ "test_key",
183
+ "test_secret",
184
+ "test_token",
185
+ "000000",
186
+ "111111",
187
+ "aaaaaa",
188
+ ];
189
+ export function detectSecrets(code, filePath) {
190
+ const fileName = filePath.split("/").pop() || "";
191
+ // Skip non-relevant files
192
+ if (SKIP_FILES.includes(fileName))
193
+ return [];
194
+ if (SKIP_EXTENSIONS.some((ext) => filePath.endsWith(ext)))
195
+ return [];
196
+ // Detect if file is in test/docs/examples path (lower confidence)
197
+ const isTestOrDoc = TEST_DOC_PATHS.some((p) => p.test(filePath));
198
+ const findings = [];
199
+ const lines = code.split("\n");
200
+ // Determine which patterns to use
201
+ const isEnvFile = fileName === ".env" || fileName === ".env.local" || fileName === ".env.production";
202
+ const patternsToUse = isEnvFile
203
+ ? SECRET_PATTERNS.filter((p) => p.id === 62 || p.id === 101)
204
+ : SECRET_PATTERNS.filter((p) => p.id !== 62);
205
+ for (const pattern of patternsToUse) {
206
+ // Reset regex lastIndex
207
+ pattern.pattern.lastIndex = 0;
208
+ for (let lineNum = 0; lineNum < lines.length; lineNum++) {
209
+ const line = lines[lineNum];
210
+ // Skip comments
211
+ const trimmed = line.trimStart();
212
+ if (trimmed.startsWith("//") || trimmed.startsWith("#") || trimmed.startsWith("*") || trimmed.startsWith("<!--")) {
213
+ continue;
214
+ }
215
+ // Reset before each line check
216
+ pattern.pattern.lastIndex = 0;
217
+ const match = pattern.pattern.exec(line);
218
+ if (match) {
219
+ const matchedValue = match[0];
220
+ // Skip placeholders
221
+ const isPlaceholder = PLACEHOLDER_VALUES.some((p) => matchedValue.toLowerCase().includes(p.toLowerCase()));
222
+ if (isPlaceholder)
223
+ continue;
224
+ // Skip if the value is referencing an env var
225
+ if (matchedValue.includes("process.env.") || matchedValue.includes("${") || matchedValue.includes("os.environ") || matchedValue.includes("os.Getenv"))
226
+ continue;
227
+ // Extract a safe snippet (mask the actual secret)
228
+ const snippet = maskSecret(line.trim());
229
+ // Lower confidence for test/doc files
230
+ const confidence = isTestOrDoc ? "low" : pattern.confidence;
231
+ findings.push({
232
+ vulnerability_id: pattern.id,
233
+ severity: pattern.severity,
234
+ category: pattern.category,
235
+ title: pattern.name,
236
+ file_path: filePath,
237
+ line_number: lineNum + 1,
238
+ code_snippet: snippet,
239
+ owasp_ref: pattern.owasp,
240
+ status: "open",
241
+ confidence,
242
+ });
243
+ }
244
+ }
245
+ }
246
+ return findings;
247
+ }
248
+ function maskSecret(line) {
249
+ // Mask long strings that look like secrets
250
+ return line.replace(/["']([a-zA-Z0-9_\-./+=]{20,})["']/g, (_, match) => `"${match.substring(0, 6)}...REDACTED"`);
251
+ }
252
+ export function runSecretsEngine(files) {
253
+ const allFindings = [];
254
+ for (const [filePath, content] of files) {
255
+ const findings = detectSecrets(content, filePath);
256
+ allFindings.push(...findings);
257
+ }
258
+ return allFindings;
259
+ }
260
+ //# sourceMappingURL=secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/engines/secrets.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,0EAA0E;AAc1E,MAAM,eAAe,GAAoB;IACvC,8CAA8C;IAC9C;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,mCAAmC;QACzC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,iGAAiG;QAC1G,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,gDAAgD;IAChD;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,mBAAmB;QACzB,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,uFAAuF;QAChG,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,QAAQ;KACrB;IACD,kCAAkC;IAClC;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,gCAAgC;QACzC,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,+BAA+B;IAC/B;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,0BAA0B;QAChC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,mBAAmB;QAC5B,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,kCAAkC;IAClC;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,wBAAwB;QAC9B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,mDAAmD;QAC5D,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,kCAAkC;IAClC;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,oCAAoC;QAC7C,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,qCAAqC;IACrC;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,6BAA6B;QACnC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,4BAA4B;QACrC,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,qDAAqD;IACrD;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,uBAAuB;QAC7B,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,wDAAwD;QACjE,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,QAAQ;KACrB;IACD,gDAAgD;IAChD;QACE,EAAE,EAAE,GAAG;QACP,IAAI,EAAE,oCAAoC;QAC1C,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,yFAAyF;QAClG,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,iCAAiC;IACjC;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,4BAA4B;QAClC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,gDAAgD;QACzD,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,MAAM;KACnB;IACD,sBAAsB;IACtB;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,gCAAgC;QACtC,QAAQ,EAAE,UAAU;QACpB,OAAO,EAAE,qEAAqE;QAC9E,QAAQ,EAAE,YAAY;QACtB,KAAK,EAAE,UAAU;QACjB,UAAU,EAAE,QAAQ;KACrB;IACD,sDAAsD;IACtD;QACE,EAAE,EAAE,EAAE;QACN,IAAI,EAAE,yBAAyB;QAC/B,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,6FAA6F;QACtG,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,KAAK;KAClB;CACF,CAAC;AAEF,qCAAqC;AACrC,MAAM,UAAU,GAAG;IACjB,cAAc;IACd,eAAe;IACf,aAAa;IACb,eAAe;IACf,mBAAmB;IACnB,WAAW;IACX,gBAAgB;CACjB,CAAC;AAEF,gFAAgF;AAChF,MAAM,cAAc,GAAG;IACrB,eAAe;IACf,UAAU;IACV,WAAW;IACX,kBAAkB;IAClB,kBAAkB;IAClB,eAAe;IACf,YAAY;IACZ,eAAe;IACf,WAAW;IACX,cAAc;IACd,SAAS;IACT,YAAY;CACb,CAAC;AAEF,MAAM,eAAe,GAAG;IACtB,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,MAAM;CACP,CAAC;AAEF,+BAA+B;AAC/B,MAAM,kBAAkB,GAAG;IACzB,eAAe;IACf,cAAc;IACd,OAAO;IACP,MAAM;IACN,MAAM;IACN,aAAa;IACb,SAAS;IACT,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,SAAS;IACT,iBAAiB;IACjB,UAAU;IACV,OAAO;IACP,MAAM;IACN,QAAQ;IACR,UAAU;IACV,aAAa;IACb,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAC;AAEF,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,QAAgB;IAEhB,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAEjD,0BAA0B;IAC1B,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAErE,kEAAkE;IAClE,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAE/B,kCAAkC;IAClC,MAAM,SAAS,GAAG,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,iBAAiB,CAAC;IACrG,MAAM,aAAa,GAAG,SAAS;QAC7B,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC;QAC5D,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/C,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;QACpC,wBAAwB;QACxB,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QAE9B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACxD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAE5B,gBAAgB;YAChB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBACjH,SAAS;YACX,CAAC;YAED,+BAA+B;YAC/B,OAAO,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;YAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzC,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAE9B,oBAAoB;gBACpB,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAClD,YAAY,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACrD,CAAC;gBACF,IAAI,aAAa;oBAAE,SAAS;gBAE5B,8CAA8C;gBAC9C,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;oBAAE,SAAS;gBAEhK,kDAAkD;gBAClD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAExC,sCAAsC;gBACtC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;gBAE5D,QAAQ,CAAC,IAAI,CAAC;oBACZ,gBAAgB,EAAE,OAAO,CAAC,EAAE;oBAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK,EAAE,OAAO,CAAC,IAAI;oBACnB,SAAS,EAAE,QAAQ;oBACnB,WAAW,EAAE,OAAO,GAAG,CAAC;oBACxB,YAAY,EAAE,OAAO;oBACrB,SAAS,EAAE,OAAO,CAAC,KAAK;oBACxB,MAAM,EAAE,MAAM;oBACd,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,2CAA2C;IAC3C,OAAO,IAAI,CAAC,OAAO,CACjB,oCAAoC,EACpC,CAAC,CAAC,EAAE,KAAa,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,cAAc,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAA0B;IAE1B,MAAM,WAAW,GAAkB,EAAE,CAAC;IACtC,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,KAAK,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { FindingData } from "./types.js";
2
+ export declare function runSemgrep(repoDir: string): Promise<FindingData[]>;
3
+ //# sourceMappingURL=semgrep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semgrep.d.ts","sourceRoot":"","sources":["../../src/engines/semgrep.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,YAAY,CAAC;AAyExD,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAqCxE"}
@@ -0,0 +1,173 @@
1
+ // Semgrep engine - runs Semgrep binary for AST-based code analysis.
2
+ // Uses both custom rules (worker/src/rules/) and community rulesets.
3
+ // Falls back gracefully if semgrep is not installed (regex patterns engine covers basics).
4
+ import { execWithTimeout } from "../utils/exec.js";
5
+ import path from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ // Resolve rules directory relative to this file's compiled location (dist/engines/)
8
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
9
+ const RULES_DIR = path.resolve(__dirname, "../rules");
10
+ // Community rulesets to use alongside custom rules
11
+ const COMMUNITY_CONFIGS = [
12
+ "p/javascript",
13
+ "p/typescript",
14
+ "p/owasp-top-ten",
15
+ "p/react",
16
+ "p/nextjs",
17
+ ];
18
+ // Map Semgrep severity strings to our severity levels
19
+ const SEVERITY_MAP = {
20
+ ERROR: "high",
21
+ WARNING: "medium",
22
+ INFO: "low",
23
+ };
24
+ // Map community rule prefixes to our vulnerability IDs
25
+ const COMMUNITY_RULE_MAP = {
26
+ // OWASP
27
+ "owasp.": { id: 1, category: "web-owasp" },
28
+ "javascript.lang.security.audit.sqli": { id: 5, category: "web-owasp" },
29
+ "javascript.lang.security.audit.xss": { id: 7, category: "web-owasp" },
30
+ "javascript.lang.security.audit.eval": { id: 61, category: "vibecoding" },
31
+ "javascript.lang.security.audit.crypto": { id: 2, category: "web-owasp" },
32
+ "javascript.lang.security.audit.path-traversal": { id: 106, category: "files" },
33
+ "javascript.lang.security.audit.command-injection": { id: 75, category: "injection" },
34
+ "javascript.lang.security.audit.prototype-pollution": { id: 128, category: "javascript" },
35
+ // React
36
+ "react.": { id: 46, category: "react-nextjs" },
37
+ "typescript.react.security": { id: 46, category: "react-nextjs" },
38
+ // Next.js
39
+ "nextjs.": { id: 46, category: "react-nextjs" },
40
+ // JWT
41
+ "javascript.jsonwebtoken": { id: 56, category: "vibecoding" },
42
+ "javascript.jwt": { id: 56, category: "vibecoding" },
43
+ // Express/Node
44
+ "javascript.express": { id: 1, category: "web-owasp" },
45
+ "javascript.lang.security": { id: 128, category: "javascript" },
46
+ // Crypto
47
+ "javascript.lang.security.audit.weak-crypto": { id: 2, category: "cryptography" },
48
+ };
49
+ export async function runSemgrep(repoDir) {
50
+ const args = [
51
+ "scan",
52
+ "--json",
53
+ "--config", RULES_DIR,
54
+ ...COMMUNITY_CONFIGS.flatMap((config) => ["--config", config]),
55
+ "--metrics=off",
56
+ "--max-target-bytes", "500000",
57
+ "--timeout", "30", // Per-rule timeout in seconds
58
+ "--quiet", // Suppress progress output
59
+ repoDir,
60
+ ];
61
+ const { stdout, stderr } = await execWithTimeout("semgrep", args, {
62
+ timeoutMs: 60_000,
63
+ maxBuffer: 20 * 1024 * 1024, // 20MB — Semgrep output can be large
64
+ });
65
+ if (!stdout.trim())
66
+ return [];
67
+ let output;
68
+ try {
69
+ output = JSON.parse(stdout);
70
+ }
71
+ catch {
72
+ // If JSON parsing fails, try to extract JSON from mixed output
73
+ const jsonStart = stdout.indexOf("{");
74
+ if (jsonStart === -1)
75
+ return [];
76
+ try {
77
+ output = JSON.parse(stdout.slice(jsonStart));
78
+ }
79
+ catch {
80
+ return [];
81
+ }
82
+ }
83
+ if (!output.results || !Array.isArray(output.results))
84
+ return [];
85
+ return output.results.map((result) => mapResultToFinding(result, repoDir));
86
+ }
87
+ function mapResultToFinding(result, repoDir) {
88
+ // Check for our custom datahogo_id in rule metadata
89
+ const metadata = result.extra.metadata;
90
+ const datahogoId = metadata?.datahogo_id;
91
+ // Make file path relative to repo root
92
+ const filePath = result.path.startsWith(repoDir)
93
+ ? result.path.slice(repoDir.length + 1)
94
+ : result.path;
95
+ const severity = SEVERITY_MAP[result.extra.severity] ?? "medium";
96
+ if (datahogoId) {
97
+ // Custom rule with explicit mapping
98
+ const category = metadata?.datahogo_category ?? "web-owasp";
99
+ const owasp = metadata?.owasp_ref;
100
+ return {
101
+ vulnerability_id: datahogoId,
102
+ severity,
103
+ category,
104
+ title: result.extra.message.split(".")[0] || result.check_id,
105
+ description_technical: result.extra.message,
106
+ file_path: filePath,
107
+ line_number: result.start.line,
108
+ code_snippet: result.extra.lines,
109
+ owasp_ref: owasp,
110
+ status: "open",
111
+ };
112
+ }
113
+ // Community rule — map by check_id prefix
114
+ const mapping = findCommunityMapping(result.check_id);
115
+ return {
116
+ vulnerability_id: mapping.id,
117
+ severity,
118
+ category: mapping.category,
119
+ title: formatTitle(result.check_id, result.extra.message),
120
+ description_technical: `[Semgrep: ${result.check_id}] ${result.extra.message}`,
121
+ file_path: filePath,
122
+ line_number: result.start.line,
123
+ code_snippet: result.extra.lines,
124
+ status: "open",
125
+ };
126
+ }
127
+ function findCommunityMapping(checkId) {
128
+ // Try increasingly specific prefix matches
129
+ for (const [prefix, mapping] of Object.entries(COMMUNITY_RULE_MAP)) {
130
+ if (checkId.startsWith(prefix) || checkId.includes(prefix)) {
131
+ return mapping;
132
+ }
133
+ }
134
+ // Fallback: categorize by keywords in the check ID
135
+ const lower = checkId.toLowerCase();
136
+ if (lower.includes("sqli") || lower.includes("sql-injection"))
137
+ return { id: 5, category: "web-owasp" };
138
+ if (lower.includes("xss") || lower.includes("cross-site"))
139
+ return { id: 7, category: "web-owasp" };
140
+ if (lower.includes("ssrf"))
141
+ return { id: 10, category: "web-owasp" };
142
+ if (lower.includes("command") || lower.includes("exec"))
143
+ return { id: 75, category: "injection" };
144
+ if (lower.includes("path-traversal"))
145
+ return { id: 106, category: "files" };
146
+ if (lower.includes("auth"))
147
+ return { id: 1, category: "web-owasp" };
148
+ if (lower.includes("crypto") || lower.includes("hash"))
149
+ return { id: 2, category: "cryptography" };
150
+ if (lower.includes("jwt"))
151
+ return { id: 56, category: "vibecoding" };
152
+ if (lower.includes("cors"))
153
+ return { id: 4, category: "web-owasp" };
154
+ if (lower.includes("secret") || lower.includes("key") || lower.includes("token"))
155
+ return { id: 53, category: "vibecoding" };
156
+ // Generic fallback
157
+ return { id: 199, category: "best-practices" };
158
+ }
159
+ function formatTitle(checkId, message) {
160
+ // Use first sentence of message if available
161
+ const firstSentence = message.split(/[.!]/)[0];
162
+ if (firstSentence && firstSentence.length > 10 && firstSentence.length < 100) {
163
+ return firstSentence;
164
+ }
165
+ // Fallback: humanize the check_id
166
+ return checkId
167
+ .split(/[.-]/)
168
+ .slice(-3)
169
+ .join(" ")
170
+ .replace(/_/g, " ")
171
+ .replace(/\b\w/g, (c) => c.toUpperCase());
172
+ }
173
+ //# sourceMappingURL=semgrep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semgrep.js","sourceRoot":"","sources":["../../src/engines/semgrep.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ export type Severity = "critical" | "high" | "medium" | "low" | "info";
2
+ export type FindingContext = "production" | "test" | "example" | "config" | "rule" | "vendored";
3
+ export type FindingConfidence = "high" | "medium" | "low";
4
+ export interface FindingData {
5
+ vulnerability_id: number;
6
+ severity: Severity;
7
+ category: string;
8
+ title: string;
9
+ description_simple?: string;
10
+ description_technical?: string;
11
+ file_path?: string;
12
+ line_number?: number;
13
+ code_snippet?: string;
14
+ fix_description?: string;
15
+ fix_code?: string;
16
+ owasp_ref?: string;
17
+ status: "open";
18
+ context?: FindingContext;
19
+ confidence?: FindingConfidence;
20
+ is_framework_requirement?: boolean;
21
+ framework_note?: string;
22
+ classification?: "actionable" | "informational";
23
+ }
24
+ export interface EngineResult {
25
+ engine: string;
26
+ findings: FindingData[];
27
+ error?: string;
28
+ durationMs: number;
29
+ }
30
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvE,MAAM,MAAM,cAAc,GACtB,YAAY,GACZ,MAAM,GACN,SAAS,GACT,QAAQ,GACR,MAAM,GACN,UAAU,CAAC;AAEf,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAE1D,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAE/B,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,YAAY,GAAG,eAAe,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ // Shared types for worker engines
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/engines/types.ts"],"names":[],"mappings":"AAAA,kCAAkC"}
@@ -0,0 +1,3 @@
1
+ import type { FindingData } from "./types.js";
2
+ export declare function scanUrl(appUrl: string): Promise<FindingData[]>;
3
+ //# sourceMappingURL=url-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-scanner.d.ts","sourceRoot":"","sources":["../../src/engines/url-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAuD9C,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAuQpE"}