🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

shadowaudit

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

shadowaudit - npm Package Compare versions

Comparing version
0.6.1
to
0.7.0
+32
dist/scanners/nestjs.d.ts
import { Route } from '../types';
/**
* Parse a NestJS TypeScript source string and return the routes detected in it.
*
* NestJS uses a two-level routing system:
* 1. @Controller('prefix') — sets a path prefix for all routes in the class
* 2. @Get('/path'), @Post('/path'), etc. — individual route handlers
*
* The full route path = controller prefix + method path.
*
* Auth detection:
* - @UseGuards on the controller class → all methods have auth
* - @UseGuards on the method → that method has auth
* - @Public() on the method → overrides controller-level guards (no auth)
*/
export declare function parseRoutesFromNestJS(code: string, filename: string, authPatterns: string[]): Promise<Route[]>;
/**
* Recursively scan a directory for NestJS route definitions.
*
* Detects @Controller('prefix') + @Get('/path') / @Post('/path') / etc.
* Combines controller prefix with method path for full route path.
* Detects @UseGuards for auth, @Public() for public routes.
*
* Supports:
* - Controller-level @UseGuards (applies to all methods)
* - Method-level @UseGuards (overrides per method)
* - @Public() decorator (marks route as public, overrides guards)
* - Express :param syntax (converted to {param} for OpenAPI)
*/
export declare function scanNestJS(dir: string, ignore: string[], authPatterns: string[]): Promise<Route[]>;
export default scanNestJS;
//# sourceMappingURL=nestjs.d.ts.map
{"version":3,"file":"nestjs.d.ts","sourceRoot":"","sources":["../../src/scanners/nestjs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAiJjC;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,KAAK,EAAE,CAAC,CAwHlB;AA4BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,KAAK,EAAE,CAAC,CA8ClB;AAED,eAAe,UAAU,CAAC"}
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseRoutesFromNestJS = parseRoutesFromNestJS;
exports.scanNestJS = scanNestJS;
const promises_1 = require("fs/promises");
const glob_1 = __importDefault(require("glob"));
const path = __importStar(require("path"));
const logger_1 = require("../utils/logger");
function glob(pattern, options) {
return new Promise((resolve, reject) => {
(0, glob_1.default)(pattern, options, (err, matches) => {
if (err)
reject(err);
else
resolve(matches ?? []);
});
});
}
/**
* Hardcoded NestJS auth patterns.
* NestJS uses Guards for auth — @UseGuards(JwtAuthGuard), @UseGuards(AuthGuard), etc.
*/
const HARDCODED_PATTERNS = [
'@UseGuards',
'JwtAuthGuard',
'AuthGuard',
'RolesGuard',
'PermissionGuard',
'JwtStrategy',
'AuthService',
'accessToken',
'isAuthenticated',
'Public',
'@Public()',
];
const AUTH_WINDOW_BELOW = 5;
/**
* Matches NestJS route decorators:
*
* @Get('/users')
* @Post('/users')
* @Put('/users/:id')
* @Delete('/users/:id')
* @Patch('/users/:id')
* @All('/users')
* @Head('/users')
* @Options('/users')
*
* Also matches without a path (controller-level prefix only):
* @Get()
*
* Capture groups:
* 1 — HTTP method (get, post, put, delete, patch, all, head, options)
* 2 — path string (single or double quoted, or empty if no path)
*/
const NESTJS_ROUTE_REGEX = /^(\s*)@(Get|Post|Put|Delete|Patch|All|Head|Options)\s*(?:\(\s*['"](.*?)['"]\s*\))?/;
/**
* Matches NestJS controller decorators:
*
* @Controller('users')
* @Controller('api/v1/users')
* @Controller()
*
* Capture groups:
* 1 — controller path prefix (without leading/trailing slashes)
*/
const CONTROLLER_REGEX = /^(\s*)@Controller\s*\(\s*['"]?([^'")\s]*)['"]?\s*\)/;
/**
* Matches NestJS Guard decorators on methods or classes:
*
* @UseGuards(JwtAuthGuard)
* @UseGuards(AuthGuard('jwt'))
* @UseGuards(RolesGuard, JwtAuthGuard)
*/
const USE_GUARDS_REGEX = /@UseGuards\s*\(/;
/**
* Matches @Public() decorator (NestJS public route marker)
*/
const PUBLIC_REGEX = /@Public\s*\(\s*\)/;
/**
* Detects auth on a NestJS route by scanning the decorator line and a few
* lines above (for @UseGuards on the method) and checking if the controller
* class has @UseGuards (applies to all methods in the controller).
*/
function detectNestJSAuth(lines, decoratorLineIdx, controllerHasGuards, authPatterns) {
// Check a few lines above AND below the route decorator for method-level
// @UseGuards and @Public(). In NestJS, decorators are often stacked:
// @Get('public')
// @Public()
// publicRoute() {}
//
// @Post('secure')
// @UseGuards(JwtAuthGuard)
// secureRoute() {}
//
// v0.7.0: Strip import lines to prevent false positives from import
// statements like `import { JwtAuthGuard } from './jwt-auth.guard'`
const startIdx = Math.max(0, decoratorLineIdx - 5);
const endIdx = Math.min(lines.length - 1, decoratorLineIdx + 3); // +3 for stacked decorators below
const windowLines = [];
for (let i = startIdx; i <= endIdx; i++) {
const line = lines[i] ?? '';
// Skip import lines — they contain class names that match auth patterns
// but have nothing to do with per-route auth
if (line.trim().startsWith('import '))
continue;
windowLines.push(line);
}
const windowText = windowLines.join('\n');
// Check for @Public() — if present, route is public (no auth)
if (PUBLIC_REGEX.test(windowText)) {
return false;
}
// Check for @UseGuards on the method
if (USE_GUARDS_REGEX.test(windowText)) {
return true;
}
// Check user-configured patterns in the window
for (const p of authPatterns) {
if (p && windowText.includes(p))
return true;
}
// Check hardcoded patterns in the window
for (const p of HARDCODED_PATTERNS) {
if (windowText.includes(p))
return true;
}
// If controller has @UseGuards, all methods inherit auth
// (unless overridden by @Public())
if (controllerHasGuards) {
return true;
}
return false;
}
/**
* Parse a NestJS TypeScript source string and return the routes detected in it.
*
* NestJS uses a two-level routing system:
* 1. @Controller('prefix') — sets a path prefix for all routes in the class
* 2. @Get('/path'), @Post('/path'), etc. — individual route handlers
*
* The full route path = controller prefix + method path.
*
* Auth detection:
* - @UseGuards on the controller class → all methods have auth
* - @UseGuards on the method → that method has auth
* - @Public() on the method → overrides controller-level guards (no auth)
*/
async function parseRoutesFromNestJS(code, filename, authPatterns) {
const lines = code.split('\n');
const routes = [];
const controllers = [];
for (let i = 0; i < lines.length; i++) {
const controllerMatch = lines[i].match(CONTROLLER_REGEX);
if (!controllerMatch)
continue;
// Find the class name — look at the next few lines (decorators may be between)
let className = 'Unknown';
let classLineIdx = -1;
for (let j = i + 1; j < Math.min(i + 10, lines.length); j++) {
const classNameMatch = lines[j].match(/export\s+class\s+(\w+)/);
if (classNameMatch) {
className = classNameMatch[1];
classLineIdx = j;
break;
}
}
const prefix = controllerMatch[2] || '';
// Check if @UseGuards is on the controller — it can be above OR below
// the @Controller decorator (NestJS allows multiple decorators stacked)
let hasGuards = false;
// Check lines above @Controller
for (let j = Math.max(0, i - 5); j <= i; j++) {
if (USE_GUARDS_REGEX.test(lines[j])) {
hasGuards = true;
break;
}
}
// Also check lines between @Controller and the class definition
if (!hasGuards && classLineIdx >= 0) {
for (let j = i + 1; j < classLineIdx; j++) {
if (USE_GUARDS_REGEX.test(lines[j])) {
hasGuards = true;
break;
}
}
}
// Find the end of the class (next class or end of file)
// Start searching from the class definition line, not from i+2
let endLine = lines.length - 1;
const searchStart = classLineIdx >= 0 ? classLineIdx + 1 : i + 2;
for (let j = searchStart; j < lines.length; j++) {
if (/^export\s+class\s+\w+/.test(lines[j].trim())) {
endLine = j - 1;
break;
}
}
controllers.push({
name: className,
prefix,
hasGuards,
startLine: i,
endLine,
});
}
// Second pass: find route decorators within each controller
for (const controller of controllers) {
for (let i = controller.startLine; i <= controller.endLine; i++) {
const match = lines[i].match(NESTJS_ROUTE_REGEX);
if (!match)
continue;
const method = match[2].toUpperCase();
const methodPath = match[3] || ''; // Empty if @Get() with no path
// Combine controller prefix + method path
let fullPath = '';
if (controller.prefix && methodPath) {
fullPath = `/${controller.prefix}/${methodPath}`;
}
else if (controller.prefix) {
fullPath = `/${controller.prefix}`;
}
else if (methodPath) {
fullPath = `/${methodPath}`;
}
else {
fullPath = '/';
}
// Normalize: remove double slashes, trailing slash (unless root)
fullPath = fullPath.replace(/\/+/g, '/');
if (fullPath.length > 1 && fullPath.endsWith('/')) {
fullPath = fullPath.slice(0, -1);
}
// Convert Express :param syntax to OpenAPI {param} (NestJS uses Express syntax)
fullPath = fullPath.replace(/:(\w+)/g, '{$1}');
const lineNum = i + 1;
const hasAuth = detectNestJSAuth(lines, i, controller.hasGuards, authPatterns);
routes.push({
method,
path: fullPath,
file: filename,
line: lineNum,
hasAuth,
});
}
}
// Also handle routes outside of controllers (shouldn't happen in NestJS, but be safe)
// Skip for now — all NestJS routes must be inside @Controller classes
return routes;
}
function dedupRoutes(routes) {
const seen = new Set();
const result = [];
for (const r of routes) {
const key = `${r.method}|${r.path}|${r.file}`;
if (!seen.has(key)) {
seen.add(key);
result.push(r);
}
}
return result;
}
function shouldExcludeFile(absPath, ignore) {
const segments = absPath.split(path.sep);
for (const ig of ignore) {
if (segments.includes(ig))
return true;
}
if (segments.includes('test') || segments.includes('tests'))
return true;
if (segments.includes('__tests__'))
return true;
const basename = path.basename(absPath);
if (basename.endsWith('.spec.ts') || basename.endsWith('.test.ts'))
return true;
if (basename.endsWith('.e2e-spec.ts'))
return true;
return false;
}
/**
* Recursively scan a directory for NestJS route definitions.
*
* Detects @Controller('prefix') + @Get('/path') / @Post('/path') / etc.
* Combines controller prefix with method path for full route path.
* Detects @UseGuards for auth, @Public() for public routes.
*
* Supports:
* - Controller-level @UseGuards (applies to all methods)
* - Method-level @UseGuards (overrides per method)
* - @Public() decorator (marks route as public, overrides guards)
* - Express :param syntax (converted to {param} for OpenAPI)
*/
async function scanNestJS(dir, ignore, authPatterns) {
const absDir = path.resolve(dir);
const allRoutes = [];
let allFiles;
try {
allFiles = await glob('**/*.{ts,js}', {
cwd: absDir,
absolute: true,
dot: false,
nodir: true,
});
}
catch {
logger_1.logger.warn(`Could not scan directory: ${absDir}`);
return [];
}
for (const absPath of allFiles) {
if (shouldExcludeFile(absPath, ignore))
continue;
let content;
try {
content = await (0, promises_1.readFile)(absPath, 'utf-8');
}
catch {
logger_1.logger.warn(`Could not read: ${absPath}`);
continue;
}
// Quick filter: skip files that don't contain @Controller or route decorators
if (!content.includes('@Controller') && !content.includes('@Get') && !content.includes('@Post')) {
continue;
}
const relPath = path.relative(absDir, absPath).replace(/\\/g, '/');
const routes = await parseRoutesFromNestJS(content, relPath, authPatterns);
allRoutes.push(...routes);
}
const deduped = dedupRoutes(allRoutes);
deduped.sort((a, b) => {
if (a.file !== b.file)
return a.file < b.file ? -1 : 1;
return a.line - b.line;
});
return deduped;
}
exports.default = scanNestJS;
//# sourceMappingURL=nestjs.js.map
{"version":3,"file":"nestjs.js","sourceRoot":"","sources":["../../src/scanners/nestjs.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKA,sDA4HC;AAyCD,gCAkDC;AAzXD,0CAAuC;AACvC,gDAA2C;AAC3C,2CAA6B;AAE7B,4CAAyC;AAEzC,SAAS,IAAI,CAAC,OAAe,EAAE,OAAoB;IACjD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAA,cAAM,EAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,OAA6B,EAAE,EAAE;YAC5E,IAAI,GAAG;gBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;gBAChB,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,kBAAkB,GAAsB;IAC5C,YAAY;IACZ,cAAc;IACd,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,aAAa;IACb,aAAa;IACb,aAAa;IACb,iBAAiB;IACjB,QAAQ;IACR,WAAW;CACZ,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,kBAAkB,GACtB,oFAAoF,CAAC;AAEvF;;;;;;;;;GASG;AACH,MAAM,gBAAgB,GACpB,qDAAqD,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAE3C;;GAEG;AACH,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAEzC;;;;GAIG;AACH,SAAS,gBAAgB,CACvB,KAAe,EACf,gBAAwB,EACxB,mBAA4B,EAC5B,YAAsB;IAEtB,yEAAyE;IACzE,qEAAqE;IACrE,mBAAmB;IACnB,cAAc;IACd,qBAAqB;IACrB,EAAE;IACF,oBAAoB;IACpB,6BAA6B;IAC7B,qBAAqB;IACrB,EAAE;IACF,oEAAoE;IACpE,oEAAoE;IACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC;IACnG,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,wEAAwE;QACxE,6CAA6C;QAC7C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QAChD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1C,8DAA8D;IAC9D,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qCAAqC;IACrC,IAAI,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+CAA+C;IAC/C,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/C,CAAC;IAED,yCAAyC;IACzC,KAAK,MAAM,CAAC,IAAI,kBAAkB,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAC1C,CAAC;IAED,yDAAyD;IACzD,mCAAmC;IACnC,IAAI,mBAAmB,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACI,KAAK,UAAU,qBAAqB,CACzC,IAAY,EACZ,QAAgB,EAChB,YAAsB;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAY,EAAE,CAAC;IAW3B,MAAM,WAAW,GAAqB,EAAE,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACzD,IAAI,CAAC,eAAe;YAAE,SAAS;QAE/B,+EAA+E;QAC/E,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,IAAI,YAAY,GAAG,CAAC,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5D,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YAChE,IAAI,cAAc,EAAE,CAAC;gBACnB,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC9B,YAAY,GAAG,CAAC,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAExC,sEAAsE;QACtE,wEAAwE;QACxE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,gCAAgC;QAChC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpC,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM;YACR,CAAC;QACH,CAAC;QACD,gEAAgE;QAChE,IAAI,CAAC,SAAS,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,IAAI,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpC,SAAS,GAAG,IAAI,CAAC;oBACjB,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,wDAAwD;QACxD,+DAA+D;QAC/D,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/B,MAAM,WAAW,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChD,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBAClD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChB,MAAM;YACR,CAAC;QACH,CAAC;QAED,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,SAAS;YACf,MAAM;YACN,SAAS;YACT,SAAS,EAAE,CAAC;YACZ,OAAO;SACR,CAAC,CAAC;IACL,CAAC;IAED,4DAA4D;IAC5D,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;YAChE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACtC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,+BAA+B;YAElE,0CAA0C;YAC1C,IAAI,QAAQ,GAAG,EAAE,CAAC;YAClB,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;gBACpC,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YACnD,CAAC;iBAAM,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBAC7B,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACrC,CAAC;iBAAM,IAAI,UAAU,EAAE,CAAC;gBACtB,QAAQ,GAAG,IAAI,UAAU,EAAE,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,QAAQ,GAAG,GAAG,CAAC;YACjB,CAAC;YAED,iEAAiE;YACjE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACzC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClD,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YAED,gFAAgF;YAChF,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,EAAE,CAAC,EAAE,UAAU,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAE/E,MAAM,CAAC,IAAI,CAAC;gBACV,MAAM;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,OAAO;gBACb,OAAO;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,sEAAsE;IAEtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,MAAe;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAgB;IAC1D,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IACzC,CAAC;IACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,IAAI,CAAC;IAChF,IAAI,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;GAYG;AACI,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,MAAgB,EAChB,YAAsB;IAEtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,MAAM,SAAS,GAAY,EAAE,CAAC;IAE9B,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;YACpC,GAAG,EAAE,MAAM;YACX,QAAQ,EAAE,IAAI;YACd,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,eAAM,CAAC,IAAI,CAAC,6BAA6B,MAAM,EAAE,CAAC,CAAC;QACnD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC;YAAE,SAAS;QAEjD,IAAI,OAAe,CAAC;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,eAAM,CAAC,IAAI,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,8EAA8E;QAC9E,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChG,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACnE,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;QAC3E,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAEvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kBAAe,UAAU,CAAC"}
+16
-1

@@ -65,2 +65,3 @@ #!/usr/bin/env node

const flask_1 = require("./scanners/flask");
const nestjs_1 = require("./scanners/nestjs");
const spec_1 = require("./parsers/spec");

@@ -98,3 +99,12 @@ const comparator_1 = require("./comparator");

if (fs.existsSync(pkgJsonPath)) {
return 'express';
try {
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
if (deps['@nestjs/core'])
return 'nestjs';
return 'express';
}
catch {
return 'express';
}
}

@@ -230,2 +240,7 @@ const reqPath = path.join(dir, 'requirements.txt');

}
else if (framework === 'nestjs') {
logger_1.logger.info('Running NestJS route scanner...');
scannedRoutes = await (0, nestjs_1.scanNestJS)(config.dir, config.ignore, config.authPatterns);
logger_1.logger.success(`Found ${scannedRoutes.length} NestJS routes in ${config.dir}`);
}
// STEP 2 — Compare against spec (if provided)

@@ -232,0 +247,0 @@ let result;

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"action.js","sourceRoot":"","sources":["../src/action.ts"],"names":[],"mappings":"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"}

@@ -48,2 +48,3 @@ #!/usr/bin/env node

const flask_1 = require("./scanners/flask");
const nestjs_1 = require("./scanners/nestjs");
const spec_1 = require("./parsers/spec");

@@ -63,3 +64,3 @@ const comparator_1 = require("./comparator");

.option('--fail-on <level>', 'Fail CI pipeline on: critical, high, info')
.option('--framework <name>', 'Force framework: express, fastapi, django, flask')
.option('--framework <name>', 'Force framework: express, fastapi, django, flask, nestjs')
.option('--generate-spec', 'Generate OpenAPI spec from scanned routes (no comparison)')

@@ -86,3 +87,14 @@ .option('--diff', 'Show only new findings since last scan (requires persistent cache)');

if (fs.existsSync(pkgJsonPath)) {
return 'express';
try {
const pkg = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
const deps = { ...pkg.dependencies, ...pkg.devDependencies };
if (deps['@nestjs/core'])
return 'nestjs';
if (deps['express'])
return 'express';
return 'express'; // Default for Node.js projects
}
catch {
return 'express';
}
}

@@ -225,2 +237,11 @@ const reqPath = path.join(dir, 'requirements.txt');

}
else if (framework === 'nestjs') {
logger_1.logger.info('Running NestJS route scanner...');
scannedRoutes = await (0, nestjs_1.scanNestJS)(config.dir, config.ignore, config.authPatterns);
logger_1.logger.success(`Found ${scannedRoutes.length} NestJS routes in ${config.dir}`);
scannedRoutes.forEach((r) => {
const authTag = r.hasAuth ? ' [auth]' : ' [no auth]';
logger_1.logger.info(` ${r.method} ${r.path} → ${r.file}:${r.line}${authTag}`);
});
}
// v0.4.0: Auto-spec generation — generate OpenAPI spec from scanned routes

@@ -227,0 +248,0 @@ // v0.5.1: Fix BUG 1 — restore console.log before outputting spec JSON

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,yCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAC7B,8DAA8D;AAC9D,kDAAyD;AACzD,2CAAwC;AACxC,qCAAsC;AACtC,gDAAiD;AACjD,gDAAiD;AACjD,8CAA+C;AAC/C,4CAA6C;AAC7C,yCAAyD;AACzD,6CAAkE;AAClE,8CAAkD;AAClD,4CAAiD;AACjD,iCAAkI;AAGlI,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,OAAO,CAAC,sBAAW,CAAC;KACpB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC;KAC3C,MAAM,CAAC,eAAe,EAAE,mCAAmC,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,2CAA2C,CAAC;KACxE,MAAM,CAAC,oBAAoB,EAAE,kDAAkD,CAAC;KAChF,MAAM,CAAC,iBAAiB,EAAE,2DAA2D,CAAC;KACtF,MAAM,CAAC,QAAQ,EAAE,oEAAoE,CAAC,CAAC;AAE1F;;;;;;;;;;;;;;;GAeG;AACH,KAAK,UAAU,eAAe,CAC5B,GAAW;IAEX,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IACnD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5D,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC9C,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAC;YAC5C,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACP,sDAAsD;QACxD,CAAC;IACH,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACnE,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC/C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,OAAO,QAAQ,CAAC;YAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE/B,6EAA6E;IAC7E,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;QAAE,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAC1D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;QAAE,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7D,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;QAAE,QAAQ,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACnE,oEAAoE;IACpE,gEAAgE;IAChE,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,SAAiB,CAAC;IACtB,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACpC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,sEAAsE;YACtE,oEAAoE;YACpE,SAAS,GAAG,SAAS,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,SAAS,GAAG,QAAQ,CAAC;QACvB,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,0DAA0D;IAC1D,EAAE;IACF,kEAAkE;IAClE,MAAM,iBAAiB,GACrB,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC;IACnL,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC;IACnC,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAW,MAAM,IAAA,mBAAU,EAAC,QAAQ,CAAC,CAAC;IAElD,8EAA8E;IAC9E,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,sBAAsB,sBAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,eAAM,CAAC,IAAI,CACT,yEAAyE,CAC1E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yEAAyE;IACzE,kDAAkD;IAClD,MAAM,gBAAgB,GACpB,OAAO,CAAC,SAAS,KAAK,SAAS;QAC7B,CAAC,CAAC,GAAG,SAAS,kBAAkB;QAChC,CAAC,CAAC,SAAS,CAAC;IAEhB,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,sBAAsB,sBAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAElD,eAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,eAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC,CAAC;IAC5D,eAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,eAAM,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,eAAM,CAAC,IAAI,CAAC,eAAe,gBAAgB,EAAE,CAAC,CAAC;IAE/C,IAAI,aAAa,GAAY,EAAE,CAAC;IAEhC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,eAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACnD,aAAa,GAAG,MAAM,IAAA,qBAAW,EAC/B,MAAM,CAAC,GAAI,EACX,MAAM,CAAC,MAAO,EACd,MAAM,CAAC,YAAa,CACrB,CAAC;QACF,eAAM,CAAC,OAAO,CACZ,SAAS,aAAa,CAAC,MAAM,cAAc,MAAM,CAAC,GAAG,EAAE,CACxD,CAAC;QACF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;YACrD,eAAM,CAAC,IAAI,CACT,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,CAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAChD,aAAa,GAAG,MAAM,IAAA,qBAAW,EAC/B,MAAM,CAAC,GAAI,EACX,MAAM,CAAC,MAAO,EACd,MAAM,CAAC,YAAa,CACrB,CAAC;QACF,eAAM,CAAC,OAAO,CACZ,SAAS,aAAa,CAAC,MAAM,sBAAsB,MAAM,CAAC,GAAG,EAAE,CAChE,CAAC;QACF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;YACrD,eAAM,CAAC,IAAI,CACT,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,CAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;QAClC,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAC/C,aAAa,GAAG,MAAM,IAAA,mBAAU,EAC9B,MAAM,CAAC,GAAI,EACX,MAAM,CAAC,MAAO,EACd,MAAM,CAAC,YAAa,CACrB,CAAC;QACF,eAAM,CAAC,OAAO,CACZ,SAAS,aAAa,CAAC,MAAM,qBAAqB,MAAM,CAAC,GAAG,EAAE,CAC/D,CAAC;QACF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;YACrD,eAAM,CAAC,IAAI,CACT,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,CAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;QACjC,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC9C,aAAa,GAAG,MAAM,IAAA,iBAAS,EAC7B,MAAM,CAAC,GAAI,EACX,MAAM,CAAC,MAAO,EACd,MAAM,CAAC,YAAa,CACrB,CAAC;QACF,eAAM,CAAC,OAAO,CACZ,SAAS,aAAa,CAAC,MAAM,oBAAoB,MAAM,CAAC,GAAG,EAAE,CAC9D,CAAC;QACF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;YACrD,eAAM,CAAC,IAAI,CACT,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,OAAO,EAAE,CAC1D,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,sEAAsE;IACtE,8DAA8D;IAC9D,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,eAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,IAAA,mBAAY,EAAC,aAAa,EAAE,2BAA2B,EAAE,sBAAW,CAAC,CAAC;QACnF,uDAAuD;QACvD,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2EAA2E;IAC3E,mEAAmE;IACnE,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjC,eAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,eAAM,CAAC,IAAI,CACT,0EAA0E,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0EAA0E;IAC1E,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAY,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,MAAM,gBAAgB,GAAG,MAAM,IAAA,gBAAS,EAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAA,gCAAmB,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,MAAM,GAAG,IAAA,0BAAa,EAAC,aAAa,EAAE,gBAAgB,EAAE;QAC5D,YAAY,EAAE,QAAQ,CAAC,QAAQ;QAC/B,gBAAgB,EAAE,QAAQ,CAAC,YAAY;KACxC,CAAC,CAAC;IAEH,sBAAsB;IACtB,IAAI,UAAU,GAAsB,IAAI,CAAC;IACzC,IAAI,iBAAiB,GAAG,MAAM,CAAC,QAAQ,CAAC;IACxC,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,yEAAyE;QACzE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAc,CAAC,CAAC;QAC3D,IAAA,sBAAe,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAA,gBAAS,EAAC,SAAS,CAAC,CAAC;QAEnC,MAAM,WAAW,GAAG;YAClB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG;YACtB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS;SACV,CAAC;QAEF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,oBAAoB;YACpB,cAAc,GAAG,IAAI,CAAC;YACtB,eAAM,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QAC7F,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAa,EAAE,CAAC;YAC3C,2BAA2B;YAC3B,eAAM,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;QAChF,CAAC;aAAM,IACL,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG;YACtC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EACxC,CAAC;YACD,gCAAgC;YAChC,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,wBAAwB;YACxB,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACjD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE;gBAC9F,QAAQ,EAAE,EAAE,CAAC,QAAQ;gBACrB,MAAM,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU;oBAChC,CAAC,CAAC,gGAAgG;oBAClG,CAAC,CAAC,yFAAyF;aAC9F,CAAC,CAAC,CAAC;YAEJ,UAAU,GAAG,IAAA,kBAAW,EAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAC1D,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC;YAE3C,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,eAAM,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,WAAW,CAAC,MAAM,SAAS,UAAU,CAAC,gBAAgB,CAAC,MAAM,cAAc,UAAU,CAAC,iBAAiB,CAAC,MAAM,YAAY,CAAC,CAAC;YAC5J,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,+BAA+B;QAC/B,IAAA,gBAAS,EAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IAC5D,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACjE,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IACnE,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,2EAA2E;IAC3E,gEAAgE;IAChE,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC/E,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;IACxF,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAEhF,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtD,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;QAC5E,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtE,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IACD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpC,+DAA+D;IAC/D,sEAAsE;IACtE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC;IAC/B,CAAC;IAED,wEAAwE;IACxE,IAAI,OAAO,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,kBAAkB,GAAkB;YACxC,GAAG,MAAM;YACT,QAAQ,EAAE,UAAU,CAAC,WAAW;YAChC,KAAK,EAAE;gBACL,GAAG,MAAM,CAAC,KAAK;gBACf,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;gBAC9E,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;gBACtE,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;aACvE;SACF,CAAC;QACF,IAAA,oBAAY,EAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAEnD,uCAAuC;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;YAC3C,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;gBACtC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;YACzF,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,IAAI,cAAc,EAAE,CAAC;QAC1C,IAAA,oBAAY,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,IAAA,oBAAY,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzB,CAAC;AAED,IAAI,EAAE,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
{
"name": "shadowaudit",
"version": "0.6.1",
"version": "0.7.0",
"description": "Static API security scanner — detects undocumented and unauthenticated Express.js routes before they reach production",

@@ -5,0 +5,0 @@ "main": "dist/index.js",

+47
-10

@@ -43,3 +43,3 @@ # shadowaudit

```yaml
- uses: darkmaster0345/shadow-Audit@v0.6.1
- uses: darkmaster0345/shadow-Audit@v0.7.0
with:

@@ -120,4 +120,5 @@ dir: './src'

- **FastAPI** ✅ (decorator-based route extraction, `Depends()` auth detection, `include_router` prefix reconciliation)
- **Django** ✅ (`path()`/`re_path()`/`url()` extraction, DRF router support, `include()` prefix reconciliation, cross-file auth via `views.py`)
- **Flask** ✅ (`@app.route()` / `@bp.route()` decorator extraction, `methods=` multi-method, `@login_required` auth detection)
- **Django** ✅ (`path()`/`re_path()`/`url()` extraction, DRF router support, class-based views (ModelViewSet, APIView, generics), `include()` prefix reconciliation, cross-file auth via `views.py`)
- **Flask** ✅ (`@app.route()` / `@bp.route()` decorator extraction, `methods=` multi-method (list + tuple syntax), `@login_required` auth detection)
- **NestJS** ✅ (`@Controller()` + `@Get()` / `@Post()` decorator extraction, `@UseGuards()` auth detection, `@Public()` override, controller prefix + method path combination)

@@ -149,2 +150,8 @@ ---

# Only show NEW findings since last scan (perfect for PRs)
shadowaudit --dir ./src --spec ./openapi.json --diff
# Don't have a spec? Generate one from your code
shadowaudit --dir ./src --framework express --generate-spec > openapi.json
# Output as JSON (pipe to jq for CI integrations)

@@ -172,6 +179,33 @@ shadowaudit --dir ./src --spec ./openapi.json --format json | jq '.findings | length'

--fail-on <level> Fail CI pipeline on: critical, high, info (default: "critical")
--framework <name> Force framework: express, fastapi, django (default: "auto")
--framework <name> Force framework: express, fastapi, django, flask, nestjs (default: "auto")
--generate-spec Generate OpenAPI spec from scanned routes (no comparison)
--diff Show only new findings since last scan (requires --spec)
-h, --help display help for command
```
### `--diff` mode (v0.6.0+)
Show **only new findings** since the last scan — perfect for PR workflows where you don't want to see the same 50 pre-existing findings on every PR.
```bash
# First run — full scan, cache saved
shadowaudit --dir ./src --spec ./openapi.json --diff
# Second run — only NEW findings shown
shadowaudit --dir ./src --spec ./openapi.json --diff
```
- Cache stored at `.shadowaudit-cache.json` (auto-added to `.gitignore`)
- Resolved findings shown as green ✓ section
- Exit code based on NEW findings only (pre-existing findings don't fail CI)
- For GitHub Actions: use `actions/cache` to persist `.shadowaudit-cache.json` between runs
### `--generate-spec` (v0.4.0+)
Don't have an OpenAPI spec? Generate one from your code:
```bash
shadowaudit --dir ./src --framework express --generate-spec > openapi.json
```
### Exit codes

@@ -244,3 +278,3 @@

"tool": "shadowaudit",
"version": "0.3.0",
"version": "0.6.1",
"timestamp": "2026-01-15T12:00:00.000Z",

@@ -283,3 +317,3 @@ "stats": { "total": 7, "documented": 5, "undocumented": 2, "critical": 2, "high": 0, "info": 0 }

╔════════════════════════════════╗
║ shadowaudit v0.3.0 ║
║ shadowaudit v0.7.0 ║
║ API Shadow Route Scanner ║

@@ -408,2 +442,3 @@ ╚════════════════════════════════╝

│ ├── comparator.ts # Delta comparator (route diffing + severity scoring)
│ ├── diff.ts # --diff mode (local cache + new/resolved detection)
│ ├── types.ts # Shared TypeScript interfaces

@@ -413,3 +448,3 @@ │ ├── scanners/

│ │ ├── fastapi.ts # FastAPI route extractor (decorators + include_router)
│ │ ├── django.ts # Django route extractor (path() + include() + cross-file auth)
│ │ ├── django.ts # Django route extractor (path() + CBV + cross-file auth)
│ │ ├── flask.ts # Flask route extractor (@app.route + methods=)

@@ -430,5 +465,6 @@ │ │ └── auth.ts # Auth middleware detector (AST + string-based)

│ └── logger.ts # Colored console output
├── tests/ # 128 tests across 15 files
├── tests/ # 139 tests across 16 files
│ ├── config.test.ts
│ ├── comparator.test.ts
│ ├── diff.test.ts
│ ├── scanners/

@@ -438,2 +474,3 @@ │ │ ├── express.test.ts

│ │ ├── django.test.ts
│ │ ├── django-cbv.test.ts
│ │ ├── flask.test.ts

@@ -455,3 +492,3 @@ │ │ └── auth.test.ts

├── action.yml # GitHub Marketplace Action definition
├── ROADMAP.md # v0.6.1 → v1.0.0 roadmap
├── ROADMAP.md # v0.7.0 → v1.0.0 roadmap
├── CONTRIBUTING.md # How to add framework scanners

@@ -475,3 +512,3 @@ ├── package.json

# Run tests (128 tests across 15 test files)
# Run tests (139 tests across 16 test files)
npm test

@@ -478,0 +515,0 @@