@oculum/scanner 1.0.11 → 1.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai-context/index.d.ts +6 -0
- package/dist/ai-context/index.d.ts.map +1 -0
- package/dist/ai-context/index.js +13 -0
- package/dist/ai-context/index.js.map +1 -0
- package/dist/ai-context/manager.d.ts +67 -0
- package/dist/ai-context/manager.d.ts.map +1 -0
- package/dist/ai-context/manager.js +104 -0
- package/dist/ai-context/manager.js.map +1 -0
- package/dist/category-filter.d.ts +125 -0
- package/dist/category-filter.d.ts.map +1 -0
- package/dist/category-filter.js +360 -0
- package/dist/category-filter.js.map +1 -0
- package/dist/detect/ai-code/agent-tools.d.ts +22 -0
- package/dist/detect/ai-code/agent-tools.d.ts.map +1 -0
- package/dist/detect/ai-code/agent-tools.js +1509 -0
- package/dist/detect/ai-code/agent-tools.js.map +1 -0
- package/dist/detect/ai-code/byok-patterns.d.ts +15 -0
- package/dist/detect/ai-code/byok-patterns.d.ts.map +1 -0
- package/dist/detect/ai-code/byok-patterns.js +313 -0
- package/dist/detect/ai-code/byok-patterns.js.map +1 -0
- package/dist/detect/ai-code/endpoint-protection.d.ts +38 -0
- package/dist/detect/ai-code/endpoint-protection.d.ts.map +1 -0
- package/dist/detect/ai-code/endpoint-protection.js +349 -0
- package/dist/detect/ai-code/endpoint-protection.js.map +1 -0
- package/dist/detect/ai-code/execution-sinks.d.ts +21 -0
- package/dist/detect/ai-code/execution-sinks.d.ts.map +1 -0
- package/dist/detect/ai-code/execution-sinks.js +1158 -0
- package/dist/detect/ai-code/execution-sinks.js.map +1 -0
- package/dist/detect/ai-code/fingerprinting.d.ts +10 -0
- package/dist/detect/ai-code/fingerprinting.d.ts.map +1 -0
- package/dist/detect/ai-code/fingerprinting.js +665 -0
- package/dist/detect/ai-code/fingerprinting.js.map +1 -0
- package/dist/detect/ai-code/index.d.ts +12 -0
- package/dist/detect/ai-code/index.d.ts.map +1 -0
- package/dist/detect/ai-code/index.js +26 -0
- package/dist/detect/ai-code/index.js.map +1 -0
- package/dist/detect/ai-code/mcp-security.d.ts +20 -0
- package/dist/detect/ai-code/mcp-security.d.ts.map +1 -0
- package/dist/detect/ai-code/mcp-security.js +880 -0
- package/dist/detect/ai-code/mcp-security.js.map +1 -0
- package/dist/detect/ai-code/model-supply-chain.d.ts +23 -0
- package/dist/detect/ai-code/model-supply-chain.d.ts.map +1 -0
- package/dist/detect/ai-code/model-supply-chain.js +447 -0
- package/dist/detect/ai-code/model-supply-chain.js.map +1 -0
- package/dist/detect/ai-code/package-hallucination.d.ts +22 -0
- package/dist/detect/ai-code/package-hallucination.d.ts.map +1 -0
- package/dist/detect/ai-code/package-hallucination.js +841 -0
- package/dist/detect/ai-code/package-hallucination.js.map +1 -0
- package/dist/detect/ai-code/prompt-hygiene.d.ts +22 -0
- package/dist/detect/ai-code/prompt-hygiene.d.ts.map +1 -0
- package/dist/detect/ai-code/prompt-hygiene.js +1177 -0
- package/dist/detect/ai-code/prompt-hygiene.js.map +1 -0
- package/dist/detect/ai-code/rag-safety.d.ts +24 -0
- package/dist/detect/ai-code/rag-safety.d.ts.map +1 -0
- package/dist/detect/ai-code/rag-safety.js +913 -0
- package/dist/detect/ai-code/rag-safety.js.map +1 -0
- package/dist/detect/ai-code/schema-validation.d.ts +28 -0
- package/dist/detect/ai-code/schema-validation.d.ts.map +1 -0
- package/dist/detect/ai-code/schema-validation.js +378 -0
- package/dist/detect/ai-code/schema-validation.js.map +1 -0
- package/dist/detect/config/agent-skill-injection.d.ts +27 -0
- package/dist/detect/config/agent-skill-injection.d.ts.map +1 -0
- package/dist/detect/config/agent-skill-injection.js +472 -0
- package/dist/detect/config/agent-skill-injection.js.map +1 -0
- package/dist/detect/config/comments.d.ts +11 -0
- package/dist/detect/config/comments.d.ts.map +1 -0
- package/dist/detect/config/comments.js +206 -0
- package/dist/detect/config/comments.js.map +1 -0
- package/dist/detect/config/file-flags.d.ts +10 -0
- package/dist/detect/config/file-flags.d.ts.map +1 -0
- package/dist/detect/config/file-flags.js +124 -0
- package/dist/detect/config/file-flags.js.map +1 -0
- package/dist/detect/config/index.d.ts +7 -0
- package/dist/detect/config/index.d.ts.map +1 -0
- package/dist/detect/config/index.js +17 -0
- package/dist/detect/config/index.js.map +1 -0
- package/dist/detect/config/osv-check.d.ts +75 -0
- package/dist/detect/config/osv-check.d.ts.map +1 -0
- package/dist/detect/config/osv-check.js +309 -0
- package/dist/detect/config/osv-check.js.map +1 -0
- package/dist/detect/config/package-check.d.ts +63 -0
- package/dist/detect/config/package-check.d.ts.map +1 -0
- package/dist/detect/config/package-check.js +509 -0
- package/dist/detect/config/package-check.js.map +1 -0
- package/dist/detect/config/urls.d.ts +11 -0
- package/dist/detect/config/urls.d.ts.map +1 -0
- package/dist/detect/config/urls.js +450 -0
- package/dist/detect/config/urls.js.map +1 -0
- package/dist/detect/index.d.ts +37 -0
- package/dist/detect/index.d.ts.map +1 -0
- package/dist/detect/index.js +77 -0
- package/dist/detect/index.js.map +1 -0
- package/dist/detect/secrets/config-audit.d.ts +11 -0
- package/dist/detect/secrets/config-audit.d.ts.map +1 -0
- package/dist/detect/secrets/config-audit.js +315 -0
- package/dist/detect/secrets/config-audit.js.map +1 -0
- package/dist/detect/secrets/config-mcp-audit.d.ts +23 -0
- package/dist/detect/secrets/config-mcp-audit.d.ts.map +1 -0
- package/dist/detect/secrets/config-mcp-audit.js +243 -0
- package/dist/detect/secrets/config-mcp-audit.js.map +1 -0
- package/dist/detect/secrets/entropy.d.ts +11 -0
- package/dist/detect/secrets/entropy.d.ts.map +1 -0
- package/dist/detect/secrets/entropy.js +751 -0
- package/dist/detect/secrets/entropy.js.map +1 -0
- package/dist/detect/secrets/index.d.ts +36 -0
- package/dist/detect/secrets/index.d.ts.map +1 -0
- package/dist/detect/secrets/index.js +174 -0
- package/dist/detect/secrets/index.js.map +1 -0
- package/dist/detect/secrets/patterns.d.ts +11 -0
- package/dist/detect/secrets/patterns.d.ts.map +1 -0
- package/dist/detect/secrets/patterns.js +518 -0
- package/dist/detect/secrets/patterns.js.map +1 -0
- package/dist/detect/secrets/weak-crypto.d.ts +10 -0
- package/dist/detect/secrets/weak-crypto.d.ts.map +1 -0
- package/dist/detect/secrets/weak-crypto.js +432 -0
- package/dist/detect/secrets/weak-crypto.js.map +1 -0
- package/dist/detect/structural/auth-patterns.d.ts +22 -0
- package/dist/detect/structural/auth-patterns.d.ts.map +1 -0
- package/dist/detect/structural/auth-patterns.js +533 -0
- package/dist/detect/structural/auth-patterns.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/child-process.d.ts +16 -0
- package/dist/detect/structural/dangerous-functions/child-process.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/child-process.js +74 -0
- package/dist/detect/structural/dangerous-functions/child-process.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.d.ts +34 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.js +230 -0
- package/dist/detect/structural/dangerous-functions/dom-xss.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/index.d.ts +16 -0
- package/dist/detect/structural/dangerous-functions/index.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/index.js +1193 -0
- package/dist/detect/structural/dangerous-functions/index.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/json-parse.d.ts +31 -0
- package/dist/detect/structural/dangerous-functions/json-parse.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/json-parse.js +326 -0
- package/dist/detect/structural/dangerous-functions/json-parse.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/math-random.d.ts +111 -0
- package/dist/detect/structural/dangerous-functions/math-random.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/math-random.js +684 -0
- package/dist/detect/structural/dangerous-functions/math-random.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/patterns.d.ts +21 -0
- package/dist/detect/structural/dangerous-functions/patterns.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/patterns.js +163 -0
- package/dist/detect/structural/dangerous-functions/patterns.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/request-validation.d.ts +13 -0
- package/dist/detect/structural/dangerous-functions/request-validation.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/request-validation.js +126 -0
- package/dist/detect/structural/dangerous-functions/request-validation.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.d.ts +24 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.js +70 -0
- package/dist/detect/structural/dangerous-functions/utils/control-flow.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.d.ts +31 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.js +147 -0
- package/dist/detect/structural/dangerous-functions/utils/helpers.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/index.d.ts +9 -0
- package/dist/detect/structural/dangerous-functions/utils/index.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/index.js +23 -0
- package/dist/detect/structural/dangerous-functions/utils/index.js.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.d.ts +22 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.d.ts.map +1 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.js +102 -0
- package/dist/detect/structural/dangerous-functions/utils/schema-validation.js.map +1 -0
- package/dist/detect/structural/data-exposure.d.ts +19 -0
- package/dist/detect/structural/data-exposure.d.ts.map +1 -0
- package/dist/detect/structural/data-exposure.js +262 -0
- package/dist/detect/structural/data-exposure.js.map +1 -0
- package/dist/detect/structural/framework-checks.d.ts +10 -0
- package/dist/detect/structural/framework-checks.d.ts.map +1 -0
- package/dist/detect/structural/framework-checks.js +389 -0
- package/dist/detect/structural/framework-checks.js.map +1 -0
- package/dist/detect/structural/index.d.ts +71 -0
- package/dist/detect/structural/index.d.ts.map +1 -0
- package/dist/detect/structural/index.js +510 -0
- package/dist/detect/structural/index.js.map +1 -0
- package/dist/detect/structural/log-injection.d.ts +18 -0
- package/dist/detect/structural/log-injection.d.ts.map +1 -0
- package/dist/detect/structural/log-injection.js +217 -0
- package/dist/detect/structural/log-injection.js.map +1 -0
- package/dist/detect/structural/logic-gates.d.ts +10 -0
- package/dist/detect/structural/logic-gates.d.ts.map +1 -0
- package/dist/detect/structural/logic-gates.js +227 -0
- package/dist/detect/structural/logic-gates.js.map +1 -0
- package/dist/detect/structural/risky-imports.d.ts +10 -0
- package/dist/detect/structural/risky-imports.d.ts.map +1 -0
- package/dist/detect/structural/risky-imports.js +168 -0
- package/dist/detect/structural/risky-imports.js.map +1 -0
- package/dist/detect/structural/security-headers.d.ts +18 -0
- package/dist/detect/structural/security-headers.d.ts.map +1 -0
- package/dist/detect/structural/security-headers.js +196 -0
- package/dist/detect/structural/security-headers.js.map +1 -0
- package/dist/detect/structural/ssrf-detection.d.ts +18 -0
- package/dist/detect/structural/ssrf-detection.d.ts.map +1 -0
- package/dist/detect/structural/ssrf-detection.js +263 -0
- package/dist/detect/structural/ssrf-detection.js.map +1 -0
- package/dist/detect/structural/variables.d.ts +11 -0
- package/dist/detect/structural/variables.d.ts.map +1 -0
- package/dist/detect/structural/variables.js +159 -0
- package/dist/detect/structural/variables.js.map +1 -0
- package/dist/detect/structural/xxe-detection.d.ts +18 -0
- package/dist/detect/structural/xxe-detection.d.ts.map +1 -0
- package/dist/detect/structural/xxe-detection.js +245 -0
- package/dist/detect/structural/xxe-detection.js.map +1 -0
- package/dist/filtering/context-adjustments.d.ts +23 -0
- package/dist/filtering/context-adjustments.d.ts.map +1 -0
- package/dist/filtering/context-adjustments.js +100 -0
- package/dist/filtering/context-adjustments.js.map +1 -0
- package/dist/filtering/index.d.ts +3 -0
- package/dist/filtering/index.d.ts.map +1 -0
- package/dist/filtering/index.js +8 -0
- package/dist/filtering/index.js.map +1 -0
- package/dist/filtering/pipeline.d.ts +48 -0
- package/dist/filtering/pipeline.d.ts.map +1 -0
- package/dist/filtering/pipeline.js +76 -0
- package/dist/filtering/pipeline.js.map +1 -0
- package/dist/formatters/ai-context.d.ts +23 -0
- package/dist/formatters/ai-context.d.ts.map +1 -0
- package/dist/formatters/ai-context.js +238 -0
- package/dist/formatters/ai-context.js.map +1 -0
- package/dist/formatters/github-comment.d.ts +1 -1
- package/dist/formatters/github-comment.d.ts.map +1 -1
- package/dist/formatters/github-comment.js +2 -2
- package/dist/formatters/github-comment.js.map +1 -1
- package/dist/formatters/ide/claude-code.d.ts +17 -0
- package/dist/formatters/ide/claude-code.d.ts.map +1 -0
- package/dist/formatters/ide/claude-code.js +94 -0
- package/dist/formatters/ide/claude-code.js.map +1 -0
- package/dist/formatters/ide/cursor.d.ts +13 -0
- package/dist/formatters/ide/cursor.d.ts.map +1 -0
- package/dist/formatters/ide/cursor.js +125 -0
- package/dist/formatters/ide/cursor.js.map +1 -0
- package/dist/formatters/ide/index.d.ts +62 -0
- package/dist/formatters/ide/index.d.ts.map +1 -0
- package/dist/formatters/ide/index.js +184 -0
- package/dist/formatters/ide/index.js.map +1 -0
- package/dist/formatters/ide/windsurf.d.ts +13 -0
- package/dist/formatters/ide/windsurf.d.ts.map +1 -0
- package/dist/formatters/ide/windsurf.js +117 -0
- package/dist/formatters/ide/windsurf.js.map +1 -0
- package/dist/formatters/index.d.ts +2 -0
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +17 -1
- package/dist/formatters/index.js.map +1 -1
- package/dist/index.d.ts +17 -60
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -824
- package/dist/index.js.map +1 -1
- package/dist/layer1/comments.d.ts +4 -1
- package/dist/layer1/comments.d.ts.map +1 -1
- package/dist/layer1/comments.js +1 -1
- package/dist/layer1/comments.js.map +1 -1
- package/dist/layer1/config-audit.d.ts +4 -1
- package/dist/layer1/config-audit.d.ts.map +1 -1
- package/dist/layer1/config-audit.js +45 -11
- package/dist/layer1/config-audit.js.map +1 -1
- package/dist/layer1/config-mcp-audit.d.ts +4 -1
- package/dist/layer1/config-mcp-audit.d.ts.map +1 -1
- package/dist/layer1/config-mcp-audit.js +2 -2
- package/dist/layer1/config-mcp-audit.js.map +1 -1
- package/dist/layer1/entropy.d.ts +4 -1
- package/dist/layer1/entropy.d.ts.map +1 -1
- package/dist/layer1/entropy.js +212 -1
- package/dist/layer1/entropy.js.map +1 -1
- package/dist/layer1/file-flags.d.ts +4 -1
- package/dist/layer1/file-flags.d.ts.map +1 -1
- package/dist/layer1/file-flags.js +12 -5
- package/dist/layer1/file-flags.js.map +1 -1
- package/dist/layer1/index.d.ts.map +1 -1
- package/dist/layer1/index.js +14 -19
- package/dist/layer1/index.js.map +1 -1
- package/dist/layer1/patterns.d.ts +4 -1
- package/dist/layer1/patterns.d.ts.map +1 -1
- package/dist/layer1/patterns.js +34 -4
- package/dist/layer1/patterns.js.map +1 -1
- package/dist/layer1/urls.d.ts +4 -1
- package/dist/layer1/urls.d.ts.map +1 -1
- package/dist/layer1/urls.js +162 -14
- package/dist/layer1/urls.js.map +1 -1
- package/dist/layer1/weak-crypto.d.ts +4 -1
- package/dist/layer1/weak-crypto.d.ts.map +1 -1
- package/dist/layer1/weak-crypto.js +144 -7
- package/dist/layer1/weak-crypto.js.map +1 -1
- package/dist/layer2/ai-agent-tools.d.ts +4 -1
- package/dist/layer2/ai-agent-tools.d.ts.map +1 -1
- package/dist/layer2/ai-agent-tools.js +661 -2
- package/dist/layer2/ai-agent-tools.js.map +1 -1
- package/dist/layer2/ai-endpoint-protection.d.ts +2 -0
- package/dist/layer2/ai-endpoint-protection.d.ts.map +1 -1
- package/dist/layer2/ai-endpoint-protection.js +1 -1
- package/dist/layer2/ai-endpoint-protection.js.map +1 -1
- package/dist/layer2/ai-execution-sinks.d.ts +4 -1
- package/dist/layer2/ai-execution-sinks.d.ts.map +1 -1
- package/dist/layer2/ai-execution-sinks.js +252 -43
- package/dist/layer2/ai-execution-sinks.js.map +1 -1
- package/dist/layer2/ai-fingerprinting.d.ts +4 -1
- package/dist/layer2/ai-fingerprinting.d.ts.map +1 -1
- package/dist/layer2/ai-fingerprinting.js +25 -32
- package/dist/layer2/ai-fingerprinting.js.map +1 -1
- package/dist/layer2/ai-mcp-security.d.ts +4 -1
- package/dist/layer2/ai-mcp-security.d.ts.map +1 -1
- package/dist/layer2/ai-mcp-security.js +200 -2
- package/dist/layer2/ai-mcp-security.js.map +1 -1
- package/dist/layer2/ai-package-hallucination.d.ts +4 -1
- package/dist/layer2/ai-package-hallucination.d.ts.map +1 -1
- package/dist/layer2/ai-package-hallucination.js +136 -4
- package/dist/layer2/ai-package-hallucination.js.map +1 -1
- package/dist/layer2/ai-prompt-hygiene.d.ts +4 -1
- package/dist/layer2/ai-prompt-hygiene.d.ts.map +1 -1
- package/dist/layer2/ai-prompt-hygiene.js +342 -28
- package/dist/layer2/ai-prompt-hygiene.js.map +1 -1
- package/dist/layer2/ai-rag-safety.d.ts +4 -1
- package/dist/layer2/ai-rag-safety.d.ts.map +1 -1
- package/dist/layer2/ai-rag-safety.js +82 -2
- package/dist/layer2/ai-rag-safety.js.map +1 -1
- package/dist/layer2/ai-schema-validation.d.ts +4 -1
- package/dist/layer2/ai-schema-validation.d.ts.map +1 -1
- package/dist/layer2/ai-schema-validation.js +2 -2
- package/dist/layer2/ai-schema-validation.js.map +1 -1
- package/dist/layer2/auth-antipatterns.d.ts +2 -0
- package/dist/layer2/auth-antipatterns.d.ts.map +1 -1
- package/dist/layer2/auth-antipatterns.js +205 -20
- package/dist/layer2/auth-antipatterns.js.map +1 -1
- package/dist/layer2/byok-patterns.d.ts +4 -1
- package/dist/layer2/byok-patterns.d.ts.map +1 -1
- package/dist/layer2/byok-patterns.js +2 -2
- package/dist/layer2/byok-patterns.js.map +1 -1
- package/dist/layer2/dangerous-functions/dom-xss.d.ts +9 -4
- package/dist/layer2/dangerous-functions/dom-xss.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/dom-xss.js +73 -22
- package/dist/layer2/dangerous-functions/dom-xss.js.map +1 -1
- package/dist/layer2/dangerous-functions/index.d.ts +4 -1
- package/dist/layer2/dangerous-functions/index.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/index.js +551 -20
- package/dist/layer2/dangerous-functions/index.js.map +1 -1
- package/dist/layer2/dangerous-functions/math-random.d.ts +54 -4
- package/dist/layer2/dangerous-functions/math-random.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/math-random.js +241 -16
- package/dist/layer2/dangerous-functions/math-random.js.map +1 -1
- package/dist/layer2/dangerous-functions/patterns.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/patterns.js +3 -1
- package/dist/layer2/dangerous-functions/patterns.js.map +1 -1
- package/dist/layer2/dangerous-functions/utils/control-flow.d.ts +3 -2
- package/dist/layer2/dangerous-functions/utils/control-flow.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/utils/control-flow.js +41 -120
- package/dist/layer2/dangerous-functions/utils/control-flow.js.map +1 -1
- package/dist/layer2/dangerous-functions/utils/helpers.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/utils/helpers.js +26 -3
- package/dist/layer2/dangerous-functions/utils/helpers.js.map +1 -1
- package/dist/layer2/dangerous-functions/utils/schema-validation.d.ts.map +1 -1
- package/dist/layer2/dangerous-functions/utils/schema-validation.js +14 -1
- package/dist/layer2/dangerous-functions/utils/schema-validation.js.map +1 -1
- package/dist/layer2/data-exposure.d.ts +4 -1
- package/dist/layer2/data-exposure.d.ts.map +1 -1
- package/dist/layer2/data-exposure.js +11 -38
- package/dist/layer2/data-exposure.js.map +1 -1
- package/dist/layer2/framework-checks.d.ts +4 -1
- package/dist/layer2/framework-checks.d.ts.map +1 -1
- package/dist/layer2/framework-checks.js +3 -10
- package/dist/layer2/framework-checks.js.map +1 -1
- package/dist/layer2/index.d.ts +13 -1
- package/dist/layer2/index.d.ts.map +1 -1
- package/dist/layer2/index.js +107 -52
- package/dist/layer2/index.js.map +1 -1
- package/dist/layer2/log-injection.d.ts +18 -0
- package/dist/layer2/log-injection.d.ts.map +1 -0
- package/dist/layer2/log-injection.js +214 -0
- package/dist/layer2/log-injection.js.map +1 -0
- package/dist/layer2/logic-gates.d.ts +4 -1
- package/dist/layer2/logic-gates.d.ts.map +1 -1
- package/dist/layer2/logic-gates.js +54 -20
- package/dist/layer2/logic-gates.js.map +1 -1
- package/dist/layer2/model-supply-chain.d.ts +4 -1
- package/dist/layer2/model-supply-chain.d.ts.map +1 -1
- package/dist/layer2/model-supply-chain.js +72 -4
- package/dist/layer2/model-supply-chain.js.map +1 -1
- package/dist/layer2/risky-imports.d.ts +4 -1
- package/dist/layer2/risky-imports.d.ts.map +1 -1
- package/dist/layer2/risky-imports.js +2 -2
- package/dist/layer2/risky-imports.js.map +1 -1
- package/dist/layer2/security-headers.d.ts +18 -0
- package/dist/layer2/security-headers.d.ts.map +1 -0
- package/dist/layer2/security-headers.js +187 -0
- package/dist/layer2/security-headers.js.map +1 -0
- package/dist/layer2/ssrf-detection.d.ts +18 -0
- package/dist/layer2/ssrf-detection.d.ts.map +1 -0
- package/dist/layer2/ssrf-detection.js +252 -0
- package/dist/layer2/ssrf-detection.js.map +1 -0
- package/dist/layer2/variables.d.ts +4 -1
- package/dist/layer2/variables.d.ts.map +1 -1
- package/dist/layer2/variables.js +2 -2
- package/dist/layer2/variables.js.map +1 -1
- package/dist/layer2/xxe-detection.d.ts +18 -0
- package/dist/layer2/xxe-detection.d.ts.map +1 -0
- package/dist/layer2/xxe-detection.js +242 -0
- package/dist/layer2/xxe-detection.js.map +1 -0
- package/dist/layer3/anthropic/auto-dismiss.d.ts.map +1 -1
- package/dist/layer3/anthropic/auto-dismiss.js +11 -0
- package/dist/layer3/anthropic/auto-dismiss.js.map +1 -1
- package/dist/layer3/anthropic/prompts/index.d.ts +1 -1
- package/dist/layer3/anthropic/prompts/index.d.ts.map +1 -1
- package/dist/layer3/anthropic/prompts/index.js +3 -1
- package/dist/layer3/anthropic/prompts/index.js.map +1 -1
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.d.ts +19 -0
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.js +156 -0
- package/dist/layer3/anthropic/prompts/modules/ai-patterns.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.d.ts +9 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.js +25 -0
- package/dist/layer3/anthropic/prompts/modules/auth-access.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/common.d.ts +11 -0
- package/dist/layer3/anthropic/prompts/modules/common.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/common.js +152 -0
- package/dist/layer3/anthropic/prompts/modules/common.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/index.d.ts +54 -0
- package/dist/layer3/anthropic/prompts/modules/index.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/index.js +185 -0
- package/dist/layer3/anthropic/prompts/modules/index.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.js +84 -0
- package/dist/layer3/anthropic/prompts/modules/owasp-classic.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.js +68 -0
- package/dist/layer3/anthropic/prompts/modules/secrets-crypto.js.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.d.ts +8 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.d.ts.map +1 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.js +22 -0
- package/dist/layer3/anthropic/prompts/modules/xss-prompt.js.map +1 -0
- package/dist/layer3/anthropic/prompts/validation.d.ts +9 -3
- package/dist/layer3/anthropic/prompts/validation.d.ts.map +1 -1
- package/dist/layer3/anthropic/prompts/validation.js +14 -410
- package/dist/layer3/anthropic/prompts/validation.js.map +1 -1
- package/dist/layer3/anthropic/providers/anthropic.d.ts.map +1 -1
- package/dist/layer3/anthropic/providers/anthropic.js +6 -3
- package/dist/layer3/anthropic/providers/anthropic.js.map +1 -1
- package/dist/layer3/anthropic/providers/openai.d.ts.map +1 -1
- package/dist/layer3/anthropic/providers/openai.js +6 -3
- package/dist/layer3/anthropic/providers/openai.js.map +1 -1
- package/dist/layer3/anthropic/request-builder.d.ts +11 -4
- package/dist/layer3/anthropic/request-builder.d.ts.map +1 -1
- package/dist/layer3/anthropic/request-builder.js +32 -16
- package/dist/layer3/anthropic/request-builder.js.map +1 -1
- package/dist/layer3/anthropic/utils/context-extractor.d.ts +55 -0
- package/dist/layer3/anthropic/utils/context-extractor.d.ts.map +1 -0
- package/dist/layer3/anthropic/utils/context-extractor.js +161 -0
- package/dist/layer3/anthropic/utils/context-extractor.js.map +1 -0
- package/dist/layer3/anthropic/utils/index.d.ts +2 -0
- package/dist/layer3/anthropic/utils/index.d.ts.map +1 -1
- package/dist/layer3/anthropic/utils/index.js +4 -1
- package/dist/layer3/anthropic/utils/index.js.map +1 -1
- package/dist/model/auth-helper-detector.d.ts +56 -0
- package/dist/model/auth-helper-detector.d.ts.map +1 -0
- package/dist/model/auth-helper-detector.js +360 -0
- package/dist/model/auth-helper-detector.js.map +1 -0
- package/dist/model/cross-file-taint.d.ts +40 -0
- package/dist/model/cross-file-taint.d.ts.map +1 -0
- package/dist/model/cross-file-taint.js +290 -0
- package/dist/model/cross-file-taint.js.map +1 -0
- package/dist/model/framework-models/django.d.ts +9 -0
- package/dist/model/framework-models/django.d.ts.map +1 -0
- package/dist/model/framework-models/django.js +82 -0
- package/dist/model/framework-models/django.js.map +1 -0
- package/dist/model/framework-models/express.d.ts +9 -0
- package/dist/model/framework-models/express.d.ts.map +1 -0
- package/dist/model/framework-models/express.js +52 -0
- package/dist/model/framework-models/express.js.map +1 -0
- package/dist/model/framework-models/index.d.ts +20 -0
- package/dist/model/framework-models/index.d.ts.map +1 -0
- package/dist/model/framework-models/index.js +102 -0
- package/dist/model/framework-models/index.js.map +1 -0
- package/dist/model/framework-models/nextjs.d.ts +9 -0
- package/dist/model/framework-models/nextjs.d.ts.map +1 -0
- package/dist/model/framework-models/nextjs.js +71 -0
- package/dist/model/framework-models/nextjs.js.map +1 -0
- package/dist/model/framework-models/prisma.d.ts +10 -0
- package/dist/model/framework-models/prisma.d.ts.map +1 -0
- package/dist/model/framework-models/prisma.js +54 -0
- package/dist/model/framework-models/prisma.js.map +1 -0
- package/dist/model/framework-models/react.d.ts +9 -0
- package/dist/model/framework-models/react.d.ts.map +1 -0
- package/dist/model/framework-models/react.js +67 -0
- package/dist/model/framework-models/react.js.map +1 -0
- package/dist/model/framework-models/sequelize.d.ts +9 -0
- package/dist/model/framework-models/sequelize.d.ts.map +1 -0
- package/dist/model/framework-models/sequelize.js +62 -0
- package/dist/model/framework-models/sequelize.js.map +1 -0
- package/dist/model/framework-models/types.d.ts +43 -0
- package/dist/model/framework-models/types.d.ts.map +1 -0
- package/dist/model/framework-models/types.js +10 -0
- package/dist/model/framework-models/types.js.map +1 -0
- package/dist/model/function-classifier.d.ts +32 -0
- package/dist/model/function-classifier.d.ts.map +1 -0
- package/dist/model/function-classifier.js +143 -0
- package/dist/model/function-classifier.js.map +1 -0
- package/dist/model/import-resolver.d.ts +45 -0
- package/dist/model/import-resolver.d.ts.map +1 -0
- package/dist/model/import-resolver.js +410 -0
- package/dist/model/import-resolver.js.map +1 -0
- package/dist/model/imported-auth-detector.d.ts +38 -0
- package/dist/model/imported-auth-detector.d.ts.map +1 -0
- package/dist/model/imported-auth-detector.js +199 -0
- package/dist/model/imported-auth-detector.js.map +1 -0
- package/dist/model/index.d.ts +63 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +272 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/middleware-detector.d.ts +55 -0
- package/dist/model/middleware-detector.d.ts.map +1 -0
- package/dist/model/middleware-detector.js +382 -0
- package/dist/model/middleware-detector.js.map +1 -0
- package/dist/model/module-graph.d.ts +46 -0
- package/dist/model/module-graph.d.ts.map +1 -0
- package/dist/model/module-graph.js +187 -0
- package/dist/model/module-graph.js.map +1 -0
- package/dist/model/oauth-flow-detector.d.ts +41 -0
- package/dist/model/oauth-flow-detector.d.ts.map +1 -0
- package/dist/model/oauth-flow-detector.js +202 -0
- package/dist/model/oauth-flow-detector.js.map +1 -0
- package/dist/model/project-context.d.ts +119 -0
- package/dist/model/project-context.d.ts.map +1 -0
- package/dist/model/project-context.js +534 -0
- package/dist/model/project-context.js.map +1 -0
- package/dist/model/route-auth-resolver.d.ts +27 -0
- package/dist/model/route-auth-resolver.d.ts.map +1 -0
- package/dist/model/route-auth-resolver.js +182 -0
- package/dist/model/route-auth-resolver.js.map +1 -0
- package/dist/model/route-discovery/express.d.ts +25 -0
- package/dist/model/route-discovery/express.d.ts.map +1 -0
- package/dist/model/route-discovery/express.js +225 -0
- package/dist/model/route-discovery/express.js.map +1 -0
- package/dist/model/route-discovery/index.d.ts +21 -0
- package/dist/model/route-discovery/index.d.ts.map +1 -0
- package/dist/model/route-discovery/index.js +67 -0
- package/dist/model/route-discovery/index.js.map +1 -0
- package/dist/model/route-discovery/nextjs.d.ts +16 -0
- package/dist/model/route-discovery/nextjs.d.ts.map +1 -0
- package/dist/model/route-discovery/nextjs.js +179 -0
- package/dist/model/route-discovery/nextjs.js.map +1 -0
- package/dist/model/route-discovery/python.d.ts +16 -0
- package/dist/model/route-discovery/python.d.ts.map +1 -0
- package/dist/model/route-discovery/python.js +181 -0
- package/dist/model/route-discovery/python.js.map +1 -0
- package/dist/model/route-discovery/types.d.ts +36 -0
- package/dist/model/route-discovery/types.d.ts.map +1 -0
- package/dist/model/route-discovery/types.js +16 -0
- package/dist/model/route-discovery/types.js.map +1 -0
- package/dist/model/route-discovery/utils.d.ts +18 -0
- package/dist/model/route-discovery/utils.d.ts.map +1 -0
- package/dist/model/route-discovery/utils.js +55 -0
- package/dist/model/route-discovery/utils.js.map +1 -0
- package/dist/model/route-hierarchy.d.ts +50 -0
- package/dist/model/route-hierarchy.d.ts.map +1 -0
- package/dist/model/route-hierarchy.js +226 -0
- package/dist/model/route-hierarchy.js.map +1 -0
- package/dist/model/sanitiser-detection.d.ts +27 -0
- package/dist/model/sanitiser-detection.d.ts.map +1 -0
- package/dist/model/sanitiser-detection.js +224 -0
- package/dist/model/sanitiser-detection.js.map +1 -0
- package/dist/model/sink-matcher.d.ts +17 -0
- package/dist/model/sink-matcher.d.ts.map +1 -0
- package/dist/model/sink-matcher.js +141 -0
- package/dist/model/sink-matcher.js.map +1 -0
- package/dist/model/sink-patterns.d.ts +19 -0
- package/dist/model/sink-patterns.d.ts.map +1 -0
- package/dist/model/sink-patterns.js +88 -0
- package/dist/model/sink-patterns.js.map +1 -0
- package/dist/model/source-discovery.d.ts +15 -0
- package/dist/model/source-discovery.d.ts.map +1 -0
- package/dist/model/source-discovery.js +170 -0
- package/dist/model/source-discovery.js.map +1 -0
- package/dist/model/taint-tracker.d.ts +21 -0
- package/dist/model/taint-tracker.d.ts.map +1 -0
- package/dist/model/taint-tracker.js +281 -0
- package/dist/model/taint-tracker.js.map +1 -0
- package/dist/model/taint-types.d.ts +74 -0
- package/dist/model/taint-types.d.ts.map +1 -0
- package/dist/model/taint-types.js +9 -0
- package/dist/model/taint-types.js.map +1 -0
- package/dist/model/trpc-analyzer.d.ts +78 -0
- package/dist/model/trpc-analyzer.d.ts.map +1 -0
- package/dist/model/trpc-analyzer.js +297 -0
- package/dist/model/trpc-analyzer.js.map +1 -0
- package/dist/modes/incremental.js +1 -1
- package/dist/parse/file-classifier.d.ts +228 -0
- package/dist/parse/file-classifier.d.ts.map +1 -0
- package/dist/parse/file-classifier.js +933 -0
- package/dist/parse/file-classifier.js.map +1 -0
- package/dist/parse/path-exclusions.d.ts +55 -0
- package/dist/parse/path-exclusions.d.ts.map +1 -0
- package/dist/parse/path-exclusions.js +224 -0
- package/dist/parse/path-exclusions.js.map +1 -0
- package/dist/pipeline/config.d.ts +39 -0
- package/dist/pipeline/config.d.ts.map +1 -0
- package/dist/pipeline/config.js +46 -0
- package/dist/pipeline/config.js.map +1 -0
- package/dist/pipeline/index.d.ts +34 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +377 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/modes/incremental.d.ts +66 -0
- package/dist/pipeline/modes/incremental.d.ts.map +1 -0
- package/dist/pipeline/modes/incremental.js +200 -0
- package/dist/pipeline/modes/incremental.js.map +1 -0
- package/dist/postprocess/aggregation.d.ts +14 -0
- package/dist/postprocess/aggregation.d.ts.map +1 -0
- package/dist/postprocess/aggregation.js +63 -0
- package/dist/postprocess/aggregation.js.map +1 -0
- package/dist/postprocess/contradictions.d.ts +18 -0
- package/dist/postprocess/contradictions.d.ts.map +1 -0
- package/dist/postprocess/contradictions.js +99 -0
- package/dist/postprocess/contradictions.js.map +1 -0
- package/dist/postprocess/dedup.d.ts +13 -0
- package/dist/postprocess/dedup.d.ts.map +1 -0
- package/dist/postprocess/dedup.js +58 -0
- package/dist/postprocess/dedup.js.map +1 -0
- package/dist/postprocess/filtering/context-adjustments.d.ts +23 -0
- package/dist/postprocess/filtering/context-adjustments.d.ts.map +1 -0
- package/dist/postprocess/filtering/context-adjustments.js +100 -0
- package/dist/postprocess/filtering/context-adjustments.js.map +1 -0
- package/dist/postprocess/filtering/index.d.ts +3 -0
- package/dist/postprocess/filtering/index.d.ts.map +1 -0
- package/dist/postprocess/filtering/index.js +8 -0
- package/dist/postprocess/filtering/index.js.map +1 -0
- package/dist/postprocess/filtering/pipeline.d.ts +48 -0
- package/dist/postprocess/filtering/pipeline.d.ts.map +1 -0
- package/dist/postprocess/filtering/pipeline.js +76 -0
- package/dist/postprocess/filtering/pipeline.js.map +1 -0
- package/dist/postprocess/index.d.ts +41 -0
- package/dist/postprocess/index.d.ts.map +1 -0
- package/dist/postprocess/index.js +85 -0
- package/dist/postprocess/index.js.map +1 -0
- package/dist/postprocess/suppression/config-loader.d.ts +74 -0
- package/dist/postprocess/suppression/config-loader.d.ts.map +1 -0
- package/dist/postprocess/suppression/config-loader.js +424 -0
- package/dist/postprocess/suppression/config-loader.js.map +1 -0
- package/dist/postprocess/suppression/hash.d.ts +48 -0
- package/dist/postprocess/suppression/hash.d.ts.map +1 -0
- package/dist/postprocess/suppression/hash.js +88 -0
- package/dist/postprocess/suppression/hash.js.map +1 -0
- package/dist/postprocess/suppression/index.d.ts +11 -0
- package/dist/postprocess/suppression/index.d.ts.map +1 -0
- package/dist/postprocess/suppression/index.js +39 -0
- package/dist/postprocess/suppression/index.js.map +1 -0
- package/dist/postprocess/suppression/inline-parser.d.ts +39 -0
- package/dist/postprocess/suppression/inline-parser.d.ts.map +1 -0
- package/dist/postprocess/suppression/inline-parser.js +218 -0
- package/dist/postprocess/suppression/inline-parser.js.map +1 -0
- package/dist/postprocess/suppression/manager.d.ts +94 -0
- package/dist/postprocess/suppression/manager.d.ts.map +1 -0
- package/dist/postprocess/suppression/manager.js +292 -0
- package/dist/postprocess/suppression/manager.js.map +1 -0
- package/dist/postprocess/suppression/types.d.ts +151 -0
- package/dist/postprocess/suppression/types.d.ts.map +1 -0
- package/dist/postprocess/suppression/types.js +28 -0
- package/dist/postprocess/suppression/types.js.map +1 -0
- package/dist/postprocess/validation-cap.d.ts +17 -0
- package/dist/postprocess/validation-cap.d.ts.map +1 -0
- package/dist/postprocess/validation-cap.js +64 -0
- package/dist/postprocess/validation-cap.js.map +1 -0
- package/dist/report/build-result.d.ts +33 -0
- package/dist/report/build-result.d.ts.map +1 -0
- package/dist/report/build-result.js +59 -0
- package/dist/report/build-result.js.map +1 -0
- package/dist/report/enrichment.d.ts +19 -0
- package/dist/report/enrichment.d.ts.map +1 -0
- package/dist/report/enrichment.js +44 -0
- package/dist/report/enrichment.js.map +1 -0
- package/dist/report/formatters/ai-context.d.ts +23 -0
- package/dist/report/formatters/ai-context.d.ts.map +1 -0
- package/dist/report/formatters/ai-context.js +238 -0
- package/dist/report/formatters/ai-context.js.map +1 -0
- package/dist/report/formatters/cli-terminal.d.ts +65 -0
- package/dist/report/formatters/cli-terminal.d.ts.map +1 -0
- package/dist/report/formatters/cli-terminal.js +735 -0
- package/dist/report/formatters/cli-terminal.js.map +1 -0
- package/dist/report/formatters/github-comment.d.ts +41 -0
- package/dist/report/formatters/github-comment.d.ts.map +1 -0
- package/dist/report/formatters/github-comment.js +370 -0
- package/dist/report/formatters/github-comment.js.map +1 -0
- package/dist/report/formatters/grouping.d.ts +52 -0
- package/dist/report/formatters/grouping.d.ts.map +1 -0
- package/dist/report/formatters/grouping.js +152 -0
- package/dist/report/formatters/grouping.js.map +1 -0
- package/dist/report/formatters/ide/claude-code.d.ts +17 -0
- package/dist/report/formatters/ide/claude-code.d.ts.map +1 -0
- package/dist/report/formatters/ide/claude-code.js +94 -0
- package/dist/report/formatters/ide/claude-code.js.map +1 -0
- package/dist/report/formatters/ide/cursor.d.ts +13 -0
- package/dist/report/formatters/ide/cursor.d.ts.map +1 -0
- package/dist/report/formatters/ide/cursor.js +125 -0
- package/dist/report/formatters/ide/cursor.js.map +1 -0
- package/dist/report/formatters/ide/index.d.ts +62 -0
- package/dist/report/formatters/ide/index.d.ts.map +1 -0
- package/dist/report/formatters/ide/index.js +184 -0
- package/dist/report/formatters/ide/index.js.map +1 -0
- package/dist/report/formatters/ide/windsurf.d.ts +13 -0
- package/dist/report/formatters/ide/windsurf.d.ts.map +1 -0
- package/dist/report/formatters/ide/windsurf.js +117 -0
- package/dist/report/formatters/ide/windsurf.js.map +1 -0
- package/dist/report/formatters/index.d.ts +11 -0
- package/dist/report/formatters/index.d.ts.map +1 -0
- package/dist/report/formatters/index.js +54 -0
- package/dist/report/formatters/index.js.map +1 -0
- package/dist/report/formatters/vscode-diagnostic.d.ts +103 -0
- package/dist/report/formatters/vscode-diagnostic.d.ts.map +1 -0
- package/dist/report/formatters/vscode-diagnostic.js +151 -0
- package/dist/report/formatters/vscode-diagnostic.js.map +1 -0
- package/dist/report/summary.d.ts +27 -0
- package/dist/report/summary.d.ts.map +1 -0
- package/dist/report/summary.js +57 -0
- package/dist/report/summary.js.map +1 -0
- package/dist/rules/metadata.d.ts.map +1 -1
- package/dist/rules/metadata.js +66 -0
- package/dist/rules/metadata.js.map +1 -1
- package/dist/score/adjustments.d.ts +22 -0
- package/dist/score/adjustments.d.ts.map +1 -0
- package/dist/score/adjustments.js +373 -0
- package/dist/score/adjustments.js.map +1 -0
- package/dist/score/auto-dismiss.d.ts +28 -0
- package/dist/score/auto-dismiss.d.ts.map +1 -0
- package/dist/score/auto-dismiss.js +200 -0
- package/dist/score/auto-dismiss.js.map +1 -0
- package/dist/score/confidence.d.ts +19 -0
- package/dist/score/confidence.d.ts.map +1 -0
- package/dist/score/confidence.js +52 -0
- package/dist/score/confidence.js.map +1 -0
- package/dist/score/index.d.ts +61 -0
- package/dist/score/index.d.ts.map +1 -0
- package/dist/score/index.js +250 -0
- package/dist/score/index.js.map +1 -0
- package/dist/score/types.d.ts +160 -0
- package/dist/score/types.d.ts.map +1 -0
- package/dist/score/types.js +14 -0
- package/dist/score/types.js.map +1 -0
- package/dist/shared/ai-context/index.d.ts +6 -0
- package/dist/shared/ai-context/index.d.ts.map +1 -0
- package/dist/shared/ai-context/index.js +13 -0
- package/dist/shared/ai-context/index.js.map +1 -0
- package/dist/shared/ai-context/manager.d.ts +67 -0
- package/dist/shared/ai-context/manager.d.ts.map +1 -0
- package/dist/shared/ai-context/manager.js +104 -0
- package/dist/shared/ai-context/manager.js.map +1 -0
- package/dist/shared/baseline/diff.d.ts +32 -0
- package/dist/shared/baseline/diff.d.ts.map +1 -0
- package/dist/shared/baseline/diff.js +119 -0
- package/dist/shared/baseline/diff.js.map +1 -0
- package/dist/shared/baseline/index.d.ts +9 -0
- package/dist/shared/baseline/index.d.ts.map +1 -0
- package/dist/shared/baseline/index.js +19 -0
- package/dist/shared/baseline/index.js.map +1 -0
- package/dist/shared/baseline/manager.d.ts +67 -0
- package/dist/shared/baseline/manager.d.ts.map +1 -0
- package/dist/shared/baseline/manager.js +180 -0
- package/dist/shared/baseline/manager.js.map +1 -0
- package/dist/shared/baseline/types.d.ts +91 -0
- package/dist/shared/baseline/types.d.ts.map +1 -0
- package/dist/shared/baseline/types.js +12 -0
- package/dist/shared/baseline/types.js.map +1 -0
- package/dist/shared/category-filter.d.ts +125 -0
- package/dist/shared/category-filter.d.ts.map +1 -0
- package/dist/shared/category-filter.js +360 -0
- package/dist/shared/category-filter.js.map +1 -0
- package/dist/shared/code-analysis.d.ts +39 -0
- package/dist/shared/code-analysis.d.ts.map +1 -0
- package/dist/shared/code-analysis.js +159 -0
- package/dist/shared/code-analysis.js.map +1 -0
- package/dist/shared/comment-analyzer.d.ts +38 -0
- package/dist/shared/comment-analyzer.d.ts.map +1 -0
- package/dist/shared/comment-analyzer.js +218 -0
- package/dist/shared/comment-analyzer.js.map +1 -0
- package/dist/shared/diff-detector.d.ts +53 -0
- package/dist/shared/diff-detector.d.ts.map +1 -0
- package/dist/shared/diff-detector.js +104 -0
- package/dist/shared/diff-detector.js.map +1 -0
- package/dist/shared/diff-parser.d.ts +80 -0
- package/dist/shared/diff-parser.d.ts.map +1 -0
- package/dist/shared/diff-parser.js +202 -0
- package/dist/shared/diff-parser.js.map +1 -0
- package/dist/shared/environment-context.d.ts +76 -0
- package/dist/shared/environment-context.d.ts.map +1 -0
- package/dist/shared/environment-context.js +271 -0
- package/dist/shared/environment-context.js.map +1 -0
- package/dist/shared/intent-detector.d.ts +66 -0
- package/dist/shared/intent-detector.d.ts.map +1 -0
- package/dist/shared/intent-detector.js +282 -0
- package/dist/shared/intent-detector.js.map +1 -0
- package/dist/shared/parsed-file.d.ts +51 -0
- package/dist/shared/parsed-file.d.ts.map +1 -0
- package/dist/shared/parsed-file.js +95 -0
- package/dist/shared/parsed-file.js.map +1 -0
- package/dist/shared/registry-clients.d.ts +93 -0
- package/dist/shared/registry-clients.d.ts.map +1 -0
- package/dist/shared/registry-clients.js +273 -0
- package/dist/shared/registry-clients.js.map +1 -0
- package/dist/shared/rules/framework-fixes.d.ts +48 -0
- package/dist/shared/rules/framework-fixes.d.ts.map +1 -0
- package/dist/shared/rules/framework-fixes.js +439 -0
- package/dist/shared/rules/framework-fixes.js.map +1 -0
- package/dist/shared/rules/index.d.ts +8 -0
- package/dist/shared/rules/index.d.ts.map +1 -0
- package/dist/shared/rules/index.js +18 -0
- package/dist/shared/rules/index.js.map +1 -0
- package/dist/shared/rules/metadata.d.ts +43 -0
- package/dist/shared/rules/metadata.d.ts.map +1 -0
- package/dist/shared/rules/metadata.js +819 -0
- package/dist/shared/rules/metadata.js.map +1 -0
- package/dist/shared/schema-semantics.d.ts +45 -0
- package/dist/shared/schema-semantics.d.ts.map +1 -0
- package/dist/shared/schema-semantics.js +193 -0
- package/dist/shared/schema-semantics.js.map +1 -0
- package/dist/shared/types.d.ts +337 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +126 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/tiers.d.ts +4 -4
- package/dist/tiers.d.ts.map +1 -1
- package/dist/tiers.js +17 -7
- package/dist/tiers.js.map +1 -1
- package/dist/types.d.ts +79 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +34 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/code-analysis.d.ts +39 -0
- package/dist/utils/code-analysis.d.ts.map +1 -0
- package/dist/utils/code-analysis.js +159 -0
- package/dist/utils/code-analysis.js.map +1 -0
- package/dist/utils/comment-analyzer.d.ts +38 -0
- package/dist/utils/comment-analyzer.d.ts.map +1 -0
- package/dist/utils/comment-analyzer.js +218 -0
- package/dist/utils/comment-analyzer.js.map +1 -0
- package/dist/utils/context-helpers.d.ts +108 -1
- package/dist/utils/context-helpers.d.ts.map +1 -1
- package/dist/utils/context-helpers.js +351 -2
- package/dist/utils/context-helpers.js.map +1 -1
- package/dist/utils/environment-context.d.ts +76 -0
- package/dist/utils/environment-context.d.ts.map +1 -0
- package/dist/utils/environment-context.js +271 -0
- package/dist/utils/environment-context.js.map +1 -0
- package/dist/utils/intent-detector.d.ts +66 -0
- package/dist/utils/intent-detector.d.ts.map +1 -0
- package/dist/utils/intent-detector.js +282 -0
- package/dist/utils/intent-detector.js.map +1 -0
- package/dist/utils/parsed-file.d.ts +51 -0
- package/dist/utils/parsed-file.d.ts.map +1 -0
- package/dist/utils/parsed-file.js +95 -0
- package/dist/utils/parsed-file.js.map +1 -0
- package/dist/utils/route-hierarchy.d.ts +50 -0
- package/dist/utils/route-hierarchy.d.ts.map +1 -0
- package/dist/utils/route-hierarchy.js +226 -0
- package/dist/utils/route-hierarchy.js.map +1 -0
- package/dist/utils/schema-semantics.d.ts +45 -0
- package/dist/utils/schema-semantics.d.ts.map +1 -0
- package/dist/utils/schema-semantics.js +193 -0
- package/dist/utils/schema-semantics.js.map +1 -0
- package/dist/validate/clients.d.ts +44 -0
- package/dist/validate/clients.d.ts.map +1 -0
- package/dist/validate/clients.js +81 -0
- package/dist/validate/clients.js.map +1 -0
- package/dist/validate/index.d.ts +41 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +141 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/prompts/index.d.ts +8 -0
- package/dist/validate/prompts/index.d.ts.map +1 -0
- package/dist/validate/prompts/index.js +16 -0
- package/dist/validate/prompts/index.js.map +1 -0
- package/dist/validate/prompts/modules/ai-patterns.d.ts +19 -0
- package/dist/validate/prompts/modules/ai-patterns.d.ts.map +1 -0
- package/dist/validate/prompts/modules/ai-patterns.js +156 -0
- package/dist/validate/prompts/modules/ai-patterns.js.map +1 -0
- package/dist/validate/prompts/modules/auth-access.d.ts +9 -0
- package/dist/validate/prompts/modules/auth-access.d.ts.map +1 -0
- package/dist/validate/prompts/modules/auth-access.js +25 -0
- package/dist/validate/prompts/modules/auth-access.js.map +1 -0
- package/dist/validate/prompts/modules/common.d.ts +11 -0
- package/dist/validate/prompts/modules/common.d.ts.map +1 -0
- package/dist/validate/prompts/modules/common.js +186 -0
- package/dist/validate/prompts/modules/common.js.map +1 -0
- package/dist/validate/prompts/modules/index.d.ts +54 -0
- package/dist/validate/prompts/modules/index.d.ts.map +1 -0
- package/dist/validate/prompts/modules/index.js +186 -0
- package/dist/validate/prompts/modules/index.js.map +1 -0
- package/dist/validate/prompts/modules/owasp-classic.d.ts +8 -0
- package/dist/validate/prompts/modules/owasp-classic.d.ts.map +1 -0
- package/dist/validate/prompts/modules/owasp-classic.js +84 -0
- package/dist/validate/prompts/modules/owasp-classic.js.map +1 -0
- package/dist/validate/prompts/modules/secrets-crypto.d.ts +8 -0
- package/dist/validate/prompts/modules/secrets-crypto.d.ts.map +1 -0
- package/dist/validate/prompts/modules/secrets-crypto.js +68 -0
- package/dist/validate/prompts/modules/secrets-crypto.js.map +1 -0
- package/dist/validate/prompts/modules/xss-prompt.d.ts +8 -0
- package/dist/validate/prompts/modules/xss-prompt.d.ts.map +1 -0
- package/dist/validate/prompts/modules/xss-prompt.js +22 -0
- package/dist/validate/prompts/modules/xss-prompt.js.map +1 -0
- package/dist/validate/prompts/semantic-analysis.d.ts +15 -0
- package/dist/validate/prompts/semantic-analysis.d.ts.map +1 -0
- package/dist/validate/prompts/semantic-analysis.js +169 -0
- package/dist/validate/prompts/semantic-analysis.js.map +1 -0
- package/dist/validate/prompts/validation.d.ts +18 -0
- package/dist/validate/prompts/validation.d.ts.map +1 -0
- package/dist/validate/prompts/validation.js +25 -0
- package/dist/validate/prompts/validation.js.map +1 -0
- package/dist/validate/providers/anthropic.d.ts +17 -0
- package/dist/validate/providers/anthropic.d.ts.map +1 -0
- package/dist/validate/providers/anthropic.js +260 -0
- package/dist/validate/providers/anthropic.js.map +1 -0
- package/dist/validate/providers/index.d.ts +8 -0
- package/dist/validate/providers/index.d.ts.map +1 -0
- package/dist/validate/providers/index.js +13 -0
- package/dist/validate/providers/index.js.map +1 -0
- package/dist/validate/providers/openai.d.ts +14 -0
- package/dist/validate/providers/openai.d.ts.map +1 -0
- package/dist/validate/providers/openai.js +336 -0
- package/dist/validate/providers/openai.js.map +1 -0
- package/dist/validate/request-builder.d.ts +61 -0
- package/dist/validate/request-builder.d.ts.map +1 -0
- package/dist/validate/request-builder.js +346 -0
- package/dist/validate/request-builder.js.map +1 -0
- package/dist/validate/types.d.ts +88 -0
- package/dist/validate/types.d.ts.map +1 -0
- package/dist/validate/types.js +38 -0
- package/dist/validate/types.js.map +1 -0
- package/dist/validate/utils/context-extractor.d.ts +55 -0
- package/dist/validate/utils/context-extractor.d.ts.map +1 -0
- package/dist/validate/utils/context-extractor.js +161 -0
- package/dist/validate/utils/context-extractor.js.map +1 -0
- package/dist/validate/utils/index.d.ts +11 -0
- package/dist/validate/utils/index.d.ts.map +1 -0
- package/dist/validate/utils/index.js +27 -0
- package/dist/validate/utils/index.js.map +1 -0
- package/dist/validate/utils/path-helpers.d.ts +21 -0
- package/dist/validate/utils/path-helpers.d.ts.map +1 -0
- package/dist/validate/utils/path-helpers.js +69 -0
- package/dist/validate/utils/path-helpers.js.map +1 -0
- package/dist/validate/utils/response-parser.d.ts +40 -0
- package/dist/validate/utils/response-parser.d.ts.map +1 -0
- package/dist/validate/utils/response-parser.js +286 -0
- package/dist/validate/utils/response-parser.js.map +1 -0
- package/dist/validate/utils/retry.d.ts +15 -0
- package/dist/validate/utils/retry.d.ts.map +1 -0
- package/dist/validate/utils/retry.js +62 -0
- package/dist/validate/utils/retry.js.map +1 -0
- package/package.json +8 -7
- package/src/__tests__/benchmark/fixtures/layer1/agent-skill-injection.ts +204 -0
- package/src/__tests__/benchmark/fixtures/layer1/index.ts +3 -0
- package/src/__tests__/benchmark/fixtures/layer2/index.ts +27 -0
- package/src/__tests__/benchmark/fixtures/layer2/log-injection.ts +147 -0
- package/src/__tests__/benchmark/fixtures/layer2/phase5-excessive-agency.ts +580 -0
- package/src/__tests__/benchmark/fixtures/layer2/security-headers.ts +197 -0
- package/src/__tests__/benchmark/fixtures/layer2/sprint6-ai-enhancements.ts +515 -0
- package/src/__tests__/benchmark/fixtures/layer2/ssrf-detection.ts +210 -0
- package/src/__tests__/benchmark/fixtures/layer2/xxe-detection.ts +195 -0
- package/src/__tests__/benchmark/run-depth-validation.ts +12 -12
- package/src/__tests__/benchmark/run-real-world-test.ts +4 -4
- package/src/__tests__/benchmark/types.ts +1 -1
- package/src/__tests__/benchmark/utils/test-runner.ts +3 -3
- package/src/__tests__/category-filter.test.ts +478 -0
- package/src/__tests__/context-engine/cross-file-taint.test.ts +284 -0
- package/src/__tests__/context-engine/framework-models.test.ts +457 -0
- package/src/__tests__/context-engine/function-classifier.test.ts +146 -0
- package/src/__tests__/context-engine/import-resolver.test.ts +328 -0
- package/src/__tests__/context-engine/integration.test.ts +320 -0
- package/src/__tests__/context-engine/module-graph.test.ts +159 -0
- package/src/__tests__/context-engine/route-discovery/auth-resolver.test.ts +353 -0
- package/src/__tests__/context-engine/route-discovery/express.test.ts +150 -0
- package/src/__tests__/context-engine/route-discovery/nextjs.test.ts +138 -0
- package/src/__tests__/context-engine/route-discovery/python.test.ts +95 -0
- package/src/__tests__/context-engine/sanitiser-detection.test.ts +187 -0
- package/src/__tests__/context-engine/sink-matcher.test.ts +251 -0
- package/src/__tests__/context-engine/source-discovery.test.ts +186 -0
- package/src/__tests__/context-engine/taint-tracker.test.ts +182 -0
- package/src/__tests__/regression/agent-skill-benign.test.ts +174 -0
- package/src/__tests__/regression/known-false-positives.test.ts +801 -3
- package/src/__tests__/score/adjustments.test.ts +385 -0
- package/src/__tests__/score/confidence.test.ts +283 -0
- package/src/__tests__/score/framework-scoring.test.ts +275 -0
- package/src/__tests__/score/route-scoring.test.ts +156 -0
- package/src/__tests__/score/scoring-integration.test.ts +165 -0
- package/src/__tests__/score/taint-adjustments.test.ts +244 -0
- package/src/__tests__/snapshots/__snapshots__/anthropic-validation-refactor.test.ts.snap +50 -58
- package/src/__tests__/snapshots/__snapshots__/dangerous-functions-refactor.test.ts.snap +52 -0
- package/src/__tests__/snapshots/__snapshots__/scan-depth.test.ts.snap +3 -12
- package/src/__tests__/snapshots/anthropic-validation-refactor.test.ts +3 -3
- package/src/__tests__/snapshots/dangerous-functions-refactor.test.ts +1 -1
- package/src/__tests__/snapshots/scan-depth.test.ts +3 -3
- package/src/__tests__/validate/route-annotations.test.ts +138 -0
- package/src/__tests__/validation/analyze-results.ts +1 -1
- package/src/__tests__/validation/extract-for-triage.ts +1 -1
- package/src/__tests__/validation/fp-deep-analysis.ts +1 -1
- package/src/__tests__/validation/run-validation.ts +7 -7
- package/src/{layer2/ai-agent-tools.ts → detect/ai-code/agent-tools.ts} +729 -4
- package/src/{layer2 → detect/ai-code}/byok-patterns.ts +20 -6
- package/src/{layer2/ai-endpoint-protection.ts → detect/ai-code/endpoint-protection.ts} +10 -4
- package/src/{layer2/ai-execution-sinks.ts → detect/ai-code/execution-sinks.ts} +272 -46
- package/src/{layer2/ai-fingerprinting.ts → detect/ai-code/fingerprinting.ts} +46 -34
- package/src/detect/ai-code/index.ts +11 -0
- package/src/{layer2/ai-mcp-security.ts → detect/ai-code/mcp-security.ts} +212 -5
- package/src/{layer2 → detect/ai-code}/model-supply-chain.ts +85 -6
- package/src/{layer2/ai-package-hallucination.ts → detect/ai-code/package-hallucination.ts} +170 -6
- package/src/{layer2/ai-prompt-hygiene.ts → detect/ai-code/prompt-hygiene.ts} +393 -28
- package/src/{layer2/ai-rag-safety.ts → detect/ai-code/rag-safety.ts} +91 -4
- package/src/{layer2/ai-schema-validation.ts → detect/ai-code/schema-validation.ts} +10 -4
- package/src/detect/config/agent-skill-injection.ts +551 -0
- package/src/{layer1 → detect/config}/comments.ts +8 -2
- package/src/{layer1 → detect/config}/file-flags.ts +23 -6
- package/src/detect/config/index.ts +6 -0
- package/src/{layer3 → detect/config}/osv-check.ts +3 -2
- package/src/{layer3 → detect/config}/package-check.ts +3 -2
- package/src/{layer1 → detect/config}/urls.ts +196 -15
- package/src/detect/index.ts +131 -0
- package/src/{layer1 → detect/secrets}/config-audit.ts +56 -12
- package/src/{layer1 → detect/secrets}/config-mcp-audit.ts +11 -4
- package/src/{layer1 → detect/secrets}/entropy.ts +256 -11
- package/src/{layer1 → detect/secrets}/index.ts +43 -46
- package/src/{layer1 → detect/secrets}/patterns.ts +51 -6
- package/src/{layer1 → detect/secrets}/weak-crypto.ts +174 -17
- package/src/{layer2/auth-antipatterns.ts → detect/structural/auth-patterns.ts} +249 -27
- package/src/{layer2 → detect/structural}/dangerous-functions/dom-xss.ts +94 -22
- package/src/{layer2 → detect/structural}/dangerous-functions/index.ts +672 -65
- package/src/{layer2 → detect/structural}/dangerous-functions/json-parse.ts +10 -2
- package/src/{layer2 → detect/structural}/dangerous-functions/math-random.ts +269 -17
- package/src/{layer2 → detect/structural}/dangerous-functions/patterns.ts +4 -2
- package/src/{layer2 → detect/structural}/dangerous-functions/request-validation.ts +10 -2
- package/src/detect/structural/dangerous-functions/utils/control-flow.ts +35 -0
- package/src/{layer2 → detect/structural}/dangerous-functions/utils/schema-validation.ts +16 -1
- package/src/{layer2 → detect/structural}/data-exposure.ts +23 -40
- package/src/{layer2 → detect/structural}/framework-checks.ts +13 -12
- package/src/{layer2 → detect/structural}/index.ts +144 -122
- package/src/detect/structural/log-injection.ts +254 -0
- package/src/{layer2 → detect/structural}/logic-gates.ts +69 -24
- package/src/{layer2 → detect/structural}/risky-imports.ts +10 -4
- package/src/detect/structural/security-headers.ts +231 -0
- package/src/detect/structural/ssrf-detection.ts +300 -0
- package/src/{layer2 → detect/structural}/variables.ts +10 -4
- package/src/detect/structural/xxe-detection.ts +295 -0
- package/src/index.ts +64 -1038
- package/src/{utils → model}/auth-helper-detector.ts +1 -1
- package/src/model/cross-file-taint.ts +374 -0
- package/src/model/framework-models/django.ts +82 -0
- package/src/model/framework-models/express.ts +54 -0
- package/src/model/framework-models/index.ts +116 -0
- package/src/model/framework-models/nextjs.ts +69 -0
- package/src/model/framework-models/prisma.ts +57 -0
- package/src/model/framework-models/react.ts +63 -0
- package/src/model/framework-models/sequelize.ts +63 -0
- package/src/model/framework-models/types.ts +46 -0
- package/src/model/function-classifier.ts +184 -0
- package/src/model/import-resolver.ts +453 -0
- package/src/{utils → model}/imported-auth-detector.ts +21 -85
- package/src/model/index.ts +353 -0
- package/src/{utils → model}/middleware-detector.ts +156 -17
- package/src/model/module-graph.ts +254 -0
- package/src/{utils → model}/oauth-flow-detector.ts +1 -1
- package/src/{utils/project-context-builder.ts → model/project-context.ts} +1 -1
- package/src/model/route-auth-resolver.ts +216 -0
- package/src/model/route-discovery/express.ts +251 -0
- package/src/model/route-discovery/index.ts +83 -0
- package/src/model/route-discovery/nextjs.ts +216 -0
- package/src/model/route-discovery/python.ts +214 -0
- package/src/model/route-discovery/types.ts +48 -0
- package/src/model/route-discovery/utils.ts +54 -0
- package/src/model/route-hierarchy.ts +250 -0
- package/src/model/sanitiser-detection.ts +268 -0
- package/src/model/sink-matcher.ts +178 -0
- package/src/model/sink-patterns.ts +109 -0
- package/src/model/source-discovery.ts +209 -0
- package/src/model/taint-tracker.ts +333 -0
- package/src/model/taint-types.ts +149 -0
- package/src/{utils → model}/trpc-analyzer.ts +1 -1
- package/src/{utils/context-helpers.ts → parse/file-classifier.ts} +462 -2
- package/src/{utils → parse}/path-exclusions.ts +1 -1
- package/src/pipeline/config.ts +81 -0
- package/src/pipeline/index.ts +437 -0
- package/src/{modes → pipeline/modes}/incremental.ts +6 -6
- package/src/postprocess/aggregation.ts +74 -0
- package/src/postprocess/contradictions.ts +128 -0
- package/src/postprocess/dedup.ts +62 -0
- package/src/postprocess/filtering/__tests__/pipeline.test.ts +134 -0
- package/src/postprocess/filtering/context-adjustments.ts +111 -0
- package/src/postprocess/filtering/index.ts +10 -0
- package/src/postprocess/filtering/pipeline.ts +130 -0
- package/src/postprocess/index.ts +118 -0
- package/src/{suppression → postprocess/suppression}/config-loader.ts +1 -1
- package/src/{suppression → postprocess/suppression}/hash.ts +1 -1
- package/src/{suppression → postprocess/suppression}/inline-parser.ts +1 -1
- package/src/{suppression → postprocess/suppression}/manager.ts +1 -1
- package/src/{suppression → postprocess/suppression}/types.ts +2 -2
- package/src/postprocess/validation-cap.ts +66 -0
- package/src/report/build-result.ts +94 -0
- package/src/report/enrichment.ts +52 -0
- package/src/report/formatters/__tests__/ai-context.test.ts +254 -0
- package/src/report/formatters/ai-context.ts +302 -0
- package/src/{formatters → report/formatters}/cli-terminal.ts +11 -11
- package/src/{formatters → report/formatters}/github-comment.ts +4 -4
- package/src/{formatters → report/formatters}/grouping.ts +8 -8
- package/src/report/formatters/ide/__tests__/ide.test.ts +319 -0
- package/src/report/formatters/ide/claude-code.ts +110 -0
- package/src/report/formatters/ide/cursor.ts +147 -0
- package/src/report/formatters/ide/index.ts +216 -0
- package/src/report/formatters/ide/windsurf.ts +135 -0
- package/src/{formatters → report/formatters}/index.ts +24 -0
- package/src/{formatters → report/formatters}/vscode-diagnostic.ts +1 -1
- package/src/report/summary.ts +70 -0
- package/src/score/adjustments.ts +387 -0
- package/src/{layer3/anthropic → score}/auto-dismiss.ts +26 -14
- package/src/score/confidence.ts +66 -0
- package/src/score/index.ts +316 -0
- package/src/score/types.ts +187 -0
- package/src/shared/__tests__/code-analysis.test.ts +165 -0
- package/src/shared/__tests__/parsed-file.test.ts +124 -0
- package/src/shared/ai-context/__tests__/manager.test.ts +193 -0
- package/src/shared/ai-context/index.ts +15 -0
- package/src/shared/ai-context/manager.ts +145 -0
- package/src/{baseline → shared/baseline}/__tests__/diff.test.ts +2 -2
- package/src/{baseline → shared/baseline}/__tests__/manager.test.ts +2 -2
- package/src/{baseline → shared/baseline}/diff.ts +1 -1
- package/src/{baseline → shared/baseline}/manager.ts +1 -1
- package/src/shared/category-filter.ts +400 -0
- package/src/{layer2/dangerous-functions/utils/control-flow.ts → shared/code-analysis.ts} +56 -39
- package/src/shared/comment-analyzer.ts +249 -0
- package/src/shared/environment-context.ts +304 -0
- package/src/shared/intent-detector.ts +318 -0
- package/src/shared/parsed-file.ts +103 -0
- package/src/{rules → shared/rules}/__tests__/metadata.test.ts +7 -0
- package/src/{rules → shared/rules}/framework-fixes.ts +1 -1
- package/src/{rules → shared/rules}/metadata.ts +94 -0
- package/src/shared/schema-semantics.ts +233 -0
- package/src/{types.ts → shared/types.ts} +142 -11
- package/src/tiers.ts +27 -10
- package/src/validate/__tests__/context-extractor.test.ts +191 -0
- package/src/validate/__tests__/prompt-assembly.test.ts +233 -0
- package/src/validate/__tests__/request-builder.test.ts +347 -0
- package/src/{layer3/anthropic → validate}/index.ts +8 -7
- package/src/{layer3/anthropic → validate}/prompts/index.ts +2 -0
- package/src/validate/prompts/modules/ai-patterns.ts +153 -0
- package/src/validate/prompts/modules/auth-access.ts +22 -0
- package/src/validate/prompts/modules/common.ts +183 -0
- package/src/validate/prompts/modules/index.ts +204 -0
- package/src/validate/prompts/modules/owasp-classic.ts +81 -0
- package/src/validate/prompts/modules/secrets-crypto.ts +65 -0
- package/src/validate/prompts/modules/xss-prompt.ts +19 -0
- package/src/validate/prompts/validation.ts +20 -0
- package/src/{layer3/anthropic → validate}/providers/anthropic.ts +28 -27
- package/src/validate/providers/index.ts +8 -0
- package/src/{layer3/anthropic → validate}/providers/openai.ts +30 -25
- package/src/validate/request-builder.ts +448 -0
- package/src/{layer3/anthropic → validate}/types.ts +1 -1
- package/src/validate/utils/context-extractor.ts +220 -0
- package/src/{layer3/anthropic → validate}/utils/index.ts +10 -0
- package/src/{layer3/anthropic → validate}/utils/response-parser.ts +2 -1
- package/src/layer3/anthropic/prompts/validation.ts +0 -419
- package/src/layer3/anthropic/providers/index.ts +0 -8
- package/src/layer3/anthropic/request-builder.ts +0 -150
- package/src/layer3/index.ts +0 -168
- /package/src/{layer3 → detect/config}/__tests__/osv-check.test.ts +0 -0
- /package/src/{layer2 → detect/structural}/__tests__/math-random-enhanced.test.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/child-process.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/utils/helpers.ts +0 -0
- /package/src/{layer2 → detect/structural}/dangerous-functions/utils/index.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/config-loader.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/hash.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/inline-parser.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/__tests__/manager.test.ts +0 -0
- /package/src/{suppression → postprocess/suppression}/index.ts +0 -0
- /package/src/{baseline → shared/baseline}/index.ts +0 -0
- /package/src/{baseline → shared/baseline}/types.ts +0 -0
- /package/src/{utils → shared}/diff-detector.ts +0 -0
- /package/src/{utils → shared}/diff-parser.ts +0 -0
- /package/src/{utils → shared}/registry-clients.ts +0 -0
- /package/src/{rules → shared/rules}/__tests__/framework-fixes.test.ts +0 -0
- /package/src/{rules → shared/rules}/index.ts +0 -0
- /package/src/{layer3/anthropic → validate}/clients.ts +0 -0
- /package/src/{layer3/anthropic → validate}/prompts/semantic-analysis.ts +0 -0
- /package/src/{layer3/anthropic → validate}/utils/path-helpers.ts +0 -0
- /package/src/{layer3/anthropic → validate}/utils/retry.ts +0 -0
|
@@ -0,0 +1,751 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Layer 1: High-Entropy String Detection
|
|
4
|
+
* Uses Shannon entropy to detect potential secrets that don't match known patterns
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.calculateEntropy = calculateEntropy;
|
|
8
|
+
exports.detectHighEntropyStrings = detectHighEntropyStrings;
|
|
9
|
+
const file_classifier_1 = require("../../parse/file-classifier");
|
|
10
|
+
// Base confidence for entropy-based findings (statistical, requires AI validation)
|
|
11
|
+
const BASE_CONFIDENCE = 0.30;
|
|
12
|
+
// Shannon entropy calculation
|
|
13
|
+
function calculateEntropy(str) {
|
|
14
|
+
if (str.length === 0)
|
|
15
|
+
return 0;
|
|
16
|
+
const freq = {};
|
|
17
|
+
for (const char of str) {
|
|
18
|
+
freq[char] = (freq[char] || 0) + 1;
|
|
19
|
+
}
|
|
20
|
+
let entropy = 0;
|
|
21
|
+
const len = str.length;
|
|
22
|
+
for (const char in freq) {
|
|
23
|
+
const p = freq[char] / len;
|
|
24
|
+
entropy -= p * Math.log2(p);
|
|
25
|
+
}
|
|
26
|
+
return entropy;
|
|
27
|
+
}
|
|
28
|
+
// Extract string literals from code
|
|
29
|
+
function extractStringLiterals(content) {
|
|
30
|
+
const strings = [];
|
|
31
|
+
const lines = content.split('\n');
|
|
32
|
+
// Patterns for string literals using unrolled loop pattern to prevent catastrophic backtracking
|
|
33
|
+
// Pattern explanation: "start [non-special-chars]* (escape-sequence [non-special-chars]*)* end"
|
|
34
|
+
// This avoids nested quantifiers that cause exponential backtracking
|
|
35
|
+
const patterns = [
|
|
36
|
+
/"[^"\\]{20,}(?:\\.[^"\\]*)*"/g, // Double-quoted strings 20+ chars (unrolled loop)
|
|
37
|
+
/'[^'\\]{20,}(?:\\.[^'\\]*)*'/g, // Single-quoted strings 20+ chars (unrolled loop)
|
|
38
|
+
/`[^`\\]{20,}(?:\\.[^`\\]*)*`/g, // Template literals 20+ chars (unrolled loop)
|
|
39
|
+
];
|
|
40
|
+
lines.forEach((line, index) => {
|
|
41
|
+
for (const pattern of patterns) {
|
|
42
|
+
let match;
|
|
43
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
44
|
+
while ((match = regex.exec(line)) !== null) {
|
|
45
|
+
// Remove quotes and get the actual string value
|
|
46
|
+
const value = match[0].slice(1, -1);
|
|
47
|
+
strings.push({
|
|
48
|
+
value,
|
|
49
|
+
line: index + 1,
|
|
50
|
+
lineContent: line.trim(),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
return strings;
|
|
56
|
+
}
|
|
57
|
+
// Check if string looks like a known safe pattern (URLs, paths, etc.)
|
|
58
|
+
function isSafePattern(str) {
|
|
59
|
+
const safePatterns = [
|
|
60
|
+
/^https?:\/\//i, // URLs
|
|
61
|
+
/^\/[a-z0-9_/-]+$/i, // File paths
|
|
62
|
+
/^\d{4}-\d{2}-\d{2}/, // Dates
|
|
63
|
+
/^[a-f0-9]{32}$/i, // MD5 hashes (often used as IDs)
|
|
64
|
+
/^[a-f0-9]{40}$/i, // SHA1 hashes
|
|
65
|
+
/^[a-f0-9]{64}$/i, // SHA256 hashes
|
|
66
|
+
/^data:[a-z]+\/[a-z]+;base64,/i, // Data URLs
|
|
67
|
+
/^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$/i, // Emails
|
|
68
|
+
/^\s*$/, // Whitespace only
|
|
69
|
+
/^[a-z\s]+$/i, // Only letters and spaces (likely text)
|
|
70
|
+
/^\/?[\(\)\[\]\{\}\|\?\*\+\.\^\$\\:!_a-z0-9/-]+$/i, // Regex patterns (route matchers, etc.)
|
|
71
|
+
];
|
|
72
|
+
return safePatterns.some(pattern => pattern.test(str));
|
|
73
|
+
}
|
|
74
|
+
// Check if string is a PEM header/footer (not an actual secret)
|
|
75
|
+
function isPEMHeader(str) {
|
|
76
|
+
const pemPatterns = [
|
|
77
|
+
/^-{3,}BEGIN\s+(PRIVATE|PUBLIC|RSA|DSA|EC|ENCRYPTED|CERTIFICATE)/i,
|
|
78
|
+
/^-{3,}END\s+(PRIVATE|PUBLIC|RSA|DSA|EC|ENCRYPTED|CERTIFICATE)/i,
|
|
79
|
+
/-----BEGIN\s+\w+\s+KEY-----/i,
|
|
80
|
+
/-----END\s+\w+\s+KEY-----/i,
|
|
81
|
+
];
|
|
82
|
+
return pemPatterns.some(p => p.test(str));
|
|
83
|
+
}
|
|
84
|
+
// Check if string looks like encrypted/encoded content (not the key itself)
|
|
85
|
+
function isEncryptedContent(str, lineContent) {
|
|
86
|
+
// Patterns for encrypted content blocks (not the key)
|
|
87
|
+
const encryptedPatterns = [
|
|
88
|
+
/encrypted_content/i,
|
|
89
|
+
/ciphertext/i,
|
|
90
|
+
/encrypted_data/i,
|
|
91
|
+
/encrypted_value/i,
|
|
92
|
+
// Base64 encoded binary data (very long, uniform character set)
|
|
93
|
+
/^[A-Za-z0-9+/]{100,}={0,2}$/, // Long base64 strings are often encrypted payloads
|
|
94
|
+
];
|
|
95
|
+
// Check line context for encrypted content indicators
|
|
96
|
+
const contextIndicators = [
|
|
97
|
+
/["']encrypted_content["']\s*:/i,
|
|
98
|
+
/["']ciphertext["']\s*:/i,
|
|
99
|
+
/gAAAA/, // Fernet encryption prefix
|
|
100
|
+
];
|
|
101
|
+
return (encryptedPatterns.some(p => p.test(str)) ||
|
|
102
|
+
contextIndicators.some(p => p.test(lineContent)));
|
|
103
|
+
}
|
|
104
|
+
// Check if string looks like a JWT segment (base64url encoded, starts with eyJ)
|
|
105
|
+
function isJWTSegment(str) {
|
|
106
|
+
// JWT segments typically start with 'eyJ' (base64 for '{"')
|
|
107
|
+
// Full JWT format: header.payload.signature (all base64url)
|
|
108
|
+
if (str.startsWith('eyJ') && /^[A-Za-z0-9_-]+$/.test(str)) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
// Check for full JWT pattern (3 dot-separated base64url segments)
|
|
112
|
+
if (/^eyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(str)) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
// Check if string looks like a regex/route matcher pattern
|
|
118
|
+
function isRegexPattern(str) {
|
|
119
|
+
// Common regex metacharacters and patterns
|
|
120
|
+
const regexIndicators = ['(?', '(?!', '(?:', '(?=', '\\.', '\\.', '.*', '.+', '[^', '|', '$)', '^', '$'];
|
|
121
|
+
const indicatorCount = regexIndicators.filter(ind => str.includes(ind)).length;
|
|
122
|
+
// If it has multiple regex indicators, it's likely a regex pattern
|
|
123
|
+
return indicatorCount >= 2;
|
|
124
|
+
}
|
|
125
|
+
// Check if string is a template literal with code expressions
|
|
126
|
+
function isTemplateWithCode(str, lineContent) {
|
|
127
|
+
// Check if the line contains template literal syntax with expressions
|
|
128
|
+
if (!lineContent.includes('`') && !lineContent.includes('${')) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
// Multiple interpolations (3+) = formatting string, not a secret
|
|
132
|
+
const interpolationCount = (lineContent.match(/\$\{/g) || []).length;
|
|
133
|
+
if (interpolationCount >= 3) {
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
// Common code patterns inside template literals that create high entropy
|
|
137
|
+
const codePatterns = [
|
|
138
|
+
/\$\{[^}]*\.\w+\s*\(/, // Method call inside interpolation: ${x.foo()}
|
|
139
|
+
/\$\{\w+\s*\(/, // Function call inside interpolation: ${funcName(...)}
|
|
140
|
+
/\$\{[^}]*\?\.[^}]*\}/, // Optional chaining
|
|
141
|
+
/\$\{[^}]*\s*\?\s*[^:]+\s*:\s*[^}]+\}/, // Ternary operators
|
|
142
|
+
/var\s*\(\s*\$\{/, // CSS var() with template
|
|
143
|
+
/\$\{new\s+\w+\(/i, // Constructor calls: ${new Date()}
|
|
144
|
+
];
|
|
145
|
+
return codePatterns.some(pattern => pattern.test(lineContent));
|
|
146
|
+
}
|
|
147
|
+
// Check if string is human-readable text/markdown content
|
|
148
|
+
function isHumanReadableContent(str) {
|
|
149
|
+
// Skip short strings
|
|
150
|
+
if (str.length < 30)
|
|
151
|
+
return false;
|
|
152
|
+
// Check for markdown indicators
|
|
153
|
+
const markdownIndicators = ['## ', '# ', '**', '- [ ]', '- ', '\n\n', '\\n'];
|
|
154
|
+
const hasMarkdown = markdownIndicators.some(ind => str.includes(ind));
|
|
155
|
+
// Check word-like pattern ratio (spaces between word-like tokens)
|
|
156
|
+
const words = str.split(/\s+/).filter(w => w.length > 0);
|
|
157
|
+
const wordLikeTokens = words.filter(w => /^[a-zA-Z][a-zA-Z0-9'-]*[:.!?,]?$/.test(w));
|
|
158
|
+
// If more than 50% of tokens look like words, it's probably text
|
|
159
|
+
const wordRatio = words.length > 0 ? wordLikeTokens.length / words.length : 0;
|
|
160
|
+
return hasMarkdown || wordRatio > 0.5;
|
|
161
|
+
}
|
|
162
|
+
// Check if string looks like a UI/display string (model names, descriptions, etc.)
|
|
163
|
+
function isUIString(str, lineContent) {
|
|
164
|
+
// Common UI string patterns
|
|
165
|
+
const uiPatterns = [
|
|
166
|
+
/['"`].*Claude.*['"`]/i,
|
|
167
|
+
/['"`].*GPT.*['"`]/i,
|
|
168
|
+
/['"`].*Sonnet.*['"`]/i,
|
|
169
|
+
/['"`].*for\s+(chat|embeddings|completion).*['"`]/i,
|
|
170
|
+
/['"`]Uses\s+/i,
|
|
171
|
+
/['"`]Note:\s*/i,
|
|
172
|
+
/placeholder['"`:]/i,
|
|
173
|
+
/description['"`:]/i,
|
|
174
|
+
/label['"`:]/i,
|
|
175
|
+
/title['"`:]/i,
|
|
176
|
+
/message['"`:]/i,
|
|
177
|
+
/tooltip['"`:]/i,
|
|
178
|
+
];
|
|
179
|
+
return uiPatterns.some(pattern => pattern.test(lineContent));
|
|
180
|
+
}
|
|
181
|
+
// Check if string is in a React/JSX UI context (component props, JSX text)
|
|
182
|
+
function isJSXUIContext(lineContent) {
|
|
183
|
+
// JSX patterns that indicate UI context
|
|
184
|
+
const jsxUIPatterns = [
|
|
185
|
+
// Component props (common UI props)
|
|
186
|
+
/\b(placeholder|title|label|message|description|tooltip|alt|aria-label|name|id|className|testId|data-testid)\s*=\s*['"`]/i,
|
|
187
|
+
// JSX text children (text between tags)
|
|
188
|
+
/>\s*['"`][^<]*['"`]\s*</,
|
|
189
|
+
// Common UI component names
|
|
190
|
+
/<(Button|Text|Label|Title|Heading|Paragraph|Span|Input|Tooltip|Badge|Alert|Toast)/i,
|
|
191
|
+
// Return statement with JSX template literal
|
|
192
|
+
/return\s+`[^`]*\$\{/,
|
|
193
|
+
// Template literals used for display
|
|
194
|
+
/['"`]Synced\s+/i,
|
|
195
|
+
/['"`]\d+\s*(h|hr|hour|m|min|minute|s|sec|second)s?\s+ago['"`]/i,
|
|
196
|
+
// Display formatting patterns
|
|
197
|
+
/\.toLocaleString\s*\(|\.toFixed\s*\(|\.padStart\s*\(/,
|
|
198
|
+
];
|
|
199
|
+
return jsxUIPatterns.some(pattern => pattern.test(lineContent));
|
|
200
|
+
}
|
|
201
|
+
// Check if string is natural language (high ratio of common English words)
|
|
202
|
+
function isNaturalLanguage(str) {
|
|
203
|
+
// Skip short strings
|
|
204
|
+
if (str.length < 25)
|
|
205
|
+
return false;
|
|
206
|
+
// Common English words that appear in natural language
|
|
207
|
+
const commonWords = new Set([
|
|
208
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
209
|
+
'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
|
|
210
|
+
'should', 'may', 'might', 'must', 'shall', 'can', 'need', 'to', 'of',
|
|
211
|
+
'in', 'for', 'on', 'with', 'at', 'by', 'from', 'up', 'about', 'into',
|
|
212
|
+
'through', 'during', 'before', 'after', 'above', 'below', 'between',
|
|
213
|
+
'under', 'again', 'further', 'then', 'once', 'here', 'there', 'when',
|
|
214
|
+
'where', 'why', 'how', 'all', 'each', 'few', 'more', 'most', 'other',
|
|
215
|
+
'some', 'such', 'no', 'nor', 'not', 'only', 'own', 'same', 'so', 'than',
|
|
216
|
+
'too', 'very', 'just', 'also', 'now', 'and', 'but', 'or', 'if', 'as',
|
|
217
|
+
'your', 'you', 'this', 'that', 'it', 'they', 'we', 'he', 'she', 'my',
|
|
218
|
+
'their', 'our', 'his', 'her', 'its', 'ago', 'synced', 'updated', 'created',
|
|
219
|
+
]);
|
|
220
|
+
// Split into words and count common ones
|
|
221
|
+
const words = str.toLowerCase().split(/\s+/).filter(w => w.length > 1);
|
|
222
|
+
if (words.length < 3)
|
|
223
|
+
return false;
|
|
224
|
+
const commonWordCount = words.filter(w => commonWords.has(w.replace(/[^a-z]/g, ''))).length;
|
|
225
|
+
const commonWordRatio = commonWordCount / words.length;
|
|
226
|
+
// If more than 30% of words are common English words, it's likely natural language
|
|
227
|
+
return commonWordRatio > 0.3;
|
|
228
|
+
}
|
|
229
|
+
// Check if string looks like CSS/Tailwind classes
|
|
230
|
+
function isCSSClasses(str) {
|
|
231
|
+
// Tailwind/CSS class patterns
|
|
232
|
+
const cssIndicators = [
|
|
233
|
+
'flex', 'grid', 'block', 'inline', 'hidden',
|
|
234
|
+
'items-', 'justify-', 'gap-', 'space-',
|
|
235
|
+
'text-', 'font-', 'bg-', 'border-', 'rounded',
|
|
236
|
+
'px-', 'py-', 'pt-', 'pb-', 'pl-', 'pr-', 'p-',
|
|
237
|
+
'mx-', 'my-', 'mt-', 'mb-', 'ml-', 'mr-', 'm-',
|
|
238
|
+
'w-', 'h-', 'min-', 'max-',
|
|
239
|
+
'hover:', 'focus:', 'active:', 'disabled:',
|
|
240
|
+
'sm:', 'md:', 'lg:', 'xl:', '2xl:',
|
|
241
|
+
'dark:', 'light:',
|
|
242
|
+
'transition', 'duration-', 'ease-',
|
|
243
|
+
'absolute', 'relative', 'fixed', 'sticky',
|
|
244
|
+
'top-', 'bottom-', 'left-', 'right-',
|
|
245
|
+
'z-', 'overflow-', 'opacity-',
|
|
246
|
+
'ring-', 'shadow-', 'outline-',
|
|
247
|
+
];
|
|
248
|
+
// Count how many CSS-like tokens are in the string
|
|
249
|
+
const tokens = str.toLowerCase().split(/\s+/);
|
|
250
|
+
const cssTokenCount = tokens.filter(token => cssIndicators.some(indicator => token.includes(indicator))).length;
|
|
251
|
+
// If more than 30% of tokens look like CSS classes, it's probably CSS
|
|
252
|
+
return cssTokenCount > 0 && (cssTokenCount / tokens.length) > 0.3;
|
|
253
|
+
}
|
|
254
|
+
// Check if string looks like CSS-in-JS (styled-components, emotion, etc.)
|
|
255
|
+
function isCSSInJS(lineContent) {
|
|
256
|
+
const cssInJSPatterns = [
|
|
257
|
+
/styled\./, // styled.div, styled.button
|
|
258
|
+
/styled\(/, // styled(Component)
|
|
259
|
+
/css`/, // css`` template literal
|
|
260
|
+
/keyframes`/, // keyframes`` template literal
|
|
261
|
+
/@emotion/, // @emotion imports
|
|
262
|
+
/createGlobalStyle/, // styled-components global
|
|
263
|
+
/\$\{\s*props\s*=>/, // ${props => ...} in styled
|
|
264
|
+
/\$\{\s*\(\s*\{/, // ${({ theme }) => ...}
|
|
265
|
+
];
|
|
266
|
+
return cssInJSPatterns.some(p => p.test(lineContent));
|
|
267
|
+
}
|
|
268
|
+
// Check if file is documentation/README
|
|
269
|
+
function isDocumentationFile(filePath) {
|
|
270
|
+
const docPatterns = [
|
|
271
|
+
/README/i,
|
|
272
|
+
/CHANGELOG/i,
|
|
273
|
+
/CONTRIBUTING/i,
|
|
274
|
+
/LICENSE/i,
|
|
275
|
+
/CODE_OF_CONDUCT/i,
|
|
276
|
+
/SECURITY/i,
|
|
277
|
+
/AUTHORS/i,
|
|
278
|
+
/HISTORY/i,
|
|
279
|
+
/\.md$/i,
|
|
280
|
+
/\.mdx$/i,
|
|
281
|
+
/\.rst$/i, // reStructuredText
|
|
282
|
+
/\.adoc$/i, // AsciiDoc
|
|
283
|
+
/\.txt$/i, // Plain text docs
|
|
284
|
+
/\/docs\//i,
|
|
285
|
+
/\/documentation\//i,
|
|
286
|
+
/\/wiki\//i,
|
|
287
|
+
/\/guides?\//i,
|
|
288
|
+
/\/tutorials?\//i,
|
|
289
|
+
/\/examples?\//i, // Example directories often have sample configs
|
|
290
|
+
];
|
|
291
|
+
return docPatterns.some(p => p.test(filePath));
|
|
292
|
+
}
|
|
293
|
+
// Check if string is a logging/output statement content
|
|
294
|
+
function isDebugLogContent(lineContent) {
|
|
295
|
+
const debugPatterns = [
|
|
296
|
+
/console\.(log|debug|info|warn|error)\s*\(/i,
|
|
297
|
+
/logger\.(log|debug|info|warn|error)\s*\(/i,
|
|
298
|
+
/\bthis\.log\s*\(/i, // Instance method logging
|
|
299
|
+
/\bcore\.(info|debug|warning|error|notice)\s*\(/i, // GitHub Actions core
|
|
300
|
+
/\bvscode\.window\.show(Information|Warning|Error)Message\s*\(/i, // VS Code API
|
|
301
|
+
/\[.*Debug.*\]/i,
|
|
302
|
+
/\[.*Log.*\]/i,
|
|
303
|
+
];
|
|
304
|
+
return debugPatterns.some(pattern => pattern.test(lineContent));
|
|
305
|
+
}
|
|
306
|
+
// Check if string looks like a CLI command or usage snippet (not a secret)
|
|
307
|
+
function isCommandLineSnippet(value, lineContent) {
|
|
308
|
+
// Common places where commands appear (help text, docs, quick fixes)
|
|
309
|
+
const commandContextPatterns = [
|
|
310
|
+
/\b(quickFix|command|example|usage|cli|help|hint)\b/i,
|
|
311
|
+
/\b(run|exec|execute|install)\b\s*:/i,
|
|
312
|
+
];
|
|
313
|
+
// Shell/env assignment patterns
|
|
314
|
+
const envAssignmentPatterns = [
|
|
315
|
+
/^\s*(export\s+)?[A-Z_][A-Z0-9_]*=/, // export VAR=... or VAR=...
|
|
316
|
+
/\bNODE_OPTIONS=/i,
|
|
317
|
+
];
|
|
318
|
+
// Command-like patterns (flags + known commands)
|
|
319
|
+
const commandPatterns = [
|
|
320
|
+
/^\s*\$\s+/, // shell prompt
|
|
321
|
+
/\s--[a-z0-9][a-z0-9-]*/i, // CLI flags
|
|
322
|
+
/\b(npm|pnpm|yarn|npx|node|bun|deno|git|curl|wget|oculum|python|pip|brew)\b/i,
|
|
323
|
+
];
|
|
324
|
+
const hasCommandContext = commandContextPatterns.some(p => p.test(lineContent));
|
|
325
|
+
const looksLikeEnvAssignment = envAssignmentPatterns.some(p => p.test(value));
|
|
326
|
+
const looksLikeCommand = commandPatterns.some(p => p.test(value));
|
|
327
|
+
// Commands are usually multi-token and contain spaces
|
|
328
|
+
const hasMultipleTokens = value.trim().split(/\s+/).length >= 2;
|
|
329
|
+
return (hasCommandContext || looksLikeEnvAssignment || looksLikeCommand) && hasMultipleTokens;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Check if string is a SQL query (not a secret)
|
|
333
|
+
* SQL queries have high entropy due to mixed case keywords and table names
|
|
334
|
+
*/
|
|
335
|
+
function isSQLQuery(value, lineContent) {
|
|
336
|
+
const sqlPatterns = [
|
|
337
|
+
/\bSELECT\s+/i,
|
|
338
|
+
/\bINSERT\s+INTO\b/i,
|
|
339
|
+
/\bUPDATE\s+.*\bSET\b/i,
|
|
340
|
+
/\bDELETE\s+FROM\b/i,
|
|
341
|
+
/\bCREATE\s+(TABLE|INDEX|DATABASE)\b/i,
|
|
342
|
+
/\bALTER\s+TABLE\b/i,
|
|
343
|
+
/\bDROP\s+(TABLE|INDEX|DATABASE)\b/i,
|
|
344
|
+
/\bJOIN\s+.*\bON\b/i,
|
|
345
|
+
/\bWHERE\s+/i,
|
|
346
|
+
/\bGROUP\s+BY\b/i,
|
|
347
|
+
/\bORDER\s+BY\b/i,
|
|
348
|
+
/\bHAVING\s+/i,
|
|
349
|
+
/\bUNION\s+/i,
|
|
350
|
+
];
|
|
351
|
+
// Tagged template literal SQL context
|
|
352
|
+
const sqlContextPatterns = [
|
|
353
|
+
/\bsql`/i, // Drizzle, Kysely, etc.
|
|
354
|
+
/\bprisma\.\$queryRaw/i,
|
|
355
|
+
/\.query\s*\(/i,
|
|
356
|
+
/\.execute\s*\(/i,
|
|
357
|
+
/\.raw\s*\(/i,
|
|
358
|
+
];
|
|
359
|
+
return (sqlPatterns.some(p => p.test(value)) ||
|
|
360
|
+
sqlContextPatterns.some(p => p.test(lineContent)));
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Check if string is an i18n/translation string (not a secret)
|
|
364
|
+
* Internationalization strings can have high entropy
|
|
365
|
+
*/
|
|
366
|
+
function isI18nString(value, lineContent) {
|
|
367
|
+
const i18nPatterns = [
|
|
368
|
+
/defaultMessage\s*:/i,
|
|
369
|
+
/\bt\s*\(/i, // t('key')
|
|
370
|
+
/\bi18n\./i,
|
|
371
|
+
/\buseTranslation/i,
|
|
372
|
+
/\bformatMessage\s*\(/i,
|
|
373
|
+
/\bintl\./i,
|
|
374
|
+
/\bmsg`/i, // Lingui msg tagged template
|
|
375
|
+
/\btrans\s*\(/i,
|
|
376
|
+
/\b_\s*\(/i, // Common i18n alias
|
|
377
|
+
/description\s*:/i, // Often i18n context
|
|
378
|
+
/\bLocale/i,
|
|
379
|
+
];
|
|
380
|
+
// Check if file is in i18n/locales directory
|
|
381
|
+
const isI18nFile = /\/(i18n|locales?|translations?|messages?)\//i.test(value);
|
|
382
|
+
return i18nPatterns.some(p => p.test(lineContent)) || isI18nFile;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Check if string is a CSS transform or animation value (not a secret)
|
|
386
|
+
*/
|
|
387
|
+
function isCSSTransformOrAnimation(value) {
|
|
388
|
+
const transformPatterns = [
|
|
389
|
+
/\btranslate(?:3d|X|Y|Z)?\s*\(/i,
|
|
390
|
+
/\brotate(?:3d|X|Y|Z)?\s*\(/i,
|
|
391
|
+
/\bscale(?:3d|X|Y|Z)?\s*\(/i,
|
|
392
|
+
/\bskew(?:X|Y)?\s*\(/i,
|
|
393
|
+
/\bmatrix(?:3d)?\s*\(/i,
|
|
394
|
+
/\bperspective\s*\(/i,
|
|
395
|
+
/\bcubic-bezier\s*\(/i,
|
|
396
|
+
/\bsteps\s*\(/i,
|
|
397
|
+
/\b(ease|linear|ease-in|ease-out|ease-in-out)\b/i,
|
|
398
|
+
/\btransform:\s*/i,
|
|
399
|
+
/\banimation:\s*/i,
|
|
400
|
+
/\btransition:\s*/i,
|
|
401
|
+
/\b@keyframes\b/i,
|
|
402
|
+
];
|
|
403
|
+
return transformPatterns.some(p => p.test(value));
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Check if string is a URL template/path pattern (not a secret)
|
|
407
|
+
* API routes and URL patterns can have high entropy
|
|
408
|
+
*/
|
|
409
|
+
function isURLTemplate(value) {
|
|
410
|
+
// URL path with template variables
|
|
411
|
+
const urlTemplatePatterns = [
|
|
412
|
+
/^\/[a-zA-Z0-9_-]+(?:\/[a-zA-Z0-9_-]+)*(?:\/\$\{[^}]+\}|\/:[\w]+)+/, // /api/users/${id} or /api/users/:id
|
|
413
|
+
/^https?:\/\/[^/]+\/.*\$\{/, // Full URL with template
|
|
414
|
+
/\/\[[\w]+\]\//, // Next.js dynamic routes: /[slug]/
|
|
415
|
+
/\/\[\.\.\.[^\]]+\]/, // Next.js catch-all: /[...slug]
|
|
416
|
+
/\/:[\w]+\//, // Express-style params: /:id/
|
|
417
|
+
/\{[\w]+\}/, // OpenAPI-style params: {userId}
|
|
418
|
+
];
|
|
419
|
+
return urlTemplatePatterns.some(p => p.test(value));
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Check if string is a blockchain address (not a secret)
|
|
423
|
+
* Public blockchain addresses have high entropy but are meant to be public
|
|
424
|
+
*/
|
|
425
|
+
function isBlockchainAddress(value) {
|
|
426
|
+
const blockchainPatterns = [
|
|
427
|
+
// Ethereum addresses (0x followed by 40 hex chars)
|
|
428
|
+
/^0x[a-fA-F0-9]{40}$/,
|
|
429
|
+
// Bitcoin addresses (various formats)
|
|
430
|
+
/^[13][a-km-zA-HJ-NP-Z1-9]{25,34}$/, // Legacy P2PKH
|
|
431
|
+
/^3[a-km-zA-HJ-NP-Z1-9]{25,34}$/, // P2SH
|
|
432
|
+
/^bc1[a-z0-9]{39,59}$/, // Bech32
|
|
433
|
+
// Solana addresses (base58, 32-44 chars)
|
|
434
|
+
/^[1-9A-HJ-NP-Za-km-z]{32,44}$/,
|
|
435
|
+
];
|
|
436
|
+
return blockchainPatterns.some(p => p.test(value));
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Check if string is shader/WebGL code (not a secret)
|
|
440
|
+
* Shader code has high entropy due to mathematical notation
|
|
441
|
+
*/
|
|
442
|
+
function isShaderCode(value, lineContent) {
|
|
443
|
+
const shaderPatterns = [
|
|
444
|
+
// GLSL keywords and functions
|
|
445
|
+
/\bgl_\w+\b/, // gl_Position, gl_FragColor, etc.
|
|
446
|
+
/\bvec[234]\s*\(/, // vec2(), vec3(), vec4()
|
|
447
|
+
/\bmat[234]\s*\(/, // mat2(), mat3(), mat4()
|
|
448
|
+
/\buniform\s+\w+/, // uniform declarations
|
|
449
|
+
/\bvarying\s+\w+/, // varying declarations
|
|
450
|
+
/\battribute\s+\w+/, // attribute declarations
|
|
451
|
+
/\bprecision\s+(highp|mediump|lowp)/,
|
|
452
|
+
/\bfloat\s+\w+\s*=/, // float variable declarations
|
|
453
|
+
/\bsampler2D\b/,
|
|
454
|
+
/\btexture2D\s*\(/,
|
|
455
|
+
/\bnormalize\s*\(/,
|
|
456
|
+
/\bdot\s*\(/,
|
|
457
|
+
/\bcross\s*\(/,
|
|
458
|
+
/\bmix\s*\(/,
|
|
459
|
+
/\bclamp\s*\(/,
|
|
460
|
+
/\bstep\s*\(/,
|
|
461
|
+
/\bsmoothstep\s*\(/,
|
|
462
|
+
// WebGL context indicators
|
|
463
|
+
/\bWebGLRenderingContext\b/,
|
|
464
|
+
/\.createShader\s*\(/,
|
|
465
|
+
/\.shaderSource\s*\(/,
|
|
466
|
+
/\.compileShader\s*\(/,
|
|
467
|
+
];
|
|
468
|
+
return shaderPatterns.some(p => p.test(value) || p.test(lineContent));
|
|
469
|
+
}
|
|
470
|
+
// Check if string is inline style (JSX or HTML)
|
|
471
|
+
function isInlineStyle(lineContent) {
|
|
472
|
+
// JSX inline styles
|
|
473
|
+
const jsxStylePatterns = [
|
|
474
|
+
/style\s*=\s*\{\{/, // style={{...}}
|
|
475
|
+
/style\s*=\s*\{[^}]*:/, // style={{ color: ... }}
|
|
476
|
+
/className\s*=\s*["`'][^"`']*gradient/i, // gradient classes
|
|
477
|
+
/className\s*=\s*["`'][^"`']*bg-/i, // bg- classes
|
|
478
|
+
];
|
|
479
|
+
// HTML inline styles
|
|
480
|
+
const htmlStylePatterns = [
|
|
481
|
+
/style\s*=\s*["'][^"']*:/, // style="color: ..."
|
|
482
|
+
/<style[^>]*>/i, // <style> tags
|
|
483
|
+
/background:\s*linear-gradient/i, // CSS gradients
|
|
484
|
+
/background:\s*radial-gradient/i, // Radial gradients
|
|
485
|
+
];
|
|
486
|
+
return [...jsxStylePatterns, ...htmlStylePatterns].some(p => p.test(lineContent));
|
|
487
|
+
}
|
|
488
|
+
// Check if string contains CSS tokens (colors, units, functions)
|
|
489
|
+
function hasCSSTokens(str) {
|
|
490
|
+
const cssTokens = [
|
|
491
|
+
// CSS units
|
|
492
|
+
/\d+px\b/, /\d+%\b/, /\d+em\b/, /\d+rem\b/, /\d+deg\b/, /\d+vh\b/, /\d+vw\b/,
|
|
493
|
+
// Hex colors (standalone or in context)
|
|
494
|
+
/#[0-9a-f]{3,8}\b/i,
|
|
495
|
+
// CSS color functions
|
|
496
|
+
/rgb\s*\(/, /rgba\s*\(/, /hsl\s*\(/, /hsla\s*\(/,
|
|
497
|
+
/oklab\s*\(/, /oklch\s*\(/, /lab\s*\(/, /lch\s*\(/, // Modern color functions
|
|
498
|
+
// CSS gradients (all types)
|
|
499
|
+
/linear-gradient/, /radial-gradient/, /conic-gradient/,
|
|
500
|
+
/repeating-linear-gradient/, /repeating-radial-gradient/,
|
|
501
|
+
// Gradient direction keywords (Tailwind-style)
|
|
502
|
+
/\bfrom-/, /\bto-/, /\bvia-/,
|
|
503
|
+
// CSS custom properties
|
|
504
|
+
/var\s*\(--/,
|
|
505
|
+
// Common CSS properties
|
|
506
|
+
/\bopacity\s*:\s*[\d.]+/,
|
|
507
|
+
/\btransform\s*:/,
|
|
508
|
+
/\btransition\s*:/,
|
|
509
|
+
/\banimation\s*:/,
|
|
510
|
+
// Box shadow patterns
|
|
511
|
+
/\bshadow-/, /box-shadow/,
|
|
512
|
+
/\d+px\s+\d+px\s+\d+px/, // Shadow offset pattern
|
|
513
|
+
// Color stops in gradients
|
|
514
|
+
/\b\d+%\s*(,|$)/, // Percentage color stops
|
|
515
|
+
];
|
|
516
|
+
// Single strong indicators (only need 1 match)
|
|
517
|
+
const strongIndicators = [
|
|
518
|
+
/^#[0-9a-f]{6}$/i, // Standalone 6-digit hex color
|
|
519
|
+
/^#[0-9a-f]{8}$/i, // Standalone 8-digit hex color with alpha
|
|
520
|
+
/linear-gradient\s*\(/, // Gradient function
|
|
521
|
+
/radial-gradient\s*\(/,
|
|
522
|
+
/conic-gradient\s*\(/,
|
|
523
|
+
/rgba?\s*\(\s*\d/, // rgb/rgba with numbers
|
|
524
|
+
/hsla?\s*\(\s*\d/, // hsl/hsla with numbers
|
|
525
|
+
];
|
|
526
|
+
// If any strong indicator matches, it's definitely CSS
|
|
527
|
+
if (strongIndicators.some(pattern => pattern.test(str))) {
|
|
528
|
+
return true;
|
|
529
|
+
}
|
|
530
|
+
// Must match at least 2 CSS indicators to be confident it's CSS
|
|
531
|
+
const tokenCount = cssTokens.filter(pattern => pattern.test(str)).length;
|
|
532
|
+
return tokenCount >= 2;
|
|
533
|
+
}
|
|
534
|
+
// Check if value/line contains environment variable placeholders (shell scripts, test files)
|
|
535
|
+
function isEnvVarPlaceholder(lineContent, value) {
|
|
536
|
+
// Shell script patterns
|
|
537
|
+
const shellEnvPatterns = [
|
|
538
|
+
/\$[A-Z_][A-Z0-9_]*/, // $VAR_NAME
|
|
539
|
+
/\$\{[A-Z_][A-Z0-9_]*\}/, // ${VAR_NAME}
|
|
540
|
+
/\bexport\s+[A-Z_][A-Z0-9_]*=["']?\$/, // export VAR=$OTHER
|
|
541
|
+
/:\s*\$\{[A-Z_][A-Z0-9_]*:-/, // ${VAR:-default}
|
|
542
|
+
];
|
|
543
|
+
// Test file env var patterns (common placeholder names)
|
|
544
|
+
const testEnvPatterns = [
|
|
545
|
+
/FREE_KEY|PRO_KEY|ULTRA_KEY|TEST_KEY/i,
|
|
546
|
+
/BASE_URL|API_URL|ENDPOINT_URL/i,
|
|
547
|
+
/YOUR_[A-Z_]*KEY|REPLACE_[A-Z_]*KEY/i,
|
|
548
|
+
/\$\{?\w+\}?_KEY|\$\{?\w+\}?_TOKEN/i, // $SOME_KEY, ${SOME_TOKEN}
|
|
549
|
+
];
|
|
550
|
+
return (shellEnvPatterns.some(p => p.test(lineContent)) ||
|
|
551
|
+
testEnvPatterns.some(p => p.test(value)) ||
|
|
552
|
+
testEnvPatterns.some(p => p.test(lineContent)));
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Check if string is a CSS calc pattern or similar dynamic expression
|
|
556
|
+
* These can have high entropy but are not secrets
|
|
557
|
+
*/
|
|
558
|
+
function isCSSCalcOrExpression(value, lineContent) {
|
|
559
|
+
const calcPatterns = [
|
|
560
|
+
// CSS calc with template literal: `${(100 / steps.length) * order}%`
|
|
561
|
+
/\$\{[^}]*\/[^}]*\}.*%/,
|
|
562
|
+
// CSS calc function
|
|
563
|
+
/calc\s*\(/i,
|
|
564
|
+
// Window env injection: `window.__ENV__ = ${JSON.stringify(env)}`
|
|
565
|
+
/window\.__[A-Z_]+__\s*=/,
|
|
566
|
+
// Boolean expressions with process.env
|
|
567
|
+
/&&.*process\.env\.|process\.env\.\w+\s*&&/,
|
|
568
|
+
// Path construction patterns: `/path/${var}/endpoint`
|
|
569
|
+
/\/[^/]+\/\$\{[^}]+\}\/[^/]+/,
|
|
570
|
+
// Array/object destructuring patterns
|
|
571
|
+
/\[\s*\d+\s*\]\s*=/,
|
|
572
|
+
// Numeric calculations in template literals
|
|
573
|
+
/\$\{\s*\d+\s*[\/*+-]\s*\d+/,
|
|
574
|
+
// JSON.stringify in template
|
|
575
|
+
/JSON\.stringify\s*\(/,
|
|
576
|
+
// Object spread/spread operator patterns
|
|
577
|
+
/\.\.\.\w+/,
|
|
578
|
+
];
|
|
579
|
+
return calcPatterns.some(p => p.test(value) || p.test(lineContent));
|
|
580
|
+
}
|
|
581
|
+
/**
|
|
582
|
+
* Check if file is minified JavaScript
|
|
583
|
+
* Minified files have high entropy strings that are NOT secrets
|
|
584
|
+
*/
|
|
585
|
+
function isMinifiedFile(filePath) {
|
|
586
|
+
const minifiedPatterns = [
|
|
587
|
+
/\.min\.js$/i,
|
|
588
|
+
/\.min\.mjs$/i,
|
|
589
|
+
/\.min\.cjs$/i,
|
|
590
|
+
/\.bundle\.js$/i,
|
|
591
|
+
/-min\.js$/i,
|
|
592
|
+
/\.packed\.js$/i,
|
|
593
|
+
/\.compressed\.js$/i,
|
|
594
|
+
/\/dist\/.*\.js$/i, // dist/ typically contains bundled/minified output
|
|
595
|
+
/\/build\/.*\.js$/i, // build/ output directories
|
|
596
|
+
/\/vendor\//i, // vendor directories
|
|
597
|
+
/\/node_modules\//i, // node_modules should never be scanned anyway
|
|
598
|
+
];
|
|
599
|
+
return minifiedPatterns.some(p => p.test(filePath));
|
|
600
|
+
}
|
|
601
|
+
function detectHighEntropyStrings(content, filePath, options) {
|
|
602
|
+
const vulnerabilities = [];
|
|
603
|
+
// Skip minified files - they have high entropy but no actual secrets
|
|
604
|
+
if (isMinifiedFile(filePath)) {
|
|
605
|
+
return vulnerabilities;
|
|
606
|
+
}
|
|
607
|
+
// Skip scanner/fixture files to avoid self-detection
|
|
608
|
+
if ((0, file_classifier_1.isScannerOrFixtureFile)(filePath)) {
|
|
609
|
+
return vulnerabilities;
|
|
610
|
+
}
|
|
611
|
+
// Skip fixture files (__fixtures__, .fixture., mock-data, etc.)
|
|
612
|
+
if ((0, file_classifier_1.isFixtureFile)(filePath)) {
|
|
613
|
+
return vulnerabilities;
|
|
614
|
+
}
|
|
615
|
+
// Skip example files
|
|
616
|
+
if ((0, file_classifier_1.isExampleFile)(filePath)) {
|
|
617
|
+
return vulnerabilities;
|
|
618
|
+
}
|
|
619
|
+
// Skip example directories (/examples/, /demos/, /tutorials/, etc.)
|
|
620
|
+
if ((0, file_classifier_1.isExampleDirectory)(filePath)) {
|
|
621
|
+
return vulnerabilities;
|
|
622
|
+
}
|
|
623
|
+
// Skip documentation/README files
|
|
624
|
+
if (isDocumentationFile(filePath)) {
|
|
625
|
+
return vulnerabilities;
|
|
626
|
+
}
|
|
627
|
+
const strings = extractStringLiterals(content);
|
|
628
|
+
for (const { value, line, lineContent } of strings) {
|
|
629
|
+
// Skip comments
|
|
630
|
+
if ((0, file_classifier_1.isComment)(lineContent))
|
|
631
|
+
continue;
|
|
632
|
+
// Skip PEM headers/footers (they look high-entropy but aren't secrets)
|
|
633
|
+
if (isPEMHeader(value))
|
|
634
|
+
continue;
|
|
635
|
+
// Skip encrypted content blocks (the payload, not the key)
|
|
636
|
+
if (isEncryptedContent(value, lineContent))
|
|
637
|
+
continue;
|
|
638
|
+
// Skip JWT segments (handled by patterns.ts for specific detection)
|
|
639
|
+
if (isJWTSegment(value))
|
|
640
|
+
continue;
|
|
641
|
+
// Skip inline styles (CSS/JSX style={{...}} or style="...")
|
|
642
|
+
if (isInlineStyle(lineContent))
|
|
643
|
+
continue;
|
|
644
|
+
// Skip strings with CSS tokens (colors, gradients, units)
|
|
645
|
+
if (hasCSSTokens(value))
|
|
646
|
+
continue;
|
|
647
|
+
// Skip environment variable placeholders (shell scripts, test files)
|
|
648
|
+
if (isEnvVarPlaceholder(lineContent, value))
|
|
649
|
+
continue;
|
|
650
|
+
// Skip CSS calc patterns and dynamic expressions
|
|
651
|
+
if (isCSSCalcOrExpression(value, lineContent))
|
|
652
|
+
continue;
|
|
653
|
+
// Skip safe patterns
|
|
654
|
+
if (isSafePattern(value))
|
|
655
|
+
continue;
|
|
656
|
+
// Skip CSS/Tailwind class strings
|
|
657
|
+
if (isCSSClasses(value))
|
|
658
|
+
continue;
|
|
659
|
+
// Skip CSS-in-JS patterns (styled-components, emotion)
|
|
660
|
+
if (isCSSInJS(lineContent))
|
|
661
|
+
continue;
|
|
662
|
+
// Skip debug log statements (they often contain env var names which look high-entropy)
|
|
663
|
+
if (isDebugLogContent(lineContent))
|
|
664
|
+
continue;
|
|
665
|
+
// Skip CLI command/usage snippets (flags/commands can look high-entropy)
|
|
666
|
+
if (isCommandLineSnippet(value, lineContent))
|
|
667
|
+
continue;
|
|
668
|
+
// Skip SQL queries (SELECT, INSERT, etc. have high entropy but aren't secrets)
|
|
669
|
+
if (isSQLQuery(value, lineContent))
|
|
670
|
+
continue;
|
|
671
|
+
// Skip i18n/translation strings
|
|
672
|
+
if (isI18nString(value, lineContent))
|
|
673
|
+
continue;
|
|
674
|
+
// Skip CSS transforms/animations
|
|
675
|
+
if (isCSSTransformOrAnimation(value))
|
|
676
|
+
continue;
|
|
677
|
+
// Skip URL templates and path patterns
|
|
678
|
+
if (isURLTemplate(value))
|
|
679
|
+
continue;
|
|
680
|
+
// Skip blockchain addresses (public, not secrets)
|
|
681
|
+
if (isBlockchainAddress(value))
|
|
682
|
+
continue;
|
|
683
|
+
// Skip shader/WebGL code (high entropy but not secrets)
|
|
684
|
+
if (isShaderCode(value, lineContent))
|
|
685
|
+
continue;
|
|
686
|
+
// Skip regex/route matcher patterns
|
|
687
|
+
if (isRegexPattern(value))
|
|
688
|
+
continue;
|
|
689
|
+
// Skip template literals with code expressions (they look high-entropy but aren't secrets)
|
|
690
|
+
if (isTemplateWithCode(value, lineContent))
|
|
691
|
+
continue;
|
|
692
|
+
// Skip human-readable text/markdown content
|
|
693
|
+
if (isHumanReadableContent(value))
|
|
694
|
+
continue;
|
|
695
|
+
// Skip UI strings (model names, descriptions, etc.)
|
|
696
|
+
if (isUIString(value, lineContent))
|
|
697
|
+
continue;
|
|
698
|
+
// Skip JSX UI context (component props, JSX text - like "Synced ${hours}h ago")
|
|
699
|
+
if (isJSXUIContext(lineContent))
|
|
700
|
+
continue;
|
|
701
|
+
// Skip natural language strings (high ratio of common English words)
|
|
702
|
+
if (isNaturalLanguage(value))
|
|
703
|
+
continue;
|
|
704
|
+
// Calculate entropy
|
|
705
|
+
const entropy = calculateEntropy(value);
|
|
706
|
+
// Determine if this is a test file (lower severity)
|
|
707
|
+
const inTestFile = (0, file_classifier_1.isTestOrMockFile)(filePath);
|
|
708
|
+
// Two thresholds:
|
|
709
|
+
// - entropy > 4.5 for strings > 20 chars (standard)
|
|
710
|
+
// - entropy > 4.2 for strings 16-20 chars (slightly stricter to reduce FPs)
|
|
711
|
+
const meetsThreshold = (entropy > 4.5 && value.length > 20) ||
|
|
712
|
+
(entropy > 4.2 && value.length >= 16 && value.length <= 20);
|
|
713
|
+
if (meetsThreshold) {
|
|
714
|
+
// Additional check: should have mix of character types
|
|
715
|
+
const hasLower = /[a-z]/.test(value);
|
|
716
|
+
const hasUpper = /[A-Z]/.test(value);
|
|
717
|
+
const hasDigit = /[0-9]/.test(value);
|
|
718
|
+
const hasSpecial = /[^a-zA-Z0-9]/.test(value);
|
|
719
|
+
const charTypes = [hasLower, hasUpper, hasDigit, hasSpecial].filter(Boolean).length;
|
|
720
|
+
// Only flag if it has at least 2 character types (looks like a secret)
|
|
721
|
+
if (charTypes >= 2) {
|
|
722
|
+
// Final check: skip CSS-like strings that passed earlier filters
|
|
723
|
+
const looksLikeCSS = /gradient|rgba?|hsla?|#[0-9a-f]{3,8}/i.test(value);
|
|
724
|
+
if (looksLikeCSS)
|
|
725
|
+
continue;
|
|
726
|
+
// Lower severity for test files
|
|
727
|
+
const baseSeverity = entropy > 5.0 ? 'high' : 'medium';
|
|
728
|
+
const severity = inTestFile ? 'low' : baseSeverity;
|
|
729
|
+
const confidence = inTestFile ? 'low' : (entropy > 5.0 ? 'high' : 'medium');
|
|
730
|
+
vulnerabilities.push({
|
|
731
|
+
id: `entropy-${filePath}-${line}`,
|
|
732
|
+
filePath,
|
|
733
|
+
lineNumber: line,
|
|
734
|
+
lineContent,
|
|
735
|
+
severity,
|
|
736
|
+
category: 'high_entropy_string',
|
|
737
|
+
title: 'Potential hardcoded secret detected',
|
|
738
|
+
description: `High-entropy string found (entropy: ${entropy.toFixed(2)}). This may be a hardcoded secret, API key, or password.${inTestFile ? ' (in test file)' : ''}`,
|
|
739
|
+
suggestedFix: 'Move this value to an environment variable and access it via process.env',
|
|
740
|
+
confidence,
|
|
741
|
+
baseConfidence: BASE_CONFIDENCE,
|
|
742
|
+
layer: 1,
|
|
743
|
+
source: 'secrets',
|
|
744
|
+
requiresAIValidation: true, // Entropy findings must be validated by AI
|
|
745
|
+
});
|
|
746
|
+
}
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
return vulnerabilities;
|
|
750
|
+
}
|
|
751
|
+
//# sourceMappingURL=entropy.js.map
|