@snytch/nextjs
Advanced tools
| /** | ||
| * snytch demo | ||
| * | ||
| * Runs a fully synthetic end-to-end demonstration of all three snytch commands | ||
| * (scan, check, diff) using fake findings that cover the full range of severity | ||
| * levels and pattern types. Output is identical to a real run — the same | ||
| * formatters, the same exit code (1), and a real HTML report written to disk. | ||
| * | ||
| * At the end the user is prompted to delete the generated report file. | ||
| */ | ||
| /** | ||
| * Run the full snytch demo. | ||
| * | ||
| * Renders synthetic scan, check, and diff results through the real output | ||
| * formatters, generates an HTML report, dumps JSON to stdout, then optionally | ||
| * deletes the report file. | ||
| * | ||
| * @param projectRoot - The real working directory (used for report output path). | ||
| * @returns A promise that resolves when the demo is complete. | ||
| */ | ||
| export declare function runDemo(projectRoot: string): Promise<void>; | ||
| //# sourceMappingURL=demo.d.ts.map |
| {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAoOH;;;;;;;;;GASG;AACH,wBAAsB,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EhE"} |
| /** | ||
| * snytch demo | ||
| * | ||
| * Runs a fully synthetic end-to-end demonstration of all three snytch commands | ||
| * (scan, check, diff) using fake findings that cover the full range of severity | ||
| * levels and pattern types. Output is identical to a real run — the same | ||
| * formatters, the same exit code (1), and a real HTML report written to disk. | ||
| * | ||
| * At the end the user is prompted to delete the generated report file. | ||
| */ | ||
| import { createInterface } from 'readline'; | ||
| import { existsSync, rmSync } from 'fs'; | ||
| import { resolve, join } from 'path'; | ||
| import chalk from 'chalk'; | ||
| import { printScanResult, printCheckResult, printDiffResult } from '../output.js'; | ||
| import { generateReport, generateCheckReport, generateDiffReport } from '../report.js'; | ||
| import { generateRcaForFindings } from '../rca.js'; | ||
| // ── Synthetic data ───────────────────────────────────────────────────────────── | ||
| const PROJECT_ROOT = '/demo/my-nextjs-app'; | ||
| const CHUNKS_DIR = `${PROJECT_ROOT}/.next/static/chunks`; | ||
| /** Fake scan findings — critical and warning, multiple pattern categories. */ | ||
| const SCAN_FINDINGS = [ | ||
| { | ||
| type: 'pattern-match', | ||
| patternName: 'AWS Access Key ID (AKIA)', | ||
| severity: 'critical', | ||
| description: 'AWS IAM access key found in client bundle', | ||
| filePath: `${CHUNKS_DIR}/pages/_app-4f8e2a1b.js`, | ||
| charOffset: 1247, | ||
| truncatedValue: 'AKIAIOSFODNN7•••', | ||
| }, | ||
| { | ||
| type: 'pattern-match', | ||
| patternName: 'Stripe Live Secret Key', | ||
| severity: 'critical', | ||
| description: 'Stripe live secret key found in client bundle', | ||
| filePath: `${CHUNKS_DIR}/framework-8b3c91de.js`, | ||
| charOffset: 8832, | ||
| truncatedValue: 'sk_live_•••', | ||
| }, | ||
| { | ||
| type: 'pattern-match', | ||
| patternName: 'Anthropic API Key', | ||
| severity: 'critical', | ||
| description: 'Anthropic API key found in client bundle', | ||
| filePath: `${CHUNKS_DIR}/pages/_app-4f8e2a1b.js`, | ||
| charOffset: 3401, | ||
| truncatedValue: 'sk-ant-ap•••', | ||
| }, | ||
| { | ||
| type: 'pattern-match', | ||
| patternName: 'GitHub Personal Access Token', | ||
| severity: 'critical', | ||
| description: 'GitHub PAT found in client bundle', | ||
| filePath: `${CHUNKS_DIR}/main-d9a721cc.js`, | ||
| charOffset: 512, | ||
| truncatedValue: 'ghp_XyZ12•••', | ||
| }, | ||
| { | ||
| type: 'pattern-match', | ||
| patternName: 'NPM Token', | ||
| severity: 'warning', | ||
| description: 'NPM automation token found in client bundle', | ||
| filePath: `${CHUNKS_DIR}/main-d9a721cc.js`, | ||
| charOffset: 2190, | ||
| truncatedValue: 'npm_ABCDE•••', | ||
| }, | ||
| { | ||
| type: 'pattern-match', | ||
| patternName: 'JWT Token', | ||
| severity: 'warning', | ||
| description: 'JSON Web Token found in client bundle', | ||
| filePath: `${CHUNKS_DIR}/framework-8b3c91de.js`, | ||
| charOffset: 14022, | ||
| truncatedValue: 'eyJhbGci•••', | ||
| }, | ||
| ]; | ||
| const SCAN_RESULT = { | ||
| scannedFiles: 12, | ||
| findings: SCAN_FINDINGS, | ||
| durationMs: 184, | ||
| }; | ||
| const SCAN_OPTIONS = { | ||
| dir: `${PROJECT_ROOT}/.next`, | ||
| projectRoot: PROJECT_ROOT, | ||
| json: false, | ||
| report: false, | ||
| failOn: 'critical', | ||
| }; | ||
| /** Fake check findings — NEXT_PUBLIC_ variables that carry secrets. */ | ||
| const CHECK_FINDINGS = [ | ||
| { | ||
| varName: 'NEXT_PUBLIC_STRIPE_KEY', | ||
| severity: 'critical', | ||
| reason: 'pattern-match', | ||
| patternName: 'Stripe Live Secret Key', | ||
| description: 'Stripe live secret key — must never be exposed to the browser', | ||
| envFile: '.env.local', | ||
| line: 4, | ||
| truncatedValue: 'sk_live_•••', | ||
| }, | ||
| { | ||
| varName: 'NEXT_PUBLIC_ANTHROPIC_KEY', | ||
| severity: 'critical', | ||
| reason: 'pattern-match', | ||
| patternName: 'Anthropic API Key', | ||
| description: 'Anthropic API key — must never be exposed to the browser', | ||
| envFile: '.env.local', | ||
| line: 7, | ||
| truncatedValue: 'sk-ant-ap•••', | ||
| }, | ||
| { | ||
| varName: 'NEXT_PUBLIC_INTERNAL_TOKEN', | ||
| severity: 'critical', | ||
| reason: 'serverOnly', | ||
| patternName: 'serverOnly config', | ||
| description: 'Listed in snytch.config.json serverOnly — must not be NEXT_PUBLIC_', | ||
| envFile: '.env.production', | ||
| line: 12, | ||
| truncatedValue: 'tok_live_•••', | ||
| }, | ||
| { | ||
| varName: 'NEXT_PUBLIC_SESSION_SECRET', | ||
| severity: 'warning', | ||
| reason: 'high-entropy', | ||
| patternName: 'High Entropy', | ||
| description: 'High-entropy value detected — may be a secret', | ||
| envFile: '.env.local', | ||
| line: 11, | ||
| truncatedValue: 'Xk92mNpQ•••', | ||
| }, | ||
| ]; | ||
| const CHECK_RESULT = { | ||
| scannedFiles: 3, | ||
| findings: CHECK_FINDINGS, | ||
| durationMs: 31, | ||
| }; | ||
| const CHECK_OPTIONS = { | ||
| projectRoot: PROJECT_ROOT, | ||
| json: false, | ||
| report: false, | ||
| failOn: 'critical', | ||
| }; | ||
| /** Fake diff result — staging vs production vs local. */ | ||
| const DIFF_RESULT = { | ||
| fileLabels: ['.env.staging', '.env.production', '.env.local'], | ||
| inSync: [ | ||
| 'DATABASE_URL', | ||
| 'NEXT_PUBLIC_APP_URL', | ||
| 'NEXT_PUBLIC_POSTHOG_KEY', | ||
| 'REDIS_URL', | ||
| ], | ||
| drift: [ | ||
| { | ||
| key: 'STRIPE_SECRET_KEY', | ||
| presentIn: ['.env.staging', '.env.production'], | ||
| missingFrom: ['.env.local'], | ||
| }, | ||
| { | ||
| key: 'SENTRY_DSN', | ||
| presentIn: ['.env.production', '.env.local'], | ||
| missingFrom: ['.env.staging'], | ||
| }, | ||
| ], | ||
| onlyInOne: [ | ||
| { key: 'VERCEL_TOKEN', file: '.env.production' }, | ||
| { key: 'NGROK_AUTHTOKEN', file: '.env.local' }, | ||
| ], | ||
| durationMs: 8, | ||
| }; | ||
| const DIFF_OPTIONS = { | ||
| envFiles: [ | ||
| { path: `${PROJECT_ROOT}/.env.staging`, label: '.env.staging' }, | ||
| { path: `${PROJECT_ROOT}/.env.production`, label: '.env.production' }, | ||
| { path: `${PROJECT_ROOT}/.env.local`, label: '.env.local' }, | ||
| ], | ||
| projectRoot: PROJECT_ROOT, | ||
| json: false, | ||
| report: false, | ||
| strict: false, | ||
| serverOnly: ['STRIPE_SECRET_KEY'], | ||
| }; | ||
| // ── Helpers ──────────────────────────────────────────────────────────────────── | ||
| /** | ||
| * Print a bold section banner with a top/bottom border. | ||
| * | ||
| * @param title - The section title to display. | ||
| */ | ||
| function banner(title) { | ||
| const line = '━'.repeat(52); | ||
| console.log(''); | ||
| console.log(chalk.bold.cyan(` ${line}`)); | ||
| console.log(chalk.bold.cyan(` ${title}`)); | ||
| console.log(chalk.bold.cyan(` ${line}`)); | ||
| } | ||
| /** | ||
| * Prompt the user with a yes/no question and resolve with their answer. | ||
| * | ||
| * @param question - The question to display. | ||
| * @returns True if the user answered yes (y/Y), false otherwise. | ||
| */ | ||
| function askYesNo(question) { | ||
| const rl = createInterface({ input: process.stdin, output: process.stdout }); | ||
| return new Promise((resolve) => { | ||
| rl.question(question, (answer) => { | ||
| rl.close(); | ||
| resolve(answer.trim().toLowerCase() === 'y'); | ||
| }); | ||
| }); | ||
| } | ||
| // ── Main demo entry point ────────────────────────────────────────────────────── | ||
| /** | ||
| * Run the full snytch demo. | ||
| * | ||
| * Renders synthetic scan, check, and diff results through the real output | ||
| * formatters, generates an HTML report, dumps JSON to stdout, then optionally | ||
| * deletes the report file. | ||
| * | ||
| * @param projectRoot - The real working directory (used for report output path). | ||
| * @returns A promise that resolves when the demo is complete. | ||
| */ | ||
| export async function runDemo(projectRoot) { | ||
| const reportsDir = join(resolve(projectRoot), 'snytch-reports'); | ||
| // ── Intro ────────────────────────────────────────────────────────────────── | ||
| console.log(''); | ||
| console.log(chalk.bold.yellow(' ⚠ DEMO MODE — all findings are synthetic')); | ||
| console.log(chalk.dim(' No real files are scanned. This output is identical to a live run.')); | ||
| // ── Section 1: scan ──────────────────────────────────────────────────────── | ||
| banner('snytch scan · bundle secret detection'); | ||
| printScanResult(SCAN_RESULT, SCAN_OPTIONS); | ||
| // ── Section 2: check ────────────────────────────────────────────────────── | ||
| banner('snytch check · NEXT_PUBLIC_ exposure detection'); | ||
| printCheckResult(CHECK_RESULT, CHECK_OPTIONS); | ||
| // ── Section 3: diff ─────────────────────────────────────────────────────── | ||
| banner('snytch diff · environment drift'); | ||
| printDiffResult(DIFF_RESULT, DIFF_OPTIONS); | ||
| // ── Section 4: JSON output ───────────────────────────────────────────────── | ||
| banner('JSON output · --json flag (scan findings shown)'); | ||
| console.log(''); | ||
| console.log(JSON.stringify({ | ||
| scannedFiles: SCAN_RESULT.scannedFiles, | ||
| findings: SCAN_RESULT.findings, | ||
| durationMs: SCAN_RESULT.durationMs, | ||
| }, null, 2)); | ||
| // ── Section 5: HTML report ───────────────────────────────────────────────── | ||
| banner('HTML report · --report flag'); | ||
| console.log(''); | ||
| const reportScanOptions = { ...SCAN_OPTIONS, report: true, projectRoot }; | ||
| const reportCheckOptions = { ...CHECK_OPTIONS, report: true, projectRoot }; | ||
| const reportDiffOptions = { ...DIFF_OPTIONS, report: true, projectRoot }; | ||
| // Run AI RCA on synthetic findings if ANTHROPIC_API_KEY is set | ||
| if (process.env['ANTHROPIC_API_KEY']) { | ||
| console.log(chalk.dim(' Running AI RCA on synthetic findings...')); | ||
| await generateRcaForFindings(SCAN_RESULT.findings, projectRoot, 'anthropic'); | ||
| } | ||
| generateReport(SCAN_RESULT, reportScanOptions); | ||
| generateCheckReport(CHECK_RESULT, reportCheckOptions); | ||
| generateDiffReport(DIFF_RESULT, reportDiffOptions); | ||
| console.log(chalk.green(` ✓ reports written → ${reportsDir}/`)); | ||
| console.log(chalk.dim(' Open any report in a browser to see the full HTML output.')); | ||
| // ── Footer ───────────────────────────────────────────────────────────────── | ||
| console.log(''); | ||
| console.log(chalk.bold.yellow(' ⚠ DEMO COMPLETE — exit code will be 1 (critical findings detected)')); | ||
| console.log(chalk.dim(' In CI, this exit code would fail the build.')); | ||
| console.log(''); | ||
| // ── Cleanup prompt ───────────────────────────────────────────────────────── | ||
| if (existsSync(reportsDir)) { | ||
| const del = await askYesNo(chalk.dim(' Delete snytch-reports/? [y/N] ')); | ||
| if (del) { | ||
| rmSync(reportsDir, { recursive: true }); | ||
| console.log(chalk.dim(' snytch-reports/ deleted.')); | ||
| } | ||
| else { | ||
| console.log(chalk.dim(` Reports kept at: ${reportsDir}/`)); | ||
| } | ||
| } | ||
| console.log(''); | ||
| } | ||
| //# sourceMappingURL=demo.js.map |
| {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"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"} |
+10
-2
@@ -7,2 +7,3 @@ #!/usr/bin/env node | ||
| import { diff } from './commands/diff.js'; | ||
| import { runDemo } from './commands/demo.js'; | ||
| import { startMcpServer } from './mcp.js'; | ||
@@ -21,3 +22,3 @@ import { printScanResult, printCheckResult, printDiffResult } from './output.js'; | ||
| const projectRoot = cwd(); | ||
| if (!command || (command !== 'scan' && command !== 'check' && command !== 'diff' && command !== 'mcp')) { | ||
| if (!command || (command !== 'scan' && command !== 'check' && command !== 'diff' && command !== 'mcp' && command !== 'demo')) { | ||
| console.error('Usage:'); | ||
@@ -27,2 +28,3 @@ console.error(' snytch scan [--dir ./.next] [--json] [--report] [--fail-on critical|warning|all] [--ai-provider anthropic|openai|none]'); | ||
| console.error(' snytch diff --env .env.staging --env .env.production [--json] [--report] [--strict]'); | ||
| console.error(' snytch demo'); | ||
| console.error(' snytch mcp'); | ||
@@ -75,3 +77,5 @@ console.error(''); | ||
| if (command === 'scan') { | ||
| const options = { dir, projectRoot, json, report, failOn, aiProvider }; | ||
| const config = loadConfig(projectRoot); | ||
| const rcaMaxTokens = config?.rca?.maxTokens; | ||
| const options = { dir, projectRoot, json, report, failOn, aiProvider, rcaMaxTokens }; | ||
| const result = await scan(options); | ||
@@ -145,2 +149,6 @@ printScanResult(result, options); | ||
| } | ||
| else if (command === 'demo') { | ||
| await runDemo(projectRoot); | ||
| process.exit(1); | ||
| } | ||
| else if (command === 'mcp') { | ||
@@ -147,0 +155,0 @@ await startMcpServer(); |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"} |
@@ -126,3 +126,3 @@ import { readFileSync, readdirSync } from 'fs'; | ||
| if (options.report && options.aiProvider && options.aiProvider !== 'none') { | ||
| await generateRcaForFindings(findings, options.projectRoot, options.aiProvider); | ||
| await generateRcaForFindings(findings, options.projectRoot, options.aiProvider, options.rcaMaxTokens); | ||
| } | ||
@@ -129,0 +129,0 @@ const durationMs = Date.now() - startTime; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"scan.js","sourceRoot":"","sources":["../../src/commands/scan.ts"],"names":[],"mappings":"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"} |
+2
-1
@@ -11,4 +11,5 @@ import { Finding, AiProvider } from './types.js'; | ||
| * @param provider - AI provider to use. | ||
| * @param maxTokens - Maximum tokens for the AI response. Defaults to 2048. | ||
| */ | ||
| export declare function generateRcaForFindings(findings: Finding[], projectRoot: string, provider: AiProvider): Promise<void>; | ||
| export declare function generateRcaForFindings(findings: Finding[], projectRoot: string, provider: AiProvider, maxTokens?: number): Promise<void>; | ||
| //# sourceMappingURL=rca.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rca.d.ts","sourceRoot":"","sources":["../src/rca.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AAwK5D;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CA4Bf"} | ||
| {"version":3,"file":"rca.d.ts","sourceRoot":"","sources":["../src/rca.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAa,UAAU,EAAE,MAAM,YAAY,CAAC;AA4O5D;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,OAAO,EAAE,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,UAAU,EACpB,SAAS,SAAO,GACf,OAAO,CAAC,IAAI,CAAC,CAqCf"} |
+77
-9
| import Anthropic from '@anthropic-ai/sdk'; | ||
| import OpenAI from 'openai'; | ||
| import { readFileSync } from 'fs'; | ||
@@ -85,3 +86,4 @@ import { join } from 'path'; | ||
| Respond with ONLY valid JSON matching this schema (no markdown, no commentary): | ||
| Respond with ONLY valid JSON matching this schema (no markdown, no code fences, no commentary). | ||
| All string values must be on a single line — use \\n for newlines within strings, never literal newlines. | ||
| { | ||
@@ -92,3 +94,3 @@ "what": "string — one sentence: what type of secret leaked", | ||
| "fix": "string — concrete remediation steps", | ||
| "codeExample": "string — before/after code snippet", | ||
| "codeExample": "string — before/after code snippet (use \\n for line breaks)", | ||
| "editorPrompts": ["string", "string"] | ||
@@ -104,3 +106,3 @@ }`; | ||
| */ | ||
| async function callAnthropic(finding, projectRoot) { | ||
| async function callAnthropic(finding, projectRoot, maxTokens) { | ||
| const apiKey = process.env['ANTHROPIC_API_KEY']; | ||
@@ -121,3 +123,3 @@ if (!apiKey) | ||
| model: 'claude-sonnet-4-6', | ||
| max_tokens: 1024, | ||
| max_tokens: maxTokens, | ||
| messages: [{ role: 'user', content: prompt }], | ||
@@ -128,3 +130,4 @@ }); | ||
| return null; | ||
| const raw = textBlock.text.trim(); | ||
| // Strip markdown code fences if the model wrapped the JSON despite instructions | ||
| const raw = textBlock.text.trim().replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/, ''); | ||
| const parsed = JSON.parse(raw); | ||
@@ -154,2 +157,58 @@ // Validate required fields | ||
| } | ||
| /** | ||
| * Call the OpenAI API to generate an RCA for a single finding. | ||
| * | ||
| * @param finding - The critical finding to analyse. | ||
| * @param projectRoot - Absolute project root (used to read Next.js version). | ||
| * @param maxTokens - Maximum tokens for the response. | ||
| * @returns Parsed RcaResult, or null on any error. | ||
| */ | ||
| async function callOpenAI(finding, projectRoot, maxTokens) { | ||
| const apiKey = process.env['OPENAI_API_KEY']; | ||
| if (!apiKey) | ||
| return null; | ||
| const nextVersion = readNextVersion(projectRoot); | ||
| let prompt = buildPrompt(finding, nextVersion); | ||
| // Safety: strip any visible secret prefix from the outgoing payload | ||
| const { payload, stripped } = stripSecretValues(prompt, finding.truncatedValue); | ||
| if (stripped) { | ||
| process.stderr.write(` [rca] ⚠ Potential secret prefix detected in prompt payload — redacted before sending.\n`); | ||
| prompt = payload; | ||
| } | ||
| try { | ||
| const client = new OpenAI({ apiKey }); | ||
| const response = await client.chat.completions.create({ | ||
| model: 'gpt-4o', | ||
| max_tokens: maxTokens, | ||
| messages: [{ role: 'user', content: prompt }], | ||
| }); | ||
| const text = response.choices[0]?.message?.content?.trim(); | ||
| if (!text) | ||
| return null; | ||
| // Strip markdown code fences if the model wrapped the JSON despite instructions | ||
| const raw = text.replace(/^```(?:json)?\s*/i, '').replace(/\s*```$/, ''); | ||
| const parsed = JSON.parse(raw); | ||
| // Validate required fields | ||
| if (typeof parsed.what !== 'string' || | ||
| typeof parsed.when !== 'string' || | ||
| typeof parsed.how !== 'string' || | ||
| typeof parsed.fix !== 'string' || | ||
| typeof parsed.codeExample !== 'string' || | ||
| !Array.isArray(parsed.editorPrompts) || | ||
| parsed.editorPrompts.length < 2) { | ||
| return null; | ||
| } | ||
| return { | ||
| what: parsed.what, | ||
| when: parsed.when, | ||
| how: parsed.how, | ||
| fix: parsed.fix, | ||
| codeExample: parsed.codeExample, | ||
| editorPrompts: [parsed.editorPrompts[0], parsed.editorPrompts[1]], | ||
| }; | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| } | ||
| // ── Public API ──────────────────────────────────────────────────────────────── | ||
@@ -165,4 +224,5 @@ /** | ||
| * @param provider - AI provider to use. | ||
| * @param maxTokens - Maximum tokens for the AI response. Defaults to 2048. | ||
| */ | ||
| export async function generateRcaForFindings(findings, projectRoot, provider) { | ||
| export async function generateRcaForFindings(findings, projectRoot, provider, maxTokens = 2048) { | ||
| if (provider === 'none') | ||
@@ -179,3 +239,3 @@ return; | ||
| for (const finding of criticals) { | ||
| const rca = await callAnthropic(finding, projectRoot); | ||
| const rca = await callAnthropic(finding, projectRoot, maxTokens); | ||
| if (rca !== null) { | ||
@@ -186,7 +246,15 @@ finding.rca = rca; | ||
| } | ||
| // 'openai' provider: reserved for future implementation | ||
| if (provider === 'openai') { | ||
| process.stderr.write(' [rca] OpenAI provider is not yet implemented. Use --ai-provider anthropic.\n'); | ||
| if (!process.env['OPENAI_API_KEY']) { | ||
| process.stderr.write(' [rca] OPENAI_API_KEY not set — skipping AI RCA.\n'); | ||
| return; | ||
| } | ||
| for (const finding of criticals) { | ||
| const rca = await callOpenAI(finding, projectRoot, maxTokens); | ||
| if (rca !== null) { | ||
| finding.rca = rca; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| //# sourceMappingURL=rca.js.map |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"rca.js","sourceRoot":"","sources":["../src/rca.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"rca.js","sourceRoot":"","sources":["../src/rca.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAW,WAAW,EAAE,YAAY,EAAgB,UAAU,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAooB3I,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,YAAY,GACpB,IAAI,CAoBN;AAwID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAoBjF;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,GACnB,IAAI,CAqBN"} | ||
| {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAW,WAAW,EAAE,YAAY,EAAgB,UAAU,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAuoB3I,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,YAAY,GACpB,IAAI,CAoBN;AA6ID;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAoBjF;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,GACnB,IAAI,CAqBN"} |
+21
-13
@@ -1,4 +0,10 @@ | ||
| import { writeFileSync } from 'fs'; | ||
| import { writeFileSync, mkdirSync } from 'fs'; | ||
| import { join, relative } from 'path'; | ||
| import { execSync } from 'child_process'; | ||
| /** Returns (and creates if needed) the snytch-reports/ output directory. */ | ||
| function reportsDir(projectRoot) { | ||
| const dir = join(projectRoot, 'snytch-reports'); | ||
| mkdirSync(dir, { recursive: true }); | ||
| return dir; | ||
| } | ||
| function getGitSha(projectRoot) { | ||
@@ -223,2 +229,3 @@ try { | ||
| .header-subtitle { font-size: 14px; color: var(--text2); margin-top: 4px; } | ||
| .header-meta { | ||
@@ -455,2 +462,3 @@ font-size: 12px; | ||
| <h1>snytch report</h1> | ||
| <p class="header-subtitle">Secrets and sensitive values detected in your Next.js client bundle.</p> | ||
| </div> | ||
@@ -464,3 +472,2 @@ <div class="header-meta"> | ||
| <button class="tab-btn active" onclick="showTab('findings')">Findings</button> | ||
| <button class="tab-btn" onclick="showTab('drift')">Env Drift</button> | ||
| <button class="tab-btn" onclick="showTab('rca')">AI RCA</button> | ||
@@ -473,9 +480,2 @@ </div> | ||
| <div id="tab-drift" class="tab-panel"> | ||
| <div class="placeholder"> | ||
| Run <code>snytch diff</code> to populate this tab.<br> | ||
| Environment drift detection compares key presence across <code>.env</code> files. | ||
| </div> | ||
| </div> | ||
| <div id="tab-rca" class="tab-panel"> | ||
@@ -575,2 +575,3 @@ ${rcaHtml} | ||
| .header h1 { font-size: 18px; font-weight: 600; letter-spacing: -0.3px; } | ||
| .header-subtitle { font-size: 14px; color: var(--text2); margin-top: 4px; } | ||
| .header-meta { font-size: 12px; color: var(--text2); margin-top: 4px; font-family: var(--mono); } | ||
@@ -607,2 +608,3 @@ .content { padding: 28px 32px; } | ||
| <h1>snytch check report</h1> | ||
| <p class="header-subtitle">NEXT_PUBLIC_ variables that expose secrets or sensitive values to the browser.</p> | ||
| <div class="header-meta">commit ${escapeHtml(gitSha)} · ${escapeHtml(timestamp)} · ${result.scannedFiles} file${result.scannedFiles === 1 ? '' : 's'} scanned</div> | ||
@@ -619,3 +621,3 @@ </div> | ||
| const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' UTC'; | ||
| const outputPath = join(options.projectRoot, 'snytch-check-report.html'); | ||
| const outputPath = join(reportsDir(options.projectRoot), 'snytch-check-report.html'); | ||
| const html = buildCheckHtml(result, gitSha, timestamp); | ||
@@ -653,5 +655,9 @@ writeFileSync(outputPath, html, 'utf-8'); | ||
| } | ||
| else { | ||
| else if (onlyEntry) { | ||
| present = onlyEntry.file === label; | ||
| } | ||
| else { | ||
| // inSync key — present in all environments | ||
| present = true; | ||
| } | ||
| const mark = present | ||
@@ -702,2 +708,3 @@ ? '<span class="mark-present">✓</span>' | ||
| .header h1 { font-size: 18px; font-weight: 600; letter-spacing: -0.3px; } | ||
| .header-subtitle { font-size: 14px; color: var(--text2); margin-top: 4px; } | ||
| .header-meta { font-size: 12px; color: var(--text2); margin-top: 4px; font-family: var(--mono); } | ||
@@ -730,2 +737,3 @@ .content { padding: 28px 32px; } | ||
| <h1>snytch diff report</h1> | ||
| <p class="header-subtitle">Environment variable drift across your .env files — keys that are missing, mismatched, or only present in one environment.</p> | ||
| <div class="header-meta">commit ${escapeHtml(gitSha)} · ${escapeHtml(timestamp)} · ${totalKeys} key${totalKeys === 1 ? '' : 's'} across ${labels.length} files</div> | ||
@@ -774,3 +782,3 @@ </div> | ||
| const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' UTC'; | ||
| const outputPath = join(options.projectRoot, 'snytch-diff-report.html'); | ||
| const outputPath = join(reportsDir(options.projectRoot), 'snytch-diff-report.html'); | ||
| const html = buildDiffHtml(result, gitSha, timestamp); | ||
@@ -793,3 +801,3 @@ writeFileSync(outputPath, html, 'utf-8'); | ||
| const timestamp = new Date().toISOString().replace('T', ' ').slice(0, 19) + ' UTC'; | ||
| const outputPath = join(options.projectRoot, 'snytch-report.html'); | ||
| const outputPath = join(reportsDir(options.projectRoot), 'snytch-report.html'); | ||
| const html = buildHtml(result, options, gitSha, timestamp); | ||
@@ -796,0 +804,0 @@ writeFileSync(outputPath, html, 'utf-8'); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"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"} |
+7
-0
@@ -50,6 +50,13 @@ export type Severity = 'critical' | 'warning' | 'info'; | ||
| aiProvider?: AiProvider; | ||
| /** Maximum tokens for AI RCA responses. Defaults to 2048. */ | ||
| rcaMaxTokens?: number; | ||
| } | ||
| export interface RcaConfig { | ||
| /** Maximum tokens for the AI RCA response. Defaults to 2048. */ | ||
| maxTokens?: number; | ||
| } | ||
| export interface SnytchConfig { | ||
| serverOnly?: string[]; | ||
| failOn?: FailOn; | ||
| rca?: RcaConfig; | ||
| } | ||
@@ -56,0 +63,0 @@ export interface ResolvedEnvVar { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} |
+20
-5
| { | ||
| "name": "@snytch/nextjs", | ||
| "version": "0.1.0", | ||
| "version": "0.1.1", | ||
| "description": "Bundle scanning, NEXT_PUBLIC_ exposure detection, and environment drift for Next.js", | ||
@@ -15,3 +15,3 @@ "type": "module", | ||
| "bin": { | ||
| "snytch": "./dist/cli.js" | ||
| "snytch": "dist/cli.js" | ||
| }, | ||
@@ -27,11 +27,25 @@ "scripts": { | ||
| "test:watch": "vitest", | ||
| "prepublishOnly": "npm run build" | ||
| "prepublishOnly": "npm run build", | ||
| "snytch:demo": "node ./dist/cli.js demo" | ||
| }, | ||
| "keywords": [ | ||
| "nextjs", | ||
| "next.js", | ||
| "security", | ||
| "secrets", | ||
| "secret-scanner", | ||
| "bundle", | ||
| "bundle-analysis", | ||
| "scanner", | ||
| "env" | ||
| "env", | ||
| "dotenv", | ||
| "ai", | ||
| "anthropic", | ||
| "openai", | ||
| "claude", | ||
| "gpt", | ||
| "mcp", | ||
| "devtools", | ||
| "ci", | ||
| "devsecops" | ||
| ], | ||
@@ -65,4 +79,5 @@ "author": "tristandenyer", | ||
| "@modelcontextprotocol/sdk": "^1.27.1", | ||
| "chalk": "^5.6.2" | ||
| "chalk": "^5.6.2", | ||
| "openai": "^6.32.0" | ||
| } | ||
| } |
+189
-28
| # @snytch/nextjs | ||
|  | ||
| [](https://www.npmjs.com/package/@snytch/nextjs) | ||
| [](https://www.npmjs.com/package/@snytch/nextjs) | ||
| [](https://nodejs.org) | ||
| [](LICENSE) | ||
| Bundle scanning, secret detection, and environment exposure analysis for Next.js applications. | ||
| ## Why we all need this | ||
| With Next.js, an environment variable without the `NEXT_PUBLIC_` prefix can still end up in a client bundle if it's imported by a shared module, a utility function, or a component that renders on both server and client. By the time it's in production, it's in every visitor's browser, your build artifacts, your CDN cache, and potentially your git history. | ||
| The scale of this problem is larger than most teams realize. According to [GitGuardian's 2026 State of Secrets Sprawl Report](https://www.gitguardian.com/state-of-secrets-sprawl-report-2026), codebases leaked 28.6 million secrets in public GitHub repositories in 2025 alone, a 34% year-over-year increase. More concerning: 64% of secrets from 2022 are still exploitable today. | ||
| `@snytch/nextjs` scans your compiled bundle, checks your `.env` files, and compares your environments to catch these issues before they reach production. | ||
| ## Requirements | ||
| - Node.js 18 or later | ||
| - A Next.js project with an existing build (`.next/` directory) for `snytch scan` | ||
| ## Installation | ||
| `@snytch/nextjs` works best on established Next.js projects that already have a build in place. Run `npm run build` first to generate the `.next` directory, then install and scan. | ||
| ```bash | ||
@@ -21,13 +42,15 @@ npm install -D @snytch/nextjs | ||
| | Option | Default | Description | | ||
| |---|---|---| | ||
| | `--dir` | `./.next` | Path to the `.next` directory | | ||
| | `--json` | off | Output results as JSON | | ||
| | `--report` | off | Generate an HTML report at `./snytch-report.html` | | ||
| | `--fail-on` | `critical` | Exit code threshold: `critical`, `warning`, or `all` | | ||
| | `--ai-provider` | `anthropic` | AI RCA provider (requires `ANTHROPIC_API_KEY`) | | ||
| | Option | Default | Description | | ||
| | --------------- | ----------- | ------------------------------------------------------------------------------------------------------------- | | ||
| | `--dir` | `./.next` | Path to the `.next` directory | | ||
| | `--json` | off | Output results as JSON | | ||
| | `--report` | off | Generate an HTML report at `./snytch-reports/snytch-report.html` | | ||
| | `--fail-on` | `critical` | Exit code threshold: `critical`, `warning`, or `all` | | ||
| | `--ai-provider` | `anthropic` | AI RCA provider: `anthropic` (requires `ANTHROPIC_API_KEY`) or `openai` (requires `OPENAI_API_KEY`) or `none` | | ||
|  | ||
| ### `snytch check` | ||
| Check `.env` files for `NEXT_PUBLIC_` variables that look like secrets. | ||
| Check `.env` files for `NEXT_PUBLIC_` variables that look like secrets. Any variable prefixed with `NEXT_PUBLIC_` is embedded into the client bundle at build time and sent to every browser that loads your app. This command flags values that match known secret patterns or look high-entropy enough to be credentials. | ||
@@ -44,6 +67,15 @@ ```bash | ||
| | Option | Default | Description | | ||
| | ----------- | ------------- | ------------------------------------------------------- | | ||
| | `--env` | auto-detected | Path to a `.env` file. Repeat for multiple files. | | ||
| | `--json` | off | Output results as JSON | | ||
| | `--report` | off | Generate an HTML report at `./snytch-reports/snytch-check-report.html` | | ||
| | `--fail-on` | `critical` | Exit code threshold: `critical`, `warning`, or `all` | | ||
| ### `snytch diff` | ||
| Compare environment variable key presence across two or more `.env` files. | ||
| Compare environment variable key presence across two or more `.env` files. "Drift" means a key exists in one environment but not another. This is how secrets get misconfigured in production: a key is added to `.env.local` during development and never makes it into `.env.production`, or a key is removed from one file but not the others. | ||
| `snytch diff` only compares key names, never values. It tells you what is missing or mismatched, not what the values are. | ||
| ```bash | ||
@@ -59,9 +91,14 @@ snytch diff --env .env.staging --env .env.production [--json] [--report] [--strict] | ||
| | Option | Default | Description | | ||
| |---|---|---| | ||
| | `--strict` | off | Exit 1 for any drift, not just `serverOnly` keys | | ||
| | Option | Default | Description | | ||
| | ---------- | -------- | ------------------------------------------------------- | | ||
| | `--env` | required | Path to a `.env` file. Must be provided at least twice. | | ||
| | `--json` | off | Output results as JSON | | ||
| | `--report` | off | Generate an HTML report at `./snytch-reports/snytch-diff-report.html` | | ||
| | `--strict` | off | Exit 1 for any drift, not just `serverOnly` keys | | ||
|  | ||
| ### `snytch mcp` | ||
| Start the snytch MCP server on stdio transport. Exposes `snytch_scan`, `snytch_check`, and `snytch_diff` as tools inside any MCP-compatible editor. | ||
| Start the snytch MCP server on stdio transport. You don't run this directly. Your editor runs it for you based on the config file you provide. See [MCP Server](#mcp-server) below for setup instructions. | ||
@@ -74,2 +111,40 @@ ```bash | ||
| ### `snytch demo` | ||
| Runs a fully synthetic end-to-end demonstration of all three commands (`scan`, `check`, and `diff`) using fake findings that cover the full range of severity levels and pattern types. Output is identical to a real run: the same formatters, the same exit code (1), and real HTML reports written to disk. | ||
| ```bash | ||
| snytch demo | ||
| ``` | ||
| Three report files are generated in your current directory: | ||
| | File | Contents | | ||
| | ------------------------------------------- | -------------------------------------------------- | | ||
| | `snytch-reports/snytch-report.html` | Bundle scan findings with Findings and AI RCA tabs | | ||
| | `snytch-reports/snytch-check-report.html` | `NEXT_PUBLIC_` exposure findings | | ||
| | `snytch-reports/snytch-diff-report.html` | Environment variable drift across `.env` files | | ||
| > Add this to your `.gitignore` to avoid committing the reports directory: | ||
| > | ||
| > ``` | ||
| > snytch-reports/ | ||
| > ``` | ||
| To see the AI RCA tab populated with real analysis, set an API key before running: | ||
| ```bash | ||
| # Anthropic (Claude) | ||
| ANTHROPIC_API_KEY=sk-ant-... snytch demo | ||
| # OpenAI (GPT-4o) | ||
| OPENAI_API_KEY=sk-... snytch demo --ai-provider openai | ||
| ``` | ||
| You will be prompted to delete the generated report files when the demo completes. | ||
|  | ||
| --- | ||
| ## Features | ||
@@ -87,3 +162,3 @@ | ||
| - API keys from major cloud providers (Google, Azure, Firebase, etc.) | ||
| - AI root cause analysis via Claude (Anthropic) when `--report` is set | ||
| - AI root cause analysis via Claude (Anthropic) or GPT-4o (OpenAI) when `--report` is set | ||
| - Git provenance for each finding (source file + introducing commit) | ||
@@ -97,11 +172,19 @@ - HTML report with per-finding details and editor prompts | ||
| `@snytch/nextjs` ships an [MCP](https://modelcontextprotocol.io) server that exposes three tools to AI editors. Secret values are **never** transmitted — all findings use truncated values only. | ||
| `@snytch/nextjs` includes an [MCP](https://modelcontextprotocol.io) server so you can run scans directly from inside Cursor, Windsurf, or Claude Desktop without touching a terminal. | ||
| Once configured, you can ask your AI assistant things like: | ||
| - "Scan my bundle for leaked secrets" | ||
| - "Check my .env files for exposed API keys" | ||
| - "Are my staging and production env files in sync?" | ||
| The assistant gets structured results back and can propose fixes inline, in the files where the problem lives. Secret values are never transmitted through the MCP layer - only truncated values are passed to the AI. | ||
| ### Tools | ||
| | Tool | Description | | ||
| |---|---| | ||
| | `snytch_scan` | Scan the Next.js bundle for leaked secrets in client-side JS | | ||
| | `snytch_check` | Check `.env` files for dangerous `NEXT_PUBLIC_` prefix usage | | ||
| | `snytch_diff` | Compare environment variable key presence across `.env` files | | ||
| | Tool | Description | | ||
| | -------------- | ------------------------------------------------------------- | | ||
| | `snytch_scan` | Scan the Next.js bundle for leaked secrets in client-side JS | | ||
| | `snytch_check` | Check `.env` files for dangerous `NEXT_PUBLIC_` prefix usage | | ||
| | `snytch_diff` | Compare environment variable key presence across `.env` files | | ||
@@ -111,2 +194,3 @@ ### Tool schemas | ||
| **`snytch_scan`** | ||
| ```jsonc | ||
@@ -124,2 +208,3 @@ // Input | ||
| **`snytch_check`** | ||
| ```jsonc | ||
@@ -137,2 +222,3 @@ // Input | ||
| **`snytch_diff`** | ||
| ```jsonc | ||
@@ -150,6 +236,11 @@ // Input | ||
| ### Editor configuration | ||
| ### Editor setup | ||
| #### Cursor — `.cursor/mcp.json` | ||
| The MCP server runs in the directory where your editor is opened, so it automatically picks up the correct `.next` directory and `.env` files for your project. No path configuration needed. | ||
| #### Cursor | ||
| 1. Open (or create) `.cursor/mcp.json` in your project root. | ||
| 2. Add the following: | ||
| ```json | ||
@@ -166,4 +257,10 @@ { | ||
| #### Windsurf — `~/.codeium/windsurf/mcp_config.json` | ||
| 3. Open the Cursor Settings panel, go to **MCP**, and confirm `snytch` appears with a green status indicator. | ||
| 4. Open a chat and try: _"Use snytch to scan my bundle for leaked secrets."_ | ||
| #### Windsurf | ||
| 1. Open `~/.codeium/windsurf/mcp_config.json` (create it if it doesn't exist). | ||
| 2. Add the following: | ||
| ```json | ||
@@ -180,4 +277,17 @@ { | ||
| #### Claude Desktop — `~/Library/Application Support/Claude/claude_desktop_config.json` | ||
| 3. Open the Windsurf MCP panel and click **Refresh** to pick up the new server. | ||
| 4. Open a Cascade chat and try: _"Check my .env files for exposed API keys."_ | ||
| #### Claude Desktop | ||
| 1. Open the Claude Desktop config file for your platform (create it if it doesn't exist): | ||
| | Platform | Path | | ||
| | -------- | ---- | | ||
| | macOS | `~/Library/Application Support/Claude/claude_desktop_config.json` | | ||
| | Windows | `%APPDATA%\Claude\claude_desktop_config.json` | | ||
| | Linux | `~/.config/Claude/claude_desktop_config.json` | | ||
| 2. Add the following: | ||
| ```json | ||
@@ -194,3 +304,5 @@ { | ||
| > **Tip:** The MCP server runs in the directory where the editor is opened, so it automatically uses the correct `.next` directory and `.env` files for your project. | ||
| 3. Quit and relaunch Claude Desktop. | ||
| 4. Click the tools icon in the chat input to confirm `snytch_scan`, `snytch_check`, and `snytch_diff` are listed. | ||
| 5. Try: _"Scan my Next.js bundle for secrets."_ | ||
@@ -201,3 +313,3 @@ --- | ||
| Create `snytch.config.js` in your project root to mark specific environment variables as server-only: | ||
| Create `snytch.config.js` in your project root to customize snytch's behavior. The file must use ESM syntax since `@snytch/nextjs` is an ESM package. | ||
@@ -209,6 +321,16 @@ ```js | ||
| failOn: 'critical', | ||
| rca: { | ||
| maxTokens: 2048, | ||
| }, | ||
| }; | ||
| ``` | ||
| | Option | Type | Description | | ||
| | --------------- | ---------------------------------- | ------------------------------------------------------------------------------------------- | | ||
| | `serverOnly` | `string[]` | Variable names that must never be exposed to the client | | ||
| | `failOn` | `'critical' \| 'warning' \| 'all'` | Default exit code threshold for all commands | | ||
| | `rca.maxTokens` | `number` | Max tokens for AI RCA responses (default: 2048). Increase if responses are being truncated. | | ||
| When `serverOnly` is set: | ||
| - `snytch check` will flag any listed key that appears under `NEXT_PUBLIC_` | ||
@@ -222,8 +344,47 @@ - `snytch diff` will exit 1 in non-strict mode if a `serverOnly` key has drifted | ||
| Running snytch in CI catches secrets before they reach production. The scan command exits with code 1 when findings at or above the specified severity are found, so it works as a pipeline gate without any extra configuration. | ||
| The bundle must be built before scanning, so add the scan step after your build step. | ||
| ```yaml | ||
| # .github/workflows/security.yml | ||
| - name: Scan Next.js bundle for secrets | ||
| run: npx @snytch/nextjs scan --json --fail-on critical | ||
| name: Security scan | ||
| on: | ||
| push: | ||
| branches: [main] | ||
| pull_request: | ||
| jobs: | ||
| scan: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| - uses: actions/setup-node@v4 | ||
| with: | ||
| node-version: 20 | ||
| - name: Install dependencies | ||
| run: npm ci | ||
| - name: Build | ||
| run: npm run build | ||
| - name: Scan bundle for secrets | ||
| run: npx @snytch/nextjs scan --fail-on critical | ||
| - name: Check NEXT_PUBLIC_ variables | ||
| run: npx @snytch/nextjs check --fail-on critical | ||
| ``` | ||
| To also check environment drift across your `.env` files, add: | ||
| ```yaml | ||
| - name: Diff env files | ||
| run: npx @snytch/nextjs diff --env .env.staging --env .env.production | ||
| ``` | ||
| > The `diff` step requires your `.env` files to be present in the CI environment. If they are not checked into the repo, you will need to write them from secrets before this step runs. | ||
| --- | ||
@@ -230,0 +391,0 @@ |
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 3 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
Shell access
Supply chain riskThis module accesses the system shell. Accessing the system shell increases the risk of executing arbitrary code.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
283339
14.92%67
6.35%4273
10.1%379
73.85%4
33.33%33
13.79%+ Added
+ Added