chore: sync local changes to Gitea
This commit is contained in:
50
worker.js
50
worker.js
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user