chore: sync local changes to Gitea

This commit is contained in:
shumengya
2026-06-24 22:10:22 +08:00
parent df308e3ae6
commit 9e24d85cd0
13 changed files with 81 additions and 331 deletions

View File

@@ -1,13 +1,9 @@
import { env, setEnv } from "./envs.js";
import { getSearchHtml } from "./utils/getHTML.js";
import searchGoogle from "./utils/searchGoogle.js";
import searchBrave from "./utils/searchBrave.js";
import searchDuckDuckGo from "./utils/searchDuckDuckGo.js";
import searchBing from "./utils/searchBing.js";
const SEARCH_ENGINES = {
google: searchGoogle,
brave: searchBrave,
duckduckgo: searchDuckDuckGo,
bing: searchBing,
};
@@ -23,12 +19,7 @@ function parseEngines(enginesParam) {
return enginesParam
.split(",")
.map((e) => e.trim().toLowerCase())
.filter((e) => {
// Filter out google if not enabled
if (e === "google" && !(env.GOOGLE_API_KEY && env.GOOGLE_CX))
return false;
return env.SUPPORTED_ENGINES.includes(e);
});
.filter((e) => env.SUPPORTED_ENGINES.includes(e));
}
/**
@@ -41,28 +32,35 @@ async function searchSingle(engineName, query) {
const searchFn = SEARCH_ENGINES[engineName];
if (!searchFn) {
console.warn(`Unknown engine: ${engineName}`);
return [];
return { results: [], error: "Unknown engine" };
}
// 创建 AbortController 用于取消请求
const controller = new AbortController();
const timeout = parseInt(env.DEFAULT_TIMEOUT ?? "3000", 10);
let timeoutId;
try {
// 设置超时自动取消
const timeoutId = setTimeout(() => controller.abort(), timeout);
timeoutId = setTimeout(() => controller.abort(), timeout);
const result = await searchFn({ query, signal: controller.signal });
const results = await searchFn({ query, signal: controller.signal });
clearTimeout(timeoutId);
return result;
return { results, error: null };
} catch (error) {
const message =
error.name === "AbortError"
? `Timeout after ${timeout}ms`
: error.message || String(error);
if (error.name === "AbortError") {
console.error(`[${engineName}] Timeout after ${timeout}ms`);
console.error(`[${engineName}] ${message}`);
} else {
console.error(`[${engineName}] Error:`, error.message);
console.error(`[${engineName}] Error:`, message);
}
return [];
clearTimeout(timeoutId);
return { results: [], error: message };
}
}
@@ -86,21 +84,27 @@ async function searchAll({ query, engines }) {
// Collect resultsArr and track unresponsive engines
const results = [];
const unresponsive = [];
const empty = [];
const errors = {};
resultsArr.forEach((result, index) => {
const engineName = enabledEngines[index];
if (result.status === "fulfilled" && result.value.length > 0) {
if (result.status === "fulfilled" && result.value.results.length > 0) {
results.push(
...result.value.map((item) => ({
...result.value.results.map((item) => ({
...item,
engine: engineName,
}))
);
} else if (result.status === "fulfilled" && result.value.error) {
unresponsive.push(engineName);
errors[engineName] = result.value.error;
} else if (result.status === "fulfilled") {
empty.push(engineName);
} else {
unresponsive.push(engineName);
if (result.status === "rejected") {
console.error(`[${engineName}] Rejected:`, result.reason);
}
errors[engineName] = result.reason?.message || String(result.reason);
console.error(`[${engineName}] Rejected:`, result.reason);
}
});
@@ -109,6 +113,8 @@ async function searchAll({ query, engines }) {
number_of_results: results.length,
enabled_engines: enabledEngines,
unresponsive_engines: unresponsive,
empty_engines: empty,
engine_errors: errors,
results,
};
}