@oculum/scanner 1.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 (281) hide show
  1. package/dist/formatters/cli-terminal.d.ts +27 -0
  2. package/dist/formatters/cli-terminal.d.ts.map +1 -0
  3. package/dist/formatters/cli-terminal.js +412 -0
  4. package/dist/formatters/cli-terminal.js.map +1 -0
  5. package/dist/formatters/github-comment.d.ts +41 -0
  6. package/dist/formatters/github-comment.d.ts.map +1 -0
  7. package/dist/formatters/github-comment.js +306 -0
  8. package/dist/formatters/github-comment.js.map +1 -0
  9. package/dist/formatters/grouping.d.ts +52 -0
  10. package/dist/formatters/grouping.d.ts.map +1 -0
  11. package/dist/formatters/grouping.js +152 -0
  12. package/dist/formatters/grouping.js.map +1 -0
  13. package/dist/formatters/index.d.ts +9 -0
  14. package/dist/formatters/index.d.ts.map +1 -0
  15. package/dist/formatters/index.js +35 -0
  16. package/dist/formatters/index.js.map +1 -0
  17. package/dist/formatters/vscode-diagnostic.d.ts +103 -0
  18. package/dist/formatters/vscode-diagnostic.d.ts.map +1 -0
  19. package/dist/formatters/vscode-diagnostic.js +151 -0
  20. package/dist/formatters/vscode-diagnostic.js.map +1 -0
  21. package/dist/index.d.ts +52 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +648 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/layer1/comments.d.ts +8 -0
  26. package/dist/layer1/comments.d.ts.map +1 -0
  27. package/dist/layer1/comments.js +203 -0
  28. package/dist/layer1/comments.js.map +1 -0
  29. package/dist/layer1/config-audit.d.ts +8 -0
  30. package/dist/layer1/config-audit.d.ts.map +1 -0
  31. package/dist/layer1/config-audit.js +252 -0
  32. package/dist/layer1/config-audit.js.map +1 -0
  33. package/dist/layer1/entropy.d.ts +8 -0
  34. package/dist/layer1/entropy.d.ts.map +1 -0
  35. package/dist/layer1/entropy.js +500 -0
  36. package/dist/layer1/entropy.js.map +1 -0
  37. package/dist/layer1/file-flags.d.ts +7 -0
  38. package/dist/layer1/file-flags.d.ts.map +1 -0
  39. package/dist/layer1/file-flags.js +112 -0
  40. package/dist/layer1/file-flags.js.map +1 -0
  41. package/dist/layer1/index.d.ts +36 -0
  42. package/dist/layer1/index.d.ts.map +1 -0
  43. package/dist/layer1/index.js +132 -0
  44. package/dist/layer1/index.js.map +1 -0
  45. package/dist/layer1/patterns.d.ts +8 -0
  46. package/dist/layer1/patterns.d.ts.map +1 -0
  47. package/dist/layer1/patterns.js +482 -0
  48. package/dist/layer1/patterns.js.map +1 -0
  49. package/dist/layer1/urls.d.ts +8 -0
  50. package/dist/layer1/urls.d.ts.map +1 -0
  51. package/dist/layer1/urls.js +296 -0
  52. package/dist/layer1/urls.js.map +1 -0
  53. package/dist/layer1/weak-crypto.d.ts +7 -0
  54. package/dist/layer1/weak-crypto.d.ts.map +1 -0
  55. package/dist/layer1/weak-crypto.js +291 -0
  56. package/dist/layer1/weak-crypto.js.map +1 -0
  57. package/dist/layer2/ai-agent-tools.d.ts +19 -0
  58. package/dist/layer2/ai-agent-tools.d.ts.map +1 -0
  59. package/dist/layer2/ai-agent-tools.js +528 -0
  60. package/dist/layer2/ai-agent-tools.js.map +1 -0
  61. package/dist/layer2/ai-endpoint-protection.d.ts +36 -0
  62. package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -0
  63. package/dist/layer2/ai-endpoint-protection.js +332 -0
  64. package/dist/layer2/ai-endpoint-protection.js.map +1 -0
  65. package/dist/layer2/ai-execution-sinks.d.ts +18 -0
  66. package/dist/layer2/ai-execution-sinks.d.ts.map +1 -0
  67. package/dist/layer2/ai-execution-sinks.js +496 -0
  68. package/dist/layer2/ai-execution-sinks.js.map +1 -0
  69. package/dist/layer2/ai-fingerprinting.d.ts +7 -0
  70. package/dist/layer2/ai-fingerprinting.d.ts.map +1 -0
  71. package/dist/layer2/ai-fingerprinting.js +654 -0
  72. package/dist/layer2/ai-fingerprinting.js.map +1 -0
  73. package/dist/layer2/ai-prompt-hygiene.d.ts +19 -0
  74. package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -0
  75. package/dist/layer2/ai-prompt-hygiene.js +356 -0
  76. package/dist/layer2/ai-prompt-hygiene.js.map +1 -0
  77. package/dist/layer2/ai-rag-safety.d.ts +21 -0
  78. package/dist/layer2/ai-rag-safety.d.ts.map +1 -0
  79. package/dist/layer2/ai-rag-safety.js +459 -0
  80. package/dist/layer2/ai-rag-safety.js.map +1 -0
  81. package/dist/layer2/ai-schema-validation.d.ts +25 -0
  82. package/dist/layer2/ai-schema-validation.d.ts.map +1 -0
  83. package/dist/layer2/ai-schema-validation.js +375 -0
  84. package/dist/layer2/ai-schema-validation.js.map +1 -0
  85. package/dist/layer2/auth-antipatterns.d.ts +20 -0
  86. package/dist/layer2/auth-antipatterns.d.ts.map +1 -0
  87. package/dist/layer2/auth-antipatterns.js +333 -0
  88. package/dist/layer2/auth-antipatterns.js.map +1 -0
  89. package/dist/layer2/byok-patterns.d.ts +12 -0
  90. package/dist/layer2/byok-patterns.d.ts.map +1 -0
  91. package/dist/layer2/byok-patterns.js +299 -0
  92. package/dist/layer2/byok-patterns.js.map +1 -0
  93. package/dist/layer2/dangerous-functions.d.ts +7 -0
  94. package/dist/layer2/dangerous-functions.d.ts.map +1 -0
  95. package/dist/layer2/dangerous-functions.js +1375 -0
  96. package/dist/layer2/dangerous-functions.js.map +1 -0
  97. package/dist/layer2/data-exposure.d.ts +16 -0
  98. package/dist/layer2/data-exposure.d.ts.map +1 -0
  99. package/dist/layer2/data-exposure.js +279 -0
  100. package/dist/layer2/data-exposure.js.map +1 -0
  101. package/dist/layer2/framework-checks.d.ts +7 -0
  102. package/dist/layer2/framework-checks.d.ts.map +1 -0
  103. package/dist/layer2/framework-checks.js +388 -0
  104. package/dist/layer2/framework-checks.js.map +1 -0
  105. package/dist/layer2/index.d.ts +58 -0
  106. package/dist/layer2/index.d.ts.map +1 -0
  107. package/dist/layer2/index.js +380 -0
  108. package/dist/layer2/index.js.map +1 -0
  109. package/dist/layer2/logic-gates.d.ts +7 -0
  110. package/dist/layer2/logic-gates.d.ts.map +1 -0
  111. package/dist/layer2/logic-gates.js +182 -0
  112. package/dist/layer2/logic-gates.js.map +1 -0
  113. package/dist/layer2/risky-imports.d.ts +7 -0
  114. package/dist/layer2/risky-imports.d.ts.map +1 -0
  115. package/dist/layer2/risky-imports.js +161 -0
  116. package/dist/layer2/risky-imports.js.map +1 -0
  117. package/dist/layer2/variables.d.ts +8 -0
  118. package/dist/layer2/variables.d.ts.map +1 -0
  119. package/dist/layer2/variables.js +152 -0
  120. package/dist/layer2/variables.js.map +1 -0
  121. package/dist/layer3/anthropic.d.ts +83 -0
  122. package/dist/layer3/anthropic.d.ts.map +1 -0
  123. package/dist/layer3/anthropic.js +1745 -0
  124. package/dist/layer3/anthropic.js.map +1 -0
  125. package/dist/layer3/index.d.ts +24 -0
  126. package/dist/layer3/index.d.ts.map +1 -0
  127. package/dist/layer3/index.js +119 -0
  128. package/dist/layer3/index.js.map +1 -0
  129. package/dist/layer3/openai.d.ts +25 -0
  130. package/dist/layer3/openai.d.ts.map +1 -0
  131. package/dist/layer3/openai.js +238 -0
  132. package/dist/layer3/openai.js.map +1 -0
  133. package/dist/layer3/package-check.d.ts +63 -0
  134. package/dist/layer3/package-check.d.ts.map +1 -0
  135. package/dist/layer3/package-check.js +508 -0
  136. package/dist/layer3/package-check.js.map +1 -0
  137. package/dist/modes/incremental.d.ts +66 -0
  138. package/dist/modes/incremental.d.ts.map +1 -0
  139. package/dist/modes/incremental.js +200 -0
  140. package/dist/modes/incremental.js.map +1 -0
  141. package/dist/tiers.d.ts +125 -0
  142. package/dist/tiers.d.ts.map +1 -0
  143. package/dist/tiers.js +234 -0
  144. package/dist/tiers.js.map +1 -0
  145. package/dist/types.d.ts +175 -0
  146. package/dist/types.d.ts.map +1 -0
  147. package/dist/types.js +50 -0
  148. package/dist/types.js.map +1 -0
  149. package/dist/utils/auth-helper-detector.d.ts +56 -0
  150. package/dist/utils/auth-helper-detector.d.ts.map +1 -0
  151. package/dist/utils/auth-helper-detector.js +360 -0
  152. package/dist/utils/auth-helper-detector.js.map +1 -0
  153. package/dist/utils/context-helpers.d.ts +96 -0
  154. package/dist/utils/context-helpers.d.ts.map +1 -0
  155. package/dist/utils/context-helpers.js +493 -0
  156. package/dist/utils/context-helpers.js.map +1 -0
  157. package/dist/utils/diff-detector.d.ts +53 -0
  158. package/dist/utils/diff-detector.d.ts.map +1 -0
  159. package/dist/utils/diff-detector.js +104 -0
  160. package/dist/utils/diff-detector.js.map +1 -0
  161. package/dist/utils/diff-parser.d.ts +80 -0
  162. package/dist/utils/diff-parser.d.ts.map +1 -0
  163. package/dist/utils/diff-parser.js +202 -0
  164. package/dist/utils/diff-parser.js.map +1 -0
  165. package/dist/utils/imported-auth-detector.d.ts +37 -0
  166. package/dist/utils/imported-auth-detector.d.ts.map +1 -0
  167. package/dist/utils/imported-auth-detector.js +251 -0
  168. package/dist/utils/imported-auth-detector.js.map +1 -0
  169. package/dist/utils/middleware-detector.d.ts +55 -0
  170. package/dist/utils/middleware-detector.d.ts.map +1 -0
  171. package/dist/utils/middleware-detector.js +260 -0
  172. package/dist/utils/middleware-detector.js.map +1 -0
  173. package/dist/utils/oauth-flow-detector.d.ts +41 -0
  174. package/dist/utils/oauth-flow-detector.d.ts.map +1 -0
  175. package/dist/utils/oauth-flow-detector.js +202 -0
  176. package/dist/utils/oauth-flow-detector.js.map +1 -0
  177. package/dist/utils/path-exclusions.d.ts +55 -0
  178. package/dist/utils/path-exclusions.d.ts.map +1 -0
  179. package/dist/utils/path-exclusions.js +222 -0
  180. package/dist/utils/path-exclusions.js.map +1 -0
  181. package/dist/utils/project-context-builder.d.ts +119 -0
  182. package/dist/utils/project-context-builder.d.ts.map +1 -0
  183. package/dist/utils/project-context-builder.js +534 -0
  184. package/dist/utils/project-context-builder.js.map +1 -0
  185. package/dist/utils/registry-clients.d.ts +93 -0
  186. package/dist/utils/registry-clients.d.ts.map +1 -0
  187. package/dist/utils/registry-clients.js +273 -0
  188. package/dist/utils/registry-clients.js.map +1 -0
  189. package/dist/utils/trpc-analyzer.d.ts +78 -0
  190. package/dist/utils/trpc-analyzer.d.ts.map +1 -0
  191. package/dist/utils/trpc-analyzer.js +297 -0
  192. package/dist/utils/trpc-analyzer.js.map +1 -0
  193. package/package.json +45 -0
  194. package/src/__tests__/benchmark/fixtures/false-positives.ts +227 -0
  195. package/src/__tests__/benchmark/fixtures/index.ts +68 -0
  196. package/src/__tests__/benchmark/fixtures/layer1/config-audit.ts +364 -0
  197. package/src/__tests__/benchmark/fixtures/layer1/hardcoded-secrets.ts +173 -0
  198. package/src/__tests__/benchmark/fixtures/layer1/high-entropy.ts +234 -0
  199. package/src/__tests__/benchmark/fixtures/layer1/index.ts +31 -0
  200. package/src/__tests__/benchmark/fixtures/layer1/sensitive-urls.ts +90 -0
  201. package/src/__tests__/benchmark/fixtures/layer1/weak-crypto.ts +197 -0
  202. package/src/__tests__/benchmark/fixtures/layer2/ai-agent-tools.ts +170 -0
  203. package/src/__tests__/benchmark/fixtures/layer2/ai-endpoint-protection.ts +418 -0
  204. package/src/__tests__/benchmark/fixtures/layer2/ai-execution-sinks.ts +189 -0
  205. package/src/__tests__/benchmark/fixtures/layer2/ai-fingerprinting.ts +316 -0
  206. package/src/__tests__/benchmark/fixtures/layer2/ai-prompt-hygiene.ts +178 -0
  207. package/src/__tests__/benchmark/fixtures/layer2/ai-rag-safety.ts +184 -0
  208. package/src/__tests__/benchmark/fixtures/layer2/ai-schema-validation.ts +434 -0
  209. package/src/__tests__/benchmark/fixtures/layer2/auth-antipatterns.ts +159 -0
  210. package/src/__tests__/benchmark/fixtures/layer2/byok-patterns.ts +112 -0
  211. package/src/__tests__/benchmark/fixtures/layer2/dangerous-functions.ts +246 -0
  212. package/src/__tests__/benchmark/fixtures/layer2/data-exposure.ts +168 -0
  213. package/src/__tests__/benchmark/fixtures/layer2/framework-checks.ts +346 -0
  214. package/src/__tests__/benchmark/fixtures/layer2/index.ts +67 -0
  215. package/src/__tests__/benchmark/fixtures/layer2/injection-vulnerabilities.ts +239 -0
  216. package/src/__tests__/benchmark/fixtures/layer2/logic-gates.ts +246 -0
  217. package/src/__tests__/benchmark/fixtures/layer2/risky-imports.ts +231 -0
  218. package/src/__tests__/benchmark/fixtures/layer2/variables.ts +167 -0
  219. package/src/__tests__/benchmark/index.ts +29 -0
  220. package/src/__tests__/benchmark/run-benchmark.ts +144 -0
  221. package/src/__tests__/benchmark/run-depth-validation.ts +206 -0
  222. package/src/__tests__/benchmark/run-real-world-test.ts +243 -0
  223. package/src/__tests__/benchmark/security-benchmark-script.ts +1737 -0
  224. package/src/__tests__/benchmark/tier-integration-script.ts +177 -0
  225. package/src/__tests__/benchmark/types.ts +144 -0
  226. package/src/__tests__/benchmark/utils/test-runner.ts +475 -0
  227. package/src/__tests__/regression/known-false-positives.test.ts +467 -0
  228. package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +178 -0
  229. package/src/__tests__/snapshots/scan-depth.test.ts +258 -0
  230. package/src/__tests__/validation/analyze-results.ts +542 -0
  231. package/src/__tests__/validation/extract-for-triage.ts +146 -0
  232. package/src/__tests__/validation/fp-deep-analysis.ts +327 -0
  233. package/src/__tests__/validation/run-validation.ts +364 -0
  234. package/src/__tests__/validation/triage-template.md +132 -0
  235. package/src/formatters/cli-terminal.ts +446 -0
  236. package/src/formatters/github-comment.ts +382 -0
  237. package/src/formatters/grouping.ts +190 -0
  238. package/src/formatters/index.ts +47 -0
  239. package/src/formatters/vscode-diagnostic.ts +243 -0
  240. package/src/index.ts +823 -0
  241. package/src/layer1/comments.ts +218 -0
  242. package/src/layer1/config-audit.ts +289 -0
  243. package/src/layer1/entropy.ts +583 -0
  244. package/src/layer1/file-flags.ts +127 -0
  245. package/src/layer1/index.ts +181 -0
  246. package/src/layer1/patterns.ts +516 -0
  247. package/src/layer1/urls.ts +334 -0
  248. package/src/layer1/weak-crypto.ts +328 -0
  249. package/src/layer2/ai-agent-tools.ts +601 -0
  250. package/src/layer2/ai-endpoint-protection.ts +387 -0
  251. package/src/layer2/ai-execution-sinks.ts +580 -0
  252. package/src/layer2/ai-fingerprinting.ts +758 -0
  253. package/src/layer2/ai-prompt-hygiene.ts +411 -0
  254. package/src/layer2/ai-rag-safety.ts +511 -0
  255. package/src/layer2/ai-schema-validation.ts +421 -0
  256. package/src/layer2/auth-antipatterns.ts +394 -0
  257. package/src/layer2/byok-patterns.ts +336 -0
  258. package/src/layer2/dangerous-functions.ts +1563 -0
  259. package/src/layer2/data-exposure.ts +315 -0
  260. package/src/layer2/framework-checks.ts +433 -0
  261. package/src/layer2/index.ts +473 -0
  262. package/src/layer2/logic-gates.ts +206 -0
  263. package/src/layer2/risky-imports.ts +186 -0
  264. package/src/layer2/variables.ts +166 -0
  265. package/src/layer3/anthropic.ts +2030 -0
  266. package/src/layer3/index.ts +130 -0
  267. package/src/layer3/package-check.ts +604 -0
  268. package/src/modes/incremental.ts +293 -0
  269. package/src/tiers.ts +318 -0
  270. package/src/types.ts +284 -0
  271. package/src/utils/auth-helper-detector.ts +443 -0
  272. package/src/utils/context-helpers.ts +535 -0
  273. package/src/utils/diff-detector.ts +135 -0
  274. package/src/utils/diff-parser.ts +272 -0
  275. package/src/utils/imported-auth-detector.ts +320 -0
  276. package/src/utils/middleware-detector.ts +333 -0
  277. package/src/utils/oauth-flow-detector.ts +246 -0
  278. package/src/utils/path-exclusions.ts +266 -0
  279. package/src/utils/project-context-builder.ts +707 -0
  280. package/src/utils/registry-clients.ts +351 -0
  281. package/src/utils/trpc-analyzer.ts +382 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-helper-detector.js","sourceRoot":"","sources":["../../src/utils/auth-helper-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Shared Context Helpers
