spb/trouve-ka Public
Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 76.8%
TypeScript 15.7%
SQL 3.9%
Shell 1.4%
CSS 1.3%
Dockerfile 0.7%
1/**2 * Trouve-KA — types du contrat d'API (recherche, statut, admin)3 * Author: Simon-Pierre Boucher4 * Contact: contact@spboucher.ai5 */67/** Un résultat de recherche tel que renvoyé par `GET /api/search`. */8export interface SearchResult {9 title: string;10 url: string;11 display_url: string;12 /** HTML restreint : seuls les segments `<em>` de surlignage sont rendus. */13 snippet: string;14 domain: string;15 language: string;16 quebec_score: number;17 badges?: string[];18 published_at?: string | null;19 /** URL de l'og:image de la page (hotlink), ou null si absente. */20 image: string | null;21}2223/** Réponse complète de `GET /api/search`. */24export interface SearchResponse {25 query: string;26 total: number;27 took_ms: number;28 page: number;29 limit: number;30 results: SearchResult[];31}3233/** Réponse de `GET /api/status` (état public du moteur). */34export interface StatusResponse {35 pages_indexed: number;36 domains_count: number;37 indexed_last_hour: number;38 fetched_last_hour: number;39 crawler_state: string;40 frontier_pending: number;41 frontier_in_progress: number;42 errors_last_hour: number;43 search_ok: boolean;44}4546/** Réponse de `POST /api/submit`. */47export interface SubmitResponse {48 accepted: boolean;49 message: string;50}5152/** Réponse de `GET /api/admin/overview`. */53export interface AdminOverview {54 paused: boolean;55 frontier: {56 pending: number;57 in_progress: number;58 done: number;59 failed: number;60 blocked: number;61 };62 rates: {63 fetched_1h: number;64 parsed_1h: number;65 indexed_1h: number;66 errors_1h: number;67 robots_blocked_1h: number;68 duplicates_1h: number;69 };70 http_status: Record<string, number>;71 top_domains: { domain: string; pages: number; quebec_score: number }[];72 recent_errors: { url: string; error_code: string; at: string }[];73 latency: { fetch_p50_ms: number; fetch_p95_ms: number };74}7576/** Un événement du flux live de crawl (`GET /api/admin/recent`). */77export interface CrawlEvent {78 at: string;79 url: string;80 status: number;81 outcome: string;82 quebec_score?: number | null;83 title?: string | null;84}8586/** Réponse de `GET /api/admin/recent`. */87export interface AdminRecentResponse {88 events: CrawlEvent[];89}90