async function validateSearxngBaseUrl(baseUrl: string, lookupFn?: LookupFn): Promise<void> {
let parsed: URL; try {
parsed = new URL(baseUrl);
} catch { thrownew Error("SearXNG base URL must be a valid http:// or https:// URL.");
}
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") { thrownew Error("SearXNG base URL must use http:// or https://.");
}
if (parsed.protocol === "http:") {
await assertHttpUrlTargetsPrivateNetwork(parsed.toString(), {
dangerouslyAllowPrivateNetwork: true,
lookupFn,
errorMessage: "SearXNG HTTP base URL must target a trusted private or loopback host. Use https:// for public hosts.",
});
}
}
function parseSearxngResponseText(text: string, count: number): SearxngResult[] {
let parsed: unknown; try {
parsed = JSON.parse(text) as SearxngResponse;
} catch { thrownew Error("SearXNG returned invalid JSON.");
}
for (const rawResult of rawResults) { const result = normalizeSearxngResult(rawResult); if (result) {
results.push(result);
} if (results.length >= count) { break;
}
}
if (!baseUrl) { thrownew Error( "SearXNG base URL is not configured. Set SEARXNG_BASE_URL or configure plugins.entries.searxng.config.webSearch.baseUrl.",
);
}
await validateSearxngBaseUrl(baseUrl);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.