package contracts // OutputFormat matches SearXNG's `/search?format=...` values. type OutputFormat string const ( FormatHTML OutputFormat = "html" // accepted for compatibility (not yet implemented) FormatJSON OutputFormat = "json" FormatCSV OutputFormat = "csv" FormatRSS OutputFormat = "rss" ) type SearchRequest struct { // Format is what the client requested via `format=...`. Format OutputFormat Query string Pageno int Safesearch int TimeRange *string TimeoutLimit *float64 Language string // Engines and categories are used for deciding which engines run locally vs are proxied. // For now, engines can be supplied directly via the `engines` form parameter. Engines []string Categories []string // EngineData matches SearXNG's `engine_data--=` parameters. EngineData map[string]map[string]string // AccessToken is an optional request token used to gate paid/limited engines. // It is not part of the upstream JSON schema; it only influences local engines. AccessToken string } // SearchResponse matches the JSON schema returned by SearXNG's `webutils.get_json_response()`. type SearchResponse struct { Query string `json:"query"` NumberOfResults int `json:"number_of_results"` Results []MainResult `json:"results"` Answers []map[string]any `json:"answers"` Corrections []string `json:"corrections"` Infoboxes []map[string]any `json:"infoboxes"` Suggestions []string `json:"suggestions"` UnresponsiveEngines [][2]string `json:"unresponsive_engines"` }