ubon
Version:
Security scanner for AI-generated React/Next.js and Python apps. Catches hardcoded secrets, accessibility issues, and vulnerabilities that traditional linters miss.
79 lines (78 loc) • 2.1 kB
TypeScript
export interface ScanResult {
type: 'error' | 'warning' | 'info';
category: 'security' | 'links' | 'performance' | 'accessibility' | 'seo';
message: string;
file?: string;
line?: number;
range?: {
startLine: number;
startColumn: number;
endLine: number;
endColumn: number;
};
severity: 'high' | 'medium' | 'low';
ruleId: string;
confidence: number;
match?: string;
fingerprint?: string;
fix?: string;
fixEdits?: FixEdit[];
helpUri?: string;
suppressed?: boolean;
suppressionReason?: string;
}
export interface ScanOptions {
directory: string;
port?: number;
skipBuild?: boolean;
include?: string[];
exclude?: string[];
verbose?: boolean;
minConfidence?: number;
enabledRules?: string[];
disabledRules?: string[];
failOn?: 'none' | 'warning' | 'error';
baselinePath?: string;
updateBaseline?: boolean;
useBaseline?: boolean;
changedFiles?: string[];
gitChangedSince?: string;
profile?: 'auto' | 'react' | 'next' | 'python' | 'vue' | 'rails';
gitHistoryDepth?: number;
crawlInternal?: boolean;
crawlStartUrl?: string;
crawlDepth?: number;
crawlTimeoutMs?: number;
fast?: boolean;
skipPatterns?: string[];
maxFileSize?: number;
focusCritical?: boolean;
focusSecurity?: boolean;
focusNew?: boolean;
detailed?: boolean;
quickTopN?: number;
json?: boolean;
color?: 'auto' | 'always' | 'never';
groupBy?: 'category' | 'file' | 'rule' | 'severity';
minSeverity?: 'low' | 'medium' | 'high';
maxIssues?: number;
showContext?: boolean;
explain?: boolean;
showConfidence?: boolean;
showSuppressed?: boolean;
ignoreSuppressed?: boolean;
clearCache?: boolean;
noCache?: boolean;
}
export interface FixEdit {
file: string;
startLine: number;
startColumn: number;
endLine: number;
endColumn: number;
replacement: string;
}
export interface Scanner {
name: string;
scan(options: ScanOptions): Promise<ScanResult[]>;
}