shadowaudit
Advanced tools
| import { ComparisonResult } from '../types'; | ||
| /** | ||
| * v1.0.0: Markdown formatter for CI/CD integration. | ||
| * | ||
| * Produces a GitHub-flavored markdown table suitable for posting as a | ||
| * PR comment via actions/github-script or similar. Designed to be: | ||
| * | ||
| * - Compact (fits in a PR comment without scrolling) | ||
| * - Actionable (shows file:line for each finding) | ||
| * - Scannable (severity emoji + color coding) | ||
| * - Self-contained (no external links needed) | ||
| * | ||
| * Usage: | ||
| * shadowaudit --format markdown --spec openapi.json --dir ./src | ||
| * | ||
| * Output example: | ||
| * | ||
| * ## π ShadowAudit β Shadow API Route Report | ||
| * | ||
| * **3 undocumented routes found** (1 CRITICAL, 2 HIGH) | ||
| * | ||
| * | Severity | Method | Path | File | Auth | | ||
| * |----------|--------|------|------|------| | ||
| * | π΄ CRITICAL | DELETE | /api/users/:id | routes/users.js:42 | β No | | ||
| * | π‘ HIGH | GET | /api/debug | routes/debug.js:15 | β Yes | | ||
| * | π‘ HIGH | POST | /api/admin/wipe | routes/admin.js:88 | β Yes | | ||
| * | ||
| * --- | ||
| * <sub>Generated by [shadowaudit](https://www.npmjs.com/package/shadowaudit) v1.0.0</sub> | ||
| */ | ||
| export declare function formatMarkdown(result: ComparisonResult, exitCode?: number): string; | ||
| export default formatMarkdown; | ||
| //# sourceMappingURL=markdown.d.ts.map |
| {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAU,MAAM,UAAU,CAAC;AAIpD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,SAAI,GAAG,MAAM,CA0E7E;AAED,eAAe,cAAc,CAAC"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.formatMarkdown = formatMarkdown; | ||
| // eslint-disable-next-line @typescript-eslint/no-var-requires | ||
| const package_json_1 = require("../../package.json"); | ||
| /** | ||
| * v1.0.0: Markdown formatter for CI/CD integration. | ||
| * | ||
| * Produces a GitHub-flavored markdown table suitable for posting as a | ||
| * PR comment via actions/github-script or similar. Designed to be: | ||
| * | ||
| * - Compact (fits in a PR comment without scrolling) | ||
| * - Actionable (shows file:line for each finding) | ||
| * - Scannable (severity emoji + color coding) | ||
| * - Self-contained (no external links needed) | ||
| * | ||
| * Usage: | ||
| * shadowaudit --format markdown --spec openapi.json --dir ./src | ||
| * | ||
| * Output example: | ||
| * | ||
| * ## π ShadowAudit β Shadow API Route Report | ||
| * | ||
| * **3 undocumented routes found** (1 CRITICAL, 2 HIGH) | ||
| * | ||
| * | Severity | Method | Path | File | Auth | | ||
| * |----------|--------|------|------|------| | ||
| * | π΄ CRITICAL | DELETE | /api/users/:id | routes/users.js:42 | β No | | ||
| * | π‘ HIGH | GET | /api/debug | routes/debug.js:15 | β Yes | | ||
| * | π‘ HIGH | POST | /api/admin/wipe | routes/admin.js:88 | β Yes | | ||
| * | ||
| * --- | ||
| * <sub>Generated by [shadowaudit](https://www.npmjs.com/package/shadowaudit) v1.0.0</sub> | ||
| */ | ||
| function formatMarkdown(result, exitCode = 0) { | ||
| const { findings, stats } = result; | ||
| // Header | ||
| const lines = []; | ||
| lines.push('## π ShadowAudit β Shadow API Route Report'); | ||
| lines.push(''); | ||
| // Summary line | ||
| if (stats.undocumented === 0) { | ||
| lines.push('β **No shadow API routes detected.** All routes are documented in your OpenAPI spec.'); | ||
| lines.push(''); | ||
| } | ||
| else { | ||
| const severityParts = []; | ||
| if (stats.critical > 0) | ||
| severityParts.push(`${stats.critical} CRITICAL`); | ||
| if (stats.high > 0) | ||
| severityParts.push(`${stats.high} HIGH`); | ||
| const severityStr = severityParts.join(', '); | ||
| lines.push(`**${stats.undocumented} undocumented route${stats.undocumented === 1 ? '' : 's'} found** (${severityStr})`); | ||
| lines.push(''); | ||
| // Table | ||
| lines.push('| Severity | Method | Path | File | Auth |'); | ||
| lines.push('|----------|--------|------|------|------|'); | ||
| // Sort findings: CRITICAL first, then HIGH, then by path | ||
| const sorted = [...findings].sort((a, b) => { | ||
| if (a.severity !== b.severity) { | ||
| return a.severity === 'CRITICAL' ? -1 : 1; | ||
| } | ||
| return a.route.path.localeCompare(b.route.path); | ||
| }); | ||
| for (const f of sorted) { | ||
| const severityIcon = f.severity === 'CRITICAL' ? 'π΄ CRITICAL' : 'π‘ HIGH'; | ||
| const authIcon = f.route.hasAuth ? 'β Yes' : 'β No'; | ||
| const fileLoc = `${f.route.file}:${f.route.line}`; | ||
| // Escape pipe characters in path | ||
| const safePath = f.route.path.replace(/\|/g, '\\|'); | ||
| lines.push(`| ${severityIcon} | ${f.route.method} | \`${safePath}\` | ${fileLoc} | ${authIcon} |`); | ||
| } | ||
| lines.push(''); | ||
| // CI recommendation | ||
| if (stats.critical > 0) { | ||
| lines.push('> β **Pipeline should FAIL** β ' + stats.critical + ' critical route(s) with no auth detected.'); | ||
| } | ||
| else if (stats.high > 0) { | ||
| lines.push('> β οΈ **Review recommended** β ' + stats.high + ' undocumented route(s) with auth present.'); | ||
| } | ||
| } | ||
| // Stats summary | ||
| lines.push(''); | ||
| lines.push('<details>'); | ||
| lines.push('<summary>π Scan Statistics</summary>'); | ||
| lines.push(''); | ||
| lines.push(`| Metric | Value |`); | ||
| lines.push(`|--------|-------|`); | ||
| lines.push(`| Total routes scanned | ${stats.total} |`); | ||
| lines.push(`| Documented routes | ${stats.documented} |`); | ||
| lines.push(`| Undocumented routes | ${stats.undocumented} |`); | ||
| lines.push(`| CRITICAL (no auth) | ${stats.critical} |`); | ||
| lines.push(`| HIGH (has auth) | ${stats.high} |`); | ||
| lines.push(`| Exit code | ${exitCode} |`); | ||
| lines.push(''); | ||
| lines.push('</details>'); | ||
| lines.push(''); | ||
| // Footer | ||
| lines.push('---'); | ||
| lines.push(`<sub>Generated by [shadowaudit](https://www.npmjs.com/package/shadowaudit) v${package_json_1.version}</sub>`); | ||
| return lines.join('\n'); | ||
| } | ||
| exports.default = formatMarkdown; | ||
| //# sourceMappingURL=markdown.js.map |
| {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/formatters/markdown.ts"],"names":[],"mappings":"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"} |
+62
-0
@@ -56,2 +56,64 @@ import { Route, DocumentedRoute, ComparisonResult } from './types'; | ||
| export default compareRoutes; | ||
| /** | ||
| * A dead spec entry β a route documented in the OpenAPI spec but NOT found | ||
| * in the scanned code. These indicate: | ||
| * - Removed endpoints still in docs (confusing API consumers) | ||
| * - Renamed endpoints with stale docs | ||
| * - Typos in spec paths | ||
| */ | ||
| export interface DeadSpecEntry { | ||
| method: string; | ||
| path: string; | ||
| reason: string; | ||
| } | ||
| export interface ReverseComparisonResult { | ||
| deadSpecEntries: DeadSpecEntry[]; | ||
| stats: { | ||
| totalSpecRoutes: number; | ||
| matchedInCode: number; | ||
| deadEntries: number; | ||
| }; | ||
| } | ||
| /** | ||
| * v1.0.0: Reverse comparison β finds routes in the OpenAPI spec that DON'T | ||
| * exist in the scanned code. | ||
| * | ||
| * This is the opposite of compareRoutes(). Instead of finding code routes | ||
| * not in the spec, it finds spec routes not in the code. | ||
| * | ||
| * Use cases: | ||
| * - Detect removed endpoints still documented (confusing API consumers) | ||
| * - Detect renamed endpoints with stale spec paths | ||
| * - Detect typos in spec paths | ||
| * - Detect copy-paste errors in spec generation | ||
| * | ||
| * @param scannedRoutes Routes found in code | ||
| * @param documentedRoutes Routes from OpenAPI spec | ||
| * @param options Prefix options (same as compareRoutes) | ||
| */ | ||
| export declare function reverseCompareRoutes(scannedRoutes: Route[], documentedRoutes: DocumentedRoute[], options?: CompareOptions): ReverseComparisonResult; | ||
| export interface SpecCoverage { | ||
| totalDocumented: number; | ||
| withDescription: number; | ||
| withParameters: number; | ||
| withResponses: number; | ||
| withSecurity: number; | ||
| score: number; | ||
| } | ||
| /** | ||
| * v1.0.0: Analyzes a raw OpenAPI/Swagger spec object and scores its | ||
| * documentation completeness. | ||
| * | ||
| * For each documented path+method, checks: | ||
| * - Has a description or summary? | ||
| * - Has parameters documented? | ||
| * - Has response schemas? | ||
| * - Has a security scheme? | ||
| * | ||
| * Returns a score (0-100) representing the average completeness across | ||
| * all documented endpoints. | ||
| * | ||
| * @param specRaw The raw parsed OpenAPI/Swagger spec object | ||
| */ | ||
| export declare function scoreSpecCoverage(specRaw: unknown): SpecCoverage; | ||
| //# sourceMappingURL=comparator.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"comparator.d.ts","sourceRoot":"","sources":["../src/comparator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,eAAe,EAEf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAoDlE;AAyCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,KAAK,EAAE,EACtB,gBAAgB,EAAE,eAAe,EAAE,EACnC,OAAO,GAAE,cAAmB,EAC5B,OAAO,UAAO,GACb,gBAAgB,CAqFlB;AAED,eAAe,aAAa,CAAC"} | ||
| {"version":3,"file":"comparator.d.ts","sourceRoot":"","sources":["../src/comparator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,eAAe,EAEf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AAGjB,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CAoDlE;AAyCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,KAAK,EAAE,EACtB,gBAAgB,EAAE,eAAe,EAAE,EACnC,OAAO,GAAE,cAAmB,EAC5B,OAAO,UAAO,GACb,gBAAgB,CAqFlB;AAED,eAAe,aAAa,CAAC;AAM7B;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,KAAK,EAAE;QACL,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,KAAK,EAAE,EACtB,gBAAgB,EAAE,eAAe,EAAE,EACnC,OAAO,GAAE,cAAmB,GAC3B,uBAAuB,CA6BzB;AAMD,MAAM,WAAW,YAAY;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CA0GhE"} |
+142
-0
@@ -5,2 +5,4 @@ "use strict"; | ||
| exports.compareRoutes = compareRoutes; | ||
| exports.reverseCompareRoutes = reverseCompareRoutes; | ||
| exports.scoreSpecCoverage = scoreSpecCoverage; | ||
| const url_1 = require("url"); | ||
@@ -208,2 +210,142 @@ const spec_1 = require("./parsers/spec"); | ||
| exports.default = compareRoutes; | ||
| /** | ||
| * v1.0.0: Reverse comparison β finds routes in the OpenAPI spec that DON'T | ||
| * exist in the scanned code. | ||
| * | ||
| * This is the opposite of compareRoutes(). Instead of finding code routes | ||
| * not in the spec, it finds spec routes not in the code. | ||
| * | ||
| * Use cases: | ||
| * - Detect removed endpoints still documented (confusing API consumers) | ||
| * - Detect renamed endpoints with stale spec paths | ||
| * - Detect typos in spec paths | ||
| * - Detect copy-paste errors in spec generation | ||
| * | ||
| * @param scannedRoutes Routes found in code | ||
| * @param documentedRoutes Routes from OpenAPI spec | ||
| * @param options Prefix options (same as compareRoutes) | ||
| */ | ||
| function reverseCompareRoutes(scannedRoutes, documentedRoutes, options = {}) { | ||
| // Build a set of all scanned route keys | ||
| const scannedKeys = new Set(); | ||
| for (const route of scannedRoutes) { | ||
| if (route.method.toUpperCase() === 'USE') | ||
| continue; | ||
| scannedKeys.add(scannedKey(route)); | ||
| } | ||
| // Check each documented route β is it in the scanned set? | ||
| const deadEntries = []; | ||
| for (const dr of documentedRoutes) { | ||
| const key = documentedKey(dr, options); | ||
| if (!scannedKeys.has(key)) { | ||
| deadEntries.push({ | ||
| method: dr.method, | ||
| path: dr.path, | ||
| reason: 'Route documented in spec but not found in scanned code β endpoint may have been removed, renamed, or the spec path may have a typo', | ||
| }); | ||
| } | ||
| } | ||
| return { | ||
| deadSpecEntries: deadEntries, | ||
| stats: { | ||
| totalSpecRoutes: documentedRoutes.length, | ||
| matchedInCode: documentedRoutes.length - deadEntries.length, | ||
| deadEntries: deadEntries.length, | ||
| }, | ||
| }; | ||
| } | ||
| /** | ||
| * v1.0.0: Analyzes a raw OpenAPI/Swagger spec object and scores its | ||
| * documentation completeness. | ||
| * | ||
| * For each documented path+method, checks: | ||
| * - Has a description or summary? | ||
| * - Has parameters documented? | ||
| * - Has response schemas? | ||
| * - Has a security scheme? | ||
| * | ||
| * Returns a score (0-100) representing the average completeness across | ||
| * all documented endpoints. | ||
| * | ||
| * @param specRaw The raw parsed OpenAPI/Swagger spec object | ||
| */ | ||
| function scoreSpecCoverage(specRaw) { | ||
| const empty = { | ||
| totalDocumented: 0, | ||
| withDescription: 0, | ||
| withParameters: 0, | ||
| withResponses: 0, | ||
| withSecurity: 0, | ||
| score: 0, | ||
| }; | ||
| if (!specRaw || typeof specRaw !== 'object' || Array.isArray(specRaw)) { | ||
| return empty; | ||
| } | ||
| const spec = specRaw; | ||
| if (!spec.paths || typeof spec.paths !== 'object') { | ||
| return empty; | ||
| } | ||
| const HTTP_METHODS = ['get', 'post', 'put', 'delete', 'patch', 'head', 'options']; | ||
| let total = 0; | ||
| let hasDesc = 0; | ||
| let hasParams = 0; | ||
| let hasResponses = 0; | ||
| let hasSecurity = 0; | ||
| // Check if spec has global security defined | ||
| const hasGlobalSecurity = !!spec.security || !!spec.securitySchemes || !!spec.components?.securitySchemes; | ||
| for (const [pathStr, pathItem] of Object.entries(spec.paths)) { | ||
| if (!pathItem || typeof pathItem !== 'object') | ||
| continue; | ||
| for (const method of HTTP_METHODS) { | ||
| const operation = pathItem[method]; | ||
| if (!operation || typeof operation !== 'object') | ||
| continue; | ||
| total++; | ||
| const op = operation; | ||
| // Description or summary | ||
| if (typeof op.description === 'string' && op.description.length > 0) { | ||
| hasDesc++; | ||
| } | ||
| else if (typeof op.summary === 'string' && op.summary.length > 0) { | ||
| hasDesc++; | ||
| } | ||
| else if (typeof pathItem.description === 'string') { | ||
| // Fall back to path-level description | ||
| hasDesc++; | ||
| } | ||
| // Parameters | ||
| if (Array.isArray(op.parameters) && op.parameters.length > 0) { | ||
| hasParams++; | ||
| } | ||
| // Responses with at least one schema | ||
| if (op.responses && typeof op.responses === 'object') { | ||
| const responses = op.responses; | ||
| const hasSchema = Object.values(responses).some((r) => r && typeof r === 'object' && ('schema' in r || | ||
| 'content' in r)); | ||
| if (hasSchema || Object.keys(responses).length > 0) { | ||
| hasResponses++; | ||
| } | ||
| } | ||
| // Security (operation-level or global) | ||
| if (Array.isArray(op.security) || hasGlobalSecurity) { | ||
| hasSecurity++; | ||
| } | ||
| } | ||
| } | ||
| if (total === 0) | ||
| return empty; | ||
| const descScore = (hasDesc / total) * 25; | ||
| const paramScore = (hasParams / total) * 25; | ||
| const respScore = (hasResponses / total) * 25; | ||
| const secScore = (hasSecurity / total) * 25; | ||
| const score = Math.round(descScore + paramScore + respScore + secScore); | ||
| return { | ||
| totalDocumented: total, | ||
| withDescription: hasDesc, | ||
| withParameters: hasParams, | ||
| withResponses: hasResponses, | ||
| withSecurity: hasSecurity, | ||
| score, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=comparator.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"comparator.js","sourceRoot":"","sources":["../src/comparator.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"comparator.js","sourceRoot":"","sources":["../src/comparator.ts"],"names":[],"mappings":"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"} |
@@ -5,10 +5,11 @@ import { ComparisonResult, Config } from '../types'; | ||
| * | ||
| * - 'table' β colored terminal table + summary box (default) | ||
| * - 'json' β indented JSON to stdout (for piping into jq / log aggregators) | ||
| * - 'sarif' β SARIF 2.1.0 JSON to stdout (for GitHub Code Scanning) | ||
| * - default β fall back to table | ||
| * - 'table' β colored terminal table + summary box (default) | ||
| * - 'json' β indented JSON to stdout (for piping into jq / log aggregators) | ||
| * - 'sarif' β SARIF 2.1.0 JSON to stdout (for GitHub Code Scanning) | ||
| * - 'markdown' β GitHub-flavored markdown table (for PR comments) [v1.0.0+] | ||
| * - default β fall back to table | ||
| * | ||
| * Table writes directly to console.log (it builds a live colored table). | ||
| * JSON and SARIF return strings, so we console.log them here to keep the | ||
| * call site in main() uniform. | ||
| * JSON, SARIF, and Markdown return strings, so we console.log them here | ||
| * to keep the call site in main() uniform. | ||
| */ | ||
@@ -19,3 +20,4 @@ export declare function runFormatter(result: ComparisonResult, config: Config, exitCode?: number): void; | ||
| export { formatSarif } from './sarif'; | ||
| export { formatMarkdown } from './markdown'; | ||
| export default runFormatter; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKpD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,SAAI,GACX,IAAI,CAaN;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAe,YAAY,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMpD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,SAAI,GACX,IAAI,CAgBN;AAED,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,eAAe,YAAY,CAAC"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.formatSarif = exports.formatJson = exports.formatTable = void 0; | ||
| exports.formatMarkdown = exports.formatSarif = exports.formatJson = exports.formatTable = void 0; | ||
| exports.runFormatter = runFormatter; | ||
@@ -8,13 +8,15 @@ const table_1 = require("./table"); | ||
| const sarif_1 = require("./sarif"); | ||
| const markdown_1 = require("./markdown"); | ||
| /** | ||
| * Dispatches to the appropriate formatter based on `config.format`. | ||
| * | ||
| * - 'table' β colored terminal table + summary box (default) | ||
| * - 'json' β indented JSON to stdout (for piping into jq / log aggregators) | ||
| * - 'sarif' β SARIF 2.1.0 JSON to stdout (for GitHub Code Scanning) | ||
| * - default β fall back to table | ||
| * - 'table' β colored terminal table + summary box (default) | ||
| * - 'json' β indented JSON to stdout (for piping into jq / log aggregators) | ||
| * - 'sarif' β SARIF 2.1.0 JSON to stdout (for GitHub Code Scanning) | ||
| * - 'markdown' β GitHub-flavored markdown table (for PR comments) [v1.0.0+] | ||
| * - default β fall back to table | ||
| * | ||
| * Table writes directly to console.log (it builds a live colored table). | ||
| * JSON and SARIF return strings, so we console.log them here to keep the | ||
| * call site in main() uniform. | ||
| * JSON, SARIF, and Markdown return strings, so we console.log them here | ||
| * to keep the call site in main() uniform. | ||
| */ | ||
@@ -29,2 +31,5 @@ function runFormatter(result, config, exitCode = 0) { | ||
| break; | ||
| case 'markdown': | ||
| console.log((0, markdown_1.formatMarkdown)(result, exitCode)); | ||
| break; | ||
| case 'table': | ||
@@ -42,3 +47,5 @@ default: | ||
| Object.defineProperty(exports, "formatSarif", { enumerable: true, get: function () { return sarif_2.formatSarif; } }); | ||
| var markdown_2 = require("./markdown"); | ||
| Object.defineProperty(exports, "formatMarkdown", { enumerable: true, get: function () { return markdown_2.formatMarkdown; } }); | ||
| exports.default = runFormatter; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":";;;AAiBA,oCAiBC;AAjCD,mCAAsC;AACtC,iCAAoC;AACpC,mCAAsC;AAEtC;;;;;;;;;;;GAWG;AACH,SAAgB,YAAY,CAC1B,MAAwB,EACxB,MAAc,EACd,QAAQ,GAAG,CAAC;IAEZ,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAU,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1C,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,OAAO,CAAC;QACb;YACE,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM;IACV,CAAC;AACH,CAAC;AAED,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AACnB,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AAEpB,kBAAe,YAAY,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/formatters/index.ts"],"names":[],"mappings":";;;AAmBA,oCAoBC;AAtCD,mCAAsC;AACtC,iCAAoC;AACpC,mCAAsC;AACtC,yCAA4C;AAE5C;;;;;;;;;;;;GAYG;AACH,SAAgB,YAAY,CAC1B,MAAwB,EACxB,MAAc,EACd,QAAQ,GAAG,CAAC;IAEZ,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC,IAAA,iBAAU,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC1C,MAAM;QACR,KAAK,OAAO;YACV,OAAO,CAAC,GAAG,CAAC,IAAA,mBAAW,EAAC,MAAM,CAAC,CAAC,CAAC;YACjC,MAAM;QACR,KAAK,UAAU;YACb,OAAO,CAAC,GAAG,CAAC,IAAA,yBAAc,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YAC9C,MAAM;QACR,KAAK,OAAO,CAAC;QACb;YACE,IAAA,mBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC5B,MAAM;IACV,CAAC;AACH,CAAC;AAED,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,+BAAoC;AAA3B,kGAAA,UAAU,OAAA;AACnB,iCAAsC;AAA7B,oGAAA,WAAW,OAAA;AACpB,uCAA4C;AAAnC,0GAAA,cAAc,OAAA;AAEvB,kBAAe,YAAY,CAAC"} |
+69
-2
@@ -57,2 +57,3 @@ #!/usr/bin/env node | ||
| const watch_1 = require("./watch"); | ||
| const comparator_2 = require("./comparator"); | ||
| const program = new commander_1.Command(); | ||
@@ -65,3 +66,3 @@ program | ||
| .option('--spec <path>', 'Path to OpenAPI/Swagger spec file') | ||
| .option('--format <type>', 'Output format: table, json, sarif') | ||
| .option('--format <type>', 'Output format: table, json, sarif, markdown') | ||
| .option('--fail-on <level>', 'Fail CI pipeline on: critical, high, info') | ||
@@ -72,3 +73,5 @@ .option('--framework <name>', 'Force framework: express, fastapi, django, flask, nestjs, rails') | ||
| .option('--concurrency <n>', 'Parallel file scan concurrency (default: 8, max: 64)', '8') | ||
| .option('--watch', 'Watch for file changes and re-scan automatically (debounced 300ms, Ctrl+C to exit)'); | ||
| .option('--watch', 'Watch for file changes and re-scan automatically (debounced 300ms, Ctrl+C to exit)') | ||
| .option('--reverse', 'v1.0.0+ β Find dead spec entries (routes in spec NOT in code)') | ||
| .option('--coverage', 'v1.0.0+ β Score OpenAPI spec completeness (descriptions, params, responses, security)'); | ||
| /** | ||
@@ -339,2 +342,66 @@ * Auto-detects the web framework of a project by inspecting dependency | ||
| const prefixes = rawSpec ? (0, comparator_1.extractSpecPrefixes)(rawSpec) : {}; | ||
| // v1.0.0: --coverage β score spec completeness | ||
| if (options.coverage && rawSpec) { | ||
| const coverage = (0, comparator_2.scoreSpecCoverage)(rawSpec); | ||
| console.log(''); | ||
| console.log('β'.repeat(50)); | ||
| console.log(' OpenAPI Spec Coverage Report'); | ||
| console.log('β'.repeat(50)); | ||
| console.log(` Total documented routes : ${coverage.totalDocumented}`); | ||
| console.log(` With description : ${coverage.withDescription}/${coverage.totalDocumented} (${Math.round(coverage.withDescription / coverage.totalDocumented * 100)}%)`); | ||
| console.log(` With parameters : ${coverage.withParameters}/${coverage.totalDocumented} (${Math.round(coverage.withParameters / coverage.totalDocumented * 100)}%)`); | ||
| console.log(` With response schemas : ${coverage.withResponses}/${coverage.totalDocumented} (${Math.round(coverage.withResponses / coverage.totalDocumented * 100)}%)`); | ||
| console.log(` With security scheme : ${coverage.withSecurity}/${coverage.totalDocumented} (${Math.round(coverage.withSecurity / coverage.totalDocumented * 100)}%)`); | ||
| console.log('β'.repeat(50)); | ||
| const scoreColor = coverage.score >= 75 ? '\x1b[32m' : coverage.score >= 50 ? '\x1b[33m' : '\x1b[31m'; | ||
| console.log(` Spec Coverage Score : ${scoreColor}${coverage.score}/100\x1b[0m`); | ||
| console.log('β'.repeat(50)); | ||
| console.log(''); | ||
| // If --coverage is combined with --format json, also output the coverage object | ||
| if (config.format === 'json') { | ||
| const coverageOutput = JSON.stringify({ specCoverage: coverage }, null, 2); | ||
| console.log(coverageOutput); | ||
| } | ||
| // If only --coverage was requested (no --reverse, no normal scan), exit | ||
| if (options.coverage && !options.reverse && !options.diff) { | ||
| process.exit(0); | ||
| } | ||
| } | ||
| // v1.0.0: --reverse β find dead spec entries (routes in spec NOT in code) | ||
| if (options.reverse) { | ||
| const reverseResult = (0, comparator_2.reverseCompareRoutes)(routes, documentedRoutes, { | ||
| specBasePath: prefixes.basePath, | ||
| specServerPrefix: prefixes.serverPrefix, | ||
| }); | ||
| console.log(''); | ||
| console.log('β'.repeat(50)); | ||
| console.log(' Reverse Mode β Dead Spec Entries'); | ||
| console.log('β'.repeat(50)); | ||
| console.log(` Total spec routes : ${reverseResult.stats.totalSpecRoutes}`); | ||
| console.log(` Matched in code : ${reverseResult.stats.matchedInCode}`); | ||
| console.log(` Dead spec entries : ${reverseResult.stats.deadEntries}`); | ||
| console.log('β'.repeat(50)); | ||
| console.log(''); | ||
| if (reverseResult.deadSpecEntries.length > 0) { | ||
| console.log('Dead spec entries (in spec but NOT in code):'); | ||
| console.log(''); | ||
| for (const entry of reverseResult.deadSpecEntries) { | ||
| console.log(` ${entry.method} ${entry.path}`); | ||
| } | ||
| console.log(''); | ||
| console.log(`β ${reverseResult.deadSpecEntries.length} dead spec entries found. These may be removed endpoints, renamed routes, or typos.`); | ||
| } | ||
| else { | ||
| console.log('β No dead spec entries β all spec routes exist in code.'); | ||
| } | ||
| if (config.format === 'json') { | ||
| const reverseOutput = JSON.stringify({ | ||
| reverseMode: true, | ||
| stats: reverseResult.stats, | ||
| deadSpecEntries: reverseResult.deadSpecEntries, | ||
| }, null, 2); | ||
| console.log(reverseOutput); | ||
| } | ||
| process.exit(reverseResult.deadSpecEntries.length > 0 ? 1 : 0); | ||
| } | ||
| const result = (0, comparator_1.compareRoutes)(routes, documentedRoutes, { | ||
@@ -341,0 +408,0 @@ specBasePath: prefixes.basePath, |
@@ -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,8CAA+C;AAC/C,4CAA6C;AAC7C,wDAAiE;AACjE,yCAAyD;AACzD,6CAAkE;AAClE,8CAAkD;AAClD,4CAAiD;AACjD,iCAAkI;AAElI,mCAA2D;AAE3D,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,iEAAiE,CAAC;KAC/F,MAAM,CAAC,iBAAiB,EAAE,2DAA2D,CAAC;KACtF,MAAM,CAAC,QAAQ,EAAE,oEAAoE,CAAC;KACtF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,EAAE,GAAG,CAAC;KACxF,MAAM,CAAC,SAAS,EAAE,oFAAoF,CAAC,CAAC;AAE3G;;;;;;;;;;;;;;;;;GAiBG;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,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;YAC7D,IAAI,IAAI,CAAC,cAAc,CAAC;gBAAE,OAAO,QAAQ,CAAC;YAC1C,IAAI,IAAI,CAAC,SAAS,CAAC;gBAAE,OAAO,SAAS,CAAC;YACtC,OAAO,SAAS,CAAC,CAAC,+BAA+B;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;IAED,sCAAsC;IACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC9C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnI,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qBAAqB;QACvB,CAAC;IACH,CAAC;IAED,kFAAkF;IAClF,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IACvD,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;YACvD,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,OAAO,OAAO,CAAC;YACjB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,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,6EAA6E;IAC7E,MAAM,WAAW,GAAG,IAAA,+BAAoB,EAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAE9D;;;;;;OAMG;IACH,KAAK,UAAU,OAAO,CAAC,EAAU;QAC/B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,eAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACnD,OAAO,IAAA,qBAAW,EAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YAChD,OAAO,IAAA,qBAAW,EAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpB,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,IAAA,mBAAU,EAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YACnB,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,IAAA,iBAAS,EAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC;QACnF,CAAC;QACD,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;YACpB,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAC/C,OAAO,IAAA,mBAAU,EAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YACnB,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,IAAA,iBAAS,EAAC,MAAM,CAAC,GAAI,EAAE,MAAM,CAAC,MAAO,EAAE,MAAM,CAAC,YAAa,EAAE,WAAW,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,aAAa,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,cAAc,GAClB,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzD,eAAM,CAAC,OAAO,CACZ,SAAS,aAAa,CAAC,MAAM,IAAI,cAAc,cAAc,MAAM,CAAC,GAAG,kBAAkB,WAAW,GAAG,CACxG,CAAC;IACF,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC1B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QACrD,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;IACJ,CAAC,CAAC,CAAC;IAEH,yEAAyE;IACzE,yEAAyE;IACzE,kEAAkE;IAClE,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,eAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5D,eAAM,CAAC,KAAK,CAAC,iFAAiF,CAAC,CAAC;YAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACjB,0EAA0E;QAC5E,CAAC;IACH,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,8DAA8D;IAC9D,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAClC,eAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnC,eAAM,CAAC,IAAI,CACT,0EAA0E,CAC3E,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,yEAAyE;IACzE,gFAAgF;IAChF,wEAAwE;IACxE,mEAAmE;IACnE,qEAAqE;IACrE,mDAAmD;IAEnD,uFAAuF;IACvF,0FAA0F;IAC1F,KAAK,UAAU,sBAAsB,CACnC,MAAe,EACf,EAAU,EACV,mBAA4B,KAAK;QAEjC,IAAI,gBAAgB,EAAE,CAAC;YACrB,0EAA0E;YAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC;YAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,CAAC;QAED,qEAAqE;QACrE,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAY,EAAC,MAAM,CAAC,IAAK,CAAC,CAAC;QACjD,MAAM,gBAAgB,GAAG,MAAM,IAAA,gBAAS,EAAC,MAAM,CAAC,IAAK,CAAC,CAAC;QACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,IAAA,gCAAmB,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7D,MAAM,MAAM,GAAG,IAAA,0BAAa,EAAC,MAAM,EAAE,gBAAgB,EAAE;YACrD,YAAY,EAAE,QAAQ,CAAC,QAAQ;YAC/B,gBAAgB,EAAE,QAAQ,CAAC,YAAY;SACxC,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,UAAU,GAAsB,IAAI,CAAC;QACzC,IAAI,iBAAiB,GAAc,MAAM,CAAC,QAAQ,CAAC;QACnD,IAAI,cAAc,GAAG,KAAK,CAAC;QAE3B,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,qBAAc,CAAC,CAAC;YAC3D,IAAA,sBAAe,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAA,gBAAS,EAAC,SAAS,CAAC,CAAC;YAEnC,MAAM,WAAW,GAAG;gBAClB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG;gBACtB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACvB,SAAS,EAAE,EAAE;aACd,CAAC;YAEF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,cAAc,GAAG,IAAI,CAAC;gBACtB,eAAM,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAC7F,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,KAAK,oBAAa,EAAE,CAAC;gBAC3C,eAAM,CAAC,IAAI,CAAC,6BAA6B,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;YAChF,CAAC;iBAAM,IACL,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG;gBACtC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EACxC,CAAC;gBACD,eAAM,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACjD,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;oBAC9F,QAAQ,EAAE,EAAE,CAAC,QAAQ;oBACrB,MAAM,EAAE,EAAE,CAAC,QAAQ,KAAK,UAAU;wBAChC,CAAC,CAAC,gGAAgG;wBAClG,CAAC,CAAC,yFAAyF;iBAC9F,CAAC,CAAC,CAAC;gBAEJ,UAAU,GAAG,IAAA,kBAAW,EAAC,MAAM,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;gBAC1D,iBAAiB,GAAG,UAAU,CAAC,WAAW,CAAC;gBAE3C,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC5B,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;gBAC5J,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,CAAC;YAED,IAAA,gBAAS,EAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QACrD,CAAC;QAED,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACjE,eAAM,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;QACnE,eAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAE5B,2EAA2E;QAC3E,gEAAgE;QAChE,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC/E,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QACxF,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;QAEhF,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtD,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5E,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtE,UAAU,GAAG,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEpC,wEAAwE;QACxE,oDAAoD;QACpD,IAAI,iBAAiB,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,GAAG,cAAc,CAAC;QAC/B,CAAC;QAED,wEAAwE;QACxE,IAAI,OAAO,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,kBAAkB,GAAqB;gBAC3C,GAAG,MAAM;gBACT,QAAQ,EAAE,UAAU,CAAC,WAAW;gBAChC,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,KAAK;oBACf,QAAQ,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,MAAM;oBAC9E,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;oBACtE,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM;iBACvE;aACF,CAAC;YACF,IAAA,oBAAY,EAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAEnD,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;gBAC3C,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACtC,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;gBACzF,CAAC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAA,oBAAY,EAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,sBAAsB,CAAC,aAAa,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IAEtF,uBAAuB;IACvB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,yEAAyE;QACzE,sEAAsE;QACtE,qEAAqE;QACrE,uBAAuB;QACvB,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,eAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAC/E,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,aAAa,GAAG,KAAK,CAAC;QAE1B,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;YAC/B,IAAI,cAAc,EAAE,CAAC;gBACnB,oEAAoE;gBACpE,mEAAmE;gBACnE,aAAa,GAAG,IAAI,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,cAAc,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvE,eAAM,CAAC,OAAO,CACZ,SAAS,WAAW,CAAC,MAAM,IAAI,OAAO,mBAAmB,CAC1D,CAAC;gBACF,MAAM,sBAAsB,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC7D,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,eAAM,CAAC,IAAI,CACT,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACtE,CAAC;YACJ,CAAC;oBAAS,CAAC;gBACT,cAAc,GAAG,KAAK,CAAC;gBACvB,IAAI,aAAa,EAAE,CAAC;oBAClB,aAAa,GAAG,KAAK,CAAC;oBACtB,gEAAgE;oBAChE,UAAU,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,IAAA,sBAAc,EAAC,MAAM,CAAC,GAAI,EAAE,aAAa,CAAC,CAAC;QAE3D,IAAA,wBAAgB,EAAC,GAAG,EAAE;YACpB,eAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAChB,eAAM,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;YACjD,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,qEAAqE;QACrE,8DAA8D;QAC9D,uEAAuE;QACvE,uBAAuB;QACvB,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAChC,CAAC;AAED,IAAI,EAAE,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} |
+1
-1
@@ -25,3 +25,3 @@ export interface Route { | ||
| dir?: string; | ||
| format?: 'table' | 'json' | 'sarif'; | ||
| format?: 'table' | 'json' | 'sarif' | 'markdown'; | ||
| failOn?: 'critical' | 'high' | 'info'; | ||
@@ -28,0 +28,0 @@ authPatterns?: string[]; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACpC,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,KAAK,EAAE,CAAC;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CAEjB"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACjD,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,KAAK,EAAE,CAAC;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,kBAAkB,EAAE,KAAK,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CAEjB"} |
+1
-1
| { | ||
| "name": "shadowaudit", | ||
| "version": "0.9.0", | ||
| "version": "1.0.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", |
+21
-5
@@ -43,3 +43,3 @@ # shadowaudit | ||
| ```yaml | ||
| - uses: darkmaster0345/shadow-Audit@v0.9.0 | ||
| - uses: darkmaster0345/shadow-Audit@v1.0.0 | ||
| with: | ||
@@ -86,2 +86,17 @@ dir: './src' | ||
| ### mastodon/mastodon β federated social network (Rails + Grape) | ||
| - **766 routes detected** (743 Rails + 23 from concern expansion) | ||
| - **0 `unknown#unknown` controller actions** (v0.9.0 concern expansion eliminated all 5 false positives from v0.8.2) | ||
| - **Controller inheritance chain walking** correctly detected auth in 385 routes (v0.8.0 had 96 β 57% false-positive reduction) | ||
| - **Community OpenAPI spec comparison**: 601 undocumented shadow routes found (the community spec only covers the public REST API, not web/admin/settings routes) | ||
| ### gitlabhq/gitlabhq β DevSecOps platform (Rails + Grape) | ||
| - **2,449 routes detected** (1,423 Rails web routes + 1,017 Grape API routes + 9 other) | ||
| - **1,017 `/api/v4/` routes** from Grape `lib/api/*.rb` files (v0.9.0 Grape scanner) | ||
| - **813 routes with auth detected** via Grape `before do authenticate! end` blocks | ||
| - **Mount chain resolution** working: `mount ::API::Groups` β `lib/api/groups.rb` with `/api/v4` prefix | ||
| - GitLab's OpenAPI spec has 1,144 paths β 2,136 undocumented shadow routes found | ||
| These real-world tests directly shaped the [roadmap](ROADMAP.md) β each limitation found is now a tracked improvement with priority and effort ratings. | ||
@@ -124,3 +139,4 @@ | ||
| - **NestJS** β (`@Controller()` + `@Get()` / `@Post()` decorator extraction, `@UseGuards()` auth detection, `@Public()` override, controller prefix + method path combination) | ||
| - **Rails** β (v0.8.0+ β `config/routes.rb` block-aware parser: `namespace`, `scope`, `resources`/`resource` macros, `member`/`collection` blocks, `devise_for`, `draw(:subfile)`, cross-file auth via `before_action` in controllers) | ||
| - **Rails** β (v0.8.0+ β `config/routes.rb` block-aware parser: `namespace`, `scope`, `resources`/`resource` macros, `member`/`collection` blocks, `devise_for`, `draw(:subfile)`, cross-file auth via `before_action` with controller inheritance chain walking, concern expansion) | ||
| - **Grape** β (v0.9.0+ β `lib/api/*.rb` Grape API scanner: `resource`, `namespace`, `route_param`, `before` auth blocks, `mount` cross-file resolution, `prefix`/`version` support. Auto-invoked when `lib/api/` exists. Tested on GitLab: 1,017 `/api/v4/` routes detected) | ||
@@ -180,3 +196,3 @@ --- | ||
| --fail-on <level> Fail CI pipeline on: critical, high, info (default: "critical") | ||
| --framework <name> Force framework: express, fastapi, django, flask, nestjs, rails (default: "auto") | ||
| --framework <name> Force framework: express, fastapi, django, flask, nestjs, rails (Grape auto-detected) (default: "auto") | ||
| --generate-spec Generate OpenAPI spec from scanned routes (no comparison) | ||
@@ -311,3 +327,3 @@ --diff Show only new findings since last scan (requires --spec) | ||
| "tool": "shadowaudit", | ||
| "version": "0.9.0", | ||
| "version": "1.0.0", | ||
| "timestamp": "2026-01-15T12:00:00.000Z", | ||
@@ -350,3 +366,3 @@ "stats": { "total": 7, "documented": 5, "undocumented": 2, "critical": 2, "high": 0, "info": 0 } | ||
| ββββββββββββββββββββββββββββββββββ | ||
| β shadowaudit v0.9.0 β | ||
| β shadowaudit v1.0.0 β | ||
| β API Shadow Route Scanner β | ||
@@ -353,0 +369,0 @@ ββββββββββββββββββββββββββββββββββ |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
641375
5.05%116
3.57%9526
4.55%0
-100%589
2.79%