3
+ * Centralized utility functions for detecting file and code context
4
+ * Used across Layer 1 and Layer 2 scanners to reduce false positives
5
+ */
6
+ /**
7
+ * Check if file is server-only (not bundled to client)
8
+ * Server-only files can safely use service role keys and other admin secrets
9
+ */
10
+ export declare function isServerOnlyFile(filePath: string): boolean;
11
+ /**
12
+ * Check if file is a test, mock, or fixture file
13
+ * These files often contain fake secrets and should have lower severity
14
+ */
15
+ export declare function isTestOrMockFile(filePath: string): boolean;
16
+ /**
17
+ * Check if file is an example/sample/template file
18
+ * These files should be skipped or have significantly reduced severity
19
+ */
20
+ export declare function isExampleFile(filePath: string): boolean;
21
+ /**
22
+ * Check if file is in an examples/demo directory
23
+ * Stronger check than isExampleFile - specifically for directories
24
+ * These are typically tutorial/demo code, not production patterns
25
+ */
26
+ export declare function isExampleDirectory(filePath: string): boolean;
27
+ /**
28
+ * Check if file is library/framework code (base classes, utilities)
29
+ * Library code is intentionally generic - consumers add security
30
+ * This applies to: langchain, vercel/ai, llamaindex, etc.
31
+ */
32
+ export declare function isLibraryCode(filePath: string): boolean;
33
+ /**
34
+ * Check if file is a fixture file (test data, mock responses)
35
+ * Fixtures contain fake data and should have reduced severity
36
+ */
37
+ export declare function isFixtureFile(filePath: string): boolean;
38
+ /**
39
+ * Check if file is documentation (README, CHANGELOG, etc.)
40
+ * These files should typically be skipped for security scanning
41
+ */
42
+ export declare function isDocumentationFile(filePath: string): boolean;
43
+ /**
44
+ * Check if file is scanner code, fixture, or rule definition
45
+ * Avoid flagging the scanner's own code/test cases
46
+ */
47
+ export declare function isScannerOrFixtureFile(filePath: string): boolean;
48
+ /**
49
+ * Check if file is likely client-bundled (exposed to browser)
50
+ */
51
+ export declare function isClientBundledFile(filePath: string): boolean;
52
+ /**
53
+ * Check if line uses environment variable reference (not hardcoded)
54
+ */
55
+ export declare function isEnvVarReference(line: string): boolean;
56
+ /**
57
+ * Check if line uses NEXT_PUBLIC_ prefix (client-exposed)
58
+ */
59
+ export declare function isNextPublicEnvVar(line: string): boolean;
60
+ /**
61
+ * Check if line is a comment
62
+ */
63
+ export declare function isComment(lineContent: string): boolean;
64
+ /**
65
+ * Check if value/line appears to be a placeholder
66
+ */
67
+ export declare function isPlaceholderValue(value: string, line: string): boolean;
68
+ /**
69
+ * Check if line/path indicates a public endpoint (health, webhook, cron)
70
+ * These don't need authentication
71
+ */
72
+ export declare function isPublicEndpoint(lineContent: string, filePath: string): boolean;
73
+ /**
74
+ * Check if webhook has signature verification nearby
75
+ */
76
+ export declare function hasWebhookSignatureVerification(lines: string[], lineIndex: number, windowSize?: number): boolean;
77
+ /**
78
+ * Check if there's an auth check nearby (bidirectional search)
79
+ */
80
+ export declare function hasAuthCheckNearby(lines: string[], lineIndex: number, windowSize?: number): boolean;
81
+ /**
82
+ * Check if this appears to be a BYOK (user-provided key) context
83
+ * BYOK is a feature, not a vulnerability, unless improperly handled
84
+ */
85
+ export declare function isBYOKContext(lineContent: string, filePath: string): boolean;
86
+ /**
87
+ * Check if key is being stored/handled properly (not exposed)
88
+ */
89
+ export declare function isKeyProperlyHandled(lineContent: string, lines: string[], lineIndex: number): boolean;
90
+ /**
91
+ * Check if this is a service role key usage that's acceptable
92
+ * Server-only + env var = acceptable
93
+ * Client exposure = critical
94
+ */
95
+ export declare function getServiceRoleKeyContext(lineContent: string, filePath: string): 'safe_server' | 'needs_review' | 'client_exposure';
96
+ //# sourceMappingURL=context-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/context-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAoB1D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmB1D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWvD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAkBvD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAcvD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAY7D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAahE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAmB7D;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAWvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAWtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAkBvE;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiD/E;AAED;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,OAAO,CA0BpH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW,GAAG,OAAO,CA0CvG;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAiD5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CA6BrG;AAMD;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,aAAa,GAAG,cAAc,GAAG,iBAAiB,CAuBpD"}
@@ -0,0 +1,493 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Context Helpers
4
+ * Centralized utility functions for detecting file and code context
5
+ * Used across Layer 1 and Layer 2 scanners to reduce false positives
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.isServerOnlyFile = isServerOnlyFile;
9
+ exports.isTestOrMockFile = isTestOrMockFile;
10
+ exports.isExampleFile = isExampleFile;
11
+ exports.isExampleDirectory = isExampleDirectory;
12
+ exports.isLibraryCode = isLibraryCode;
13
+ exports.isFixtureFile = isFixtureFile;
14
+ exports.isDocumentationFile = isDocumentationFile;
15
+ exports.isScannerOrFixtureFile = isScannerOrFixtureFile;
16
+ exports.isClientBundledFile = isClientBundledFile;
17
+ exports.isEnvVarReference = isEnvVarReference;
18
+ exports.isNextPublicEnvVar = isNextPublicEnvVar;
19
+ exports.isComment = isComment;
20
+ exports.isPlaceholderValue = isPlaceholderValue;
21
+ exports.isPublicEndpoint = isPublicEndpoint;
22
+ exports.hasWebhookSignatureVerification = hasWebhookSignatureVerification;
23
+ exports.hasAuthCheckNearby = hasAuthCheckNearby;
24
+ exports.isBYOKContext = isBYOKContext;
25
+ exports.isKeyProperlyHandled = isKeyProperlyHandled;
26
+ exports.getServiceRoleKeyContext = getServiceRoleKeyContext;
27
+ // ============================================================================
28
+ // File Path Context Detection
29
+ // ============================================================================
30
+ /**
31
+ * Check if file is server-only (not bundled to client)
32
+ * Server-only files can safely use service role keys and other admin secrets
33
+ */
34
+ function isServerOnlyFile(filePath) {
35
+ const serverPatterns = [
36
+ /lib\/supabase\/(server|admin|middleware)\.(ts|js)$/i,
37
+ /\/api\//i, // Next.js API routes
38
+ /\/server\//i, // Server directories
39
+ /\.server\.(ts|js|tsx|jsx)$/i, // .server.ts files
40
+ /\/actions\//i, // Server actions
41
+ /middleware\.(ts|js)$/i, // Middleware files
42
+ /\/cron\//i, // Cron jobs
43
+ /\/workers?\//i, // Worker files
44
+ /\/scripts?\//i, // Scripts
45
+ /\/seed\//i, // Database seeds
46
+ /\/migrations?\//i, // Database migrations
47
+ /\/lib\/[^/]+\/server/i, // lib/*/server patterns
48
+ /\/utils\/server/i, // utils/server
49
+ /\/helpers\/server/i, // helpers/server
50
+ /\.action\.(ts|js)$/i, // .action.ts files
51
+ /route\.(ts|js)$/i, // Next.js route handlers
52
+ ];
53
+ return serverPatterns.some(pattern => pattern.test(filePath));
54
+ }
55
+ /**
56
+ * Check if file is a test, mock, or fixture file
57
+ * These files often contain fake secrets and should have lower severity
58
+ */
59
+ function isTestOrMockFile(filePath) {
60
+ const testPatterns = [
61
+ /\.(test|spec)\.(ts|tsx|js|jsx)$/i,
62
+ /\/__tests__\//i,
63
+ /\/test\//i,
64
+ /\/tests\//i,
65
+ /\/mock/i,
66
+ /\/mocks\//i,
67
+ /\/fixtures?\//i,
68
+ /\.mock\.(ts|tsx|js|jsx)$/i,
69
+ /\.stub\.(ts|tsx|js|jsx)$/i,
70
+ /\.(stories|story)\.(ts|tsx|js|jsx)$/i, // Storybook
71
+ /\/e2e\//i, // E2E tests
72
+ /\/cypress\//i, // Cypress tests
73
+ /\/playwright\//i, // Playwright tests
74
+ /\/vitest\//i, // Vitest
75
+ /\/jest\//i, // Jest
76
+ ];
77
+ return testPatterns.some(pattern => pattern.test(filePath));
78
+ }
79
+ /**
80
+ * Check if file is an example/sample/template file
81
+ * These files should be skipped or have significantly reduced severity
82
+ */
83
+ function isExampleFile(filePath) {
84
+ return (filePath.includes('.example') ||
85
+ filePath.includes('.sample') ||
86
+ filePath.includes('.template') ||
87
+ filePath.includes('README') ||
88
+ filePath.includes('/examples/') ||
89
+ filePath.includes('/example/') ||
90
+ filePath.includes('/demo/') ||
91
+ filePath.includes('/demos/'));
92
+ }
93
+ /**
94
+ * Check if file is in an examples/demo directory
95
+ * Stronger check than isExampleFile - specifically for directories
96
+ * These are typically tutorial/demo code, not production patterns
97
+ */
98
+ function isExampleDirectory(filePath) {
99
+ const examplePatterns = [
100
+ /\/examples?\//i,
101
+ /\/demos?\//i,
102
+ /\/templates?\//i,
103
+ /\/samples?\//i,
104
+ /\/tutorials?\//i,
105
+ /\/cookbook\//i,
106
+ /\/quickstart\//i,
107
+ /\/getting-started\//i,
108
+ ];
109
+ return examplePatterns.some(pattern => pattern.test(filePath));
110
+ }
111
+ /**
112
+ * Check if file is library/framework code (base classes, utilities)
113
+ * Library code is intentionally generic - consumers add security
114
+ * This applies to: langchain, vercel/ai, llamaindex, etc.
115
+ */
116
+ function isLibraryCode(filePath) {
117
+ const libraryPatterns = [
118
+ // Package source directories in monorepos
119
+ /\/libs\/[^/]+\/src\//i,
120
+ /\/packages\/[^/]+\/src\//i,
121
+ // Common library patterns
122
+ /\/langchain-/i,
123
+ /\/llamaindex/i,
124
+ // Source files that aren't examples or tests
125
+ /\/src\/(?!.*(?:examples?|demos?|tests?)\/).*\.(ts|js)$/i,
126
+ ];
127
+ // Must match library pattern AND not be example/test
128
+ return (libraryPatterns.some(pattern => pattern.test(filePath)) &&
129
+ !isExampleDirectory(filePath) &&
130
+ !isTestOrMockFile(filePath));
131
+ }
132
+ /**
133
+ * Check if file is a fixture file (test data, mock responses)
134
+ * Fixtures contain fake data and should have reduced severity
135
+ */
136
+ function isFixtureFile(filePath) {
137
+ const fixturePatterns = [
138
+ /__fixtures__\//i,
139
+ /\.fixture\./i,
140
+ /fixtures?\//i,
141
+ /testdata\//i,
142
+ /test-data\//i,
143
+ /test_data\//i,
144
+ /mock-data\//i,
145
+ /mockdata\//i,
146
+ /\.mock\./i,
147
+ /\.stub\./i,
148
+ ];
149
+ return fixturePatterns.some(pattern => pattern.test(filePath));
150
+ }
151
+ /**
152
+ * Check if file is documentation (README, CHANGELOG, etc.)
153
+ * These files should typically be skipped for security scanning
154
+ */
155
+ function isDocumentationFile(filePath) {
156
+ const docPatterns = [
157
+ /README/i,
158
+ /CHANGELOG/i,
159
+ /CONTRIBUTING/i,
160
+ /LICENSE/i,
161
+ /\.md$/i,
162
+ /\.mdx$/i,
163
+ /\/docs\//i,
164
+ /\/documentation\//i,
165
+ ];
166
+ return docPatterns.some(pattern => pattern.test(filePath));
167
+ }
168
+ /**
169
+ * Check if file is scanner code, fixture, or rule definition
170
+ * Avoid flagging the scanner's own code/test cases
171
+ */
172
+ function isScannerOrFixtureFile(filePath) {
173
+ const scannerPatterns = [
174
+ /\/scanner\//i,
175
+ /\/detector\//i,
176
+ /\/security\//i,
177
+ /\/rules?\//i,
178
+ /\/patterns?\//i,
179
+ /\/fixtures?\//i,
180
+ /\/testdata\//i,
181
+ /\/test-data\//i,
182
+ /\/test_data\//i,
183
+ ];
184
+ return scannerPatterns.some(pattern => pattern.test(filePath));
185
+ }
186
+ /**
187
+ * Check if file is likely client-bundled (exposed to browser)
188
+ */
189
+ function isClientBundledFile(filePath) {
190
+ // Files in these locations are typically client-bundled
191
+ const clientPatterns = [
192
+ /\/components\//i,
193
+ /\/pages\//i, // Next.js pages (can be SSR, but code visible)
194
+ /\/app\/.*page\.(ts|tsx|js|jsx)$/i, // Next.js app router pages
195
+ /\/hooks\//i,
196
+ /\/contexts?\//i,
197
+ /\/providers?\//i,
198
+ /\/stores?\//i, // State management
199
+ /\.client\.(ts|js|tsx|jsx)$/i, // .client.ts files
200
+ ];
201
+ // But not if they're also server files
202
+ if (isServerOnlyFile(filePath)) {
203
+ return false;
204
+ }
205
+ return clientPatterns.some(pattern => pattern.test(filePath));
206
+ }
207
+ // ============================================================================
208
+ // Code Line Context Detection
209
+ // ============================================================================
210
+ /**
211
+ * Check if line uses environment variable reference (not hardcoded)
212
+ */
213
+ function isEnvVarReference(line) {
214
+ return (/process\.env\.[A-Z_]+/.test(line) ||
215
+ /\$\{?[A-Z_]+\}?/.test(line) ||
216
+ /import\.meta\.env\.[A-Z_]+/.test(line) ||
217
+ /Deno\.env\.get\(/.test(line) ||
218
+ /os\.environ\[/.test(line) || // Python
219
+ /os\.getenv\(/.test(line) || // Python
220
+ /ENV\[['"]/.test(line) || // Ruby
221
+ /env\(["']/.test(line) // Laravel PHP
222
+ );
223
+ }
224
+ /**
225
+ * Check if line uses NEXT_PUBLIC_ prefix (client-exposed)
226
+ */
227
+ function isNextPublicEnvVar(line) {
228
+ return /NEXT_PUBLIC_[A-Z_]+/.test(line);
229
+ }
230
+ /**
231
+ * Check if line is a comment
232
+ */
233
+ function isComment(lineContent) {
234
+ const trimmed = lineContent.trim();
235
+ return (trimmed.startsWith('//') ||
236
+ trimmed.startsWith('#') ||
237
+ trimmed.startsWith('*') ||
238
+ trimmed.startsWith('/*') ||
239
+ trimmed.startsWith('"""') ||
240
+ trimmed.startsWith("'''") ||
241
+ trimmed.startsWith('<!--'));
242
+ }
243
+ /**
244
+ * Check if value/line appears to be a placeholder
245
+ */
246
+ function isPlaceholderValue(value, line) {
247
+ const placeholderPatterns = [
248
+ /xxx/i,
249
+ /your[-_]?/i,
250
+ /YOUR[-_]?/i,
251
+ /placeholder/i,
252
+ /example/i,
253
+ /REPLACE[-_]?/i,
254
+ /CHANGEME/i,
255
+ /<[a-z_-]+>/i, // <your-api-key>
256
+ /\[\s*[a-z_-]+\s*\]/i, // [API_KEY]
257
+ /todo/i,
258
+ /fixme/i,
259
+ ];
260
+ return placeholderPatterns.some(pattern => pattern.test(value) || pattern.test(line));
261
+ }
262
+ // ============================================================================
263
+ // Security Context Detection
264
+ // ============================================================================
265
+ /**
266
+ * Check if line/path indicates a public endpoint (health, webhook, cron)
267
+ * These don't need authentication
268
+ */
269
+ function isPublicEndpoint(lineContent, filePath) {
270
+ // Health check patterns
271
+ const healthCheckPatterns = [
272
+ /\/health\/?["'`]?/i,
273
+ /\/healthz\/?["'`]?/i,
274
+ /\/ready\/?["'`]?/i,
275
+ /\/readyz\/?["'`]?/i,
276
+ /\/live\/?["'`]?/i,
277
+ /\/livez\/?["'`]?/i,
278
+ /\/ping\/?["'`]?/i,
279
+ /\/status\/?["'`]?/i,
280
+ /\/api\/health/i,
281
+ /\/api\/status/i,
282
+ /\/_health/i,
283
+ ];
284
+ // Webhook patterns
285
+ const webhookPatterns = [
286
+ /\/webhook/i,
287
+ /\/webhooks\//i,
288
+ /\/callback/i,
289
+ /\/stripe\/webhook/i,
290
+ /\/github\/webhook/i,
291
+ /\/clerk\/webhook/i,
292
+ ];
293
+ // Cron/scheduled job patterns
294
+ const cronPatterns = [
295
+ /\/cron\//i,
296
+ /\/scheduled\//i,
297
+ /\/tasks?\//i,
298
+ /\/jobs?\//i,
299
+ ];
300
+ // Check line content
301
+ const allPatterns = [...healthCheckPatterns, ...webhookPatterns, ...cronPatterns];
302
+ if (allPatterns.some(pattern => pattern.test(lineContent))) {
303
+ return true;
304
+ }
305
+ // Check file path
306
+ if (filePath.includes('/health') ||
307
+ filePath.includes('/webhook') ||
308
+ filePath.includes('/cron') ||
309
+ filePath.includes('/scheduled')) {
310
+ return true;
311
+ }
312
+ return false;
313
+ }
314
+ /**
315
+ * Check if webhook has signature verification nearby
316
+ */
317
+ function hasWebhookSignatureVerification(lines, lineIndex, windowSize = 15) {
318
+ const signaturePatterns = [
319
+ /verifySignature/i,
320
+ /validateSignature/i,
321
+ /checkSignature/i,
322
+ /signature.*verify/i,
323
+ /verify.*signature/i,
324
+ /hmac/i,
325
+ /x-hub-signature/i,
326
+ /stripe-signature/i,
327
+ /svix-signature/i,
328
+ /webhook.*secret/i,
329
+ /constructEvent/i, // Stripe webhook verification
330
+ /Webhook\.verify/i, // Generic webhook verify
331
+ ];
332
+ const start = Math.max(0, lineIndex - windowSize);
333
+ const end = Math.min(lines.length, lineIndex + windowSize);
334
+ for (let i = start; i < end; i++) {
335
+ if (signaturePatterns.some(pattern => pattern.test(lines[i]))) {
336
+ return true;
337
+ }
338
+ }
339
+ return false;
340
+ }
341
+ /**
342
+ * Check if there's an auth check nearby (bidirectional search)
343
+ */
344
+ function hasAuthCheckNearby(lines, lineIndex, windowSize = 20) {
345
+ const authPatterns = [
346
+ /authorization/i,
347
+ /bearer\s+token/i,
348
+ /req\.user/i,
349
+ /request\.user/i,
350
+ /\.user\s*[=!]/,
351
+ /isAuthenticated/i,
352
+ /requireAuth/i,
353
+ /ensureAuth/i,
354
+ /checkAuth/i,
355
+ /verifyToken/i,
356
+ /validateToken/i,
357
+ /checkPermission/i,
358
+ /getServerSession/i,
359
+ /middleware.*auth/i,
360
+ /session\.user/i,
361
+ /currentUser/i,
362
+ /getSession\(/i,
363
+ /useSession\(/i,
364
+ /auth\(\)/i, // Next-Auth auth()
365
+ /withAuth/i,
366
+ /protected/i,
367
+ /verifySignature/i, // Webhook signature
368
+ /checkApiKey/i,
369
+ /validateApiKey/i,
370
+ /requireRole/i,
371
+ /hasRole/i,
372
+ /isAdmin/i,
373
+ ];
374
+ // Search bidirectionally
375
+ const start = Math.max(0, lineIndex - windowSize);
376
+ const end = Math.min(lines.length, lineIndex + windowSize);
377
+ for (let i = start; i < end; i++) {
378
+ if (authPatterns.some(pattern => pattern.test(lines[i]))) {
379
+ return true;
380
+ }
381
+ }
382
+ return false;
383
+ }
384
+ // ============================================================================
385
+ // BYOK (Bring Your Own Key) Context Detection
386
+ // ============================================================================
387
+ /**
388
+ * Check if this appears to be a BYOK (user-provided key) context
389
+ * BYOK is a feature, not a vulnerability, unless improperly handled
390
+ */
391
+ function isBYOKContext(lineContent, filePath) {
392
+ // Common BYOK patterns
393
+ const byokPatterns = [
394
+ /user.*api.*key/i,
395
+ /customer.*key/i,
396
+ /your.*api.*key/i,
397
+ /provide.*key/i,
398
+ /enter.*key/i,
399
+ /input.*key/i,
400
+ /form.*key/i,
401
+ /settings.*key/i,
402
+ /config.*key.*user/i,
403
+ /BYOK/i,
404
+ /bring.*your.*own/i,
405
+ ];
406
+ // Form/input contexts
407
+ const inputPatterns = [
408
+ /input.*type/i,
409
+ /onChange/i,
410
+ /onSubmit/i,
411
+ /handleSubmit/i,
412
+ /useState.*key/i,
413
+ /form.*data/i,
414
+ ];
415
+ // Settings/config UI patterns
416
+ const settingsPatterns = [
417
+ /\/settings\//i,
418
+ /\/config\//i,
419
+ /\/preferences\//i,
420
+ /\/profile\//i,
421
+ ];
422
+ // Check line content
423
+ if (byokPatterns.some(p => p.test(lineContent)) ||
424
+ inputPatterns.some(p => p.test(lineContent))) {
425
+ return true;
426
+ }
427
+ // Check file path
428
+ if (settingsPatterns.some(p => p.test(filePath))) {
429
+ // In settings files, look for user input context
430
+ if (inputPatterns.some(p => p.test(lineContent))) {
431
+ return true;
432
+ }
433
+ }
434
+ return false;
435
+ }
436
+ /**
437
+ * Check if key is being stored/handled properly (not exposed)
438
+ */
439
+ function isKeyProperlyHandled(lineContent, lines, lineIndex) {
440
+ // Proper handling patterns (encryption, secure storage, etc.)
441
+ const properHandlingPatterns = [
442
+ /encrypt/i,
443
+ /hash/i,
444
+ /secure.*storage/i,
445
+ /keychain/i,
446
+ /vault/i,
447
+ /secretsManager/i,
448
+ /kms/i,
449
+ /\.env/i,
450
+ ];
451
+ // Check current line
452
+ if (properHandlingPatterns.some(p => p.test(lineContent))) {
453
+ return true;
454
+ }
455
+ // Check nearby lines (5 lines before and after)
456
+ const start = Math.max(0, lineIndex - 5);
457
+ const end = Math.min(lines.length, lineIndex + 5);
458
+ for (let i = start; i < end; i++) {
459
+ if (properHandlingPatterns.some(p => p.test(lines[i]))) {
460
+ return true;
461
+ }
462
+ }
463
+ return false;
464
+ }
465
+ // ============================================================================
466
+ // Service Role Key Context
467
+ // ============================================================================
468
+ /**
469
+ * Check if this is a service role key usage that's acceptable
470
+ * Server-only + env var = acceptable
471
+ * Client exposure = critical
472
+ */
473
+ function getServiceRoleKeyContext(lineContent, filePath) {
474
+ const isServer = isServerOnlyFile(filePath);
475
+ const usesEnvVar = isEnvVarReference(lineContent);
476
+ const isClientFile = isClientBundledFile(filePath);
477
+ const isNextPublic = isNextPublicEnvVar(lineContent);
478
+ // NEXT_PUBLIC_ service role key = always critical (client exposure)
479
+ if (isNextPublic) {
480
+ return 'client_exposure';
481
+ }
482
+ // Server-only file using env var = safe
483
+ if (isServer && usesEnvVar) {
484
+ return 'safe_server';
485
+ }
486
+ // Client-bundled file = exposure risk
487
+ if (isClientFile) {
488
+ return 'client_exposure';
489
+ }
490
+ // Hardcoded or ambiguous = needs review
491
+ return 'needs_review';
492
+ }
493
+ //# sourceMappingURL=context-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-helpers.js","sourceRoot":"","sources":["../../src/utils/context-helpers.ts"],"names":[],"mappings":"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"}