endpoint-sentinel
Version:
User-friendly security scanner with interactive setup that scales from beginner to expert
82 lines • 2.35 kB
TypeScript
import { SecurityHttpClient } from './http-client.js';
import { RateLimiter, Logger } from '../types/scanner.js';
export interface DiscoveryConfig {
maxDepth: number;
maxConcurrency: number;
respectRobots: boolean;
userAgent: string;
keywords?: string[];
delays: {
min: number;
max: number;
};
}
export interface DiscoveredEndpoint {
url: string;
source: 'html_links' | 'javascript_routes' | 'api_discovery' | 'sitemap' | 'robots_txt' | 'wordlist';
method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
depth: number;
parent?: string;
confidence?: 'high' | 'medium' | 'low';
}
export declare class PracticalDiscoveryEngine {
private httpClient;
private rateLimiter;
private logger;
private visitedUrls;
private seenStates;
private contentHashes;
private readonly patterns;
constructor(httpClient: SecurityHttpClient, rateLimiter: RateLimiter, logger: Logger);
discoverEndpoints(startUrl: string, config: DiscoveryConfig): Promise<DiscoveredEndpoint[]>;
/**
* Detect if the target is a Single Page Application
*/
private detectSPA;
/**
* Analyze SPA for real routes in JavaScript bundles
*/
private analyzeSPARoutes;
/**
* Extract JavaScript files from HTML
*/
private extractJavaScriptFiles;
/**
* Extract SPA routes from JavaScript content
*/
private extractSPARoutes;
/**
* Validate if a route looks like a real SPA route
*/
private isValidSPARoute;
/**
* Traditional crawling for non-SPA sites
*/
private traditionalCrawl;
/**
* Add keyword-based endpoints intelligently
*/
private addKeywordEndpoints;
/**
* Add basic infrastructure endpoints
*/
private addInfrastructureEndpoints;
/**
* Fetch URL with rate limiting
*/
private fetchWithRateLimit;
private crawlUrl;
private extractEndpointsFromResponse;
private extractFromHTML;
private extractFromJavaScript;
private extractFromCSS;
private isDuplicateState;
private inferMethodFromJS;
private isValidEndpoint;
private isImageOrFont;
private resolveUrl;
private deduplicateEndpoints;
private getRandomUserAgent;
private sleep;
}
//# sourceMappingURL=discovery-engine.d.ts.map