You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

@snytch/nextjs

Package Overview
Dependencies
Maintainers
1
Versions
20
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@snytch/nextjs - npm Package Compare versions

Comparing version
0.1.0
to
0.1.1
+22
dist/commands/demo.d.ts
/**
* 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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"}

@@ -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"}
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 +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":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,iFAAiF;AAEjF;;;GAGG;AACH,SAAS,eAAe,CAAC,WAAmB;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QAEvD,MAAM,IAAI,GAAG,GAAG,CAAC,cAAc,CAAuC,CAAC;QACvE,MAAM,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAuC,CAAC;QAE7E,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,CAAuB,CAAC;QAC5E,OAAO,OAAO,IAAI,SAAS,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,iBAAiB,CAAC,OAAe,EAAE,cAAsB;IAChE,qDAAqD;IACrD,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,SAAS,IAAI,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAExD,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAEzD,wFAAwF;IACxF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAE1E,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAgB,EAAE,WAAmB;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/B,MAAM,OAAO,GAAG,GAAG,EAAE,aAAa,CAAC;IACnC,MAAM,UAAU,GAAG,GAAG,EAAE,UAAU,IAAI,SAAS,CAAC;IAEhD,MAAM,UAAU,GAAG,OAAO;QACxB,CAAC,CAAC;YACE,oBAAoB,UAAU,EAAE;YAChC,qBAAqB;YACrB,cAAc,OAAO,CAAC,IAAI,EAAE;YAC5B,cAAc,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,KAAK,GAAG;YACjD,cAAc,OAAO,CAAC,YAAY,EAAE;YACpC,cAAc,OAAO,CAAC,OAAO,EAAE;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC;QACd,CAAC,CAAC,gBAAgB,UAAU,6BAA6B,CAAC;IAE5D,OAAO;;;mBAGU,OAAO,CAAC,IAAI;mBACZ,OAAO,CAAC,WAAW;mBACnB,OAAO,CAAC,QAAQ;mBAChB,OAAO,CAAC,WAAW;mBACnB,OAAO,CAAC,QAAQ;mBAChB,OAAO,CAAC,UAAU;mBAClB,OAAO,CAAC,cAAc;;;EAGvC,UAAU;;;mBAGO,WAAW;;;;;;;;;;;;;;;;;;;;EAoB5B,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,WAAmB,EAAE,SAAiB;IACnF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE/C,oEAAoE;IACpE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAChF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2FAA2F,CAC5F,CAAC;QACF,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC3C,KAAK,EAAE,mBAAmB;YAC1B,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzD,gFAAgF;QAChF,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QAErD,2BAA2B;QAC3B,IACE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAC9B,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;YACtC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YACpC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAW,CAAC;SACtF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,UAAU,CAAC,OAAgB,EAAE,WAAmB,EAAE,SAAiB;IAChF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IACjD,IAAI,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAE/C,oEAAoE;IACpE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IAChF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2FAA2F,CAC5F,CAAC;QACF,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YACpD,KAAK,EAAE,QAAQ;YACf,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;SAC9C,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,gFAAgF;QAChF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAuB,CAAC;QAErD,2BAA2B;QAC3B,IACE,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAC/B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAC9B,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ;YAC9B,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ;YACtC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC;YACpC,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAC/B,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,aAAa,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAW,CAAC;SACtF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAmB,EACnB,WAAmB,EACnB,QAAoB,EACpB,SAAS,GAAG,IAAI;IAEhB,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO;IAEhC,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC;IACpE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEnC,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,wDAAwD,CACzD,CAAC;YACF,OAAO;QACT,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YACjE,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,qDAAqD,CACtD,CAAC;YACF,OAAO;QACT,CAAC;QAED,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;YAC9D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}

@@ -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"}

@@ -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)} &nbsp;·&nbsp; ${escapeHtml(timestamp)} &nbsp;·&nbsp; ${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)} &nbsp;·&nbsp; ${escapeHtml(timestamp)} &nbsp;·&nbsp; ${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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"}

@@ -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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"}
{
"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
![beta](https://img.shields.io/badge/status-beta-orange)
[![npm version](https://img.shields.io/npm/v/@snytch/nextjs)](https://www.npmjs.com/package/@snytch/nextjs)
[![npm downloads](https://img.shields.io/npm/dm/@snytch/nextjs)](https://www.npmjs.com/package/@snytch/nextjs)
[![Node.js >=18](https://img.shields.io/node/v/@snytch/nextjs)](https://nodejs.org)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue)](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` |
![Scan report showing detected secrets, severity levels, file paths, and git provenance](./docs/screenshots/snytch-report-findings.png)
### `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 |
![Diff report showing environment variable drift across .env files, with keys that are missing or only present in one environment](./docs/screenshots/snytch-diff-report.png)
### `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.
![AI RCA tab: Claude or GPT-4o explains what leaked, when it was introduced, how it ended up in the bundle, and how to fix it, with a before/after code example and editor prompts](./docs/screenshots/snytch-report-ai-rca.png)
---
## 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 @@